1+ // @see https://www.browserstack.com/automate/capabilities
2+ const customLaunchers = {
3+ modern : {
4+ bs_chrome_latest : {
5+ base : "BrowserStack" ,
6+ os : "Windows" ,
7+ os_version : "10" ,
8+ browser : "Chrome" ,
9+ browser_version : "latest" ,
10+ } ,
11+ bs_firefox_latest : {
12+ base : "BrowserStack" ,
13+ os : "Windows" ,
14+ os_version : "10" ,
15+ browser : "Firefox" ,
16+ browser_version : "latest" ,
17+ } ,
18+ bs_edge_latest : {
19+ base : "BrowserStack" ,
20+ os : "Windows" ,
21+ os_version : "10" ,
22+ browser : "Edge" ,
23+ browser_version : "latest" ,
24+ } ,
25+ bs_opera_latest : {
26+ base : "BrowserStack" ,
27+ os : "Windows" ,
28+ os_version : "10" ,
29+ browser : "Opera" ,
30+ browser_version : "latest" ,
31+ } ,
32+ // Safari 13 is very important to be listed here, as while it does have an RO implementation,
33+ // it does not support different box sizes, only content-box.
34+ bs_safari_13 : {
35+ base : "BrowserStack" ,
36+ os : "OS X" ,
37+ os_version : "Catalina" ,
38+ browser : "Safari" ,
39+ browser_version : "13.0" ,
40+ } ,
41+ bs_ios_14 : {
42+ base : "BrowserStack" ,
43+ device : "iPhone 11" ,
44+ os : "ios" ,
45+ os_version : "14" ,
46+ } ,
47+ bs_samsung : {
48+ base : "BrowserStack" ,
49+ device : "Samsung Galaxy Note 10" ,
50+ os : "Android" ,
51+ os_version : "9.0" ,
52+ } ,
53+ } ,
54+ legacy : {
55+ bs_ios_11 : {
56+ base : "BrowserStack" ,
57+ device : "iPhone X" ,
58+ os : "ios" ,
59+ os_version : "11" ,
60+ } ,
61+ bs_ie_11 : {
62+ base : "BrowserStack" ,
63+ os : "Windows" ,
64+ os_version : "10" ,
65+ browser : "IE" ,
66+ browser_version : "11.0" ,
67+ } ,
68+ } ,
69+ } ;
70+
171module . exports = function ( karmaConfig ) {
2- const { useBrowserStack, runIeTests } = karmaConfig ;
3- const { BS_USERNAME , BS_ACCESS_KEY } = process . env ;
72+ const { BS_USERNAME , BS_ACCESS_KEY , KARMA_BROWSERS } = process . env ;
73+
74+ const browsers =
75+ KARMA_BROWSERS === "modern"
76+ ? Object . keys ( customLaunchers . modern )
77+ : KARMA_BROWSERS === "legacy"
78+ ? Object . keys ( customLaunchers . legacy )
79+ : KARMA_BROWSERS
80+ ? KARMA_BROWSERS . split ( "," ) . map ( ( val ) => val . trim ( ) )
81+ : [ "ChromeHeadless" ] ;
82+
83+ const useBrowserStack = browsers [ 0 ] . startsWith ( "bs_" ) ;
84+
85+ const polyfilledRun = browsers . reduce (
86+ ( carry , browser ) =>
87+ carry || Object . keys ( customLaunchers . legacy ) . includes ( browser ) ,
88+ false
89+ ) ;
490
591 let testFilePattern = "tests/*.tsx" ;
6- // const testFilePattern = "tests/basic.tsx";
7- // const testFilePattern = "tests/testing-lib.tsx";
92+ // let testFilePattern = "tests/basic.tsx";
93+ // let testFilePattern = "tests/testing-lib.tsx";
894
995 let transpileExcludePattern = / n o d e _ m o d u l e s / ;
1096 let presetEndModules = false ;
1197 let transformRuntimeUseESModules = true ;
12- if ( useBrowserStack && runIeTests ) {
98+ if ( polyfilledRun ) {
1399 // IE runs a special set of (polyfilled) tests
14100 testFilePattern = "tests/ie/*.tsx" ;
15101 // Processing everything (including node_modules) for IE11 to make sure 3rd
@@ -32,7 +118,20 @@ module.exports = function (karmaConfig) {
32118 preprocessors : {
33119 [ testFilePattern ] : [ "webpack" , "sourcemap" ] ,
34120 } ,
35-
121+ ...( useBrowserStack && {
122+ browserStack : {
123+ username : BS_USERNAME ,
124+ accessKey : BS_ACCESS_KEY ,
125+ project : "use-resize-observer" ,
126+ } ,
127+ } ) ,
128+ // @see https://karma-runner.github.io/5.2/config/files.html
129+ autoWatch : ! useBrowserStack ,
130+ browsers,
131+ customLaunchers : {
132+ ...customLaunchers . modern ,
133+ ...customLaunchers . legacy ,
134+ } ,
36135 webpack : {
37136 mode : "development" ,
38137 devtool : "inline-source-map" ,
@@ -69,61 +168,5 @@ module.exports = function (karmaConfig) {
69168 } ,
70169 } ;
71170
72- if ( useBrowserStack ) {
73- Object . assign ( config , {
74- browserStack : {
75- username : BS_USERNAME ,
76- accessKey : BS_ACCESS_KEY ,
77- project : "use-resize-observer" ,
78- } ,
79- browsers : [ "bs_chrome" , "bs_firefox" , "bs_safari" ] ,
80- // @see https://www.browserstack.com/automate/capabilities
81- customLaunchers : {
82- bs_chrome : {
83- base : "BrowserStack" ,
84- os : "Windows" ,
85- os_version : "10" ,
86- browser : "Chrome" ,
87- browser_version : "latest" ,
88- } ,
89- bs_firefox : {
90- base : "BrowserStack" ,
91- os : "Windows" ,
92- os_version : "10" ,
93- browser : "Firefox" ,
94- browser_version : "latest" ,
95- } ,
96- bs_safari : {
97- base : "BrowserStack" ,
98- os : "OS X" ,
99- os_version : "Catalina" ,
100- browser : "Safari" ,
101- browser_version : "13.0" ,
102- } ,
103- } ,
104- } ) ;
105-
106- if ( runIeTests ) {
107- Object . assign ( config , {
108- browsers : [ "bs_ie" ] ,
109- customLaunchers : {
110- bs_ie : {
111- base : "BrowserStack" ,
112- os : "Windows" ,
113- os_version : "10" ,
114- browser : "IE" ,
115- browser_version : "11.0" ,
116- } ,
117- } ,
118- } ) ;
119- }
120- } else {
121- Object . assign ( config , {
122- browsers : ( process . env . KARMA_BROWSERS || "ChromeHeadless" ) . split ( "," ) ,
123- // @see https://karma-runner.github.io/5.2/config/files.html
124- autoWatch : true ,
125- } ) ;
126- }
127-
128171 karmaConfig . set ( config ) ;
129172} ;
0 commit comments