Skip to content

Commit 69982f7

Browse files
authored
Merge pull request #244 from Krinkle/patch-3
Fix crash from property 'browser_version' undefined
2 parents 76e7e96 + d032d59 commit 69982f7

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

lib/configParser.js

+16-10
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
var Log = require('./logger'),
44
logger = new Log(global.logLevel || 'info');
55

6+
var BROWSER_LIST_URL = 'https://www.browserstack.com/list-of-browsers-and-platforms/js_testing';
7+
68
var ConfigParser = {
79
finalBrowsers: [],
810

@@ -54,10 +56,12 @@ var ConfigParser = {
5456
var mobileFiltered = ConfigParser.bsBrowsers.filter(function(currentValue) {
5557
return currentValue.browser.toLowerCase() === browserObject.browser && parseFloat(currentValue.os_version).toPrecision(4) === parseFloat(browserObject.os_version).toPrecision(4);
5658
});
59+
if (!mobileFiltered.length) {
60+
throw new Error('No mobile match found for ' + JSON.stringify(browserObject) + '\nCheck ' + BROWSER_LIST_URL);
61+
}
5762

5863
browserObject = mobileFiltered[Math.floor(Math.random() * mobileFiltered.length)];
59-
}
60-
else {
64+
} else {
6165

6266
var windowsFiltered = ConfigParser.bsBrowsers.filter(function(currentValue) {
6367
return currentValue.os === 'Windows' && currentValue.browser_version.match(/metro/i) == null && currentValue.browser === browserObject.browser && ((browserObject.browser_version && browserObject.browser_version.indexOf('latest') > -1) || parseFloat(currentValue.browser_version).toPrecision(4) === parseFloat(browserObject.browser_version).toPrecision(4));
@@ -66,8 +70,13 @@ var ConfigParser = {
6670
var osxFiltered = ConfigParser.bsBrowsers.filter(function(currentValue) {
6771
return currentValue.os === 'OS X' && currentValue.browser === browserObject.browser && ((browserObject.browser_version && browserObject.browser_version.indexOf('latest')) > -1 || parseFloat(currentValue.browser_version).toPrecision(4) === parseFloat(browserObject.browser_version).toPrecision(4));
6872
});
73+
// Use Windows VMs if no OS specified
74+
var desktopFiltered = windowsFiltered.length > 0 ? windowsFiltered : osxFiltered;
6975

70-
let filteredObject = windowsFiltered.length > 0 ? windowsFiltered[Math.floor(Math.random() * windowsFiltered.length)] : osxFiltered[Math.floor(Math.random() * osxFiltered.length)];
76+
if (!desktopFiltered.length) {
77+
throw new Error('No desktop match found for ' + JSON.stringify(browserObject) + '\nCheck ' + BROWSER_LIST_URL);
78+
}
79+
var filteredObject = desktopFiltered[Math.floor(Math.random() * desktopFiltered.length)];
7180
if (browserObject.browser_version.indexOf('latest') > -1) {
7281
filteredObject.browser_version = browserObject.browser_version;
7382
}
@@ -82,15 +91,14 @@ var ConfigParser = {
8291
var browserObject = {};
8392
var version = null;
8493
var sliceStart = 1;
85-
if (typeof(entry) === 'string') {
94+
if (typeof entry === 'string') {
8695
var browserData = entry.split('_');
8796
var lindex = browserData.length - 1;
8897
if (browserData[0] === 'mobile' || browserData[0] === 'android' || (browserData[0] === 'opera' && browserData[1] === 'browser')) {
8998
browserObject.browser = browserData[0] + ' ' + browserData[1];
9099
browserObject.mobile = true;
91100
sliceStart = 2;
92-
}
93-
else {
101+
} else {
94102
browserObject.browser = browserData[0];
95103
}
96104
if (browserData[lindex] && browserData[lindex].indexOf('+') === -1) {
@@ -100,15 +108,13 @@ var ConfigParser = {
100108
else {
101109
version = browserData.slice(sliceStart, lindex + 1).join('.');
102110
}
103-
}
104-
else {
111+
} else {
105112
version = browserData.slice(sliceStart, lindex + 1).join('.');
106113
}
107114
if (browserObject.mobile) {
108115
browserObject.os_version = version;
109116
browserObject.browser_version = null;
110-
}
111-
else {
117+
} else {
112118
browserObject.browser_version = version;
113119
}
114120
} else {

0 commit comments

Comments
 (0)