6
6
* found in the LICENSE file at https://angular.io/license
7
7
*
8
8
*/
9
+ // tslint:disable:no-global-tslint-disable no-big-function
9
10
import { logging } from '@angular-devkit/core' ;
10
11
import { Arguments , Option , OptionType } from './interface' ;
11
12
import { ParseArgumentException , parseArguments } from './parser' ;
@@ -64,6 +65,10 @@ describe('parseArguments', () => {
64
65
'--str=false val1 val2' : { str : 'false' , p1 : 'val1' , p2 : 'val2' } ,
65
66
'--str=false val1 val2 --num1' : { str : 'false' , p1 : 'val1' , p2 : 'val2' , '--' : [ '--num1' ] } ,
66
67
'--str=false val1 --num1 val2' : { str : 'false' , p1 : 'val1' , '--' : [ '--num1' , 'val2' ] } ,
68
+ '--bool --bool=false' : { bool : false } ,
69
+ '--bool --bool=false --bool' : { bool : true } ,
70
+ '--num=1 --num=2 --num=3' : { num : 3 } ,
71
+ '--str=1 --str=2 --str=3' : { str : '3' } ,
67
72
'val1 --num=1 val2' : { num : 1 , p1 : 'val1' , p2 : 'val2' } ,
68
73
'--p1=val1 --num=1 val2' : { num : 1 , p1 : 'val1' , p2 : 'val2' } ,
69
74
'--p1=val1 --num=1 --p2=val2 val3' : { num : 1 , p1 : 'val1' , p2 : 'val2' , '--' : [ 'val3' ] } ,
@@ -74,6 +79,7 @@ describe('parseArguments', () => {
74
79
] ,
75
80
'--bool val1 --etc --num=1 val2 --v' : { bool : true , num : 1 , p1 : 'val1' , p2 : 'val2' ,
76
81
'--' : [ '--etc' , '--v' ] } ,
82
+ '--arr=a d' : { arr : [ 'a' ] , p1 : 'd' } ,
77
83
'--arr=a --arr=b --arr c d' : { arr : [ 'a' , 'b' , 'c' ] , p1 : 'd' } ,
78
84
'--arr=1 --arr --arr c d' : { arr : [ '1' , '' , 'c' ] , p1 : 'd' } ,
79
85
'--arr=1 --arr --arr c d e' : { arr : [ '1' , '' , 'c' ] , p1 : 'd' , p2 : 'e' } ,
@@ -197,4 +203,35 @@ describe('parseArguments', () => {
197
203
expect ( messages [ 1 ] ) . toMatch ( / \b A B C D \b / ) ;
198
204
messages . shift ( ) ;
199
205
} ) ;
206
+
207
+ it ( 'handles a flag being added multiple times' , ( ) => {
208
+ const options = [
209
+ { name : 'bool' , aliases : [ ] , type : OptionType . Boolean , description : '' } ,
210
+ ] ;
211
+
212
+ const logger = new logging . Logger ( '' ) ;
213
+ const messages : string [ ] = [ ] ;
214
+
215
+ logger . subscribe ( entry => messages . push ( entry . message ) ) ;
216
+
217
+ let result = parseArguments ( [ '--bool' ] , options , logger ) ;
218
+ expect ( result ) . toEqual ( { bool : true } ) ;
219
+ expect ( messages ) . toEqual ( [ ] ) ;
220
+
221
+ result = parseArguments ( [ '--bool' , '--bool' ] , options , logger ) ;
222
+ expect ( result ) . toEqual ( { bool : true } ) ;
223
+ expect ( messages ) . toEqual ( [ ] ) ;
224
+
225
+ result = parseArguments ( [ '--bool' , '--bool=false' ] , options , logger ) ;
226
+ expect ( result ) . toEqual ( { bool : false } ) ;
227
+ expect ( messages . length ) . toEqual ( 1 ) ;
228
+ expect ( messages [ 0 ] ) . toMatch ( / \b b o o l \b .* \b t r u e \b .* \b f a l s e \b / ) ;
229
+ messages . shift ( ) ;
230
+
231
+ result = parseArguments ( [ '--bool' , '--bool=false' , '--bool=false' ] , options , logger ) ;
232
+ expect ( result ) . toEqual ( { bool : false } ) ;
233
+ expect ( messages . length ) . toEqual ( 1 ) ;
234
+ expect ( messages [ 0 ] ) . toMatch ( / \b b o o l \b .* \b t r u e \b .* \b f a l s e \b / ) ;
235
+ messages . shift ( ) ;
236
+ } ) ;
200
237
} ) ;
0 commit comments