@@ -42,3 +42,41 @@ fn test_normalize_newlines() {
42
42
check ( "\r \r \n " , "\r \n " , & [ 2 ] ) ;
43
43
check ( "hello\r world" , "hello\r world" , & [ ] ) ;
44
44
}
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