diff options
Diffstat (limited to 'crates/libeditor/tests')
-rw-r--r-- | crates/libeditor/tests/test.rs | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/crates/libeditor/tests/test.rs b/crates/libeditor/tests/test.rs index 7063425ce..d5df9d0cc 100644 --- a/crates/libeditor/tests/test.rs +++ b/crates/libeditor/tests/test.rs | |||
@@ -9,7 +9,7 @@ use itertools::Itertools; | |||
9 | use libeditor::{ | 9 | use libeditor::{ |
10 | File, TextUnit, TextRange, ActionResult, CursorPosition, | 10 | File, TextUnit, TextRange, ActionResult, CursorPosition, |
11 | highlight, runnables, extend_selection, file_structure, | 11 | highlight, runnables, extend_selection, file_structure, |
12 | flip_comma, add_derive, | 12 | flip_comma, add_derive, matching_brace, |
13 | }; | 13 | }; |
14 | 14 | ||
15 | #[test] | 15 | #[test] |
@@ -119,6 +119,25 @@ fn test_add_derive() { | |||
119 | ) | 119 | ) |
120 | } | 120 | } |
121 | 121 | ||
122 | #[test] | ||
123 | fn test_matching_brace() { | ||
124 | fn do_check(before: &str, after: &str) { | ||
125 | let (pos, before) = extract_cursor(before); | ||
126 | let file = file(&before); | ||
127 | let new_pos = match matching_brace(&file, pos) { | ||
128 | None => pos, | ||
129 | Some(pos) => pos, | ||
130 | }; | ||
131 | let actual = add_cursor(&before, new_pos); | ||
132 | assert_eq_text!(after, &actual); | ||
133 | } | ||
134 | |||
135 | do_check( | ||
136 | "struct Foo { a: i32, }<|>", | ||
137 | "struct Foo <|>{ a: i32, }", | ||
138 | ); | ||
139 | } | ||
140 | |||
122 | fn file(text: &str) -> File { | 141 | fn file(text: &str) -> File { |
123 | File::parse(text) | 142 | File::parse(text) |
124 | } | 143 | } |
@@ -138,16 +157,12 @@ fn check_action<F: Fn(&File, TextUnit) -> Option<ActionResult>>( | |||
138 | let file = file(&before); | 157 | let file = file(&before); |
139 | let result = f(&file, before_cursor_pos).expect("code action is not applicable"); | 158 | let result = f(&file, before_cursor_pos).expect("code action is not applicable"); |
140 | let actual = result.edit.apply(&before); | 159 | let actual = result.edit.apply(&before); |
141 | let actual_cursor_pos: u32 = match result.cursor_position { | 160 | let actual_cursor_pos = match result.cursor_position { |
142 | CursorPosition::Same => result.edit.apply_to_offset(before_cursor_pos).unwrap(), | 161 | CursorPosition::Same => result.edit.apply_to_offset(before_cursor_pos).unwrap(), |
143 | CursorPosition::Offset(off) => off, | 162 | CursorPosition::Offset(off) => off, |
144 | }.into(); | 163 | }; |
145 | let actual_cursor_pos = actual_cursor_pos as usize; | 164 | let actual = add_cursor(&actual, actual_cursor_pos); |
146 | let mut actual_with_cursor = String::new(); | 165 | assert_eq_text!(after, &actual); |
147 | actual_with_cursor.push_str(&actual[..actual_cursor_pos]); | ||
148 | actual_with_cursor.push_str("<|>"); | ||
149 | actual_with_cursor.push_str(&actual[actual_cursor_pos..]); | ||
150 | assert_eq_text!(after, &actual_with_cursor); | ||
151 | } | 166 | } |
152 | 167 | ||
153 | fn extract_cursor(text: &str) -> (TextUnit, String) { | 168 | fn extract_cursor(text: &str) -> (TextUnit, String) { |
@@ -162,3 +177,13 @@ fn extract_cursor(text: &str) -> (TextUnit, String) { | |||
162 | let cursor_pos = TextUnit::from(cursor_pos as u32); | 177 | let cursor_pos = TextUnit::from(cursor_pos as u32); |
163 | (cursor_pos, new_text) | 178 | (cursor_pos, new_text) |
164 | } | 179 | } |
180 | |||
181 | fn add_cursor(text: &str, offset: TextUnit) -> String { | ||
182 | let offset: u32 = offset.into(); | ||
183 | let offset: usize = offset as usize; | ||
184 | let mut res = String::new(); | ||
185 | res.push_str(&text[..offset]); | ||
186 | res.push_str("<|>"); | ||
187 | res.push_str(&text[offset..]); | ||
188 | res | ||
189 | } | ||