33var 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+
68var 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 ( / 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 = {
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