@@ -261,6 +261,113 @@ describe("options", () => {
261261
262262 } ) ;
263263 } ) ;
264+
265+ describe ( "setupOptions" , ( ) => {
266+ const testCases = [
267+ {
268+ name : "no options are provided" ,
269+ args : [ ] ,
270+ data : [
271+ { useLegacyWorkflow : undefined , expectedHmr : false , expectedBundle : false } ,
272+ { useLegacyWorkflow : false , expectedHmr : true , expectedBundle : true } ,
273+ { useLegacyWorkflow : true , expectedHmr : false , expectedBundle : false }
274+ ]
275+ } ,
276+ {
277+ name : " --hmr is provided" ,
278+ args : [ "--hmr" ] ,
279+ data : [
280+ { useLegacyWorkflow : undefined , expectedHmr : true , expectedBundle : true } ,
281+ { useLegacyWorkflow : false , expectedHmr : true , expectedBundle : true } ,
282+ { useLegacyWorkflow : true , expectedHmr : true , expectedBundle : true }
283+ ]
284+ } ,
285+ {
286+ name : " --no-hmr is provided" ,
287+ args : [ "--no-hmr" ] ,
288+ data : [
289+ { useLegacyWorkflow : undefined , expectedHmr : false , expectedBundle : false } ,
290+ { useLegacyWorkflow : false , expectedHmr : false , expectedBundle : true } ,
291+ { useLegacyWorkflow : true , expectedHmr : false , expectedBundle : false }
292+ ]
293+ } ,
294+ {
295+ name : " --bundle is provided" ,
296+ args : [ "--bundle" ] ,
297+ data : [
298+ { useLegacyWorkflow : undefined , expectedHmr : false , expectedBundle : true } ,
299+ { useLegacyWorkflow : false , expectedHmr : true , expectedBundle : true } ,
300+ { useLegacyWorkflow : true , expectedHmr : false , expectedBundle : true }
301+ ]
302+ } ,
303+ {
304+ name : " --no-bundle is provided" ,
305+ args : [ "--no-bundle" ] ,
306+ data : [
307+ { useLegacyWorkflow : undefined , expectedHmr : false , expectedBundle : false } ,
308+ { useLegacyWorkflow : false , expectedHmr : false , expectedBundle : false } ,
309+ { useLegacyWorkflow : true , expectedHmr : false , expectedBundle : false }
310+ ]
311+ } ,
312+ {
313+ name : " --release is provided" ,
314+ args : [ "--release" ] ,
315+ data : [
316+ { useLegacyWorkflow : undefined , expectedHmr : false , expectedBundle : false } ,
317+ { useLegacyWorkflow : false , expectedHmr : false , expectedBundle : true } ,
318+ { useLegacyWorkflow : true , expectedHmr : false , expectedBundle : false }
319+ ]
320+ }
321+ ] ;
322+
323+ _ . each ( [ undefined , false , true ] , useLegacyWorkflow => {
324+ _ . each ( testCases , testCase => {
325+ it ( `should pass correctly when ${ testCase . name } and useLegacyWorkflow is ${ useLegacyWorkflow } ` , ( ) => {
326+ ( testCase . args || [ ] ) . forEach ( arg => process . argv . push ( arg ) ) ;
327+
328+ const options = createOptions ( testInjector ) ;
329+ const projectData = < IProjectData > { useLegacyWorkflow } ;
330+ options . setupOptions ( projectData ) ;
331+
332+ ( testCase . args || [ ] ) . forEach ( arg => process . argv . pop ( ) ) ;
333+
334+ const data = testCase . data . find ( item => item . useLegacyWorkflow === useLegacyWorkflow ) ;
335+
336+ assert . equal ( ! ! options . argv . hmr , ! ! data . expectedHmr ) ;
337+ assert . equal ( ! ! options . argv . bundle , ! ! data . expectedBundle ) ;
338+ } ) ;
339+ } ) ;
340+ } ) ;
341+
342+ const testCasesExpectingToThrow = [
343+ {
344+ name : "--release --hmr" ,
345+ args : [ "--release" , "--hmr" ] ,
346+ expectedError : "The options --release and --hmr cannot be used simultaneously."
347+ } ,
348+ {
349+ name : "--no-bundle --hmr" ,
350+ args : [ "--no-bundle" , "--hmr" ] ,
351+ expectedError : "The options --no-bundle and --hmr cannot be used simultaneously."
352+ }
353+ ] ;
354+
355+ _ . each ( testCasesExpectingToThrow , testCase => {
356+ it ( `should fail when ${ testCase . name } ` , ( ) => {
357+ let actualError = null ;
358+ const errors = testInjector . resolve ( "errors" ) ;
359+ errors . failWithoutHelp = ( error : string ) => actualError = error ;
360+ ( testCase . args || [ ] ) . forEach ( arg => process . argv . push ( arg ) ) ;
361+
362+ const options = createOptions ( testInjector ) ;
363+ options . setupOptions ( null ) ;
364+
365+ ( testCase . args || [ ] ) . forEach ( arg => process . argv . pop ( ) ) ;
366+
367+ assert . deepEqual ( actualError , testCase . expectedError ) ;
368+ } ) ;
369+ } ) ;
370+ } ) ;
264371} ) ;
265372
266373function createOptionsWithProfileDir ( defaultProfileDir ?: string ) : IOptions {
0 commit comments