test(resolving-deps-resolver): cover min-depth and add final-graph diagnostics (#13560)
The two final-graph tests that exercise peer-edge suffixes left `node_dep_paths` empty, so `build_final_graph` skipped its `min_depth` pass entirely and every node's depth came from the fallback `record.depth`. Each test now registers a shallower `find_hit` revisit — walked, so it has a `node_dep_paths` entry, but short-circuited before a `NodeRecord` was created — and asserts the merged node takes that shallower depth. Both new assertions fail when the `min_depth` lookup is replaced by `record.depth`. The bare `assert!` that no trimmed provider variant is fabricated now prints the final graph keys, as does its sibling in the neighbouring test, so a failure shows which variants were built. Closes https://github.com/pnpm/pnpm/issues/13555
This commit is contained in:
1 parent
fa8d383cca
commit
a98ff3e466
1 file changed
+33
-3
@@ -10,7 +10,10 @@ use crate::{
|
||||
};
|
||||
use pacquet_deps_path::DepPath;
|
||||
use rustc_hash::{FxHashMap as HashMap, FxHashSet as HashSet};
|
||||
use std::{collections::BTreeMap, sync::Arc};
|
||||
use std::{
|
||||
collections::{BTreeMap, BTreeSet},
|
||||
sync::Arc,
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn final_graph_keeps_first_equal_depth_payload_and_unions_transitive_peers() {
|
||||
@@ -150,6 +153,9 @@ fn final_graph_peer_edge_keeps_the_providers_own_peer_suffix() {
|
||||
let provider_analyzer = NodeId::next();
|
||||
let provider_bare = NodeId::next();
|
||||
let consumer = NodeId::next();
|
||||
// A shallower `find_hit` revisit: short-circuited before a `NodeRecord`
|
||||
// was created, so only `node_dep_paths` carries its depth.
|
||||
let consumer_revisit = NodeId::next();
|
||||
|
||||
let provider_analyzer_dep_path = DepPath::from(
|
||||
"webpack-cli@6.0.1(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@5.2.2)(webpack@5.107.2)",
|
||||
@@ -191,6 +197,7 @@ fn final_graph_peer_edge_keeps_the_providers_own_peer_suffix() {
|
||||
(provider_analyzer.clone(), tree_node("webpack-cli@6.0.1", BTreeMap::new(), 0)),
|
||||
(provider_bare.clone(), tree_node("webpack-cli@6.0.1", BTreeMap::new(), 0)),
|
||||
(consumer.clone(), tree_node("@webpack-cli/serve@3.0.1", BTreeMap::new(), 1)),
|
||||
(consumer_revisit.clone(), tree_node("@webpack-cli/serve@3.0.1", BTreeMap::new(), 0)),
|
||||
]),
|
||||
all_peer_dep_names: HashSet::from_iter([
|
||||
"webpack".to_string(),
|
||||
@@ -203,6 +210,10 @@ fn final_graph_peer_edge_keeps_the_providers_own_peer_suffix() {
|
||||
children_by_id: HashMap::default(),
|
||||
};
|
||||
let mut walker = walker_for_tests(&mut tree);
|
||||
walker.node_dep_paths.insert(provider_analyzer.clone(), provider_analyzer_dep_path.clone());
|
||||
walker.node_dep_paths.insert(provider_bare.clone(), provider_bare_dep_path.clone());
|
||||
walker.node_dep_paths.insert(consumer.clone(), consumer_dep_path.clone());
|
||||
walker.node_dep_paths.insert(consumer_revisit.clone(), consumer_dep_path.clone());
|
||||
walker.node_records.insert(
|
||||
provider_analyzer.clone(),
|
||||
NodeRecord {
|
||||
@@ -265,19 +276,28 @@ fn final_graph_peer_edge_keeps_the_providers_own_peer_suffix() {
|
||||
(provider_analyzer, provider_analyzer_dep_path.clone()),
|
||||
(provider_bare, provider_bare_dep_path),
|
||||
(consumer, consumer_dep_path.clone()),
|
||||
(consumer_revisit, consumer_dep_path.clone()),
|
||||
]));
|
||||
|
||||
assert_eq!(
|
||||
graph[&consumer_dep_path].children.get("webpack-cli"),
|
||||
Some(&provider_analyzer_dep_path),
|
||||
);
|
||||
assert!(!graph.contains_key(&trimmed_dep_path), "no variant is fabricated for the edge");
|
||||
assert_eq!(graph[&consumer_dep_path].depth, 0);
|
||||
assert!(
|
||||
!graph.contains_key(&trimmed_dep_path),
|
||||
"no variant is fabricated for the edge; final graph keys: {:#?}",
|
||||
graph.keys().collect::<BTreeSet<_>>(),
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn final_graph_peer_edge_keeps_provider_transitive_peer_suffixes() {
|
||||
let provider = NodeId::next();
|
||||
let consumer = NodeId::next();
|
||||
// A shallower `find_hit` revisit: short-circuited before a `NodeRecord`
|
||||
// was created, so only `node_dep_paths` carries its depth.
|
||||
let provider_revisit = NodeId::next();
|
||||
|
||||
let provider_dep_path = DepPath::from(
|
||||
"webpack-dev-server@5.2.2(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@5.0.10)(webpack-cli@6.0.1)(webpack@5.107.2)",
|
||||
@@ -316,6 +336,7 @@ fn final_graph_peer_edge_keeps_provider_transitive_peer_suffixes() {
|
||||
]),
|
||||
dependencies_tree: HashMap::from_iter([
|
||||
(provider.clone(), tree_node("webpack-dev-server@5.2.2", BTreeMap::new(), 1)),
|
||||
(provider_revisit.clone(), tree_node("webpack-dev-server@5.2.2", BTreeMap::new(), 0)),
|
||||
(consumer.clone(), tree_node("webpack-cli@6.0.1", BTreeMap::new(), 0)),
|
||||
]),
|
||||
all_peer_dep_names: HashSet::from_iter([
|
||||
@@ -332,6 +353,9 @@ fn final_graph_peer_edge_keeps_provider_transitive_peer_suffixes() {
|
||||
children_by_id: HashMap::default(),
|
||||
};
|
||||
let mut walker = walker_for_tests(&mut tree);
|
||||
walker.node_dep_paths.insert(provider.clone(), provider_dep_path.clone());
|
||||
walker.node_dep_paths.insert(provider_revisit.clone(), provider_dep_path.clone());
|
||||
walker.node_dep_paths.insert(consumer.clone(), consumer_dep_path.clone());
|
||||
walker.node_records.insert(
|
||||
provider.clone(),
|
||||
NodeRecord {
|
||||
@@ -381,6 +405,7 @@ fn final_graph_peer_edge_keeps_provider_transitive_peer_suffixes() {
|
||||
|
||||
let graph = walker.build_final_graph(&HashMap::from_iter([
|
||||
(provider, provider_dep_path.clone()),
|
||||
(provider_revisit, provider_dep_path.clone()),
|
||||
(consumer, consumer_dep_path.clone()),
|
||||
]));
|
||||
|
||||
@@ -388,5 +413,10 @@ fn final_graph_peer_edge_keeps_provider_transitive_peer_suffixes() {
|
||||
graph[&consumer_dep_path].children.get("webpack-dev-server"),
|
||||
Some(&provider_dep_path),
|
||||
);
|
||||
assert!(!graph.contains_key(&trimmed_provider_dep_path));
|
||||
assert_eq!(graph[&provider_dep_path].depth, 0);
|
||||
assert!(
|
||||
!graph.contains_key(&trimmed_provider_dep_path),
|
||||
"no trimmed provider variant is fabricated; final graph keys: {:#?}",
|
||||
graph.keys().collect::<BTreeSet<_>>(),
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user