Skip to content

Commit

Permalink
fix: address pr comments
Browse files Browse the repository at this point in the history
  • Loading branch information
akirwan committed Feb 13, 2019
1 parent 264b081 commit 68e552e
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 41 deletions.
26 changes: 19 additions & 7 deletions lib/processes.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,21 @@ function isChromeInDocker(browserName) {
});
}

function mergeChromeOptions(baseOpts, configOpts) {
var reg = /^([-\w]+)=?([\.,\/\w]*)/;

var objOpts = baseOpts.concat(configOpts).reduce(function filterOpts(acc, val) {
var match = reg.exec(val);
acc[match[1]] = match[2];
return acc;
}, {});

return Object.entries(objOpts).reduce(function mergeOpts(acc, opt) {
var option = opt[1] !== '' ? opt[0] + '=' + opt[1] : opt[0];
return acc.concat([option]);
}, []);
}

function unrefAll(procs) {
// Make sure these processes don't keep the parent alive
_.each(procs, function unrefProc(proc) {
Expand Down Expand Up @@ -118,14 +133,11 @@ function launchAllProcesses(config) {
}

if (config.has('desiredCapabilities.chromeOptions.args')) {
if (config.has('desiredCapabilities.chromeOptions.merge')
&& config.get('desiredCapabilities.chromeOptions.merge') === false) {
args = config.get('desiredCapabilities.chromeOptions.args');
if (config.has('desiredCapabilities.chromeOptions.mergeArgs')
&& config.get('desiredCapabilities.chromeOptions.mergeArgs') === true) {
args = mergeChromeOptions(args, config.get('desiredCapabilities.chromeOptions.args'));
} else {
args = args.concat(config.get('desiredCapabilities.chromeOptions.args'))
.filter(function filterIt(opt, idx, arr) {
return arr.indexOf(opt) === idx;
});
args = config.get('desiredCapabilities.chromeOptions.args');
}
}

Expand Down
138 changes: 104 additions & 34 deletions test/processes.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,11 @@ describe('Launch all processes PhantomJS', () => {
it('launches all the processes', async () => {
const procs = await launchAllProcesses(config);
const procNames = Object.keys(procs).sort();
assert.deepEqual('Spawns app, phantom, and proxy',
['application', 'phantomjs', 'proxy'], procNames);
assert.deepEqual(
'Spawns app, phantom, and proxy',
['application', 'phantomjs', 'proxy'],
procNames
);
killProcs(procs);
});
});
Expand All @@ -43,7 +46,8 @@ describe('Launch all processes Chrome', () => {
'--disk-cache-dir=/dev/null',
'--disable-cache',
'--disable-desktop-notifications',
'--headless'];
'--headless',
];

let config;
beforeEach(() => {
Expand All @@ -61,8 +65,11 @@ describe('Launch all processes Chrome', () => {
it('launches all the processes', async () => {
const procs = await launchAllProcesses(config);
const procNames = Object.keys(procs).sort();
assert.deepEqual('Spawns app, chrome, and proxy',
['application', 'chromedriver', 'proxy'], procNames);
assert.deepEqual(
'Spawns app, chrome, and proxy',
['application', 'chromedriver', 'proxy'],
procNames
);
killProcs(procs);
});

Expand Down Expand Up @@ -99,39 +106,102 @@ describe('Launch all processes Chrome', () => {
unpatch();
});

it('appends additional options to base chromeOptions as default option', async () => {
const newConfig = new Config({
...config,
desiredCapabilities: { chromeOptions: { args: ['--foobar'] } },
describe('configure desiredCapabilities.chromeOptions', () => {
it('replaces the base chromeOptions as default option', async () => {
const newConfig = new Config({
...config,
desiredCapabilities: { chromeOptions: { args: ['--foobar'] } },
});

const procs = await launchAllProcesses(newConfig);
const { args } = newConfig.desiredCapabilities.chromeOptions;
assert.deepEqual(['--foobar'], args);
killProcs(procs);
});

const procs = await launchAllProcesses(newConfig);
const { args } = newConfig.desiredCapabilities.chromeOptions;
assert.deepEqual([...chromeOptions, '--foobar'], args);
killProcs(procs);
});

it('appends additional options to base chromeOptions with merge: true', async () => {
const newConfig = new Config({
...config,
desiredCapabilities: { chromeOptions: { merge: true, args: ['--foobar'] } },
context('when mergeArgs: false', () => {
it('replaces base chromeOptions with mergeArgs: false', async () => {
const newConfig = new Config({
...config,
desiredCapabilities: {
chromeOptions: { mergeArgs: false, args: ['--foobar'] },
},
});

const procs = await launchAllProcesses(newConfig);
const { args } = newConfig.desiredCapabilities.chromeOptions;
assert.deepEqual(['--foobar'], args);
killProcs(procs);
});
});

const procs = await launchAllProcesses(newConfig);
const { args } = newConfig.desiredCapabilities.chromeOptions;
assert.deepEqual([...chromeOptions, '--foobar'], args);
killProcs(procs);
});

it('replaces the base chromeOptions with merge: false', async () => {
const newConfig = new Config({
...config,
desiredCapabilities: { chromeOptions: { merge: false, args: ['--foobar'] } },
context('when mergeArgs: true', () => {
it('handles args that only have keys', async () => {
const newConfig = new Config({
...config,
desiredCapabilities: {
chromeOptions: {
mergeArgs: true,
args: ['--disable-application-cache', '--foo'],
},
},
});

const procs = await launchAllProcesses(newConfig);
const { args } = newConfig.desiredCapabilities.chromeOptions;
assert.deepEqual([...chromeOptions, '--foo'], args);
killProcs(procs);
});

it('handles args that have options with key=value', async () => {
const newConfig = new Config({
...config,
desiredCapabilities: {
chromeOptions: {
mergeArgs: true,
args: ['--foo=false', '--bar=true', '--window-size=1280,1696'],
},
},
});

const procs = await launchAllProcesses(newConfig);
const { args } = newConfig.desiredCapabilities.chromeOptions;
assert.deepEqual(
[
...chromeOptions,
'--foo=false',
'--bar=true',
'--window-size=1280,1696',
],
args
);
killProcs(procs);
});

it('handles updating base chromeOptions with key=value', async () => {
const newConfig = new Config({
...config,
desiredCapabilities: {
chromeOptions: {
mergeArgs: true,
args: ['--disk-cache-size=2', '--disk-cache-dir=./tmp'],
},
},
});

const procs = await launchAllProcesses(newConfig);
const { args } = newConfig.desiredCapabilities.chromeOptions;
assert.deepEqual(
[
...chromeOptions.slice(0, 2),
'--disk-cache-size=2',
'--disk-cache-dir=./tmp',
...chromeOptions.slice(4),
],
args
);
killProcs(procs);
});
});

const procs = await launchAllProcesses(newConfig);
const { args } = newConfig.desiredCapabilities.chromeOptions;
assert.deepEqual(['--foobar'], args);
killProcs(procs);
});
});

0 comments on commit 68e552e

Please sign in to comment.