UNPKG

karma-electron

Version:

Karma launcher and preprocessor for Electron

85 lines (77 loc) 3.37 kB
// Load in our dependencies // DEV: We use `require`/`assert` instead of `peerDependencies` to make floating dependencies easier var electronPrebuilt; var fs = require('fs'); var path = require('path'); try { electronPrebuilt = require('electron'); } catch (electronNotFoundErr) { try { electronPrebuilt = require('electron-prebuilt'); // https://github.com/electron-userland/electron-prebuilt/tree/v1.3.3#installation console.warn('WARN: `electron-prebuilt` has been deprecated as of `electron-prebuilt@1.3.1`. ' + 'Please move to `electron` instead'); } catch (electronPrebuiltNotFoundErr) { console.error('Expected `electron` to be installed but it was not. Please install it.'); throw electronNotFoundErr; } } // DEV: This is a trimmed down version of https://github.com/karma-runner/karma-chrome-launcher/blob/v0.2.2/index.js // which is MIT licensed https://github.com/karma-runner/karma-chrome-launcher/blob/v0.2.2/LICENSE var $inject = ['baseBrowserDecorator', 'args', 'config.basePath', 'config.urlRoot']; function ElectronBrowser(baseBrowserDecorator, args, karmaBasePath, karmaUrlRoot) { // Apply browser decorations to ourself baseBrowserDecorator(this); // Extract arguments var flags = args.flags || []; var userDataDir = args.userDataDir || this._tempDir; // Prepare to relocate extended options into temporary file // DEV: Electron on Windows doesn't support `stdin` reading // https://github.com/electron/electron/issues/4218 // DEV: We write options out now as `_getOptions` is re-run on every start (e.g. crash occurs) var extendedOptions; if (args.browserWindowOptions) { extendedOptions = extendedOptions || {}; extendedOptions.browserWindowOptions = args.browserWindowOptions; } if (args.loadURLOptions) { extendedOptions = extendedOptions || {}; extendedOptions.loadURLOptions = args.loadURLOptions; } // Show depreciation warning for `--show` if (flags.indexOf('--show') !== -1) { console.log('karma-electron: `--show` is now deprecated. Please use `browserWindowOptions.show` instead'); } // Set up app to use a custom user data directory to prevent crossover in tests this._getOptions = function (url) { var retArr = [__dirname + '/electron-launcher.js'].concat(flags, [ '--user-data-dir', userDataDir, '--encoded-url', encodeURIComponent(url) ]); if (args.require) { retArr = retArr.concat(['--require', args.require]); } if (extendedOptions) { // Use temporary directory provided by karma // https://github.com/karma-runner/karma/blob/v4.1.0/lib/launchers/process.js#L15 // DEV: File will automatically be removed by Karma which is nice var extendedOptionsFilepath = path.join(this._tempDir, 'karma-electron-options.json'); fs.writeFileSync(extendedOptionsFilepath, JSON.stringify(extendedOptions)); retArr = retArr.concat(['--extended-options', extendedOptionsFilepath]); } return retArr; }; } ElectronBrowser.prototype = { name: 'Electron', DEFAULT_CMD: { linux: electronPrebuilt, darwin: electronPrebuilt, win32: electronPrebuilt }, ENV_CMD: 'ELECTRON_BIN' }; // Define depenencies so our function can receive them ElectronBrowser.$inject = $inject; // Export our launcher module.exports = { 'launcher:Electron': ['type', ElectronBrowser] };