5
5
* Use of this source code is governed by an MIT-style license that can be
6
6
* found in the LICENSE file at https://angular.io/license
7
7
*/
8
-
9
- const path = require ( 'path' ) ;
10
-
11
8
const DEBUG = false ;
12
9
13
10
const configPath = 'TMPL_config' ;
@@ -32,15 +29,44 @@ function setConf(conf, name, value, msg) {
32
29
conf [ name ] = value ;
33
30
}
34
31
32
+ function mergeCapabilities ( conf , capabilities ) {
33
+ if ( conf . capabilities ) {
34
+ if ( conf . capabilities . browserName === capabilities . browserName ) {
35
+ // there are capabilities to merge
36
+ if ( capabilities . browserName === 'chrome' ) {
37
+ conf . capabilities . chromeOptions = conf . capabilities . chromeOptions || { } ;
38
+ conf . capabilities . chromeOptions . binary = capabilities . chromeOptions . binary ;
39
+ conf . capabilities . chromeOptions . args = conf . capabilities . chromeOptions . args || [ ] ;
40
+ conf . capabilities . chromeOptions . args . push ( ...capabilities . chromeOptions . args ) ;
41
+ console . warn (
42
+ `Your protractor configuration specifies capabilities for browser '${ conf . capabilities . browserName } '
43
+ which will be merged with capabilities provided by Bazel resulting in:` ,
44
+ JSON . stringify ( conf . capabilities , null , 2 ) ) ;
45
+ } else {
46
+ // TODO(gmagolan): implement firefox support for protractor
47
+ throw new Error (
48
+ `Unexpected browserName ${ capabilities . browserName } for capabilities merging` ) ;
49
+ }
50
+ } else {
51
+ console . warn (
52
+ `Your protractor configuration specifies capabilities for browser '${ conf . capabilities . browserName } ' which will be overwritten by Bazel` ) ;
53
+ conf . capabilities = capabilities ;
54
+ }
55
+ } else {
56
+ conf . capabilities = capabilities ;
57
+ }
58
+ }
59
+
35
60
let conf = { } ;
36
61
37
62
// Import the user's base protractor configuration if specified
38
63
if ( configPath ) {
39
64
const baseConf = require ( configPath ) ;
40
65
if ( ! baseConf . config ) {
41
- throw new Error ( 'Invalid base protractor configration . Expected config to be exported.' ) ;
66
+ throw new Error ( 'Invalid base protractor configuration . Expected config to be exported.' ) ;
42
67
}
43
68
conf = baseConf . config ;
69
+ if ( DEBUG ) console . info ( `Base protractor configuration: ${ JSON . stringify ( conf , null , 2 ) } ` ) ;
44
70
}
45
71
46
72
// Import the user's on prepare function if specified
@@ -109,8 +135,8 @@ if (process.env['WEB_TEST_METADATA']) {
109
135
}
110
136
setConf ( conf , 'directConnect' , true , 'is set to true for chrome' ) ;
111
137
setConf ( conf , 'chromeDriver' , chromeDriver , 'is determined by the browsers attribute' ) ;
112
- setConf (
113
- conf , 'capabilities' , {
138
+ mergeCapabilities (
139
+ conf , {
114
140
browserName : 'chrome' ,
115
141
chromeOptions : {
116
142
binary : chromeBin ,
@@ -131,7 +157,7 @@ if (process.env['WEB_TEST_METADATA']) {
131
157
// }
132
158
// setConf(conf, 'seleniumAddress', process.env.WEB_TEST_HTTP_SERVER.trim() + "/wd/hub", 'is
133
159
// configured by Bazel for firefox browser')
134
- // setConf (conf, 'capabilities' , {
160
+ // mergeCapabilities (conf, {
135
161
// browserName: "firefox",
136
162
// 'moz:firefoxOptions': {
137
163
// binary: firefoxBin,
0 commit comments