docs: show browser test stats in the readme (#24)
This commit is contained in:
parent
85035fedea
commit
0a8d55d954
|
|
@ -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
69
test/stats.js
Normal 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;
|
||||
}
|
||||
|
|
@ -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 = [];
|
||||
|
|
|
|||
Loading…
Reference in a new issue