From e89da32bb7cf7388946964e1e34df722527d0838 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sun, 9 Dec 2018 12:48:55 +0300 Subject: move tests to separate file --- crates/ra_hir/src/module/nameres/tests.rs | 94 +++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 crates/ra_hir/src/module/nameres/tests.rs (limited to 'crates/ra_hir/src/module/nameres/tests.rs') diff --git a/crates/ra_hir/src/module/nameres/tests.rs b/crates/ra_hir/src/module/nameres/tests.rs new file mode 100644 index 000000000..060683e27 --- /dev/null +++ b/crates/ra_hir/src/module/nameres/tests.rs @@ -0,0 +1,94 @@ +use std::sync::Arc; + +use salsa::Database; +use ra_db::FilesDatabase; +use ra_syntax::SmolStr; + +use crate::{ + self as hir, + db::HirDatabase, + mock::MockDatabase, +}; + +fn item_map(fixture: &str) -> (Arc, hir::ModuleId) { + let (db, pos) = MockDatabase::with_position(fixture); + let source_root = db.file_source_root(pos.file_id); + let module = hir::source_binder::module_from_position(&db, pos) + .unwrap() + .unwrap(); + let module_id = module.module_id; + (db.item_map(source_root).unwrap(), module_id) +} + +#[test] +fn test_item_map() { + let (item_map, module_id) = item_map( + " + //- /lib.rs + mod foo; + + use crate::foo::bar::Baz; + <|> + + //- /foo/mod.rs + pub mod bar; + + //- /foo/bar.rs + pub struct Baz; + ", + ); + let name = SmolStr::from("Baz"); + let resolution = &item_map.per_module[&module_id].items[&name]; + assert!(resolution.def_id.is_some()); +} + +#[test] +fn typing_inside_a_function_should_not_invalidate_item_map() { + let (mut db, pos) = MockDatabase::with_position( + " + //- /lib.rs + mod foo;<|> + + use crate::foo::bar::Baz; + + fn foo() -> i32 { + 1 + 1 + } + //- /foo/mod.rs + pub mod bar; + + //- /foo/bar.rs + pub struct Baz; + ", + ); + let source_root = db.file_source_root(pos.file_id); + { + let events = db.log_executed(|| { + db.item_map(source_root).unwrap(); + }); + assert!(format!("{:?}", events).contains("item_map")) + } + + let new_text = " + mod foo; + + use crate::foo::bar::Baz; + + fn foo() -> i32 { 92 } + " + .to_string(); + + db.query_mut(ra_db::FileTextQuery) + .set(pos.file_id, Arc::new(new_text)); + + { + let events = db.log_executed(|| { + db.item_map(source_root).unwrap(); + }); + assert!( + !format!("{:?}", events).contains("_item_map"), + "{:#?}", + events + ) + } +} -- cgit v1.2.3