Skip to content

Commit 6de1461

Browse files
authored
Don't mark tests with children as pass/fail (#898)
The Test Explorer automatically shows a pass/fail state based on the state of a TestItem's children. The Test Results in the bottom right were showing suites as passing even if a child test failed. We should simply omit suites from being marked as pass/fail. Also adds a test for swift-testing parameterized tests.
1 parent 8310212 commit 6de1461

File tree

4 files changed

+49
-18
lines changed

4 files changed

+49
-18
lines changed

assets/test/defaultPackage/Tests/PackageTests/PackageTests.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ import Testing
3232
#expect(1 == 2)
3333
}
3434

35+
@Test(arguments: [1, 2, 3])
36+
func parameterizedTest(_ arg: Int) {
37+
#expect(arg != 2)
38+
}
39+
3540
@Suite
3641
struct MixedSwiftTestingSuite {
3742
@Test

src/TestExplorer/TestRunner.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -974,6 +974,9 @@ export class TestRunnerTestRunState implements ITestRunState {
974974
return;
975975
}
976976
const test = this.testRun.testItems[index];
977+
if (test.children.size > 0) {
978+
return;
979+
}
977980
const startTime = this.startTimes.get(index);
978981

979982
let duration: number;

test/suite/testexplorer/TestExplorerIntegration.test.ts

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ suite("Test Explorer Suite", function () {
124124
["testPassing()", "testFailing()"],
125125
"topLevelTestPassing()",
126126
"topLevelTestFailing()",
127+
"parameterizedTest(_:)",
127128
"MixedSwiftTestingSuite",
128129
["testPassing()", "testFailing()", "testDisabled()"],
129130
"testWithKnownIssue()",
@@ -240,18 +241,36 @@ suite("Test Explorer Suite", function () {
240241
});
241242
});
242243

243-
test("Runs Suite", async function () {
244+
test("Runs parameterized test", async function () {
244245
const testRun = await runTest(
245246
testExplorer.controller,
246247
runProfile,
247-
"PackageTests.MixedSwiftTestingSuite"
248+
"PackageTests.parameterizedTest(_:)"
248249
);
249250

250251
assertTestResults(testRun, {
251252
passed: [
252-
"PackageTests.MixedSwiftTestingSuite/testPassing()",
253-
"PackageTests.MixedSwiftTestingSuite",
253+
"PackageTests.parameterizedTest(_:)/PackageTests.swift:35:2/argumentIDs: Optional([Testing.Test.Case.Argument.ID(bytes: [49])])",
254+
"PackageTests.parameterizedTest(_:)/PackageTests.swift:35:2/argumentIDs: Optional([Testing.Test.Case.Argument.ID(bytes: [51])])",
254255
],
256+
failed: [
257+
{
258+
issues: ["Expectation failed: (arg → 2) != 2"],
259+
test: "PackageTests.parameterizedTest(_:)/PackageTests.swift:35:2/argumentIDs: Optional([Testing.Test.Case.Argument.ID(bytes: [50])])",
260+
},
261+
],
262+
});
263+
});
264+
265+
test("Runs Suite", async function () {
266+
const testRun = await runTest(
267+
testExplorer.controller,
268+
runProfile,
269+
"PackageTests.MixedSwiftTestingSuite"
270+
);
271+
272+
assertTestResults(testRun, {
273+
passed: ["PackageTests.MixedSwiftTestingSuite/testPassing()"],
255274
skipped: ["PackageTests.MixedSwiftTestingSuite/testDisabled()"],
256275
failed: [
257276
{
@@ -273,7 +292,6 @@ suite("Test Explorer Suite", function () {
273292
assertTestResults(testRun, {
274293
passed: [
275294
"PackageTests.MixedSwiftTestingSuite/testPassing()",
276-
"PackageTests.MixedSwiftTestingSuite",
277295
"PackageTests.MixedXCTestSuite/testPassing",
278296
],
279297
skipped: ["PackageTests.MixedSwiftTestingSuite/testDisabled()"],

test/suite/testexplorer/utilities.ts

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ export function assertTestControllerHierarchy(
7272

7373
/**
7474
* Asserts on the result of a test run.
75+
*
76+
* The order of tests is not verified because swift-testing
77+
* tests run in parallel and can complete in any order.
7578
*/
7679
export function assertTestResults(
7780
testRun: TestRunProxy,
@@ -88,22 +91,24 @@ export function assertTestResults(
8891
) {
8992
assert.deepEqual(
9093
{
91-
passed: testRun.runState.passed.map(({ id }) => id),
92-
failed: testRun.runState.failed.map(({ test, message }) => ({
93-
test: test.id,
94-
issues: Array.isArray(message)
95-
? message.map(({ message }) => message)
96-
: [(message as vscode.TestMessage).message],
97-
})),
98-
skipped: testRun.runState.skipped.map(({ id }) => id),
99-
errored: testRun.runState.errored.map(({ id }) => id),
94+
passed: testRun.runState.passed.map(({ id }) => id).sort(),
95+
failed: testRun.runState.failed
96+
.map(({ test, message }) => ({
97+
test: test.id,
98+
issues: Array.isArray(message)
99+
? message.map(({ message }) => message)
100+
: [(message as vscode.TestMessage).message],
101+
}))
102+
.sort(),
103+
skipped: testRun.runState.skipped.map(({ id }) => id).sort(),
104+
errored: testRun.runState.errored.map(({ id }) => id).sort(),
100105
unknown: testRun.runState.unknown,
101106
},
102107
{
103-
passed: state.passed ?? [],
104-
failed: state.failed ?? [],
105-
skipped: state.skipped ?? [],
106-
errored: state.errored ?? [],
108+
passed: (state.passed ?? []).sort(),
109+
failed: (state.failed ?? []).sort(),
110+
skipped: (state.skipped ?? []).sort(),
111+
errored: (state.errored ?? []).sort(),
107112
unknown: 0,
108113
}
109114
);

0 commit comments

Comments
 (0)