Skip to content

Commit 0511252

Browse files
committed
test: improve WPT runner summary
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
1 parent 43d5058 commit 0511252

File tree

1 file changed

+44
-19
lines changed

1 file changed

+44
-19
lines changed

test/common/wpt.js

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -500,14 +500,22 @@ class StatusLoader {
500500

501501
load() {
502502
const dir = path.join(__dirname, '..', 'wpt');
503-
let statusFile = path.join(dir, 'status', `${this.path}.json`);
503+
const jsonFile = path.join(dir, 'status', `${this.path}.json`);
504504
let result;
505505

506-
if (fs.existsSync(statusFile)) {
507-
result = JSON.parse(fs.readFileSync(statusFile, 'utf8'));
506+
let fd;
507+
try {
508+
fd = fs.openSync(jsonFile, 'r');
509+
} catch (err) {
510+
if (err?.code !== 'ENOENT') throw err;
511+
}
512+
if (fd) {
513+
this.statusFile = `${this.path}.json`;
514+
result = JSON.parse(fs.readFileSync(fd, 'utf8'));
515+
fs.closeSync(fd);
508516
} else {
509-
statusFile = path.join(dir, 'status', `${this.path}.cjs`);
510-
result = require(statusFile);
517+
this.statusFile = `${this.path}.cjs`;
518+
result = require(path.join(dir, 'status', this.statusFile));
511519
}
512520

513521
this.rules.addRules(result);
@@ -573,13 +581,16 @@ class WPTRunner {
573581

574582
this.status = new StatusLoader(path);
575583
this.status.load();
584+
this.statusFile = this.status.statusFile;
576585
this.specs = new Set(this.status.specs);
577586

578587
this.results = {};
579588
this.inProgress = new Set();
580589
this.workers = new Map();
581590
this.unexpectedFailures = [];
582591

592+
this.subtestCounts = { passed: 0, failed: 0, expectedFailures: 0, skipped: 0, unexpectedPasses: 0 };
593+
583594
if (process.env.WPT_REPORT != null) {
584595
this.report = new WPTReport(path);
585596
}
@@ -775,7 +786,6 @@ class WPTRunner {
775786
const failures = [];
776787
let expectedFailures = 0;
777788
let skipped = 0;
778-
let skippedTests = 0;
779789
for (const [key, item] of Object.entries(this.results)) {
780790
if (item.fail?.unexpected) {
781791
failures.push(key);
@@ -786,9 +796,6 @@ class WPTRunner {
786796
if (item.skip) {
787797
skipped++;
788798
}
789-
if (item.skipTests) {
790-
skippedTests += item.skipTests.length;
791-
}
792799
}
793800

794801
const unexpectedPasses = [];
@@ -823,23 +830,28 @@ class WPTRunner {
823830
// so that results survive if the process is killed.
824831
this.report?.write();
825832

833+
const p = (n, word, suffix = 's') => `${n} ${word}${n === 1 ? '' : suffix}`;
826834
const ran = queue.length;
827835
const total = ran + skipped;
828836
const passed = ran - expectedFailures - failures.length;
837+
const { subtestCounts } = this;
829838
console.log('');
830-
console.log(`Ran ${ran}/${total} tests, ${skipped} skipped,`,
831-
`${passed} passed, ${expectedFailures} expected failures,`,
832-
`${failures.length} unexpected failures,`,
833-
`${unexpectedPasses.length} unexpected passes` +
834-
(skippedTests ? `, ${skippedTests} subtests skipped` : ''));
839+
console.log(`Files: ${ran}/${total} ran, ${passed} passed,`,
840+
`${skipped} skipped, ${p(expectedFailures, 'expected failure')},`,
841+
`${p(failures.length, 'unexpected failure')},`,
842+
`${p(unexpectedPasses.length, 'unexpected pass', 'es')}`);
843+
console.log(`Subtests: ${subtestCounts.passed} passed,`,
844+
`${subtestCounts.skipped} skipped, ${p(subtestCounts.expectedFailures, 'expected failure')},`,
845+
`${p(subtestCounts.failed, 'unexpected failure')},`,
846+
`${p(subtestCounts.unexpectedPasses, 'unexpected pass', 'es')}`);
835847
if (failures.length > 0) {
836-
const file = path.join('test', 'wpt', 'status', `${this.path}.json`);
848+
const file = path.join('test', 'wpt', 'status', this.statusFile);
837849
throw new Error(
838850
`Found ${failures.length} unexpected failures. ` +
839851
`Consider updating ${file} for these files:\n${failures.join('\n')}`);
840852
}
841853
if (unexpectedPasses.length > 0) {
842-
const file = path.join('test', 'wpt', 'status', `${this.path}.json`);
854+
const file = path.join('test', 'wpt', 'status', this.statusFile);
843855
throw new Error(
844856
`Found ${unexpectedPasses.length} unexpected passes. ` +
845857
`Consider updating ${file} for these files:\n${unexpectedPasses.join('\n')}`);
@@ -875,7 +887,7 @@ class WPTRunner {
875887
if (status !== kPass) {
876888
this.fail(spec, test, status, reportResult);
877889
} else {
878-
this.succeed(test, status, reportResult);
890+
this.succeed(spec, test, status, reportResult);
879891
}
880892
}
881893

@@ -943,14 +955,22 @@ class WPTRunner {
943955
}
944956
}
945957

946-
succeed(test, status, reportResult) {
947-
console.log(`[${status.toUpperCase()}] ${test.name}`);
958+
succeed(spec, test, status, reportResult) {
959+
const unexpectedPass = spec.failedTests.includes(test.name);
960+
if (unexpectedPass) {
961+
console.log(`[UNEXPECTED_PASS][${status.toUpperCase()}] ${test.name}`);
962+
this.subtestCounts.unexpectedPasses++;
963+
} else {
964+
console.log(`[${status.toUpperCase()}] ${test.name}`);
965+
this.subtestCounts.passed++;
966+
}
948967
reportResult?.addSubtest(test.name, 'PASS');
949968
}
950969

951970
skipTest(spec, test, reportResult) {
952971
console.log(`[SKIP] ${test.name}`);
953972
reportResult?.addSubtest(test.name, 'NOTRUN');
973+
this.subtestCounts.skipped++;
954974
this.addTestResult(spec, {
955975
name: test.name,
956976
status: kSkip,
@@ -973,6 +993,11 @@ class WPTRunner {
973993
console.log(`Command: ${command}\n`);
974994

975995
reportResult?.addSubtest(test.name, 'FAIL', test.message);
996+
if (expected) {
997+
this.subtestCounts.expectedFailures++;
998+
} else {
999+
this.subtestCounts.failed++;
1000+
}
9761001

9771002
this.addTestResult(spec, {
9781003
name: test.name,

0 commit comments

Comments
 (0)