Auto merge of #16847 - HKalbasi:test-explorer, r=HKalbasi

Distinguish integration tests from crates in test explorer

Fix part of #16827
This commit is contained in:
bors 2024-03-15 14:25:53 +00:00
commit d7ec7a5441
2 changed files with 31 additions and 13 deletions

View File

@ -11,7 +11,7 @@
#[derive(Debug)]
pub enum TestItemKind {
Crate,
Crate(CrateId),
Module,
Function,
}
@ -32,15 +32,17 @@ pub(crate) fn discover_test_roots(db: &RootDatabase) -> Vec<TestItem> {
crate_graph
.iter()
.filter(|&id| crate_graph[id].origin.is_local())
.filter_map(|id| Some(crate_graph[id].display_name.as_ref()?.to_string()))
.map(|id| TestItem {
kind: TestItemKind::Crate,
label: id.clone(),
id,
parent: None,
file: None,
text_range: None,
runnable: None,
.filter_map(|id| {
let test_id = crate_graph[id].display_name.as_ref()?.to_string();
Some(TestItem {
kind: TestItemKind::Crate(id),
label: test_id.clone(),
id: test_id,
parent: None,
file: None,
text_range: None,
runnable: None,
})
})
.collect()
}
@ -118,12 +120,13 @@ pub(crate) fn discover_tests_in_crate(db: &RootDatabase, crate_id: CrateId) -> V
let Some(crate_test_id) = &crate_graph[crate_id].display_name else {
return vec![];
};
let kind = TestItemKind::Crate(crate_id);
let crate_test_id = crate_test_id.to_string();
let crate_id: Crate = crate_id.into();
let module = crate_id.root_module();
let mut r = vec![TestItem {
id: crate_test_id.clone(),
kind: TestItemKind::Crate,
kind,
label: crate_test_id.clone(),
parent: None,
file: None,

View File

@ -1519,13 +1519,28 @@ pub(crate) fn test_item(
id: test_item.id,
label: test_item.label,
kind: match test_item.kind {
ide::TestItemKind::Crate => lsp_ext::TestItemKind::Package,
ide::TestItemKind::Crate(id) => 'b: {
let Some((cargo_ws, target)) = snap.cargo_target_for_crate_root(id) else {
break 'b lsp_ext::TestItemKind::Package;
};
let target = &cargo_ws[target];
match target.kind {
project_model::TargetKind::Bin
| project_model::TargetKind::Lib { .. }
| project_model::TargetKind::Example
| project_model::TargetKind::BuildScript
| project_model::TargetKind::Other => lsp_ext::TestItemKind::Package,
project_model::TargetKind::Test | project_model::TargetKind::Bench => {
lsp_ext::TestItemKind::Test
}
}
}
ide::TestItemKind::Module => lsp_ext::TestItemKind::Module,
ide::TestItemKind::Function => lsp_ext::TestItemKind::Test,
},
can_resolve_children: matches!(
test_item.kind,
ide::TestItemKind::Crate | ide::TestItemKind::Module
ide::TestItemKind::Crate(_) | ide::TestItemKind::Module
),
parent: test_item.parent,
text_document: test_item