Add Analysis#teype_of test
This commit is contained in:
parent
a4c30d7504
commit
f5992964ed
@ -55,6 +55,26 @@ pub fn with_files_and_position(fixture: &str) -> (MockAnalysis, FilePosition) {
|
||||
(res, position)
|
||||
}
|
||||
|
||||
/// Same as `with_files`, but requires that a single file contains two `<|>` marker,
|
||||
/// whose range is also returned.
|
||||
pub fn with_files_and_range(fixture: &str) -> (MockAnalysis, FileRange) {
|
||||
let mut range = None;
|
||||
let mut res = MockAnalysis::new();
|
||||
for entry in parse_fixture(fixture) {
|
||||
if entry.text.contains(CURSOR_MARKER) {
|
||||
assert!(
|
||||
range.is_none(),
|
||||
"only two marker (<|>) per fixture is allowed"
|
||||
);
|
||||
range = Some(res.add_file_with_range(&entry.meta, &entry.text));
|
||||
} else {
|
||||
res.add_file(&entry.meta, &entry.text);
|
||||
}
|
||||
}
|
||||
let range = range.expect("expected two marker (<|>)");
|
||||
(res, range)
|
||||
}
|
||||
|
||||
pub fn add_file(&mut self, path: &str, text: &str) -> FileId {
|
||||
let file_id = FileId((self.files.len() + 1) as u32);
|
||||
self.files.push((path.to_string(), text.to_string()));
|
||||
@ -102,12 +122,18 @@ pub fn analysis(self) -> Analysis {
|
||||
}
|
||||
}
|
||||
|
||||
/// Creates analysis from a multi-file fixture, returns positions marked with <|>.
|
||||
/// Creates analysis from a multi-file fixture, returns positions marked with a <|>.
|
||||
pub fn analysis_and_position(fixture: &str) -> (Analysis, FilePosition) {
|
||||
let (mock, position) = MockAnalysis::with_files_and_position(fixture);
|
||||
(mock.analysis(), position)
|
||||
}
|
||||
|
||||
/// Creates analysis from a multi-file fixture, returns ranges marked with two <|>.
|
||||
pub fn analysis_and_range(fixture: &str) -> (Analysis, FileRange) {
|
||||
let (mock, range) = MockAnalysis::with_files_and_range(fixture);
|
||||
(mock.analysis(), range)
|
||||
}
|
||||
|
||||
/// Creates analysis for a single file.
|
||||
pub fn single_file(code: &str) -> (Analysis, FileId) {
|
||||
let mut mock = MockAnalysis::new();
|
||||
|
@ -2,7 +2,7 @@
|
||||
use test_utils::{assert_eq_dbg, assert_eq_text};
|
||||
|
||||
use ra_analysis::{
|
||||
mock_analysis::{analysis_and_position, single_file, single_file_with_position, MockAnalysis},
|
||||
mock_analysis::{analysis_and_position, analysis_and_range, single_file, single_file_with_position, MockAnalysis},
|
||||
AnalysisChange, CrateGraph, FileId, FnSignatureInfo,
|
||||
};
|
||||
|
||||
@ -10,6 +10,22 @@ fn get_signature(text: &str) -> (FnSignatureInfo, Option<usize>) {
|
||||
let (analysis, position) = single_file_with_position(text);
|
||||
analysis.resolve_callable(position).unwrap().unwrap()
|
||||
}
|
||||
#[test]
|
||||
fn test_type_of() {
|
||||
let (analysis, range) = analysis_and_range(
|
||||
"
|
||||
//- /lib.rs
|
||||
pub fn foo() -> u32 {
|
||||
1
|
||||
};
|
||||
|
||||
let <|>foo_test<|> = foo();
|
||||
",
|
||||
);
|
||||
|
||||
let type_name = analysis.type_of(range).unwrap().unwrap();
|
||||
assert_eq_dbg("u32", &type_name);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn approximate_resolve_works_in_items() {
|
||||
|
Loading…
Reference in New Issue
Block a user