Skip to content

Commit 357842d

Browse files
panvajuanarbol
authored andcommitted
test: improve WPT runner summary
Signed-off-by: Filip Skokan <panva.ip@gmail.com> PR-URL: #62636 Reviewed-By: Mattias Buelens <mattias@buelens.com> Reviewed-By: Jason Zhang <xzha4350@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
1 parent 90f90ae commit 357842d

1 file changed

Lines changed: 39 additions & 20 deletions

File tree

‎test/common/wpt.js‎

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -486,14 +486,16 @@ class StatusLoader {
486486

487487
load() {
488488
const dir = path.join(__dirname, '..', 'wpt');
489-
let statusFile = path.join(dir, 'status', `${this.path}.json`);
490489
let result;
491490

492-
if (fs.existsSync(statusFile)) {
493-
result = JSON.parse(fs.readFileSync(statusFile, 'utf8'));
494-
} else {
495-
statusFile = path.join(dir, 'status', `${this.path}.cjs`);
496-
result = require(statusFile);
491+
try {
492+
this.statusFile = `${this.path}.json`;
493+
const jsonFile = path.join(dir, 'status', this.statusFile);
494+
result = JSON.parse(fs.readFileSync(jsonFile, 'utf8'));
495+
} catch (err) {
496+
if (err?.code !== 'ENOENT') throw err;
497+
this.statusFile = `${this.path}.cjs`;
498+
result = require(path.join(dir, 'status', this.statusFile));
497499
}
498500

499501
this.rules.addRules(result);
@@ -559,13 +561,16 @@ class WPTRunner {
559561

560562
this.status = new StatusLoader(path);
561563
this.status.load();
564+
this.statusFile = this.status.statusFile;
562565
this.specs = new Set(this.status.specs);
563566

564567
this.results = {};
565568
this.inProgress = new Set();
566569
this.workers = new Map();
567570
this.unexpectedFailures = [];
568571

572+
this.subtestCounts = { passed: 0, failed: 0, expectedFailures: 0, skipped: 0, unexpectedPasses: 0 };
573+
569574
if (process.env.WPT_REPORT != null) {
570575
this.report = new WPTReport(path);
571576
}
@@ -760,7 +765,6 @@ class WPTRunner {
760765
const failures = [];
761766
let expectedFailures = 0;
762767
let skipped = 0;
763-
let skippedTests = 0;
764768
for (const [key, item] of Object.entries(this.results)) {
765769
if (item.fail?.unexpected) {
766770
failures.push(key);
@@ -771,9 +775,6 @@ class WPTRunner {
771775
if (item.skip) {
772776
skipped++;
773777
}
774-
if (item.skipTests) {
775-
skippedTests += item.skipTests.length;
776-
}
777778
}
778779

779780
const unexpectedPasses = [];
@@ -808,23 +809,28 @@ class WPTRunner {
808809
// so that results survive if the process is killed.
809810
this.report?.write();
810811

812+
const p = (n, word, suffix = 's') => `${n} ${word}${n === 1 ? '' : suffix}`;
811813
const ran = queue.length;
812814
const total = ran + skipped;
813815
const passed = ran - expectedFailures - failures.length;
816+
const { subtestCounts } = this;
814817
console.log('');
815-
console.log(`Ran ${ran}/${total} tests, ${skipped} skipped,`,
816-
`${passed} passed, ${expectedFailures} expected failures,`,
817-
`${failures.length} unexpected failures,`,
818-
`${unexpectedPasses.length} unexpected passes` +
819-
(skippedTests ? `, ${skippedTests} subtests skipped` : ''));
818+
console.log(`Files: ${ran}/${total} ran, ${passed} passed,`,
819+
`${skipped} skipped, ${p(expectedFailures, 'expected failure')},`,
820+
`${p(failures.length, 'unexpected failure')},`,
821+
`${p(unexpectedPasses.length, 'unexpected pass', 'es')}`);
822+
console.log(`Subtests: ${subtestCounts.passed} passed,`,
823+
`${subtestCounts.skipped} skipped, ${p(subtestCounts.expectedFailures, 'expected failure')},`,
824+
`${p(subtestCounts.failed, 'unexpected failure')},`,
825+
`${p(subtestCounts.unexpectedPasses, 'unexpected pass', 'es')}`);
820826
if (failures.length > 0) {
821-
const file = path.join('test', 'wpt', 'status', `${this.path}.json`);
827+
const file = path.join('test', 'wpt', 'status', this.statusFile);
822828
throw new Error(
823829
`Found ${failures.length} unexpected failures. ` +
824830
`Consider updating ${file} for these files:\n${failures.join('\n')}`);
825831
}
826832
if (unexpectedPasses.length > 0) {
827-
const file = path.join('test', 'wpt', 'status', `${this.path}.json`);
833+
const file = path.join('test', 'wpt', 'status', this.statusFile);
828834
throw new Error(
829835
`Found ${unexpectedPasses.length} unexpected passes. ` +
830836
`Consider updating ${file} for these files:\n${unexpectedPasses.join('\n')}`);
@@ -860,7 +866,7 @@ class WPTRunner {
860866
if (status !== kPass) {
861867
this.fail(spec, test, status, reportResult);
862868
} else {
863-
this.succeed(test, status, reportResult);
869+
this.succeed(spec, test, status, reportResult);
864870
}
865871
}
866872

@@ -928,14 +934,22 @@ class WPTRunner {
928934
}
929935
}
930936

931-
succeed(test, status, reportResult) {
932-
console.log(`[${status.toUpperCase()}] ${test.name}`);
937+
succeed(spec, test, status, reportResult) {
938+
const unexpectedPass = spec.failedTests.includes(test.name);
939+
if (unexpectedPass) {
940+
console.log(`[UNEXPECTED_PASS][${status.toUpperCase()}] ${test.name}`);
941+
this.subtestCounts.unexpectedPasses++;
942+
} else {
943+
console.log(`[${status.toUpperCase()}] ${test.name}`);
944+
this.subtestCounts.passed++;
945+
}
933946
reportResult?.addSubtest(test.name, 'PASS');
934947
}
935948

936949
skipTest(spec, test, reportResult) {
937950
console.log(`[SKIP] ${test.name}`);
938951
reportResult?.addSubtest(test.name, 'NOTRUN');
952+
this.subtestCounts.skipped++;
939953
this.addTestResult(spec, {
940954
name: test.name,
941955
status: kSkip,
@@ -958,6 +972,11 @@ class WPTRunner {
958972
console.log(`Command: ${command}\n`);
959973

960974
reportResult?.addSubtest(test.name, 'FAIL', test.message);
975+
if (expected) {
976+
this.subtestCounts.expectedFailures++;
977+
} else {
978+
this.subtestCounts.failed++;
979+
}
961980

962981
this.addTestResult(spec, {
963982
name: test.name,

0 commit comments

Comments
 (0)