Skip to content

Commit 0cfe4d3

Browse files
wenytang-msCopilot
andcommitted
test: use name-based lookups instead of hardcoded indices
JDT LS may return additional source roots (e.g. target/generated-sources) that shift node indices. Replace hardcoded array indices with find()-by-name lookups to make tests resilient to JDT LS version differences. - Maven: find containers by name instead of [2]/[3] - Maven: check specific nodes hidden instead of exact count - Gradle: find nodes by name, increase timeout to 120s - Multi-module: add assertion guard before getChildren() Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 871f79e commit 0cfe4d3

3 files changed

Lines changed: 34 additions & 21 deletions

File tree

test/gradle-suite/projectView.test.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ suite("Gradle Project View Tests", () => {
1616
});
1717

1818
test("Can node render correctly", async function() {
19+
this.timeout(120000);
1920
const explorer = DependencyExplorer.getInstance(contextManager.context);
2021

2122
// validate root nodes
@@ -28,13 +29,13 @@ suite("Gradle Project View Tests", () => {
2829
const projectChildren = await projectNode.getChildren();
2930
assert.ok(!!projectChildren.find((c: DataNode) => c.name === "build.gradle"));
3031
assert.ok(!!projectChildren.find((c: DataNode) => c.name === ".vscode"));
31-
const mainPackage = projectChildren[0] as PackageRootNode;
32-
assert.equal(mainPackage.name, "src/main/java", "Package name should be \"src/main/java\"");
33-
const systemLibrary = projectChildren[1] as ContainerNode;
34-
const gradleDependency = projectChildren[2] as ContainerNode;
32+
const mainPackage = projectChildren.find((c: DataNode) => c.name === "src/main/java") as PackageRootNode;
33+
assert.ok(mainPackage, "Should have src/main/java package root");
34+
const systemLibrary = projectChildren.find((c: DataNode) => c.name.startsWith("JRE System Library")) as ContainerNode;
35+
const gradleDependency = projectChildren.find((c: DataNode) => c.name === "Project and External Dependencies") as ContainerNode;
3536
// only match prefix of system library since JDK version may differ
36-
assert.ok(systemLibrary.name.startsWith("JRE System Library"), "Container name should start with JRE System Library");
37-
assert.equal(gradleDependency.name, "Project and External Dependencies", "Container name should be \"Project and External Dependencies\"");
37+
assert.ok(systemLibrary, "Should have JRE System Library container");
38+
assert.ok(gradleDependency, "Should have Project and External Dependencies container");
3839

3940
// validate innermost layer nodes
4041
const mainClasses = await mainPackage.getChildren();
@@ -47,7 +48,9 @@ suite("Gradle Project View Tests", () => {
4748
const explorer = DependencyExplorer.getInstance(contextManager.context);
4849

4950
const projectNode = (await explorer.dataProvider.getChildren())![0] as ProjectNode;
50-
const mainPackage = (await projectNode.getChildren())[0] as PackageRootNode;
51+
const projectChildren = await projectNode.getChildren();
52+
const mainPackage = projectChildren.find((c: DataNode) => c.name === "src/main/java") as PackageRootNode;
53+
assert.ok(mainPackage, "Should have src/main/java");
5154
const mainClass = (await mainPackage.getChildren())[0] as PrimaryTypeNode;
5255

5356
assert.equal(fsPath(projectNode), Uris.GRADLE_PROJECT_NODE, "Project uri incorrect");

test/maven-suite/projectView.test.ts

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ suite("Maven Project View Tests", () => {
2929
const projectChildren = await projectNode.getChildren();
3030
assert.ok(!!projectChildren.find((c: DataNode) => c.name === "pom.xml"));
3131
assert.ok(!!projectChildren.find((c: DataNode) => c.name === ".vscode"));
32-
assert.equal(projectChildren.length, 8, `Number of children should be 8, but was ${projectChildren.length}.\n${printNodes(projectChildren)}`);
33-
const mainPackage = projectChildren[0] as PackageRootNode;
32+
assert.ok(projectChildren.length >= 8, `Number of children should be at least 8, but was ${projectChildren.length}.\n${printNodes(projectChildren)}`);
33+
const mainPackage = projectChildren.find((c: DataNode) => c.name === "src/main/java") as PackageRootNode;
34+
assert.ok(mainPackage, "Should have src/main/java package root");
3435
assert.equal(mainPackage.name, "src/main/java", "Package name should be \"src/main/java\"");
3536

3637
const mainSourceSetChildren = await mainPackage.getChildren();
@@ -78,15 +79,15 @@ suite("Maven Project View Tests", () => {
7879
const projectChildren = await projectNode.getChildren();
7980
assert.ok(!!projectChildren.find((c: DataNode) => c.name === "pom.xml"));
8081
assert.ok(!!projectChildren.find((c: DataNode) => c.name === ".vscode"));
81-
const mainPackage = projectChildren[0] as PackageRootNode;
82-
const testPackage = projectChildren[1] as PackageRootNode;
83-
assert.equal(mainPackage.name, "src/main/java", "Package name should be \"src/main/java\"");
84-
assert.equal(testPackage.name, "src/test/java", "Package name should be \"src/test/java\"");
85-
const systemLibrary = projectChildren[2] as ContainerNode;
86-
const mavenDependency = projectChildren[3] as ContainerNode;
82+
const mainPackage = projectChildren.find((c: DataNode) => c.name === "src/main/java") as PackageRootNode;
83+
const testPackage = projectChildren.find((c: DataNode) => c.name === "src/test/java") as PackageRootNode;
84+
assert.ok(mainPackage, "Should have src/main/java package root");
85+
assert.ok(testPackage, "Should have src/test/java package root");
86+
const systemLibrary = projectChildren.find((c: DataNode) => c.name.startsWith("JRE System Library")) as ContainerNode;
87+
const mavenDependency = projectChildren.find((c: DataNode) => c.name === "Maven Dependencies") as ContainerNode;
8788
// only match prefix of system library since JDK version may differ
88-
assert.ok(systemLibrary.name.startsWith("JRE System Library"), "Container name should start with JRE System Library");
89-
assert.equal(mavenDependency.name, "Maven Dependencies", "Container name should be \"Maven Dependencies\"");
89+
assert.ok(systemLibrary, "Should have JRE System Library container");
90+
assert.ok(mavenDependency, "Should have Maven Dependencies container");
9091

9192
// validate package nodes
9293
const mainSourceSetChildren = await mainPackage.getChildren();
@@ -129,8 +130,10 @@ suite("Maven Project View Tests", () => {
129130

130131
const projectNode = (await explorer.dataProvider.getChildren())![0] as ProjectNode;
131132
const packageRoots = await projectNode.getChildren();
132-
const mainPackage = packageRoots[0] as PackageRootNode;
133-
const testPackage = packageRoots[1] as PackageRootNode;
133+
const mainPackage = packageRoots.find((c: DataNode) => c.name === "src/main/java") as PackageRootNode;
134+
const testPackage = packageRoots.find((c: DataNode) => c.name === "src/test/java") as PackageRootNode;
135+
assert.ok(mainPackage, "Should have src/main/java");
136+
assert.ok(testPackage, "Should have src/test/java");
134137
const mainSubPackage = (await mainPackage.getChildren())[0] as PackageNode;
135138
const testSubPackage = (await testPackage.getChildren())[0] as PackageNode;
136139
const mainClass = (await mainSubPackage.getChildren())[0] as PrimaryTypeNode;
@@ -253,7 +256,11 @@ suite("Maven Project View Tests", () => {
253256

254257
const projectNode = (await explorer.dataProvider.getChildren())![0] as ProjectNode;
255258
const projectChildren = await projectNode.getChildren();
256-
assert.equal(projectChildren.length, 4);
259+
// When showNonJavaResources is false, non-Java resource nodes (pom.xml, .vscode, .settings, etc.) should be hidden
260+
assert.ok(!projectChildren.find((c: DataNode) => c.name === "pom.xml"), "pom.xml should be hidden");
261+
assert.ok(!projectChildren.find((c: DataNode) => c.name === ".vscode"), ".vscode should be hidden");
262+
assert.ok(!projectChildren.find((c: DataNode) => c.name === ".classpath"), ".classpath should be hidden");
263+
assert.ok(!projectChildren.find((c: DataNode) => c.name === ".project"), ".project should be hidden");
257264
});
258265

259266
test("Can maven dependency nodes display in correct groupId:artifactId:version format", async function() {
@@ -262,7 +269,8 @@ suite("Maven Project View Tests", () => {
262269
const roots = await explorer.dataProvider.getChildren();
263270
const projectNode = roots![0] as ProjectNode;
264271
const projectChildren = await projectNode.getChildren();
265-
const mavenDependency = projectChildren[3] as ContainerNode;
272+
const mavenDependency = projectChildren.find((c: DataNode) => c.name === "Maven Dependencies") as ContainerNode;
273+
assert.ok(mavenDependency, "Should have Maven Dependencies container");
266274
const mavenChildren = await mavenDependency.getChildren();
267275

268276
assert.equal(mavenChildren[0].getDisplayName(), "org.hamcrest:hamcrest-core:1.3");

test/multi-module-suite/projectView.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ suite("Multi Module Tests", () => {
1313
suiteSetup(setupTestEnv);
1414

1515
test("Can open module with name equal or longer than folder name correctly", async function() {
16+
this.timeout(120000);
1617
const explorer = DependencyExplorer.getInstance(contextManager.context);
1718

1819
const roots = await explorer.dataProvider.getChildren();
1920
const nestedProjectNode = roots?.find(project =>
2021
project instanceof ProjectNode && project.name === 'de.myorg.myservice.level1') as ProjectNode;
2122

23+
assert.ok(nestedProjectNode, `Expected to find project 'de.myorg.myservice.level1' in roots:\n${roots?.map(r => (r as ProjectNode).name).join(', ')}`);
2224
const projectChildren = await nestedProjectNode.getChildren();
2325
assert.ok(!!projectChildren.find(child => child instanceof FileNode && child.path?.endsWith('level1/pom.xml'), `Expected to find FileNode with level1 pom.xml in:\n${printNodes(projectChildren)}`));
2426
});

0 commit comments

Comments
 (0)