UNPKG

floss

Version:

Unit-testing for those hard to reach places

87 lines 6.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.floss = void 0; const path = require("path"); const child_process_1 = require("child_process"); let electron; try { // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires electron = require('electron'); } catch (err) { // silence is golden } /** * API to launch the Floss application. * @module floss * @param {Object|String} options The options map or path. * @param {String} [options.path] Path to the JS file to run, can be a glob. * @param {Boolean} [options.debug] `true` opens in headful mode. * @param {String} [options.electron] Path to custom electron version. If undefined * will use environment variable `ELECTRON_PATH` or electron * installed alongside. * @param {String} [options.require] Additional module to require. * @param {String} [options.reporter=spec] Mocha reporter (non-debug mode only) * @param {String|Object} [options.reporterOptions] Additional options for the reporter * useful for specifying an output file if using the 'xunit' reporter. * Options can be a querystring format, e.g., `"foo=2&bar=something"` * @param {String[]} [options.args] Additional Electron arguments, can be useful * for things like disable autoplay gestures, e.g., * `["--autoplay-policy=no-user-gesture-required"]` * @param {Function} done Called when completed. Passes error if failed. */ function floss(options) { if (typeof options === 'string') { options = { path: options }; } const opts = Object.assign({ path: '', debug: false, quiet: false, args: [], electron: process.env.ELECTRON_PATH || electron }, options); if (!opts.path) { throw new Error('No path specified for Floss.'); } else if (typeof opts.path !== 'string') { throw new Error('Path type is not a string'); } if (!opts.electron) { throw new Error('Unable to find Electron. Install \'electron\' alongside Floss.'); } const app = path.join(__dirname, 'main'); const args = JSON.stringify(opts); // copy the environment and remove things that would prevent Floss from running properly const envCopy = Object.assign({}, process.env); delete envCopy.ELECTRON_RUN_AS_NODE; delete envCopy.ELECTRON_NO_ATTACH_CONSOLE; return new Promise((resolve, reject) => { let execPath = opts.electron; // In the case where floss is running in windows with the cmdline option --electron electron // options.electron will just be "electron" at this point. // Due to limitations with how nodejs spawns windows processes we need to add .cmd to the end of the command // https://github.com/nodejs/node/issues/3675 const isWindows = (/^win/).test(process.platform); if (isWindows && !path.extname(execPath)) { execPath += '.cmd'; } const childProcess = child_process_1.spawn(execPath, [app, args, ...opts.args], { stdio: 'pipe', env: envCopy }); childProcess.stdout.on('data', (data) => { process.stdout.write(data); }); childProcess.on('close', (code) => { if (code !== 0) { reject(new Error('Mocha tests failed.')); } else { resolve(); } }); }); } exports.floss = floss; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTZCO0FBQzdCLGlEQUFzQztBQUV0QyxJQUFJLFFBQWdCLENBQUM7QUFFckIsSUFDQTtJQUNJLDhFQUE4RTtJQUM5RSxRQUFRLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBc0IsQ0FBQztDQUN2RDtBQUNELE9BQU8sR0FBRyxFQUNWO0lBQ0ksb0JBQW9CO0NBQ3ZCO0FBWUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILFNBQVMsS0FBSyxDQUFDLE9BQThCO0lBRXpDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUMvQjtRQUNJLE9BQU8sR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztLQUMvQjtJQUVELE1BQU0sSUFBSSxHQUFpQixNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3JDLElBQUksRUFBRSxFQUFFO1FBQ1IsS0FBSyxFQUFFLEtBQUs7UUFDWixLQUFLLEVBQUUsS0FBSztRQUNaLElBQUksRUFBRSxFQUFFO1FBQ1IsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLFFBQVE7S0FDbEQsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVaLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUNkO1FBQ0ksTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0tBQ25EO1NBQ0ksSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUN0QztRQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztLQUNoRDtJQUVELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUNsQjtRQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztLQUNyRjtJQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbEMsd0ZBQXdGO0lBQ3hGLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUvQyxPQUFPLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztJQUNwQyxPQUFPLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQztJQUUxQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBRW5DLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFrQixDQUFDO1FBQ3ZDLDRGQUE0RjtRQUM1RiwwREFBMEQ7UUFDMUQsNEdBQTRHO1FBQzVHLDZDQUE2QztRQUM3QyxNQUFNLFNBQVMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFbEQsSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUN4QztZQUNJLFFBQVEsSUFBSSxNQUFNLENBQUM7U0FDdEI7UUFDRCxNQUFNLFlBQVksR0FBRyxxQkFBSyxDQUN0QixRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQWdCLENBQUMsRUFBRTtZQUM3QyxLQUFLLEVBQUUsTUFBTTtZQUNiLEdBQUcsRUFBRSxPQUFPO1NBQ2YsQ0FDSixDQUFDO1FBRUYsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFFcEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxZQUFZLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBRTlCLElBQUksSUFBSSxLQUFLLENBQUMsRUFDZDtnQkFDSSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO2FBQzVDO2lCQUVEO2dCQUNJLE9BQU8sRUFBRSxDQUFDO2FBQ2I7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVRLHNCQUFLIn0=