diff options
author | Aleksey Kladov <[email protected]> | 2020-06-30 12:03:08 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2020-06-30 12:03:08 +0100 |
commit | 4484908a867fc742104d6ffe63b865a411203276 (patch) | |
tree | 048d7019112e588f4416ed88070f59ae46564d75 /crates/ra_ide/src/mock_analysis.rs | |
parent | d34e725f09994af145884464942dd205bfc7717e (diff) |
Rewrite goto definition tests
Diffstat (limited to 'crates/ra_ide/src/mock_analysis.rs')
-rw-r--r-- | crates/ra_ide/src/mock_analysis.rs | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/crates/ra_ide/src/mock_analysis.rs b/crates/ra_ide/src/mock_analysis.rs index 889b84c59..120d29aa0 100644 --- a/crates/ra_ide/src/mock_analysis.rs +++ b/crates/ra_ide/src/mock_analysis.rs | |||
@@ -3,11 +3,15 @@ use std::sync::Arc; | |||
3 | 3 | ||
4 | use ra_cfg::CfgOptions; | 4 | use ra_cfg::CfgOptions; |
5 | use ra_db::{CrateName, Env, FileSet, SourceRoot, VfsPath}; | 5 | use ra_db::{CrateName, Env, FileSet, SourceRoot, VfsPath}; |
6 | use test_utils::{extract_range_or_offset, Fixture, RangeOrOffset, CURSOR_MARKER}; | 6 | use test_utils::{ |
7 | extract_annotations, extract_range_or_offset, Fixture, RangeOrOffset, CURSOR_MARKER, | ||
8 | }; | ||
7 | 9 | ||
8 | use crate::{ | 10 | use crate::{ |
9 | Analysis, AnalysisChange, AnalysisHost, CrateGraph, Edition, FileId, FilePosition, FileRange, | 11 | Analysis, AnalysisChange, AnalysisHost, CrateGraph, Edition, FileId, FilePosition, FileRange, |
10 | }; | 12 | }; |
13 | use ra_syntax::TextRange; | ||
14 | use rustc_hash::FxHashMap; | ||
11 | 15 | ||
12 | /// Mock analysis is used in test to bootstrap an AnalysisHost/Analysis | 16 | /// Mock analysis is used in test to bootstrap an AnalysisHost/Analysis |
13 | /// from a set of in-memory files. | 17 | /// from a set of in-memory files. |
@@ -77,6 +81,28 @@ impl MockAnalysis { | |||
77 | .expect("no file in this mock"); | 81 | .expect("no file in this mock"); |
78 | FileId(idx as u32 + 1) | 82 | FileId(idx as u32 + 1) |
79 | } | 83 | } |
84 | pub fn annotations(&self) -> FxHashMap<FileId, Vec<(TextRange, String)>> { | ||
85 | self.files | ||
86 | .iter() | ||
87 | .enumerate() | ||
88 | .filter_map(|(idx, fixture)| { | ||
89 | let file_id = FileId(idx as u32 + 1); | ||
90 | let annotations = extract_annotations(&fixture.text); | ||
91 | if annotations.is_empty() { | ||
92 | return None; | ||
93 | } | ||
94 | Some((file_id, annotations)) | ||
95 | }) | ||
96 | .collect() | ||
97 | } | ||
98 | pub fn annotation(&self) -> (FileRange, String) { | ||
99 | let all = self.annotations(); | ||
100 | assert_eq!(all.len(), 1); | ||
101 | let (file_id, mut for_file) = all.into_iter().next().unwrap(); | ||
102 | assert_eq!(for_file.len(), 1); | ||
103 | let (range, data) = for_file.pop().unwrap(); | ||
104 | (FileRange { file_id, range}, data) | ||
105 | } | ||
80 | pub fn analysis_host(self) -> AnalysisHost { | 106 | pub fn analysis_host(self) -> AnalysisHost { |
81 | let mut host = AnalysisHost::default(); | 107 | let mut host = AnalysisHost::default(); |
82 | let mut change = AnalysisChange::new(); | 108 | let mut change = AnalysisChange::new(); |