aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/mock.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-02-11 10:11:24 +0000
committerAleksey Kladov <[email protected]>2019-02-11 10:47:17 +0000
commit9923383d5351089a337dc855ec9d9bbcbd297778 (patch)
treefc2d5b08c0b93f4689bfbf5cbac18cdfc062d5e6 /crates/ra_hir/src/mock.rs
parentdced2f4ed42b7013c761f2ed53c6c2482fa76169 (diff)
add graph fixture
Diffstat (limited to 'crates/ra_hir/src/mock.rs')
-rw-r--r--crates/ra_hir/src/mock.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/crates/ra_hir/src/mock.rs b/crates/ra_hir/src/mock.rs
index 29b696afa..5ca870867 100644
--- a/crates/ra_hir/src/mock.rs
+++ b/crates/ra_hir/src/mock.rs
@@ -55,6 +55,24 @@ impl MockDatabase {
55 } 55 }
56 } 56 }
57 57
58 pub fn set_crate_graph_from_fixture(&mut self, graph: CrateGraphFixture) {
59 let mut ids = FxHashMap::default();
60 let mut crate_graph = CrateGraph::default();
61 for (crate_name, (crate_root, _)) in graph.0.iter() {
62 let crate_root = self.file_id_of(&crate_root);
63 let crate_id = crate_graph.add_crate_root(crate_root);
64 ids.insert(crate_name, crate_id);
65 }
66 for (crate_name, (_, deps)) in graph.0.iter() {
67 let from = ids[crate_name];
68 for dep in deps {
69 let to = ids[dep];
70 crate_graph.add_dep(from, dep.as_str().into(), to).unwrap();
71 }
72 }
73 self.set_crate_graph(Arc::new(crate_graph))
74 }
75
58 fn from_fixture(fixture: &str) -> (MockDatabase, Option<FilePosition>) { 76 fn from_fixture(fixture: &str) -> (MockDatabase, Option<FilePosition>) {
59 let mut db = MockDatabase::default(); 77 let mut db = MockDatabase::default();
60 78
@@ -212,3 +230,20 @@ impl MockDatabase {
212 .collect() 230 .collect()
213 } 231 }
214} 232}
233
234#[derive(Default)]
235pub struct CrateGraphFixture(pub FxHashMap<String, (String, Vec<String>)>);
236
237#[macro_export]
238macro_rules! crate_graph {
239 ($($crate_name:literal: ($crate_path:literal, [$($dep:literal),*]),)*) => {{
240 let mut res = $crate::mock::CrateGraphFixture::default();
241 $(
242 res.0.insert(
243 $crate_name.to_string(),
244 ($crate_path.to_string(), vec![$($dep.to_string()),*])
245 );
246 )*
247 res
248 }}
249}