Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/project-model/src/tests.rs')
-rw-r--r--crates/project-model/src/tests.rs61
1 files changed, 61 insertions, 0 deletions
diff --git a/crates/project-model/src/tests.rs b/crates/project-model/src/tests.rs
index cf77b875d8..3034a19e93 100644
--- a/crates/project-model/src/tests.rs
+++ b/crates/project-model/src/tests.rs
@@ -46,6 +46,39 @@ fn load_cargo_with_overrides(
to_crate_graph(project_workspace)
}
+fn load_cargo_with_fake_sysroot(
+ file_map: &mut FxHashMap<AbsPathBuf, FileId>,
+ file: &str,
+) -> (CrateGraph, ProcMacroPaths) {
+ let meta: Metadata = get_test_json_file(file);
+ let manifest_path =
+ ManifestPath::try_from(AbsPathBuf::try_from(meta.workspace_root.clone()).unwrap()).unwrap();
+ let cargo_workspace = CargoWorkspace::new(meta, manifest_path, Default::default());
+ let project_workspace = ProjectWorkspace {
+ kind: ProjectWorkspaceKind::Cargo {
+ cargo: cargo_workspace,
+ build_scripts: WorkspaceBuildScripts::default(),
+ rustc: Err(None),
+ error: None,
+ set_test: true,
+ },
+ sysroot: get_fake_sysroot(),
+ rustc_cfg: Vec::new(),
+ cfg_overrides: Default::default(),
+ toolchain: None,
+ target_layout: Err("target_data_layout not loaded".into()),
+ };
+ project_workspace.to_crate_graph(
+ &mut {
+ |path| {
+ let len = file_map.len();
+ Some(*file_map.entry(path.to_path_buf()).or_insert(FileId::from_raw(len as u32)))
+ }
+ },
+ &Default::default(),
+ )
+}
+
fn load_rust_project(file: &str) -> (CrateGraph, ProcMacroPaths) {
let data = get_test_json_file(file);
let project = rooted_project_json(data);
@@ -222,6 +255,34 @@ fn rust_project_is_proc_macro_has_proc_macro_dep() {
}
#[test]
+fn crate_graph_dedup_identical() {
+ let (mut crate_graph, proc_macros) =
+ load_cargo_with_fake_sysroot(&mut Default::default(), "regex-metadata.json");
+ crate_graph.sort_deps();
+
+ let (d_crate_graph, mut d_proc_macros) = (crate_graph.clone(), proc_macros.clone());
+
+ crate_graph.extend(d_crate_graph.clone(), &mut d_proc_macros);
+ assert!(crate_graph.iter().eq(d_crate_graph.iter()));
+ assert_eq!(proc_macros, d_proc_macros);
+}
+
+#[test]
+fn crate_graph_dedup() {
+ let path_map = &mut Default::default();
+ let (mut crate_graph, _proc_macros) =
+ load_cargo_with_fake_sysroot(path_map, "ripgrep-metadata.json");
+ assert_eq!(crate_graph.iter().count(), 81);
+ crate_graph.sort_deps();
+ let (regex_crate_graph, mut regex_proc_macros) =
+ load_cargo_with_fake_sysroot(path_map, "regex-metadata.json");
+ assert_eq!(regex_crate_graph.iter().count(), 60);
+
+ crate_graph.extend(regex_crate_graph, &mut regex_proc_macros);
+ assert_eq!(crate_graph.iter().count(), 118);
+}
+
+#[test]
fn smoke_test_real_sysroot_cargo() {
let file_map = &mut FxHashMap::<AbsPathBuf, FileId>::default();
let meta: Metadata = get_test_json_file("hello-world-metadata.json");