Skip to content

Commit 63eeb51

Browse files
committed
config parser
1 parent 2870ba4 commit 63eeb51

File tree

2 files changed

+94
-16
lines changed

2 files changed

+94
-16
lines changed

bin/runner.js

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ var BrowserStack = require('browserstack'),
66
Server = require('../lib/server').Server;
77
config = require('../lib/config');
88
Tunnel = require('../lib/local').Tunnel;
9-
9+
ConfigParser = require('../lib/configParser').ConfigParser;
1010
var serverPort = 8888;
1111
var tunnel;
1212

@@ -168,22 +168,24 @@ var launchBrowsers = function(config, browser) {
168168
}
169169

170170
if (config.browsers && config.browsers.length > 0) {
171-
tunnel = new Tunnel(config.key, serverPort, config.tunnelIdentifier, function () {
172-
console.log("Launching BrowserStack workers");
173-
config.browsers.forEach(function(browser) {
174-
if (browser.browser_version === "latest") {
175-
console.log("[%s] Finding version.", utils.browserString(browser));
176-
177-
client.getLatest(browser, function(err, version) {
178-
console.log("[%s] Version is %s.",
179-
utils.browserString(browser), version);
180-
browser.browser_version = version;
181-
// So that all latest logs come in together
171+
ConfigParser.parse(client, config.browsers, function(browsers){
172+
tunnel = new Tunnel(config.key, serverPort, config.tunnelIdentifier, function () {
173+
console.log("Launching BrowserStack workers");
174+
browsers.forEach(function(browser) {
175+
if (browser.browser_version === "latest") {
176+
console.log("[%s] Finding version.", utils.browserString(browser));
177+
178+
client.getLatest(browser, function(err, version) {
179+
console.log("[%s] Version is %s.",
180+
utils.browserString(browser), version);
181+
browser.browser_version = version;
182+
// So that all latest logs come in together
183+
launchBrowsers(config, browser);
184+
});
185+
} else {
182186
launchBrowsers(config, browser);
183-
});
184-
} else {
185-
launchBrowsers(config, browser);
186-
}
187+
}
188+
});
187189
});
188190
});
189191
}

lib/configParser.js

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
//beta browsers not handled
2+
//+ not handled
3+
var ConfigParser = {
4+
finalBrowsers: [],
5+
6+
bsBrowsers: null,
7+
8+
parse: function(client, browser_config, callback) {
9+
client.getBrowsers(function(error, browsers) {
10+
ConfigParser.bsBrowsers = browsers;
11+
for (var key in browser_config) {
12+
var entry = browser_config[key];
13+
ConfigParser.finalBrowsers.push(ConfigParser.getBrowserObject(entry));
14+
}
15+
callback(ConfigParser.finalBrowsers);
16+
});
17+
return
18+
},
19+
20+
setBrowserVersion: function(browsers, browserObject, verStr) {
21+
var filteredBrowsers = browsers.map(function(currentValue, index, array) {
22+
if (currentValue.browser == browserObject.browser) {
23+
return currentValue.browser_version;
24+
}
25+
}).filter(function(currentValue, index, array) {
26+
return currentValue && array.indexOf(currentValue) === index;
27+
}).sort(function(a, b) {
28+
return parseFloat(a) - parseFloat(b);
29+
});
30+
if (verStr == 'current') {
31+
return filteredBrowsers[filteredBrowsers.length - 1];
32+
}
33+
else if (verStr == 'previous') {
34+
return filteredBrowsers[filteredBrowsers.length - 2];
35+
}
36+
},
37+
38+
populateOsAndOsVersion: function(browsers, browserObject) {
39+
if (!(browserObject.os && browserObject.os_version)) {
40+
var windowsFiltered = browsers.filter(function(currentValue, index, array) {
41+
return currentValue.os == 'Windows' && currentValue.browser == browserObject.browser && parseFloat(currentValue.browser_version).toPrecision(4) == parseFloat(browserObject.browser_version).toPrecision(4);
42+
});
43+
var osxFiltered = browsers.filter(function(currentValue, index, array) {
44+
return currentValue.os == 'OS X' && currentValue.browser == browserObject.browser && parseFloat(currentValue.browser_version).toPrecision(4) == parseFloat(browserObject.browser_version).toPrecision(4);
45+
});
46+
browserObject = windowsFiltered.length > 0 ? windowsFiltered[Math.floor(Math.random() * windowsFiltered.length)] : osxFiltered[Math.floor(Math.random() * osxFiltered.length)];
47+
}
48+
return browserObject;
49+
},
50+
51+
getBrowserObject: function(entry) {
52+
var browserObject = {};
53+
if (typeof(entry) == 'string') {
54+
var browserData = entry.split("_");
55+
var lindex = browserData.length - 1;
56+
browserObject.browser = browserData[0];
57+
if (browserData[lindex] && browserData[lindex].indexOf("+") == -1) {
58+
if (["current", "previous"].indexOf(browserData[1]) != -1) {
59+
browserObject.browser_version = ConfigParser.setBrowserVersion(ConfigParser.bsBrowsers, browserObject, browserData[1]);
60+
}
61+
else {
62+
browserObject.browser_version = browserData.slice(1, lindex + 1).join(".");
63+
}
64+
}
65+
else {
66+
browserObject.browser_version = browserData.slice(1, lindex + 1).join(".");
67+
}
68+
} else {
69+
browserObject = entry;
70+
}
71+
browserObject = ConfigParser.populateOsAndOsVersion(ConfigParser.bsBrowsers, browserObject);
72+
return browserObject;
73+
}
74+
};
75+
76+
exports.ConfigParser = ConfigParser;

0 commit comments

Comments
 (0)