docs: show browser test stats in the readme (#24)

This commit is contained in:
Joel Einbinder 2019-11-19 16:30:24 -08:00 committed by Andrey Lushnikov
parent 85035fedea
commit 0a8d55d954
3 changed files with 90 additions and 0 deletions

View file

@ -1,3 +1,9 @@
# Browser Test Stats
<!-- GEN:test-stats -->
|Firefox|Chromium|WebKit|all|
|---|---|---|---|
|511/650|698/705|325/653|309/650|
<!-- GEN:stop -->
# Contributing

69
test/stats.js Normal file
View file

@ -0,0 +1,69 @@
const path = require('path');
const {TestRunner} = require('../utils/testrunner/');
const utils = require('./utils');
const {addTests} = require('./playwright.spec.js');
const firefoxTests = testsForProduct('Firefox');
const chromiumTests = testsForProduct('Chromium');
const webkitTests = testsForProduct('WebKit');
const goalSuite = intersectSets(firefoxTests.all, chromiumTests.all, webkitTests.all);
const skippedSuite = intersectSets(goalSuite, joinSets(firefoxTests.skipped, chromiumTests.skipped, webkitTests.skipped));
module.exports = {
firefox: {
total: firefoxTests.all.size,
skipped: firefoxTests.skipped.size,
},
chromium: {
total: chromiumTests.all.size,
skipped: chromiumTests.skipped.size,
},
webkit: {
total: webkitTests.all.size,
skipped: webkitTests.skipped.size,
},
all: {
total: goalSuite.size,
skipped: skippedSuite.size,
}
};
/**
* @param {string} product
*/
function testsForProduct(product) {
const testRunner = new TestRunner();
addTests({
product,
playwrightPath: path.join(utils.projectRoot(), `${product.toLowerCase()}.js`),
testRunner
});
return {
all: new Set(testRunner.tests().map(test => test.fullName)),
skipped: new Set(testRunner.tests().filter(test => test.declaredMode === 'skip').map(test => test.fullName))
}
}
/**
* @param {...Set} sets
*/
function intersectSets(...sets) {
if (!sets.length)
return new Set();
const intersect = new Set();
const [first, ...rest] = sets;
outer: for (const item of first) {
for (const set of rest)
if (!set.has(item))
continue outer;
intersect.add(item);
}
return intersect;
}
function joinSets(...sets) {
const joined = new Set();
for (const set of sets)
for (const item of set)
joined.add(item);
return joined;
}

View file

@ -70,6 +70,8 @@ module.exports.runCommands = function(sources, version) {
newText = isReleaseVersion ? '' : command.originalText;
else if (command.name === 'toc')
newText = generateTableOfContents(command.source.text().substring(command.to));
else if (command.name === 'test-stats')
newText = generateTestStats();
if (newText === null)
messages.push(Message.error(`Unknown command 'gen:${command.name}'`));
else if (applyCommand(command, newText))
@ -91,6 +93,19 @@ function applyCommand(command, editText) {
return command.source.setText(newText);
}
function generateTestStats() {
const stats = require('../../../test/stats');
return `
|Firefox|Chromium|WebKit|all|
|---|---|---|---|
|${s('firefox')}|${s('chromium')}|${s('webkit')}|${s('all')}|
`;
function s(product) {
const {total, skipped} = stats[product];
return `${total-skipped}/${total}`;
}
}
function generateTableOfContents(mdText) {
const ids = new Set();
const titles = [];