Remove more duplication in test fixtures

This commit is contained in:
Aleksey Kladov 2019-11-04 22:12:49 +03:00
parent dcdcc9e4c8
commit 24894aca31
5 changed files with 18 additions and 62 deletions

View File

@ -6,12 +6,12 @@
mod generated;
use hir::mock::MockDatabase;
use ra_db::FileRange;
use ra_db::{fixture::WithFixture, FileRange};
use test_utils::{assert_eq_text, extract_range_or_offset};
fn check(assist_id: &str, before: &str, after: &str) {
let (selection, before) = extract_range_or_offset(before);
let (db, _source_root, file_id) = MockDatabase::with_single_file(&before);
let (db, file_id) = MockDatabase::with_single_file(&before);
let frange = FileRange { file_id, range: selection.into() };
let (_assist_id, action) = crate::assists(&db, frange)

View File

@ -147,7 +147,7 @@ mod assists {
#[cfg(test)]
mod helpers {
use hir::mock::MockDatabase;
use ra_db::FileRange;
use ra_db::{fixture::WithFixture, FileRange};
use ra_syntax::TextRange;
use test_utils::{add_cursor, assert_eq_text, extract_offset, extract_range};
@ -159,7 +159,7 @@ mod helpers {
after: &str,
) {
let (before_cursor_pos, before) = extract_offset(before);
let (db, _source_root, file_id) = MockDatabase::with_single_file(&before);
let (db, file_id) = MockDatabase::with_single_file(&before);
let frange =
FileRange { file_id, range: TextRange::offset_len(before_cursor_pos, 0.into()) };
let assist =
@ -187,7 +187,7 @@ mod helpers {
after: &str,
) {
let (range, before) = extract_range(before);
let (db, _source_root, file_id) = MockDatabase::with_single_file(&before);
let (db, file_id) = MockDatabase::with_single_file(&before);
let frange = FileRange { file_id, range };
let assist =
AssistCtx::with_ctx(&db, frange, true, assist).expect("code action is not applicable");
@ -209,7 +209,7 @@ mod helpers {
target: &str,
) {
let (before_cursor_pos, before) = extract_offset(before);
let (db, _source_root, file_id) = MockDatabase::with_single_file(&before);
let (db, file_id) = MockDatabase::with_single_file(&before);
let frange =
FileRange { file_id, range: TextRange::offset_len(before_cursor_pos, 0.into()) };
let assist =
@ -229,7 +229,7 @@ mod helpers {
target: &str,
) {
let (range, before) = extract_range(before);
let (db, _source_root, file_id) = MockDatabase::with_single_file(&before);
let (db, file_id) = MockDatabase::with_single_file(&before);
let frange = FileRange { file_id, range };
let assist =
AssistCtx::with_ctx(&db, frange, true, assist).expect("code action is not applicable");
@ -247,7 +247,7 @@ mod helpers {
before: &str,
) {
let (before_cursor_pos, before) = extract_offset(before);
let (db, _source_root, file_id) = MockDatabase::with_single_file(&before);
let (db, file_id) = MockDatabase::with_single_file(&before);
let frange =
FileRange { file_id, range: TextRange::offset_len(before_cursor_pos, 0.into()) };
let assist = AssistCtx::with_ctx(&db, frange, true, assist);
@ -259,7 +259,7 @@ mod helpers {
before: &str,
) {
let (range, before) = extract_range(before);
let (db, _source_root, file_id) = MockDatabase::with_single_file(&before);
let (db, file_id) = MockDatabase::with_single_file(&before);
let frange = FileRange { file_id, range };
let assist = AssistCtx::with_ctx(&db, frange, true, assist);
assert!(assist.is_none());
@ -269,7 +269,7 @@ mod helpers {
#[cfg(test)]
mod tests {
use hir::mock::MockDatabase;
use ra_db::FileRange;
use ra_db::{fixture::WithFixture, FileRange};
use ra_syntax::TextRange;
use test_utils::{extract_offset, extract_range};
@ -277,7 +277,7 @@ mod tests {
fn assist_order_field_struct() {
let before = "struct Foo { <|>bar: u32 }";
let (before_cursor_pos, before) = extract_offset(before);
let (db, _source_root, file_id) = MockDatabase::with_single_file(&before);
let (db, file_id) = MockDatabase::with_single_file(&before);
let frange =
FileRange { file_id, range: TextRange::offset_len(before_cursor_pos, 0.into()) };
let assists = super::assists(&db, frange);
@ -298,7 +298,7 @@ mod tests {
}
}";
let (range, before) = extract_range(before);
let (db, _source_root, file_id) = MockDatabase::with_single_file(&before);
let (db, file_id) = MockDatabase::with_single_file(&before);
let frange = FileRange { file_id, range };
let assists = super::assists(&db, frange);
let mut assists = assists.iter();

View File

@ -174,7 +174,7 @@ fn compute_expr_scopes(expr: ExprId, body: &Body, scopes: &mut ExprScopes, scope
#[cfg(test)]
mod tests {
use ra_db::SourceDatabase;
use ra_db::{fixture::WithFixture, SourceDatabase};
use ra_syntax::{algo::find_node_at_offset, ast, AstNode};
use test_utils::{assert_eq_text, extract_offset};
@ -191,7 +191,7 @@ mod tests {
buf
};
let (db, _source_root, file_id) = MockDatabase::with_single_file(&code);
let (db, file_id) = MockDatabase::with_single_file(&code);
let file = db.parse(file_id).ok().unwrap();
let marker: ast::PathExpr = find_node_at_offset(file.syntax(), off).unwrap();
let analyzer = SourceAnalyzer::new(&db, file_id, marker.syntax(), None);
@ -288,7 +288,7 @@ mod tests {
fn do_check_local_name(code: &str, expected_offset: u32) {
let (off, code) = extract_offset(code);
let (db, _source_root, file_id) = MockDatabase::with_single_file(&code);
let (db, file_id) = MockDatabase::with_single_file(&code);
let file = db.parse(file_id).ok().unwrap();
let expected_name = find_node_at_offset::<ast::Name>(file.syntax(), expected_offset.into())
.expect("failed to find a name at the target offset");

View File

@ -5,10 +5,9 @@ use std::{panic, sync::Arc};
use hir_def::{db::DefDatabase2, ModuleId};
use hir_expand::diagnostics::DiagnosticSink;
use parking_lot::Mutex;
use ra_cfg::CfgOptions;
use ra_db::{
salsa, CrateGraph, CrateId, Edition, FileId, FileLoader, FileLoaderDelegate, RelativePath,
RelativePathBuf, SourceDatabase, SourceDatabaseExt, SourceRoot, SourceRootId,
salsa, CrateId, FileId, FileLoader, FileLoaderDelegate, RelativePath, SourceDatabase,
SourceRootId,
};
use rustc_hash::FxHashMap;
@ -63,14 +62,6 @@ impl HirDebugHelper for MockDatabase {
}
impl MockDatabase {
pub fn with_single_file(text: &str) -> (MockDatabase, SourceRoot, FileId) {
let mut db = MockDatabase::default();
let mut source_root = SourceRoot::default();
let file_id = db.add_file(WORKSPACE, "/", &mut source_root, "/main.rs", text);
db.set_source_root(WORKSPACE, Arc::new(source_root.clone()));
(db, source_root, file_id)
}
pub fn file_id_of(&self, path: &str) -> FileId {
match self.files.get(path) {
Some(it) => *it,
@ -96,41 +87,6 @@ impl MockDatabase {
}
buf
}
fn add_file(
&mut self,
source_root_id: SourceRootId,
source_root_prefix: &str,
source_root: &mut SourceRoot,
path: &str,
text: &str,
) -> FileId {
assert!(source_root_prefix.starts_with('/'));
assert!(source_root_prefix.ends_with('/'));
assert!(path.starts_with(source_root_prefix));
let rel_path = RelativePathBuf::from_path(&path[source_root_prefix.len()..]).unwrap();
let is_crate_root = rel_path == "lib.rs" || rel_path == "/main.rs";
let file_id = FileId(self.files.len() as u32);
let prev = self.files.insert(path.to_string(), file_id);
assert!(prev.is_none(), "duplicate files in the text fixture");
Arc::make_mut(&mut self.file_paths).insert(file_id, path.to_string());
let text = Arc::new(text.to_string());
self.set_file_text(file_id, text);
self.set_file_relative_path(file_id, rel_path.clone());
self.set_file_source_root(file_id, source_root_id);
source_root.insert_file(rel_path, file_id);
if is_crate_root {
let mut crate_graph = CrateGraph::default();
crate_graph.add_crate_root(file_id, Edition::Edition2018, CfgOptions::default());
self.set_crate_graph(Arc::new(crate_graph));
}
file_id
}
}
impl salsa::Database for MockDatabase {

View File

@ -4665,7 +4665,7 @@ fn type_at(content: &str) -> String {
}
fn infer(content: &str) -> String {
let (db, _, file_id) = MockDatabase::with_single_file(content);
let (db, file_id) = MockDatabase::with_single_file(content);
let source_file = db.parse(file_id).ok().unwrap();
let mut acc = String::new();