test: improve WPT runner summary · nodejs/node@9e21711
@@ -500,14 +500,16 @@ class StatusLoader {
500500501501load() {
502502const dir = path.join(__dirname, '..', 'wpt');
503-let statusFile = path.join(dir, 'status', `${this.path}.json`);
504503let result;
505504506-if (fs.existsSync(statusFile)) {
507-result = JSON.parse(fs.readFileSync(statusFile, 'utf8'));
508-} else {
509-statusFile = path.join(dir, 'status', `${this.path}.cjs`);
510-result = require(statusFile);
505+try {
506+this.statusFile = `${this.path}.json`;
507+const jsonFile = path.join(dir, 'status', this.statusFile);
508+result = JSON.parse(fs.readFileSync(jsonFile, 'utf8'));
509+} catch (err) {
510+if (err?.code !== 'ENOENT') throw err;
511+this.statusFile = `${this.path}.cjs`;
512+result = require(path.join(dir, 'status', this.statusFile));
511513}
512514513515this.rules.addRules(result);
@@ -573,13 +575,16 @@ class WPTRunner {
573575574576this.status = new StatusLoader(path);
575577this.status.load();
578+this.statusFile = this.status.statusFile;
576579this.specs = new Set(this.status.specs);
577580578581this.results = {};
579582this.inProgress = new Set();
580583this.workers = new Map();
581584this.unexpectedFailures = [];
582585586+this.subtestCounts = { passed: 0, failed: 0, expectedFailures: 0, skipped: 0, unexpectedPasses: 0 };
587+583588if (process.env.WPT_REPORT != null) {
584589this.report = new WPTReport(path);
585590}
@@ -775,7 +780,6 @@ class WPTRunner {
775780const failures = [];
776781let expectedFailures = 0;
777782let skipped = 0;
778-let skippedTests = 0;
779783for (const [key, item] of Object.entries(this.results)) {
780784if (item.fail?.unexpected) {
781785failures.push(key);
@@ -786,9 +790,6 @@ class WPTRunner {
786790if (item.skip) {
787791skipped++;
788792}
789-if (item.skipTests) {
790-skippedTests += item.skipTests.length;
791-}
792793}
793794794795const unexpectedPasses = [];
@@ -823,23 +824,28 @@ class WPTRunner {
823824// so that results survive if the process is killed.
824825this.report?.write();
825826827+const p = (n, word, suffix = 's') => `${n} ${word}${n === 1 ? '' : suffix}`;
826828const ran = queue.length;
827829const total = ran + skipped;
828830const passed = ran - expectedFailures - failures.length;
831+const { subtestCounts } = this;
829832console.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` : ''));
833+console.log(`Files: ${ran}/${total} ran, ${passed} passed,`,
834+`${skipped} skipped, ${p(expectedFailures, 'expected failure')},`,
835+`${p(failures.length, 'unexpected failure')},`,
836+`${p(unexpectedPasses.length, 'unexpected pass', 'es')}`);
837+console.log(`Subtests: ${subtestCounts.passed} passed,`,
838+`${subtestCounts.skipped} skipped, ${p(subtestCounts.expectedFailures, 'expected failure')},`,
839+`${p(subtestCounts.failed, 'unexpected failure')},`,
840+`${p(subtestCounts.unexpectedPasses, 'unexpected pass', 'es')}`);
835841if (failures.length > 0) {
836-const file = path.join('test', 'wpt', 'status', `${this.path}.json`);
842+const file = path.join('test', 'wpt', 'status', this.statusFile);
837843throw new Error(
838844`Found ${failures.length} unexpected failures. ` +
839845`Consider updating ${file} for these files:\n${failures.join('\n')}`);
840846}
841847if (unexpectedPasses.length > 0) {
842-const file = path.join('test', 'wpt', 'status', `${this.path}.json`);
848+const file = path.join('test', 'wpt', 'status', this.statusFile);
843849throw new Error(
844850`Found ${unexpectedPasses.length} unexpected passes. ` +
845851`Consider updating ${file} for these files:\n${unexpectedPasses.join('\n')}`);
@@ -875,7 +881,7 @@ class WPTRunner {
875881if (status !== kPass) {
876882this.fail(spec, test, status, reportResult);
877883} else {
878-this.succeed(test, status, reportResult);
884+this.succeed(spec, test, status, reportResult);
879885}
880886}
881887@@ -943,14 +949,22 @@ class WPTRunner {
943949}
944950}
945951946-succeed(test, status, reportResult) {
947-console.log(`[${status.toUpperCase()}] ${test.name}`);
952+succeed(spec, test, status, reportResult) {
953+const unexpectedPass = spec.failedTests.includes(test.name);
954+if (unexpectedPass) {
955+console.log(`[UNEXPECTED_PASS][${status.toUpperCase()}] ${test.name}`);
956+this.subtestCounts.unexpectedPasses++;
957+} else {
958+console.log(`[${status.toUpperCase()}] ${test.name}`);
959+this.subtestCounts.passed++;
960+}
948961reportResult?.addSubtest(test.name, 'PASS');
949962}
950963951964skipTest(spec, test, reportResult) {
952965console.log(`[SKIP] ${test.name}`);
953966reportResult?.addSubtest(test.name, 'NOTRUN');
967+this.subtestCounts.skipped++;
954968this.addTestResult(spec, {
955969name: test.name,
956970status: kSkip,
@@ -973,6 +987,11 @@ class WPTRunner {
973987console.log(`Command: ${command}\n`);
974988975989reportResult?.addSubtest(test.name, 'FAIL', test.message);
990+if (expected) {
991+this.subtestCounts.expectedFailures++;
992+} else {
993+this.subtestCounts.failed++;
994+}
976995977996this.addTestResult(spec, {
978997name: test.name,