@@ -7,6 +7,7 @@ const IMAGE_GENERATE_OPTIONS = [
77 { flag : "--prompt <text>" , description : "Image description" , required : true } ,
88 { flag : "--model <model>" , description : "Model ID" } ,
99 { flag : "--watermark <bool>" , description : BOOL_FLAG_WATERMARK } ,
10+ { flag : "--no-wait" , description : "Return task ID immediately without waiting" } ,
1011] ;
1112
1213test ( "parseFlags rejects unknown long flags" , ( ) => {
@@ -39,3 +40,56 @@ test("parseFlags accepts defined command and global flags", () => {
3940 expect ( flags . prompt ) . toBe ( "cat" ) ;
4041 expect ( flags . watermark ) . toBe ( "false" ) ;
4142} ) ;
43+
44+ test ( "parseFlags rejects value flag when next token is another flag" , ( ) => {
45+ const opts = [ ...GLOBAL_OPTIONS , ...IMAGE_GENERATE_OPTIONS ] ;
46+ for ( const argv of [
47+ [ "--watermark" , "--prompt" , "cat" ] ,
48+ [ "--watermark" , "-h" ] ,
49+ [ "--prompt" , "cat" , "--watermark" , "--model" , "qwen-image-2.0" ] ,
50+ ] ) {
51+ expect ( ( ) => parseFlags ( argv , opts ) ) . toThrowError (
52+ expect . objectContaining ( {
53+ name : "BailianError" ,
54+ exitCode : ExitCode . USAGE ,
55+ message : expect . stringContaining ( "Flag --watermark requires a value" ) ,
56+ } ) ,
57+ ) ;
58+ }
59+ } ) ;
60+
61+ test ( "parseFlags rejects trailing value flag without value" , ( ) => {
62+ expect ( ( ) =>
63+ parseFlags ( [ "--prompt" , "cat" , "--watermark" ] , [ ...GLOBAL_OPTIONS , ...IMAGE_GENERATE_OPTIONS ] ) ,
64+ ) . toThrowError (
65+ expect . objectContaining ( {
66+ message : expect . stringContaining ( "Flag --watermark requires a value" ) ,
67+ } ) ,
68+ ) ;
69+ } ) ;
70+
71+ test ( "parseFlags allows boolean flags without values adjacent to other flags" , ( ) => {
72+ const opts = [ ...GLOBAL_OPTIONS , ...IMAGE_GENERATE_OPTIONS ] ;
73+ const flags = parseFlags (
74+ [ "--quiet" , "--dry-run" , "--no-wait" , "--prompt" , "cat" , "--watermark" , "false" ] ,
75+ opts ,
76+ ) ;
77+ expect ( flags . quiet ) . toBe ( true ) ;
78+ expect ( flags . dryRun ) . toBe ( true ) ;
79+ expect ( flags . noWait ) . toBe ( true ) ;
80+ expect ( flags . prompt ) . toBe ( "cat" ) ;
81+ expect ( flags . watermark ) . toBe ( "false" ) ;
82+ } ) ;
83+
84+ test ( "parseFlags does not treat the next flag as a boolean flag value" , ( ) => {
85+ const opts = [ ...GLOBAL_OPTIONS , ...IMAGE_GENERATE_OPTIONS ] ;
86+ expect ( ( ) => parseFlags ( [ "--dry-run" , "--prompt" ] , opts ) ) . toThrowError (
87+ expect . objectContaining ( {
88+ message : expect . stringContaining ( "Flag --prompt requires a value" ) ,
89+ } ) ,
90+ ) ;
91+ // --dry-run is boolean: no value check; parsing continues to --prompt.
92+ const flags = parseFlags ( [ "--dry-run" , "--prompt" , "cat" ] , opts ) ;
93+ expect ( flags . dryRun ) . toBe ( true ) ;
94+ expect ( flags . prompt ) . toBe ( "cat" ) ;
95+ } ) ;
0 commit comments