Skip to content

Instantly share code, notes, and snippets.

@aslushnikov
Last active February 13, 2019 04:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aslushnikov/31244444cf920305d53c06339f08a217 to your computer and use it in GitHub Desktop.
Save aslushnikov/31244444cf920305d53c06339f08a217 to your computer and use it in GitHub Desktop.
Diff Puppeteer and Puppeteer-Firefox tests
const pptrTests = getTestsJSON('./puppeteer.spec.js', 'Firefox', require('..'));
const ffoxTests = getTestsJSON('../experimental/puppeteer-firefox/test/puppeteer.spec.js', 'firefox', require('..'));
console.log('TOTAL PPTR TESTS: ' + pptrTests.length);
console.log('TOTAL FFOX TESTS: ' + ffoxTests.length);
const pptr = new Map();
const pptr2 = new Map();
for (const test of pptrTests) {
pptr.set(hash1(test), test);
pptr2.set(test.suiteName, test);
}
let moved = [];
let good = [];
let changed = [];
let added = [];
for (let i = 0; i < ffoxTests.length; ++i) {
const hdTest = ffoxTests[i];
const ppTest = pptr.get(hash1(hdTest));
if (!ppTest) {
const ppTest2 = pptr2.get(hdTest.suiteName);
if (!ppTest2) {
added.push({hdTest});
} else {
changed.push({hdTest, ppTest: ppTest2});
}
} else if (hdTest.fileName !== ppTest.fileName) {
moved.push({hdTest, ppTest});
} else {
good.push({hdTest, ppTest});
}
}
moved.sort((a, b) => {
if (a.ppTest.fileName !== b.ppTest.fileName)
return a.ppTest.fileName.localeCompare(b.ppTest.fileName);
return a.ppTest.lineNumber - b.ppTest.lineNumber;
});
changed.sort((a, b) => {
if (a.ppTest.fileName !== b.ppTest.fileName)
return a.ppTest.fileName.localeCompare(b.ppTest.fileName);
return a.ppTest.lineNumber - b.ppTest.lineNumber;
});
added.sort((a, b) => {
if (a.hdTest.fileName !== b.hdTest.fileName)
return a.hdTest.fileName.localeCompare(b.hdTest.fileName);
return a.hdTest.lineNumber - b.hdTest.lineNumber;
});
for (const move of moved) {
console.log(`======= MOVE =================================
PPTR: ${move.ppTest.fileName}:${move.ppTest.lineNumber}
FFOX: ${move.hdTest.fileName}:${move.hdTest.lineNumber}
${move.ppTest.name}
`);
}
for (const change of changed) {
console.log(`========= CHANGE ========================================
>>>> PPTR ${change.ppTest.fileName}:${change.ppTest.lineNumber} >>>>
${change.ppTest.failsFFOX ? 'it_fails_ffox' : (change.ppTest.declaredMode === 'skip' ? 'xit' : 'it')}('${change.ppTest.name}', ${change.ppTest.text}
<<<< FFOX ${change.hdTest.fileName}:${change.hdTest.lineNumber} <<<<
${change.hdTest.declaredMode === 'skip' ? 'xit' : 'it'}('${change.hdTest.name}', ${change.hdTest.text}
`);
}
for (const add of added) {
console.log(`========= ADD =====================================
>>>> FFOX ${add.hdTest.fileName}:${add.hdTest.lineNumber} >>>>
it('${add.hdTest.name}', ${add.hdTest.text}
`);
}
console.log(`----
- good: ${good.length}
- moved: ${moved.length}
- changed: ${changed.length}
- added: ${added.length}
`);
function hash1(test) {
return test.text.split('\n').map(line => line.trimStart()).join('\n');
}
function hash2(test) {
return test.fullName;
}
function getTestsJSON(filePath, product) {
const {TestRunner} = require('../utils/testrunner/');
const testRunner = new TestRunner();
testRunner.addTestDSL('it_fails_ffox', 'run', 'fails');
testRunner.addSuiteDSL('describe_fails_ffox', 'run');
const defaultBrowserOptions = { handleSIGINT: false };
require(filePath).addTests({
product,
puppeteer: require('..'),
Errors: require('../Errors'),
DeviceDescriptors: require('../DeviceDescriptors'),
defaultBrowserOptions,
testRunner
});
return testRunner.tests().map(test => {
let fails = test.comment === 'fails';
let suite = test.parentSuite;
while (!fails && suite) {
fails = suite.comment === 'fails';
suite = suite.parent;
}
return {
name: test.name,
fullName: test.fullName,
suiteName: test.suite.name + '=>' + test.name,
fileName: test.location.fileName,
lineNumber: test.location.lineNumber,
declaredMode: test.declaredMode,
text: test._userCallback._callback.toString(),
failsFFOX: fails,
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment