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.
108 lines (107 loc) • 4.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.programChoices = exports.program = exports.initialCwd = void 0;
const commander_1 = require("commander");
const utils_1 = require("./utils");
exports.initialCwd = process.cwd();
exports.program = new commander_1.Command();
exports.program
.option('-s, --suite <char>')
.option('-e, --endpoint-titles <char>')
.option('-v, --viewports <char>')
.option('-f, --full-test [specs]')
.option('-d, --diffs-only [specs]')
.option('-a, --assess-existing-diffs [specs]')
.option('-l, --lab-mode [specs]')
.option('-t, --targetted [specs]')
.option('-ng, --no-gui')
.option('-ns, --no-snap')
.option('-sc, --scaffold')
.option('-sct, --scaffold-ts')
.option('-ss, --server-start')
.option('-c, --containerized'); // This one is used internally, not exposed to the user
exports.program.parse();
const extractProgramChoices = () => {
const opts = exports.program.opts();
if (opts.scaffold || opts.scaffoldTs) {
(0, utils_1.createScaffold)();
process.exit();
}
let testType = '';
let specificationShorthand = '';
switch (true) {
case opts.assessExistingDiffs !== undefined:
testType = 'assess-existing-diffs';
specificationShorthand = opts.assessExistingDiffs;
break;
case opts.labMode !== undefined:
testType = 'lab';
specificationShorthand = opts.labMode;
break;
case opts.diffsOnly !== undefined:
testType = 'diffs-only';
specificationShorthand = opts.diffsOnly;
break;
case opts.fullTest !== undefined:
testType = 'full-test';
specificationShorthand = opts.fullTest;
break;
case opts.targetted !== undefined:
testType = 'targetted';
specificationShorthand = opts.targetted;
break;
}
const targetViewportList = opts.viewports
? opts.viewports.split('+')
: [];
const targetViewports = targetViewportList
.map((vp) => (0, utils_1.parseViewport)(vp))
.filter((vp) => vp);
const targetEndpointTitles = opts.endpointTitles
? opts.endpointTitles.split('+')
: [];
const args = {
suite: opts === null || opts === void 0 ? void 0 : opts.suite,
targetEndpointTitles,
targetViewports,
testType: testType,
gui: opts === null || opts === void 0 ? void 0 : opts.gui,
snap: opts === null || opts === void 0 ? void 0 : opts.snap,
containerized: opts === null || opts === void 0 ? void 0 : opts.containerized,
serverStart: opts === null || opts === void 0 ? void 0 : opts.serverStart,
};
if (typeof specificationShorthand !== 'string') {
return args;
}
return extractSpecificationShorthand(args, specificationShorthand);
};
const extractSpecificationShorthand = (args, specificationShorthand) => {
const shortSpec = specificationShorthand;
const colonPosition = shortSpec.indexOf(':');
const atPosition = shortSpec.indexOf('@') === -1 ? shortSpec.length : shortSpec.indexOf('@');
let suite = '';
let endpointTitles = '';
if (colonPosition > 0) {
suite = shortSpec.substring(0, colonPosition);
endpointTitles = shortSpec.substring(colonPosition + 1, atPosition);
}
else if (colonPosition === -1) {
suite = shortSpec.substring(0, atPosition);
}
else {
endpointTitles = shortSpec.substring(1, atPosition);
}
const endpointTitlesList = endpointTitles ? endpointTitles.split('+') : [];
const viewportsString = shortSpec.substring(atPosition + 1, shortSpec.length);
const viewports = viewportsString
? viewportsString.split('+')
: [];
const viewportsList = viewports
.map((vp) => (0, utils_1.parseViewport)(vp))
.filter((vp) => vp);
const specifiedTargetEndpoint = endpointTitlesList;
const specifiedViewport = viewportsList;
const updatedArgs = Object.assign(Object.assign({}, args), { suite: args.suite || suite, targetEndpointTitles: args.targetEndpointTitles.length ? args.targetEndpointTitles : specifiedTargetEndpoint, targetViewports: args.targetViewports.length ? args.targetViewports : specifiedViewport });
return updatedArgs;
};
exports.programChoices = extractProgramChoices();