aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/ra_db/src/fixture.rs51
-rw-r--r--crates/test_utils/src/fixture.rs7
2 files changed, 52 insertions, 6 deletions
diff --git a/crates/ra_db/src/fixture.rs b/crates/ra_db/src/fixture.rs
index ea52ec563..20f291568 100644
--- a/crates/ra_db/src/fixture.rs
+++ b/crates/ra_db/src/fixture.rs
@@ -74,9 +74,8 @@ pub const WORKSPACE: SourceRootId = SourceRootId(0);
74pub trait WithFixture: Default + SourceDatabaseExt + 'static { 74pub trait WithFixture: Default + SourceDatabaseExt + 'static {
75 fn with_single_file(text: &str) -> (Self, FileId) { 75 fn with_single_file(text: &str) -> (Self, FileId) {
76 let mut db = Self::default(); 76 let mut db = Self::default();
77 let (_, files) = with_files(&mut db, text); 77 let file_id = with_single_file(&mut db, text);
78 assert!(files.len() == 1); 78 (db, file_id)
79 (db, files[0])
80 } 79 }
81 80
82 fn with_files(ra_fixture: &str) -> Self { 81 fn with_files(ra_fixture: &str) -> Self {
@@ -103,6 +102,52 @@ pub trait WithFixture: Default + SourceDatabaseExt + 'static {
103 102
104impl<DB: SourceDatabaseExt + Default + 'static> WithFixture for DB {} 103impl<DB: SourceDatabaseExt + Default + 'static> WithFixture for DB {}
105 104
105fn with_single_file(db: &mut dyn SourceDatabaseExt, ra_fixture: &str) -> FileId {
106 let file_id = FileId(0);
107 let mut file_set = vfs::file_set::FileSet::default();
108 file_set.insert(file_id, vfs::VfsPath::new_virtual_path("/main.rs".to_string()));
109
110 let source_root = SourceRoot::new_local(file_set);
111
112 let crate_graph = if let Some(meta) = ra_fixture.lines().find(|it| it.contains("//-")) {
113 let entry = Fixture::parse_single(meta.trim());
114 let meta = match ParsedMeta::from(&entry) {
115 ParsedMeta::File(it) => it,
116 };
117
118 let mut crate_graph = CrateGraph::default();
119 crate_graph.add_crate_root(
120 file_id,
121 meta.edition,
122 meta.krate.map(|name| {
123 CrateName::new(&name).expect("Fixture crate name should not contain dashes")
124 }),
125 meta.cfg,
126 meta.env,
127 Default::default(),
128 );
129 crate_graph
130 } else {
131 let mut crate_graph = CrateGraph::default();
132 crate_graph.add_crate_root(
133 file_id,
134 Edition::Edition2018,
135 None,
136 CfgOptions::default(),
137 Env::default(),
138 Default::default(),
139 );
140 crate_graph
141 };
142
143 db.set_file_text(file_id, Arc::new(ra_fixture.to_string()));
144 db.set_file_source_root(file_id, WORKSPACE);
145 db.set_source_root(WORKSPACE, Arc::new(source_root));
146 db.set_crate_graph(Arc::new(crate_graph));
147
148 file_id
149}
150
106fn with_files( 151fn with_files(
107 db: &mut dyn SourceDatabaseExt, 152 db: &mut dyn SourceDatabaseExt,
108 fixture: &str, 153 fixture: &str,
diff --git a/crates/test_utils/src/fixture.rs b/crates/test_utils/src/fixture.rs
index ba00607f2..9108e49d9 100644
--- a/crates/test_utils/src/fixture.rs
+++ b/crates/test_utils/src/fixture.rs
@@ -55,8 +55,7 @@ The offending line: {:?}"#,
55 let mut res: Vec<Fixture> = Vec::new(); 55 let mut res: Vec<Fixture> = Vec::new();
56 for line in lines.by_ref() { 56 for line in lines.by_ref() {
57 if line.starts_with("//-") { 57 if line.starts_with("//-") {
58 let meta = line["//-".len()..].trim().to_string(); 58 let meta = Fixture::parse_single(line);
59 let meta = Fixture::parse_single(&meta);
60 res.push(meta) 59 res.push(meta)
61 } else if let Some(entry) = res.last_mut() { 60 } else if let Some(entry) = res.last_mut() {
62 entry.text.push_str(line); 61 entry.text.push_str(line);
@@ -67,7 +66,9 @@ The offending line: {:?}"#,
67 } 66 }
68 67
69 //- /lib.rs crate:foo deps:bar,baz cfg:foo=a,bar=b env:OUTDIR=path/to,OTHER=foo 68 //- /lib.rs crate:foo deps:bar,baz cfg:foo=a,bar=b env:OUTDIR=path/to,OTHER=foo
70 fn parse_single(meta: &str) -> Fixture { 69 pub fn parse_single(meta: &str) -> Fixture {
70 assert!(meta.starts_with("//-"));
71 let meta = meta["//-".len()..].trim();
71 let components = meta.split_ascii_whitespace().collect::<Vec<_>>(); 72 let components = meta.split_ascii_whitespace().collect::<Vec<_>>();
72 73
73 let path = components[0].to_string(); 74 let path = components[0].to_string();