diff options
Diffstat (limited to 'crates/ra_assists/src/tests.rs')
-rw-r--r-- | crates/ra_assists/src/tests.rs | 52 |
1 files changed, 46 insertions, 6 deletions
diff --git a/crates/ra_assists/src/tests.rs b/crates/ra_assists/src/tests.rs index 858f5ca80..861622d86 100644 --- a/crates/ra_assists/src/tests.rs +++ b/crates/ra_assists/src/tests.rs | |||
@@ -6,7 +6,7 @@ use ra_ide_db::RootDatabase; | |||
6 | use ra_syntax::TextRange; | 6 | use ra_syntax::TextRange; |
7 | use test_utils::{assert_eq_text, extract_offset, extract_range}; | 7 | use test_utils::{assert_eq_text, extract_offset, extract_range}; |
8 | 8 | ||
9 | use crate::{handlers::Handler, Assist, AssistConfig, AssistContext, Assists}; | 9 | use crate::{handlers::Handler, Assist, AssistConfig, AssistContext, AssistKind, Assists}; |
10 | use stdx::trim_indent; | 10 | use stdx::trim_indent; |
11 | 11 | ||
12 | pub(crate) fn with_single_file(text: &str) -> (RootDatabase, FileId) { | 12 | pub(crate) fn with_single_file(text: &str) -> (RootDatabase, FileId) { |
@@ -35,14 +35,14 @@ fn check_doc_test(assist_id: &str, before: &str, after: &str) { | |||
35 | let before = db.file_text(file_id).to_string(); | 35 | let before = db.file_text(file_id).to_string(); |
36 | let frange = FileRange { file_id, range: selection.into() }; | 36 | let frange = FileRange { file_id, range: selection.into() }; |
37 | 37 | ||
38 | let mut assist = Assist::resolved(&db, &AssistConfig::default(), frange) | 38 | let mut assist = Assist::resolved(&db, &AssistConfig::default(), frange, None) |
39 | .into_iter() | 39 | .into_iter() |
40 | .find(|assist| assist.assist.id.0 == assist_id) | 40 | .find(|assist| assist.assist.id.0 == assist_id) |
41 | .unwrap_or_else(|| { | 41 | .unwrap_or_else(|| { |
42 | panic!( | 42 | panic!( |
43 | "\n\nAssist is not applicable: {}\nAvailable assists: {}", | 43 | "\n\nAssist is not applicable: {}\nAvailable assists: {}", |
44 | assist_id, | 44 | assist_id, |
45 | Assist::resolved(&db, &AssistConfig::default(), frange) | 45 | Assist::resolved(&db, &AssistConfig::default(), frange, None) |
46 | .into_iter() | 46 | .into_iter() |
47 | .map(|assist| assist.assist.id.0) | 47 | .map(|assist| assist.assist.id.0) |
48 | .collect::<Vec<_>>() | 48 | .collect::<Vec<_>>() |
@@ -73,7 +73,7 @@ fn check(handler: Handler, before: &str, expected: ExpectedResult) { | |||
73 | 73 | ||
74 | let sema = Semantics::new(&db); | 74 | let sema = Semantics::new(&db); |
75 | let config = AssistConfig::default(); | 75 | let config = AssistConfig::default(); |
76 | let ctx = AssistContext::new(sema, &config, frange); | 76 | let ctx = AssistContext::new(sema, &config, frange, None); |
77 | let mut acc = Assists::new_resolved(&ctx); | 77 | let mut acc = Assists::new_resolved(&ctx); |
78 | handler(&mut acc, &ctx); | 78 | handler(&mut acc, &ctx); |
79 | let mut res = acc.finish_resolved(); | 79 | let mut res = acc.finish_resolved(); |
@@ -105,7 +105,7 @@ fn assist_order_field_struct() { | |||
105 | let (before_cursor_pos, before) = extract_offset(before); | 105 | let (before_cursor_pos, before) = extract_offset(before); |
106 | let (db, file_id) = with_single_file(&before); | 106 | let (db, file_id) = with_single_file(&before); |
107 | let frange = FileRange { file_id, range: TextRange::empty(before_cursor_pos) }; | 107 | let frange = FileRange { file_id, range: TextRange::empty(before_cursor_pos) }; |
108 | let assists = Assist::resolved(&db, &AssistConfig::default(), frange); | 108 | let assists = Assist::resolved(&db, &AssistConfig::default(), frange, None); |
109 | let mut assists = assists.iter(); | 109 | let mut assists = assists.iter(); |
110 | 110 | ||
111 | assert_eq!( | 111 | assert_eq!( |
@@ -128,9 +128,49 @@ fn assist_order_if_expr() { | |||
128 | let (range, before) = extract_range(before); | 128 | let (range, before) = extract_range(before); |
129 | let (db, file_id) = with_single_file(&before); | 129 | let (db, file_id) = with_single_file(&before); |
130 | let frange = FileRange { file_id, range }; | 130 | let frange = FileRange { file_id, range }; |
131 | let assists = Assist::resolved(&db, &AssistConfig::default(), frange); | 131 | let assists = Assist::resolved(&db, &AssistConfig::default(), frange, None); |
132 | let mut assists = assists.iter(); | 132 | let mut assists = assists.iter(); |
133 | 133 | ||
134 | assert_eq!(assists.next().expect("expected assist").assist.label, "Extract into variable"); | 134 | assert_eq!(assists.next().expect("expected assist").assist.label, "Extract into variable"); |
135 | assert_eq!(assists.next().expect("expected assist").assist.label, "Replace with match"); | 135 | assert_eq!(assists.next().expect("expected assist").assist.label, "Replace with match"); |
136 | } | 136 | } |
137 | |||
138 | #[test] | ||
139 | fn assist_filter_works() { | ||
140 | let before = " | ||
141 | pub fn test_some_range(a: int) -> bool { | ||
142 | if let 2..6 = <|>5<|> { | ||
143 | true | ||
144 | } else { | ||
145 | false | ||
146 | } | ||
147 | }"; | ||
148 | let (range, before) = extract_range(before); | ||
149 | let (db, file_id) = with_single_file(&before); | ||
150 | let frange = FileRange { file_id, range }; | ||
151 | |||
152 | { | ||
153 | let allowed = Some(vec![AssistKind::Refactor]); | ||
154 | |||
155 | let assists = Assist::resolved(&db, &AssistConfig::default(), frange, allowed); | ||
156 | let mut assists = assists.iter(); | ||
157 | |||
158 | assert_eq!(assists.next().expect("expected assist").assist.label, "Extract into variable"); | ||
159 | assert_eq!(assists.next().expect("expected assist").assist.label, "Replace with match"); | ||
160 | } | ||
161 | |||
162 | { | ||
163 | let allowed = Some(vec![AssistKind::RefactorExtract]); | ||
164 | let assists = Assist::resolved(&db, &AssistConfig::default(), frange, allowed); | ||
165 | assert_eq!(assists.len(), 1); | ||
166 | |||
167 | let mut assists = assists.iter(); | ||
168 | assert_eq!(assists.next().expect("expected assist").assist.label, "Extract into variable"); | ||
169 | } | ||
170 | |||
171 | { | ||
172 | let allowed = Some(vec![AssistKind::QuickFix]); | ||
173 | let assists = Assist::resolved(&db, &AssistConfig::default(), frange, allowed); | ||
174 | assert!(assists.is_empty(), "All asserts but quickfixes should be filtered out"); | ||
175 | } | ||
176 | } | ||