Skip to content

Commit 4a8c64a

Browse files
committed
Added command line interface using yargs.
1 parent 88af042 commit 4a8c64a

File tree

4 files changed

+78
-25
lines changed

4 files changed

+78
-25
lines changed

bin/init.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
#! /usr/bin/env node
22

33
var fs = require('fs');
4-
var preset = process.argv[3] || 'default';
4+
var preset = require('./runner').preset;
5+
var path = require('./runner').path;
56
var browsers = require('../presets/' + preset + '.json');
67

78
var config = {
89
username: 'BROWSERSTACK_USERNAME',
910
key: 'BROWSERSTACK_KEY',
10-
test_path: 'path/to/test/runner',
11+
test_path: path || 'path/to/test/runner',
1112
browsers: browsers
1213
};
1314

bin/runner.js

Lines changed: 57 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,53 @@
11
#! /usr/bin/env node
22

3-
var todo = process.argv[2],
4-
path = require('path'),
5-
config;
3+
var yargs = require('yargs')
4+
.command('init [preset] [path]', 'initialise browserstack.json with preset and test runner path', function(yargs) {
5+
return yargs.option('preset', {
6+
type: 'string',
7+
default: 'default',
8+
description: 'name of preset json file(without extension)(present in node_modules/browserstack-runner/presets to be used while initiating'
9+
})
10+
.option('path', {
11+
type: 'string',
12+
default: '/path/to/test/runner',
13+
description: 'path to test runner to be inserted in browserstack.json'
14+
})
15+
})
16+
.option('browsers', {
17+
alias: 'b',
18+
type: 'array',
19+
description: 'list of space separatedbrowsers keys as described in json file'
20+
})
21+
.option('path', {
22+
type: 'string',
23+
description: 'path to test file'
24+
})
25+
.option('version', {
26+
alias: 'V',
27+
description: 'browserstack-runner version'
28+
})
29+
.option('pid', {
30+
type: 'string',
31+
description: 'path to pid file'
32+
})
33+
.option('verbose', {
34+
alias: 'v',
35+
description: 'verbose logging'
36+
}).argv;
637

7-
if (process.argv.indexOf('--verbose') !== -1) {
38+
if (yargs['verbose']) {
839
global.logLevel = process.env.LOG_LEVEL || 'debug';
940
} else {
1041
global.logLevel = 'info';
1142
}
43+
var path = require('path'),
44+
config;
1245

13-
if (todo === 'init') {
46+
if(yargs['_'].indexOf('init') !== -1) {
47+
module.exports.preset = yargs['preset'];
48+
module.exports.path = yargs['path'];
1449
require('./init.js');
1550
return;
16-
} else if (todo === '--version') {
17-
require('./version.js');
18-
return;
1951
}
2052

2153
var config_path = process.env.BROWSERSTACK_JSON || 'browserstack.json';
@@ -37,17 +69,28 @@ try {
3769
}
3870

3971
// extract a path to file to store tunnel pid
40-
var pid = process.argv.find(function (param) { return param.indexOf('--pid') !== -1; });
41-
42-
if (pid) {
43-
var extracted_path = /--pid=([\w\/\.-]+)/g.exec(pid);
44-
if (extracted_path) {
45-
config.tunnel_pid_file = extracted_path[1];
72+
if(yargs['pid']) {
73+
if(yargs['pid'].length > 0) {
74+
config.tunnel_pid_file = yargs['pid'];
4675
} else {
4776
console.error('Error while parsing flag --pid. Usage: --pid=/path/to/file');
4877
}
4978
}
5079

80+
// filter browsers according to from command line arguments
81+
if(yargs['browsers']) {
82+
if(yargs['browsers'].length > 0) {
83+
config.browsers = config.browsers.filter( function(browser) {
84+
return yargs['browsers'].indexOf(browser['cli_key']) !== -1;
85+
});
86+
} else {
87+
console.error('No browser keys specified. Usage --browsers <key1> <key2> ...');
88+
}
89+
}
90+
91+
// test file path from cli arguments
92+
config.test_path = yargs['path'] || config.test_path;
93+
5194
var runner = require('./cli.js');
5295
runner.run(config, function(err) {
5396
if(err) {

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"mime": "1.3.4",
1616
"resolve": "1.1.7",
1717
"send": "0.13.0",
18-
"tunnel": "0.0.3"
18+
"tunnel": "0.0.3",
19+
"yargs": "^12.0.1"
1920
},
2021
"devDependencies": {
2122
"jshint": "2.5.6",

presets/default.json

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,48 +3,56 @@
33
"browser": "firefox",
44
"browser_version": "latest",
55
"os": "OS X",
6-
"os_version": "Lion"
6+
"os_version": "Lion",
7+
"cli_key": 1
78
},
89
{
910
"browser": "safari",
1011
"browser_version": "latest",
1112
"os": "OS X",
12-
"os_version": "Mountain Lion"
13+
"os_version": "Mountain Lion",
14+
"cli_key": 2
1315
},
1416
{
1517
"browser": "chrome",
1618
"browser_version": "latest",
1719
"os": "OS X",
18-
"os_version": "Mountain Lion"
20+
"os_version": "Mountain Lion",
21+
"cli_key": 3
1922
},
2023
{
2124
"browser": "firefox",
2225
"browser_version": "latest",
2326
"os": "Windows",
24-
"os_version": "7"
27+
"os_version": "7",
28+
"cli_key": 4
2529
},
2630
{
2731
"browser": "chrome",
2832
"browser_version": "latest",
2933
"os": "Windows",
30-
"os_version": "7"
34+
"os_version": "7",
35+
"cli_key": 5
3136
},
3237
{
3338
"browser": "ie",
3439
"browser_version": "9.0",
3540
"os": "Windows",
36-
"os_version": "7"
41+
"os_version": "7",
42+
"cli_key": 6
3743
},
3844
{
3945
"browser": "ie",
4046
"browser_version": "10.0",
4147
"os": "Windows",
42-
"os_version": "8"
48+
"os_version": "8",
49+
"cli_key": 7
4350
},
4451
{
4552
"browser": "ie",
4653
"browser_version": "11.0",
4754
"os": "Windows",
48-
"os_version": "7"
55+
"os_version": "7",
56+
"cli_key": 8
4957
}
5058
]

0 commit comments

Comments
 (0)