@@ -42,3 +42,41 @@ fn test_normalize_newlines() {
4242 check ( "\r \r \n " , "\r \n " , & [ 2 ] ) ;
4343 check ( "hello\r world" , "hello\r world" , & [ ] ) ;
4444}
45+
46+ #[ test]
47+ fn test_trim ( ) {
48+ let span = |lo : usize , hi : usize | {
49+ Span :: new ( BytePos :: from_usize ( lo) , BytePos :: from_usize ( hi) , SyntaxContext :: root ( ) , None )
50+ } ;
51+
52+ // Various positions, named for their relation to `start` and `end`.
53+ let well_before = 1 ;
54+ let before = 3 ;
55+ let start = 5 ;
56+ let mid = 7 ;
57+ let end = 9 ;
58+ let after = 11 ;
59+ let well_after = 13 ;
60+
61+ // The resulting span's context should be that of `self`, not `other`.
62+ let other = span ( start, end) . with_ctxt ( SyntaxContext :: from_u32 ( 999 ) ) ;
63+
64+ // Test cases for `trim_start`.
65+
66+ assert_eq ! ( span( after, well_after) . trim_start( other) , Some ( span( after, well_after) ) ) ;
67+ assert_eq ! ( span( end, well_after) . trim_start( other) , Some ( span( end, well_after) ) ) ;
68+ assert_eq ! ( span( mid, well_after) . trim_start( other) , Some ( span( end, well_after) ) ) ;
69+ assert_eq ! ( span( start, well_after) . trim_start( other) , Some ( span( end, well_after) ) ) ;
70+ assert_eq ! ( span( before, well_after) . trim_start( other) , Some ( span( end, well_after) ) ) ;
71+
72+ assert_eq ! ( span( mid, end) . trim_start( other) , None ) ;
73+ assert_eq ! ( span( start, end) . trim_start( other) , None ) ;
74+ assert_eq ! ( span( before, end) . trim_start( other) , None ) ;
75+
76+ assert_eq ! ( span( start, mid) . trim_start( other) , None ) ;
77+ assert_eq ! ( span( before, mid) . trim_start( other) , None ) ;
78+
79+ assert_eq ! ( span( before, start) . trim_start( other) , None ) ;
80+
81+ assert_eq ! ( span( well_before, before) . trim_start( other) , None ) ;
82+ }
0 commit comments