3
3
var Log = require ( './logger' ) ,
4
4
logger = new Log ( global . logLevel || 'info' ) ;
5
5
6
+ var BROWSER_LIST_URL = 'https://www.browserstack.com/list-of-browsers-and-platforms/js_testing' ;
7
+
6
8
var ConfigParser = {
7
9
finalBrowsers : [ ] ,
8
10
@@ -54,10 +56,12 @@ var ConfigParser = {
54
56
var mobileFiltered = ConfigParser . bsBrowsers . filter ( function ( currentValue ) {
55
57
return currentValue . browser . toLowerCase ( ) === browserObject . browser && parseFloat ( currentValue . os_version ) . toPrecision ( 4 ) === parseFloat ( browserObject . os_version ) . toPrecision ( 4 ) ;
56
58
} ) ;
59
+ if ( ! mobileFiltered . length ) {
60
+ throw new Error ( 'No mobile match found for ' + JSON . stringify ( browserObject ) + '\nCheck ' + BROWSER_LIST_URL ) ;
61
+ }
57
62
58
63
browserObject = mobileFiltered [ Math . floor ( Math . random ( ) * mobileFiltered . length ) ] ;
59
- }
60
- else {
64
+ } else {
61
65
62
66
var windowsFiltered = ConfigParser . bsBrowsers . filter ( function ( currentValue ) {
63
67
return currentValue . os === 'Windows' && currentValue . browser_version . match ( / m e t r o / 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 = {
66
70
var osxFiltered = ConfigParser . bsBrowsers . filter ( function ( currentValue ) {
67
71
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 ) ) ;
68
72
} ) ;
73
+ // Use Windows VMs if no OS specified
74
+ var desktopFiltered = windowsFiltered . length > 0 ? windowsFiltered : osxFiltered ;
69
75
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 ) ] ;
71
80
if ( browserObject . browser_version . indexOf ( 'latest' ) > - 1 ) {
72
81
filteredObject . browser_version = browserObject . browser_version ;
73
82
}
@@ -82,15 +91,14 @@ var ConfigParser = {
82
91
var browserObject = { } ;
83
92
var version = null ;
84
93
var sliceStart = 1 ;
85
- if ( typeof ( entry ) === 'string' ) {
94
+ if ( typeof entry === 'string' ) {
86
95
var browserData = entry . split ( '_' ) ;
87
96
var lindex = browserData . length - 1 ;
88
97
if ( browserData [ 0 ] === 'mobile' || browserData [ 0 ] === 'android' || ( browserData [ 0 ] === 'opera' && browserData [ 1 ] === 'browser' ) ) {
89
98
browserObject . browser = browserData [ 0 ] + ' ' + browserData [ 1 ] ;
90
99
browserObject . mobile = true ;
91
100
sliceStart = 2 ;
92
- }
93
- else {
101
+ } else {
94
102
browserObject . browser = browserData [ 0 ] ;
95
103
}
96
104
if ( browserData [ lindex ] && browserData [ lindex ] . indexOf ( '+' ) === - 1 ) {
@@ -100,15 +108,13 @@ var ConfigParser = {
100
108
else {
101
109
version = browserData . slice ( sliceStart , lindex + 1 ) . join ( '.' ) ;
102
110
}
103
- }
104
- else {
111
+ } else {
105
112
version = browserData . slice ( sliceStart , lindex + 1 ) . join ( '.' ) ;
106
113
}
107
114
if ( browserObject . mobile ) {
108
115
browserObject . os_version = version ;
109
116
browserObject . browser_version = null ;
110
- }
111
- else {
117
+ } else {
112
118
browserObject . browser_version = version ;
113
119
}
114
120
} else {
0 commit comments