UNPKG

2.76 kBJavaScriptView Raw
1// Load in our dependencies
2// DEV: We use `require`/`assert` instead of `peerDependencies` to make floating dependencies easier
3var electronPrebuilt;
4try {
5 electronPrebuilt = require('electron');
6} catch (electronNotFoundErr) {
7 try {
8 electronPrebuilt = require('electron-prebuilt');
9 // https://github.com/electron-userland/electron-prebuilt/tree/v1.3.3#installation
10 console.warn('WARN: `electron-prebuilt` has been deprecated as of `electron-prebuilt@1.3.1`. ' +
11 'Please move to `electron` instead');
12 } catch (electronPrebuiltNotFoundErr) {
13 console.error('Expected `electron` to be installed but it was not. Please install it.');
14 throw electronNotFoundErr;
15 }
16}
17
18// DEV: This is a trimmed down version of https://github.com/karma-runner/karma-chrome-launcher/blob/v0.2.2/index.js
19// which is MIT licensed https://github.com/karma-runner/karma-chrome-launcher/blob/v0.2.2/LICENSE
20var $inject = ['baseBrowserDecorator', 'args', 'config.basePath', 'config.urlRoot'];
21function ElectronBrowser(baseBrowserDecorator, args, karmaBasePath, karmaUrlRoot) {
22 // Apply browser decorations to ourself
23 baseBrowserDecorator(this);
24
25 // Extract arguments
26 var flags = args.flags || [];
27 var userDataDir = args.userDataDir || this._tempDir;
28
29 // Show depreciation warning for `--show`
30 if (flags.indexOf('--show') !== -1) {
31 console.log('karma-electron: `--show` is now deprecated. Please use `browserWindowOptions.show` instead');
32 }
33
34 // Set up app to use a custom user data directory to prevent crossover in tests
35 this._getOptions = function (url) {
36 this._stdinOptions = {};
37 var retArr = [__dirname + '/electron-launcher.js'].concat(flags, [
38 '--user-data-dir', userDataDir,
39 '--url', url,
40 '--stdin-options'
41 ]);
42 if (args.require) { retArr = retArr.concat(['--require', args.require]); }
43 if (args.browserWindowOptions) { this._stdinOptions.browserWindowOptions = args.browserWindowOptions; }
44 if (args.loadURLOptions) { this._stdinOptions.loadURLOptions = args.loadURLOptions; }
45 return retArr;
46 };
47
48 // Wrap `_execCommand` to pass through `stdin-options`
49 var originalExecCommand = this._execCommand;
50 this._execCommand = function (/*cmd, args*/) {
51 var retArr = originalExecCommand.apply(this, arguments);
52 this._process.stdin.end(JSON.stringify(this._stdinOptions));
53 return retArr;
54 };
55}
56ElectronBrowser.prototype = {
57 name: 'Electron',
58 DEFAULT_CMD: {
59 linux: electronPrebuilt,
60 darwin: electronPrebuilt,
61 win32: electronPrebuilt
62 },
63 ENV_CMD: 'ELECTRON_BIN'
64};
65
66// Define depenencies so our function can receive them
67ElectronBrowser.$inject = $inject;
68
69// Export our launcher
70module.exports = {
71 'launcher:Electron': ['type', ElectronBrowser]
72};