visreg-test
Version:
A visual regression testing solution that offers an easy setup with simple yet powerful customisation options, wrapped up in a convenient CLI runner to make assessing and accepting/rejecting diffs a breeze.
90 lines (89 loc) • 3.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.summarizeSuiteQueue = exports.summarizeResultsAndQuit = exports.summarizeResults = exports.summarizeTest = exports.resetSummaryState = void 0;
const cli_1 = require("./cli");
const utils_1 = require("./utils");
let approvedFiles = [];
let rejectedFiles = [];
let failed;
let duration;
const resetSummaryState = () => {
approvedFiles = [];
rejectedFiles = [];
failed = false;
duration = 0;
};
exports.resetSummaryState = resetSummaryState;
const summarizeTest = () => {
failed &&
console.log(`\x1b[2mStatus: \x1b[0m\x1b[33mpartial\x1b[0m`);
console.log(`\x1b[2mType: \x1b[0m\x1b[0m${cli_1.programChoices.testType}\x1b[0m`);
console.log(`\x1b[2mSuite: \x1b[0m\x1b[0m${cli_1.programChoices.suite}\x1b[0m`);
cli_1.programChoices.targetEndpointTitles.length &&
console.log(`\x1b[2mEndpoint: \x1b[0m\x1b[0m${cli_1.programChoices.targetEndpointTitles.join(', ')}\x1b[0m`);
cli_1.programChoices.targetViewports.length &&
console.log(`\x1b[2mViewport: \x1b[0m\x1b[0m${cli_1.programChoices.targetViewports.join(', ')}\x1b[0m`);
duration &&
console.log(`\x1b[2mDuration: \x1b[0m\x1b[0m${duration}s\x1b[0m`);
};
exports.summarizeTest = summarizeTest;
const summarizeAssessment = () => {
let files = (0, utils_1.getDiffingFilesFromTestResult)();
if (!files) {
(0, utils_1.printColorText)('Visual regression passed! (No diffs found)', '32');
return;
}
(0, utils_1.printColorText)(`Total diffs assessed: ${approvedFiles.length + rejectedFiles.length}`, '2');
if (approvedFiles.length > 0) {
console.log(`\x1b[2mApproved: \x1b[0m\x1b[32m${approvedFiles.length}\x1b[0m`);
}
if (rejectedFiles.length > 0) {
console.log(`\x1b[2mRejected: \x1b[0m\x1b[31m${rejectedFiles.length}\x1b[0m`);
}
};
/**
* Summarize results without calling process.exit(). Used in queue mode
* so the process can continue to the next suite.
*/
const summarizeResults = (approvedFilesArg, rejectedFilesArg, failedArg) => {
approvedFiles = approvedFilesArg;
rejectedFiles = rejectedFilesArg;
failed = failedArg;
(0, utils_1.printColorText)('\n\nSummary', '4');
(0, exports.summarizeTest)();
summarizeAssessment();
(0, utils_1.cleanUp)();
};
exports.summarizeResults = summarizeResults;
const summarizeResultsAndQuit = (approvedFilesArg, rejectedFilesArg, failedArg) => {
(0, exports.summarizeResults)(approvedFilesArg, rejectedFilesArg, failedArg);
process.exit();
};
exports.summarizeResultsAndQuit = summarizeResultsAndQuit;
/**
* Print a combined summary for a multi-suite queue run.
*/
const summarizeSuiteQueue = (suiteResults) => {
(0, utils_1.printColorText)('\n\nQueue Summary', '4');
(0, utils_1.printColorText)('─'.repeat(60), '2');
let totalDiffs = 0;
let totalFailed = 0;
for (const result of suiteResults) {
const status = result.failed ? '\x1b[33mpartial\x1b[0m' : '\x1b[32mpassed\x1b[0m';
const diffCount = result.diffs.length;
totalDiffs += diffCount;
if (result.failed)
totalFailed++;
console.log(`\x1b[2mSuite: \x1b[0m${result.suite} \x1b[2m| Status: \x1b[0m${status} \x1b[2m| Diffs: \x1b[0m${diffCount}`);
}
(0, utils_1.printColorText)('─'.repeat(60), '2');
console.log(`\x1b[2mSuites run: \x1b[0m${suiteResults.length}`);
console.log(`\x1b[2mTotal diffs: \x1b[0m${totalDiffs}`);
if (totalFailed > 0) {
console.log(`\x1b[2mSuites with errors: \x1b[0m\x1b[33m${totalFailed}\x1b[0m`);
}
if (totalDiffs === 0) {
(0, utils_1.printColorText)('\nVisual regression passed across all suites! (No diffs found)', '32');
}
};
exports.summarizeSuiteQueue = summarizeSuiteQueue;