aboutsummaryrefslogtreecommitdiff
path: root/crates/ide_assists/src/tests.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ide_assists/src/tests.rs')
-rw-r--r--crates/ide_assists/src/tests.rs21
1 files changed, 19 insertions, 2 deletions
diff --git a/crates/ide_assists/src/tests.rs b/crates/ide_assists/src/tests.rs
index 1739302bf..6a9231e07 100644
--- a/crates/ide_assists/src/tests.rs
+++ b/crates/ide_assists/src/tests.rs
@@ -65,6 +65,12 @@ pub(crate) fn check_assist_not_applicable(assist: Handler, ra_fixture: &str) {
65 check(assist, ra_fixture, ExpectedResult::NotApplicable, None); 65 check(assist, ra_fixture, ExpectedResult::NotApplicable, None);
66} 66}
67 67
68/// Check assist in unresolved state. Useful to check assists for lazy computation.
69#[track_caller]
70pub(crate) fn check_assist_unresolved(assist: Handler, ra_fixture: &str) {
71 check(assist, ra_fixture, ExpectedResult::Unresolved, None);
72}
73
68#[track_caller] 74#[track_caller]
69fn check_doc_test(assist_id: &str, before: &str, after: &str) { 75fn check_doc_test(assist_id: &str, before: &str, after: &str) {
70 let after = trim_indent(after); 76 let after = trim_indent(after);
@@ -101,6 +107,7 @@ fn check_doc_test(assist_id: &str, before: &str, after: &str) {
101 107
102enum ExpectedResult<'a> { 108enum ExpectedResult<'a> {
103 NotApplicable, 109 NotApplicable,
110 Unresolved,
104 After(&'a str), 111 After(&'a str),
105 Target(&'a str), 112 Target(&'a str),
106} 113}
@@ -115,7 +122,11 @@ fn check(handler: Handler, before: &str, expected: ExpectedResult, assist_label:
115 let sema = Semantics::new(&db); 122 let sema = Semantics::new(&db);
116 let config = TEST_CONFIG; 123 let config = TEST_CONFIG;
117 let ctx = AssistContext::new(sema, &config, frange); 124 let ctx = AssistContext::new(sema, &config, frange);
118 let mut acc = Assists::new(&ctx, AssistResolveStrategy::All); 125 let resolve = match expected {
126 ExpectedResult::Unresolved => AssistResolveStrategy::None,
127 _ => AssistResolveStrategy::All,
128 };
129 let mut acc = Assists::new(&ctx, resolve);
119 handler(&mut acc, &ctx); 130 handler(&mut acc, &ctx);
120 let mut res = acc.finish(); 131 let mut res = acc.finish();
121 132
@@ -163,8 +174,14 @@ fn check(handler: Handler, before: &str, expected: ExpectedResult, assist_label:
163 let range = assist.target; 174 let range = assist.target;
164 assert_eq_text!(&text_without_caret[range], target); 175 assert_eq_text!(&text_without_caret[range], target);
165 } 176 }
177 (Some(assist), ExpectedResult::Unresolved) => assert!(
178 assist.source_change.is_none(),
179 "unresolved assist should not contain source changes"
180 ),
166 (Some(_), ExpectedResult::NotApplicable) => panic!("assist should not be applicable!"), 181 (Some(_), ExpectedResult::NotApplicable) => panic!("assist should not be applicable!"),
167 (None, ExpectedResult::After(_)) | (None, ExpectedResult::Target(_)) => { 182 (None, ExpectedResult::After(_))
183 | (None, ExpectedResult::Target(_))
184 | (None, ExpectedResult::Unresolved) => {
168 panic!("code action is not applicable") 185 panic!("code action is not applicable")
169 } 186 }
170 (None, ExpectedResult::NotApplicable) => (), 187 (None, ExpectedResult::NotApplicable) => (),