forked from karma-runner/karma-phantomjs-launcher
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
74 lines (57 loc) · 2.24 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
var fs = require('fs');
var path = require('path');
function serializeOption(value) {
if (typeof value === 'function') {
return value.toString();
}
return JSON.stringify(value);
}
var phantomJSExePath = function () {
// If the path we're given by phantomjs is to a .cmd, it is pointing to a global copy.
// Using the cmd as the process to execute causes problems cleaning up the processes
// so we walk from the cmd to the phantomjs.exe and use that instead.
var phantomSource = require('phantomjs').path;
if (path.extname(phantomSource).toLowerCase() === '.cmd') {
return path.join(path.dirname( phantomSource ), '//node_modules//phantomjs//lib//phantom//phantomjs.exe');
}
return phantomSource;
};
var PhantomJSBrowser = function(baseBrowserDecorator, config, args) {
baseBrowserDecorator(this);
var options = args && args.options || config && config.options || {};
var flags = args && args.flags || config && config.flags || [];
this._start = function(url) {
// create the js file that will open karma
var captureFile = this._tempDir + '/capture.js';
var optionsCode = Object.keys(options).map(function (key) {
if (key !== 'settings') { // settings cannot be overriden, it should be extended!
return 'page.' + key + ' = ' + serializeOption(options[key]) + ';';
}
});
if (options.settings) {
optionsCode = optionsCode.concat(Object.keys(options.settings).map(function (key) {
return 'page.settings.' + key + ' = ' + serializeOption(options.settings[key]) + ';';
}));
}
var captureCode = 'var page = require("webpage").create();\n' +
optionsCode.join('\n') + '\npage.open("' + url + '");\n';
fs.writeFileSync(captureFile, captureCode);
flags = flags.concat(captureFile);
// and start phantomjs
this._execCommand(this._getCommand(), flags);
};
};
PhantomJSBrowser.prototype = {
name: 'PhantomJS',
DEFAULT_CMD: {
linux: require('phantomjs').path,
darwin: require('phantomjs').path,
win32: phantomJSExePath()
},
ENV_CMD: 'PHANTOMJS_BIN'
};
PhantomJSBrowser.$inject = ['baseBrowserDecorator', 'config.phantomjsLauncher', 'args'];
// PUBLISH DI MODULE
module.exports = {
'launcher:PhantomJS': ['type', PhantomJSBrowser]
};