@@ -26,6 +26,42 @@ describe('error handling', () => {
26
26
} ) . toThrow ( 'Invalid parameter: "[value.a]". Invalid character found "."' ) ;
27
27
} ) ;
28
28
29
+ test ( 'duplicate parameters' , ( ) => {
30
+ expect ( ( ) => {
31
+ const parsed = cli (
32
+ {
33
+ parameters : [ '[value-a]' , '[value-a]' , '[value-a]' ] ,
34
+ } ,
35
+ ) ;
36
+
37
+ expect < string [ ] > ( parsed . _ ) . toStrictEqual ( [ ] ) ;
38
+ } ) . toThrow ( 'Invalid parameter: "value-a" is used more than once' ) ;
39
+ } ) ;
40
+
41
+ test ( 'duplicate parameters across --' , ( ) => {
42
+ expect ( ( ) => {
43
+ const parsed = cli (
44
+ {
45
+ parameters : [ '[value-a]' , '--' , '[value-a]' ] ,
46
+ } ,
47
+ ) ;
48
+
49
+ expect < string [ ] > ( parsed . _ ) . toStrictEqual ( [ ] ) ;
50
+ } ) . toThrow ( 'Invalid parameter: "value-a" is used more than once' ) ;
51
+ } ) ;
52
+
53
+ test ( 'multiple --' , ( ) => {
54
+ expect ( ( ) => {
55
+ const parsed = cli (
56
+ {
57
+ parameters : [ '[value-a]' , '--' , '[value-b]' , '--' , '[value-c]' ] ,
58
+ } ,
59
+ ) ;
60
+
61
+ expect < string [ ] > ( parsed . _ ) . toStrictEqual ( [ ] ) ;
62
+ } ) . toThrow ( 'Invalid parameter: "--". Must be wrapped in <> (required parameter) or [] (optional parameter)' ) ;
63
+ } ) ;
64
+
29
65
test ( 'optional parameter before required parameter' , ( ) => {
30
66
expect ( ( ) => {
31
67
const parsed = cli (
@@ -105,6 +141,19 @@ describe('error handling', () => {
105
141
expect ( mockConsoleError ) . toHaveBeenCalledWith ( 'Error: Missing required parameter "value-a"\n' ) ;
106
142
expect ( mockProcessExit ) . toHaveBeenCalledWith ( 1 ) ;
107
143
} ) ;
144
+
145
+ test ( 'missing -- parameter' , ( ) => {
146
+ cli (
147
+ {
148
+ parameters : [ '--' , '<value-a>' ] ,
149
+ } ,
150
+ undefined ,
151
+ [ ] ,
152
+ ) ;
153
+
154
+ expect ( mockConsoleError ) . toHaveBeenCalledWith ( 'Error: Missing required parameter "value-a"\n' ) ;
155
+ expect ( mockProcessExit ) . toHaveBeenCalledWith ( 1 ) ;
156
+ } ) ;
108
157
} ) ;
109
158
} ) ;
110
159
@@ -130,6 +179,46 @@ describe('parses arguments', () => {
130
179
expect ( callback ) . toHaveBeenCalled ( ) ;
131
180
} ) ;
132
181
182
+ test ( 'simple parsing across --' , ( ) => {
183
+ const callback = jest . fn ( ) ;
184
+ const parsed = cli (
185
+ {
186
+ parameters : [ '<value-a>' , '[value-b]' , '[value c]' , '--' , '<value-d>' , '[value-e]' , '[value f]' ] ,
187
+ } ,
188
+ ( callbackParsed ) => {
189
+ expect < string > ( callbackParsed . _ . valueA ) . toBe ( 'valueA' ) ;
190
+ expect < string | undefined > ( callbackParsed . _ . valueB ) . toBe ( 'valueB' ) ;
191
+ expect < string | undefined > ( callbackParsed . _ . valueD ) . toBe ( 'valueD' ) ;
192
+ callback ( ) ;
193
+ } ,
194
+ [ 'valueA' , 'valueB' , '--' , 'valueD' ] ,
195
+ ) ;
196
+
197
+ expect < string > ( parsed . _ . valueA ) . toBe ( 'valueA' ) ;
198
+ expect < string | undefined > ( parsed . _ . valueB ) . toBe ( 'valueB' ) ;
199
+ expect < string | undefined > ( parsed . _ . valueD ) . toBe ( 'valueD' ) ;
200
+ expect ( callback ) . toHaveBeenCalled ( ) ;
201
+ } ) ;
202
+
203
+ test ( 'simple parsing with empty --' , ( ) => {
204
+ const callback = jest . fn ( ) ;
205
+ const parsed = cli (
206
+ {
207
+ parameters : [ '<value-a>' , '[value-b]' , '[value c]' , '--' , '[value-d]' ] ,
208
+ } ,
209
+ ( callbackParsed ) => {
210
+ expect < string > ( callbackParsed . _ . valueA ) . toBe ( 'valueA' ) ;
211
+ expect < string | undefined > ( callbackParsed . _ . valueB ) . toBe ( 'valueB' ) ;
212
+ callback ( ) ;
213
+ } ,
214
+ [ 'valueA' , 'valueB' ] ,
215
+ ) ;
216
+
217
+ expect < string > ( parsed . _ . valueA ) . toBe ( 'valueA' ) ;
218
+ expect < string | undefined > ( parsed . _ . valueB ) . toBe ( 'valueB' ) ;
219
+ expect ( callback ) . toHaveBeenCalled ( ) ;
220
+ } ) ;
221
+
133
222
test ( 'spread' , ( ) => {
134
223
const callback = jest . fn ( ) ;
135
224
const parsed = cli (
@@ -147,6 +236,25 @@ describe('parses arguments', () => {
147
236
expect ( callback ) . toHaveBeenCalled ( ) ;
148
237
} ) ;
149
238
239
+ test ( 'spread with --' , ( ) => {
240
+ const callback = jest . fn ( ) ;
241
+ const parsed = cli (
242
+ {
243
+ parameters : [ '<value-a...>' , '--' , '<value-b...>' ] ,
244
+ } ,
245
+ ( callbackParsed ) => {
246
+ expect < string [ ] > ( callbackParsed . _ . valueA ) . toStrictEqual ( [ 'valueA' , 'valueB' ] ) ;
247
+ expect < string [ ] > ( callbackParsed . _ . valueB ) . toStrictEqual ( [ 'valueC' , 'valueD' ] ) ;
248
+ callback ( ) ;
249
+ } ,
250
+ [ 'valueA' , 'valueB' , '--' , 'valueC' , 'valueD' ] ,
251
+ ) ;
252
+
253
+ expect < string [ ] > ( parsed . _ . valueA ) . toStrictEqual ( [ 'valueA' , 'valueB' ] ) ;
254
+ expect < string [ ] > ( parsed . _ . valueB ) . toStrictEqual ( [ 'valueC' , 'valueD' ] ) ;
255
+ expect ( callback ) . toHaveBeenCalled ( ) ;
256
+ } ) ;
257
+
150
258
test ( 'command' , ( ) => {
151
259
const callback = jest . fn ( ) ;
152
260
0 commit comments