Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-ssr/src/tests.rs')
| -rw-r--r-- | crates/ide-ssr/src/tests.rs | 142 |
1 files changed, 78 insertions, 64 deletions
diff --git a/crates/ide-ssr/src/tests.rs b/crates/ide-ssr/src/tests.rs index 46b633b8a3..1bb435f31f 100644 --- a/crates/ide-ssr/src/tests.rs +++ b/crates/ide-ssr/src/tests.rs @@ -98,33 +98,37 @@ fn assert_ssr_transform(rule: &str, input: &str, expected: Expect) { fn assert_ssr_transforms(rules: &[&str], input: &str, expected: Expect) { let (db, position, selections) = single_file(input); - let position = - ide_db::FilePosition { file_id: position.file_id.file_id(&db), offset: position.offset }; - let mut match_finder = MatchFinder::in_context( - &db, - position, - selections - .into_iter() - .map(|selection| ide_db::FileRange { - file_id: selection.file_id.file_id(&db), - range: selection.range, - }) - .collect(), - ) - .unwrap(); - for rule in rules { - let rule: SsrRule = rule.parse().unwrap(); - match_finder.add_rule(rule).unwrap(); - } - let edits = match_finder.edits(); - if edits.is_empty() { - panic!("No edits were made"); - } - // Note, db.file_text is not necessarily the same as `input`, since fixture parsing alters - // stuff. - let mut actual = db.file_text(position.file_id).text(&db).to_string(); - edits[&position.file_id].apply(&mut actual); - expected.assert_eq(&actual); + hir::attach_db(&db, || { + let position = ide_db::FilePosition { + file_id: position.file_id.file_id(&db), + offset: position.offset, + }; + let mut match_finder = MatchFinder::in_context( + &db, + position, + selections + .into_iter() + .map(|selection| ide_db::FileRange { + file_id: selection.file_id.file_id(&db), + range: selection.range, + }) + .collect(), + ) + .unwrap(); + for rule in rules { + let rule: SsrRule = rule.parse().unwrap(); + match_finder.add_rule(rule).unwrap(); + } + let edits = match_finder.edits(); + if edits.is_empty() { + panic!("No edits were made"); + } + // Note, db.file_text is not necessarily the same as `input`, since fixture parsing alters + // stuff. + let mut actual = db.file_text(position.file_id).text(&db).to_string(); + edits[&position.file_id].apply(&mut actual); + expected.assert_eq(&actual); + }) } #[allow(clippy::print_stdout)] @@ -142,47 +146,57 @@ fn print_match_debug_info(match_finder: &MatchFinder<'_>, file_id: EditionedFile fn assert_matches(pattern: &str, code: &str, expected: &[&str]) { let (db, position, selections) = single_file(code); - let mut match_finder = MatchFinder::in_context( - &db, - ide_db::FilePosition { file_id: position.file_id.file_id(&db), offset: position.offset }, - selections - .into_iter() - .map(|selection| ide_db::FileRange { - file_id: selection.file_id.file_id(&db), - range: selection.range, - }) - .collect(), - ) - .unwrap(); - match_finder.add_search_pattern(pattern.parse().unwrap()).unwrap(); - let matched_strings: Vec<String> = - match_finder.matches().flattened().matches.iter().map(|m| m.matched_text()).collect(); - if matched_strings != expected && !expected.is_empty() { - print_match_debug_info(&match_finder, position.file_id, expected[0]); - } - assert_eq!(matched_strings, expected); + hir::attach_db(&db, || { + let mut match_finder = MatchFinder::in_context( + &db, + ide_db::FilePosition { + file_id: position.file_id.file_id(&db), + offset: position.offset, + }, + selections + .into_iter() + .map(|selection| ide_db::FileRange { + file_id: selection.file_id.file_id(&db), + range: selection.range, + }) + .collect(), + ) + .unwrap(); + match_finder.add_search_pattern(pattern.parse().unwrap()).unwrap(); + let matched_strings: Vec<String> = + match_finder.matches().flattened().matches.iter().map(|m| m.matched_text()).collect(); + if matched_strings != expected && !expected.is_empty() { + print_match_debug_info(&match_finder, position.file_id, expected[0]); + } + assert_eq!(matched_strings, expected); + }) } fn assert_no_match(pattern: &str, code: &str) { let (db, position, selections) = single_file(code); - let mut match_finder = MatchFinder::in_context( - &db, - ide_db::FilePosition { file_id: position.file_id.file_id(&db), offset: position.offset }, - selections - .into_iter() - .map(|selection| ide_db::FileRange { - file_id: selection.file_id.file_id(&db), - range: selection.range, - }) - .collect(), - ) - .unwrap(); - match_finder.add_search_pattern(pattern.parse().unwrap()).unwrap(); - let matches = match_finder.matches().flattened().matches; - if !matches.is_empty() { - print_match_debug_info(&match_finder, position.file_id, &matches[0].matched_text()); - panic!("Got {} matches when we expected none: {matches:#?}", matches.len()); - } + hir::attach_db(&db, || { + let mut match_finder = MatchFinder::in_context( + &db, + ide_db::FilePosition { + file_id: position.file_id.file_id(&db), + offset: position.offset, + }, + selections + .into_iter() + .map(|selection| ide_db::FileRange { + file_id: selection.file_id.file_id(&db), + range: selection.range, + }) + .collect(), + ) + .unwrap(); + match_finder.add_search_pattern(pattern.parse().unwrap()).unwrap(); + let matches = match_finder.matches().flattened().matches; + if !matches.is_empty() { + print_match_debug_info(&match_finder, position.file_id, &matches[0].matched_text()); + panic!("Got {} matches when we expected none: {matches:#?}", matches.len()); + } + }); } fn assert_match_failure_reason(pattern: &str, code: &str, snippet: &str, expected_reason: &str) { |