UNPKG

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.

118 lines (117 loc) 5.02 kB
"use strict"; 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('-S, --suites <char>', '(Beta) Comma-separated list of suites to run sequentially') .option('-A, --all-suites', '(Beta) Run all discovered suites sequentially') .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('-r, --run-container', 'Run tests in a Docker container') .option('-b, --build-container', 'Force-(re)build the Docker container') .addOption(new commander_1.Option('-c, --containerized').hideHelp()); 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('+') : []; // Parse multi-suite options const suites = opts.suites ? opts.suites.split(',').map(s => s.trim()).filter(s => s.length > 0) : undefined; const args = { suite: opts === null || opts === void 0 ? void 0 : opts.suite, suites, allSuites: opts === null || opts === void 0 ? void 0 : opts.allSuites, 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();