mod tests {
use base_db::FilePosition;
- use crate::mock_analysis::analysis_and_position;
+ use crate::fixture;
fn check_hierarchy(
ra_fixture: &str,
expected_incoming: &[&str],
expected_outgoing: &[&str],
) {
- let (analysis, pos) = analysis_and_position(ra_fixture);
+ let (analysis, pos) = fixture::position(ra_fixture);
let mut navs = analysis.call_hierarchy(pos).unwrap().unwrap().info;
assert_eq!(navs.len(), 1);
use expect_test::{expect, Expect};
use test_utils::mark;
- use crate::mock_analysis::analysis_and_position;
+ use crate::fixture;
fn check(ra_fixture: &str, expect: Expect) {
- let (analysis, position) = analysis_and_position(ra_fixture);
+ let (analysis, position) = fixture::position(ra_fixture);
let call_info = analysis.call_info(position).unwrap();
let actual = match call_info {
Some(call_info) => {
#[cfg(test)]
mod tests {
use crate::completion::completion_config::CompletionConfig;
- use crate::mock_analysis::analysis_and_position;
+ use crate::fixture;
struct DetailAndDocumentation<'a> {
detail: &'a str,
}
fn check_detail_and_documentation(ra_fixture: &str, expected: DetailAndDocumentation) {
- let (analysis, position) = analysis_and_position(ra_fixture);
+ let (analysis, position) = fixture::position(ra_fixture);
let config = CompletionConfig::default();
let completions = analysis.completions(&config, position).unwrap().unwrap();
for item in completions {
use crate::{
completion::{completion_item::CompletionKind, CompletionConfig},
- mock_analysis::analysis_and_position,
- CompletionItem,
+ fixture, CompletionItem,
};
pub(crate) fn do_completion(code: &str, kind: CompletionKind) -> Vec<CompletionItem> {
ra_fixture_after: &str,
) {
let ra_fixture_after = trim_indent(ra_fixture_after);
- let (analysis, position) = analysis_and_position(ra_fixture_before);
+ let (analysis, position) = fixture::position(ra_fixture_before);
let completions: Vec<CompletionItem> =
analysis.completions(&config, position).unwrap().unwrap().into();
let (completion,) = completions
}
pub(crate) fn check_pattern_is_applicable(code: &str, check: fn(SyntaxElement) -> bool) {
- let (analysis, pos) = analysis_and_position(code);
+ let (analysis, pos) = fixture::position(code);
analysis
.with_db(|db| {
let sema = Semantics::new(db);
config: CompletionConfig,
code: &str,
) -> Vec<CompletionItem> {
- let (analysis, position) = analysis_and_position(code);
+ let (analysis, position) = fixture::position(code);
analysis.completions(&config, position).unwrap().unwrap().into()
}
use stdx::trim_indent;
use test_utils::assert_eq_text;
- use crate::{
- mock_analysis::{analysis_and_position, many_files, single_file},
- DiagnosticsConfig,
- };
+ use crate::{fixture, DiagnosticsConfig};
/// Takes a multi-file input fixture with annotated cursor positions,
/// and checks that:
fn check_fix(ra_fixture_before: &str, ra_fixture_after: &str) {
let after = trim_indent(ra_fixture_after);
- let (analysis, file_position) = analysis_and_position(ra_fixture_before);
+ let (analysis, file_position) = fixture::position(ra_fixture_before);
let diagnostic = analysis
.diagnostics(&DiagnosticsConfig::default(), file_position.file_id)
.unwrap()
/// which has a fix that can apply to other files.
fn check_apply_diagnostic_fix_in_other_file(ra_fixture_before: &str, ra_fixture_after: &str) {
let ra_fixture_after = &trim_indent(ra_fixture_after);
- let (analysis, file_pos) = analysis_and_position(ra_fixture_before);
+ let (analysis, file_pos) = fixture::position(ra_fixture_before);
let current_file_id = file_pos.file_id;
let diagnostic = analysis
.diagnostics(&DiagnosticsConfig::default(), current_file_id)
/// Takes a multi-file input fixture with annotated cursor position and checks that no diagnostics
/// apply to the file containing the cursor.
fn check_no_diagnostics(ra_fixture: &str) {
- let (analysis, files) = many_files(ra_fixture);
+ let (analysis, files) = fixture::files(ra_fixture);
let diagnostics = files
.into_iter()
.flat_map(|file_id| {
}
fn check_expect(ra_fixture: &str, expect: Expect) {
- let (analysis, file_id) = single_file(ra_fixture);
+ let (analysis, file_id) = fixture::file(ra_fixture);
let diagnostics = analysis.diagnostics(&DiagnosticsConfig::default(), file_id).unwrap();
expect.assert_debug_eq(&diagnostics)
}
let mut config = DiagnosticsConfig::default();
config.disabled.insert("unresolved-module".into());
- let (analysis, file_id) = single_file(r#"mod foo;"#);
+ let (analysis, file_id) = fixture::file(r#"mod foo;"#);
let diagnostics = analysis.diagnostics(&config, file_id).unwrap();
assert!(diagnostics.is_empty());
mod tests {
use expect_test::expect;
- use crate::{mock_analysis::single_file, Query};
+ use crate::{fixture, Query};
#[test]
fn test_nav_for_symbol() {
- let (analysis, _) = single_file(
+ let (analysis, _) = fixture::file(
r#"
enum FooInner { }
fn foo() { enum FooInner { } }
#[test]
fn test_world_symbols_are_case_sensitive() {
- let (analysis, _) = single_file(
+ let (analysis, _) = fixture::file(
r#"
fn foo() {}
struct Foo;
mod tests {
use expect_test::{expect, Expect};
- use crate::mock_analysis::analysis_and_position;
+ use crate::fixture;
fn check(ra_fixture: &str, expect: Expect) {
- let (analysis, pos) = analysis_and_position(ra_fixture);
+ let (analysis, pos) = fixture::position(ra_fixture);
let expansion = analysis.expand_macro(pos).unwrap().unwrap();
let actual = format!("{}\n{}", expansion.name, expansion.expansion);
expect.assert_eq(&actual);
#[cfg(test)]
mod tests {
- use crate::mock_analysis::analysis_and_position;
+ use crate::fixture;
use super::*;
fn do_check(before: &str, afters: &[&str]) {
- let (analysis, position) = analysis_and_position(&before);
+ let (analysis, position) = fixture::position(&before);
let before = analysis.file_text(position.file_id).unwrap();
let range = TextRange::empty(position.offset);
let mut frange = FileRange { file_id: position.file_id, range };
--- /dev/null
+//! Utilities for creating `Analysis` instances for tests.
+use base_db::fixture::ChangeFixture;
+use test_utils::{extract_annotations, RangeOrOffset};
+
+use crate::{Analysis, AnalysisHost, FileId, FilePosition, FileRange};
+
+/// Creates analysis for a single file.
+pub(crate) fn file(ra_fixture: &str) -> (Analysis, FileId) {
+ let mut host = AnalysisHost::default();
+ let change_fixture = ChangeFixture::parse(ra_fixture);
+ host.db.apply_change(change_fixture.change);
+ (host.analysis(), change_fixture.files[0])
+}
+
+/// Creates analysis for many files.
+pub(crate) fn files(ra_fixture: &str) -> (Analysis, Vec<FileId>) {
+ let mut host = AnalysisHost::default();
+ let change_fixture = ChangeFixture::parse(ra_fixture);
+ host.db.apply_change(change_fixture.change);
+ (host.analysis(), change_fixture.files)
+}
+
+/// Creates analysis from a multi-file fixture, returns positions marked with <|>.
+pub(crate) fn position(ra_fixture: &str) -> (Analysis, FilePosition) {
+ let mut host = AnalysisHost::default();
+ let change_fixture = ChangeFixture::parse(ra_fixture);
+ host.db.apply_change(change_fixture.change);
+ let (file_id, range_or_offset) = change_fixture.file_position.expect("expected a marker (<|>)");
+ let offset = match range_or_offset {
+ RangeOrOffset::Range(_) => panic!(),
+ RangeOrOffset::Offset(it) => it,
+ };
+ (host.analysis(), FilePosition { file_id, offset })
+}
+
+/// Creates analysis for a single file, returns range marked with a pair of <|>.
+pub(crate) fn range(ra_fixture: &str) -> (Analysis, FileRange) {
+ let mut host = AnalysisHost::default();
+ let change_fixture = ChangeFixture::parse(ra_fixture);
+ host.db.apply_change(change_fixture.change);
+ let (file_id, range_or_offset) = change_fixture.file_position.expect("expected a marker (<|>)");
+ let range = match range_or_offset {
+ RangeOrOffset::Range(it) => it,
+ RangeOrOffset::Offset(_) => panic!(),
+ };
+ (host.analysis(), FileRange { file_id, range })
+}
+
+/// Creates analysis from a multi-file fixture, returns positions marked with <|>.
+pub(crate) fn annotations(ra_fixture: &str) -> (Analysis, FilePosition, Vec<(FileRange, String)>) {
+ let mut host = AnalysisHost::default();
+ let change_fixture = ChangeFixture::parse(ra_fixture);
+ host.db.apply_change(change_fixture.change);
+ let (file_id, range_or_offset) = change_fixture.file_position.expect("expected a marker (<|>)");
+ let offset = match range_or_offset {
+ RangeOrOffset::Range(_) => panic!(),
+ RangeOrOffset::Offset(it) => it,
+ };
+
+ let annotations = change_fixture
+ .files
+ .iter()
+ .flat_map(|&file_id| {
+ let file_text = host.analysis().file_text(file_id).unwrap();
+ let annotations = extract_annotations(&file_text);
+ annotations.into_iter().map(move |(range, data)| (FileRange { file_id, range }, data))
+ })
+ .collect();
+ (host.analysis(), FilePosition { file_id, offset }, annotations)
+}
#[cfg(test)]
mod tests {
- use crate::mock_analysis::analysis_and_position;
+ use crate::fixture;
use crate::{FileRange, TextSize};
use std::ops::RangeInclusive;
#[test]
fn test_find_all_methods() {
- let (analysis, pos) = analysis_and_position(
+ let (analysis, pos) = fixture::position(
r#"
- //- /lib.rs
fn private_fn() {<|>}
pub fn pub_fn() {}
#[test]
fn test_find_trait_methods() {
- let (analysis, pos) = analysis_and_position(
+ let (analysis, pos) = fixture::position(
r#"
- //- /lib.rs
trait Foo {
fn bar() {<|>}
fn baz() {}
#[test]
fn test_skip_tests() {
- let (analysis, pos) = analysis_and_position(
+ let (analysis, pos) = fixture::position(
r#"
//- /lib.rs
#[test]
use base_db::FileRange;
use syntax::{TextRange, TextSize};
- use crate::mock_analysis::analysis_and_annotations;
+ use crate::fixture;
fn check(ra_fixture: &str) {
- let (analysis, position, mut annotations) = analysis_and_annotations(ra_fixture);
+ let (analysis, position, mut annotations) = fixture::annotations(ra_fixture);
let (mut expected, data) = annotations.pop().unwrap();
match data.as_str() {
"" => (),
mod tests {
use base_db::FileRange;
- use crate::mock_analysis::analysis_and_annotations;
+ use crate::fixture;
fn check(ra_fixture: &str) {
- let (analysis, position, annotations) = analysis_and_annotations(ra_fixture);
+ let (analysis, position, annotations) = fixture::annotations(ra_fixture);
let navs = analysis.goto_implementation(position).unwrap().unwrap().info;
mod tests {
use base_db::FileRange;
- use crate::mock_analysis::analysis_and_annotations;
+ use crate::fixture;
fn check(ra_fixture: &str) {
- let (analysis, position, mut annotations) = analysis_and_annotations(ra_fixture);
+ let (analysis, position, mut annotations) = fixture::annotations(ra_fixture);
let (expected, data) = annotations.pop().unwrap();
assert!(data.is_empty());
use base_db::FileLoader;
use expect_test::{expect, Expect};
- use crate::mock_analysis::analysis_and_position;
+ use crate::fixture;
use super::*;
fn check_hover_no_result(ra_fixture: &str) {
- let (analysis, position) = analysis_and_position(ra_fixture);
+ let (analysis, position) = fixture::position(ra_fixture);
assert!(analysis.hover(position, true).unwrap().is_none());
}
fn check(ra_fixture: &str, expect: Expect) {
- let (analysis, position) = analysis_and_position(ra_fixture);
+ let (analysis, position) = fixture::position(ra_fixture);
let hover = analysis.hover(position, true).unwrap().unwrap();
let content = analysis.db.file_text(position.file_id);
}
fn check_hover_no_links(ra_fixture: &str, expect: Expect) {
- let (analysis, position) = analysis_and_position(ra_fixture);
+ let (analysis, position) = fixture::position(ra_fixture);
let hover = analysis.hover(position, false).unwrap().unwrap();
let content = analysis.db.file_text(position.file_id);
}
fn check_actions(ra_fixture: &str, expect: Expect) {
- let (analysis, position) = analysis_and_position(ra_fixture);
+ let (analysis, position) = fixture::position(ra_fixture);
let hover = analysis.hover(position, true).unwrap().unwrap();
expect.assert_debug_eq(&hover.info.actions)
}
"#]],
)
} /* FIXME: revive these tests
- let (analysis, position) = analysis_and_position(
+ let (analysis, position) = fixture::position(
"
struct Thing { x: u32 }
impl Thing {
let hover = analysis.hover(position).unwrap().unwrap();
assert_eq!(trim_markup(&hover.info.markup.as_str()), ("Thing"));
- let (analysis, position) = analysis_and_position(
+ let (analysis, position) = fixture::position(
"
enum Thing { A }
impl Thing {
let hover = analysis.hover(position).unwrap().unwrap();
assert_eq!(trim_markup(&hover.info.markup.as_str()), ("enum Thing"));
- let (analysis, position) = analysis_and_position(
+ let (analysis, position) = fixture::position(
"
enum Thing { A }
impl Thing {
use expect_test::{expect, Expect};
use test_utils::extract_annotations;
- use crate::{inlay_hints::InlayHintsConfig, mock_analysis::single_file};
+ use crate::{fixture, inlay_hints::InlayHintsConfig};
fn check(ra_fixture: &str) {
check_with_config(InlayHintsConfig::default(), ra_fixture);
}
fn check_with_config(config: InlayHintsConfig, ra_fixture: &str) {
- let (analysis, file_id) = single_file(ra_fixture);
+ let (analysis, file_id) = fixture::file(ra_fixture);
let expected = extract_annotations(&*analysis.file_text(file_id).unwrap());
let inlay_hints = analysis.inlay_hints(file_id, &config).unwrap();
let actual =
}
fn check_expect(config: InlayHintsConfig, ra_fixture: &str, expect: Expect) {
- let (analysis, file_id) = single_file(ra_fixture);
+ let (analysis, file_id) = fixture::file(ra_fixture);
let inlay_hints = analysis.inlay_hints(file_id, &config).unwrap();
expect.assert_debug_eq(&inlay_hints)
}
}
#[cfg(test)]
-mod mock_analysis;
+mod fixture;
mod markup;
mod prime_caches;
+++ /dev/null
-//! FIXME: write short doc here
-
-use base_db::fixture::ChangeFixture;
-use test_utils::{extract_annotations, RangeOrOffset};
-
-use crate::{Analysis, AnalysisHost, FileId, FilePosition, FileRange};
-
-/// Creates analysis from a multi-file fixture, returns positions marked with <|>.
-pub(crate) fn analysis_and_position(ra_fixture: &str) -> (Analysis, FilePosition) {
- let mut host = AnalysisHost::default();
- let change_fixture = ChangeFixture::parse(ra_fixture);
- host.db.apply_change(change_fixture.change);
- let (file_id, range_or_offset) = change_fixture.file_position.expect("expected a marker (<|>)");
- let offset = match range_or_offset {
- RangeOrOffset::Range(_) => panic!(),
- RangeOrOffset::Offset(it) => it,
- };
- (host.analysis(), FilePosition { file_id, offset })
-}
-
-/// Creates analysis for a single file.
-pub(crate) fn single_file(ra_fixture: &str) -> (Analysis, FileId) {
- let mut host = AnalysisHost::default();
- let change_fixture = ChangeFixture::parse(ra_fixture);
- host.db.apply_change(change_fixture.change);
- (host.analysis(), change_fixture.files[0])
-}
-
-/// Creates analysis for a single file.
-pub(crate) fn many_files(ra_fixture: &str) -> (Analysis, Vec<FileId>) {
- let mut host = AnalysisHost::default();
- let change_fixture = ChangeFixture::parse(ra_fixture);
- host.db.apply_change(change_fixture.change);
- (host.analysis(), change_fixture.files)
-}
-
-/// Creates analysis for a single file, returns range marked with a pair of <|>.
-pub(crate) fn analysis_and_range(ra_fixture: &str) -> (Analysis, FileRange) {
- let mut host = AnalysisHost::default();
- let change_fixture = ChangeFixture::parse(ra_fixture);
- host.db.apply_change(change_fixture.change);
- let (file_id, range_or_offset) = change_fixture.file_position.expect("expected a marker (<|>)");
- let range = match range_or_offset {
- RangeOrOffset::Range(it) => it,
- RangeOrOffset::Offset(_) => panic!(),
- };
- (host.analysis(), FileRange { file_id, range })
-}
-
-/// Creates analysis from a multi-file fixture, returns positions marked with <|>.
-pub(crate) fn analysis_and_annotations(
- ra_fixture: &str,
-) -> (Analysis, FilePosition, Vec<(FileRange, String)>) {
- let mut host = AnalysisHost::default();
- let change_fixture = ChangeFixture::parse(ra_fixture);
- host.db.apply_change(change_fixture.change);
- let (file_id, range_or_offset) = change_fixture.file_position.expect("expected a marker (<|>)");
- let offset = match range_or_offset {
- RangeOrOffset::Range(_) => panic!(),
- RangeOrOffset::Offset(it) => it,
- };
-
- let annotations = change_fixture
- .files
- .iter()
- .flat_map(|&file_id| {
- let file_text = host.analysis().file_text(file_id).unwrap();
- let annotations = extract_annotations(&file_text);
- annotations.into_iter().map(move |(range, data)| (FileRange { file_id, range }, data))
- })
- .collect();
- (host.analysis(), FilePosition { file_id, offset }, annotations)
-}
mod tests {
use test_utils::mark;
- use crate::mock_analysis::{analysis_and_position, single_file};
+ use crate::fixture::{self};
#[test]
fn test_resolve_parent_module() {
- let (analysis, pos) = analysis_and_position(
+ let (analysis, pos) = fixture::position(
"
//- /lib.rs
mod foo;
#[test]
fn test_resolve_parent_module_on_module_decl() {
mark::check!(test_resolve_parent_module_on_module_decl);
- let (analysis, pos) = analysis_and_position(
+ let (analysis, pos) = fixture::position(
"
//- /lib.rs
mod foo;
#[test]
fn test_resolve_parent_module_for_inline() {
- let (analysis, pos) = analysis_and_position(
+ let (analysis, pos) = fixture::position(
"
//- /lib.rs
mod foo {
#[test]
fn test_resolve_crate_root() {
- let (analysis, file_id) = single_file(
+ let (analysis, file_id) = fixture::file(
r#"
//- /main.rs
mod foo;
use expect_test::{expect, Expect};
use stdx::format_to;
- use crate::{mock_analysis::analysis_and_position, SearchScope};
+ use crate::{fixture, SearchScope};
#[test]
fn test_struct_literal_after_space() {
}
fn check_with_scope(ra_fixture: &str, search_scope: Option<SearchScope>, expect: Expect) {
- let (analysis, pos) = analysis_and_position(ra_fixture);
+ let (analysis, pos) = fixture::position(ra_fixture);
let refs = analysis.find_all_refs(pos, search_scope).unwrap().unwrap();
let mut actual = String::new();
use test_utils::{assert_eq_text, mark};
use text_edit::TextEdit;
- use crate::{mock_analysis::analysis_and_position, FileId};
+ use crate::{fixture, FileId};
fn check(new_name: &str, ra_fixture_before: &str, ra_fixture_after: &str) {
let ra_fixture_after = &trim_indent(ra_fixture_after);
- let (analysis, position) = analysis_and_position(ra_fixture_before);
+ let (analysis, position) = fixture::position(ra_fixture_before);
let source_change = analysis.rename(position, new_name).unwrap();
let mut text_edit_builder = TextEdit::builder();
let mut file_id: Option<FileId> = None;
}
fn check_expect(new_name: &str, ra_fixture: &str, expect: Expect) {
- let (analysis, position) = analysis_and_position(ra_fixture);
+ let (analysis, position) = fixture::position(ra_fixture);
let source_change = analysis.rename(position, new_name).unwrap().unwrap();
expect.assert_debug_eq(&source_change)
}
#[test]
fn test_rename_to_invalid_identifier() {
- let (analysis, position) = analysis_and_position(r#"fn main() { let i<|> = 1; }"#);
+ let (analysis, position) = fixture::position(r#"fn main() { let i<|> = 1; }"#);
let new_name = "invalid!";
let source_change = analysis.rename(position, new_name).unwrap();
assert!(source_change.is_none());
mod tests {
use expect_test::{expect, Expect};
- use crate::mock_analysis::analysis_and_position;
+ use crate::fixture;
use super::{RunnableAction, BENCH, BIN, DOCTEST, TEST};
actions: &[&RunnableAction],
expect: Expect,
) {
- let (analysis, position) = analysis_and_position(ra_fixture);
+ let (analysis, position) = fixture::position(ra_fixture);
let runnables = analysis.runnables(position.file_id).unwrap();
expect.assert_debug_eq(&runnables);
assert_eq!(
use expect_test::{expect_file, ExpectFile};
use test_utils::project_dir;
-use crate::{mock_analysis::single_file, FileRange, TextRange};
+use crate::{fixture, FileRange, TextRange};
#[test]
fn test_highlighting() {
let file = project_dir().join("crates/syntax/test_data/accidentally_quadratic");
let src = fs::read_to_string(file).unwrap();
- let (analysis, file_id) = single_file(&src);
+ let (analysis, file_id) = fixture::file(&src);
// let t = std::time::Instant::now();
let _ = analysis.highlight(file_id).unwrap();
#[test]
fn test_ranges() {
- let (analysis, file_id) = single_file(
+ let (analysis, file_id) = fixture::file(
r#"
#[derive(Clone, Debug)]
struct Foo {
#[test]
fn ranges_sorted() {
- let (analysis, file_id) = single_file(
+ let (analysis, file_id) = fixture::file(
r#"
#[foo(bar = "bar")]
macro_rules! test {}
/// result as HTML, and compares it with the HTML file given as `snapshot`.
/// Note that the `snapshot` file is overwritten by the rendered HTML.
fn check_highlighting(ra_fixture: &str, expect: ExpectFile, rainbow: bool) {
- let (analysis, file_id) = single_file(ra_fixture);
+ let (analysis, file_id) = fixture::file(ra_fixture);
let actual_html = &analysis.highlight_as_html(file_id, rainbow).unwrap();
expect.assert_eq(actual_html)
}
mod tests {
use test_utils::assert_eq_text;
- use crate::mock_analysis::{analysis_and_range, single_file};
+ use crate::fixture;
#[test]
fn test_syntax_tree_without_range() {
// Basic syntax
- let (analysis, file_id) = single_file(r#"fn foo() {}"#);
+ let (analysis, file_id) = fixture::file(r#"fn foo() {}"#);
let syn = analysis.syntax_tree(file_id, None).unwrap();
assert_eq_text!(
.trim()
);
- let (analysis, file_id) = single_file(
+ let (analysis, file_id) = fixture::file(
r#"
fn test() {
assert!("
#[test]
fn test_syntax_tree_with_range() {
- let (analysis, range) = analysis_and_range(r#"<|>fn foo() {}<|>"#.trim());
+ let (analysis, range) = fixture::range(r#"<|>fn foo() {}<|>"#.trim());
let syn = analysis.syntax_tree(range.file_id, Some(range.range)).unwrap();
assert_eq_text!(
.trim()
);
- let (analysis, range) = analysis_and_range(
+ let (analysis, range) = fixture::range(
r#"fn test() {
<|>assert!("
fn foo() {
#[test]
fn test_syntax_tree_inside_string() {
- let (analysis, range) = analysis_and_range(
+ let (analysis, range) = fixture::range(
r#"fn test() {
assert!("
<|>fn foo() {
);
// With a raw string
- let (analysis, range) = analysis_and_range(
+ let (analysis, range) = fixture::range(
r###"fn test() {
assert!(r#"
<|>fn foo() {
);
// With a raw string
- let (analysis, range) = analysis_and_range(
+ let (analysis, range) = fixture::range(
r###"fn test() {
assert!(r<|>#"
fn foo() {
use stdx::trim_indent;
use test_utils::{assert_eq_text, mark};
- use crate::mock_analysis::analysis_and_position;
+ use crate::fixture;
fn apply_on_enter(before: &str) -> Option<String> {
- let (analysis, position) = analysis_and_position(&before);
+ let (analysis, position) = fixture::position(&before);
let result = analysis.on_enter(position).unwrap()?;
let mut actual = analysis.file_text(position.file_id).unwrap().to_string();