/** č Ċ Copyright Ġ 2 0 2 1 ĠRe us abit ĠSoftware ĠLLC čĊč Ċ Licensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); č Ċ you Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . č Ċ You Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat čĊč Ċ http :// www . apache . org / licenses / LICENSE - 2 . 0 čĊč Ċ Unless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware č Ċ distributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , č Ċ WITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . č Ċ See Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand č Ċ limitations Ġunder Ġthe ĠLicense . čĊ Ġ*/ čĊč Ċ package Ġcom . re us abit . pro ze zz or čĊč Ċ import Ġcom . github . aj alt . cli kt . core . NoSuch Option č Ċ import Ġcom . github . aj alt . cli kt . core . Print Help Message č Ċ import Ġcom . github . aj alt . cli kt . core . Usage Error č Ċ import Ġorg . assertj . core . api . Assertions . assertThat č Ċ import Ġorg . assertj . core . api . Assertions . assertThat Thrown By č Ċ import Ġorg . junit . Test č Ċ import Ġjava . nio . file . Files čĊč Ċ /** čĊ Ġ* ĠIf Ġthe Ġ-- gui Ġ(- g ) Ġflag Ġis Ġset , Ġthen Ġthe Ġapp li ations Ġruns Ġa Ġgui . čĊ Ġ* čĊ Ġ* ĠIf Ġ-- interactive Ġ(- i ) čĊ Ġ* Ġis Ġset , Ġthen Ġthe Ġapplication Ġwill Ġrun Ġin Ġcommand - line Ġinteractive Ġmode , Ġpromp ting Ġfor čĊ Ġ* Ġeach Ġoption . Ġ(- g Ġand Ġ- i Ġare Ġmut ually Ġexclusive .) čĊ Ġ* čĊ Ġ* ĠIf Ġany Ġcommand Ġline Ġoption Ġis Ġspecified , Ġbut Ġnot Ġgui Ġor Ġinteractive , Ġthen čĊ Ġ* Ġthe Ġapplication Ġruns Ġin Ġnon - interactive Ġcommand - line Ġmode , Ġusing Ġthe Ġspecified čĊ Ġ* Ġarguments Ġor Ġdefaults Ġfor Ġunspecified Ġarguments Ġas Ġoptions . čĊ Ġ* čĊ Ġ* ĠThere Ġis Ġalso Ġa Ġhelp Ġmode Ġ(-- help ) Ġthat Ġdisplays Ġdetailed Ġhelp Ġinformation Ġand Ġexits . čĊ Ġ* čĊ Ġ* ĠThere Ġis Ġalso Ġa Ġusage Ġmode Ġthat Ġis Ġactivated Ġwhen Ġinvalid Ġarguments Ġare Ġsupplied . čĊ Ġ* ĠDisplay Ġshort - form Ġusage Ġinformation Ġand Ġexit . čĊ Ġ*/ č Ċ class ĠTest Program Options Mode Ġ{ čĊĠ Ġ@ Test čĊĠ Ġfun Ġgui Mode Long Form () Ġ{ čĊĠĠĠ Ġval Ġargs Ġ= ĠarrayOf ("-- gui ") čĊĠĠĠ Ġval Ġoptions Ġ= Ġh arness ( args ) čĊĠĠĠ ĠassertThat ( options . mode ). isEqualTo ( App Mode . GUI ) čĊĠ Ġ} čĊčĊĠ Ġ@ Test čĊĠ Ġfun Ġgui Mode Short Form () Ġ{ čĊĠĠĠ Ġval Ġargs Ġ= ĠarrayOf ("- g ") čĊĠĠĠ Ġval Ġoptions Ġ= Ġh arness ( args ) čĊĠĠĠ ĠassertThat ( options . mode ). isEqualTo ( App Mode . GUI ) čĊĠ Ġ} čĊčĊĠ Ġ@ Test čĊĠ Ġfun Ġgui Mode Relative Input Dir () Ġ{ čĊĠĠĠ Ġval Ġargs Ġ= ĠarrayOf < String >(" -- gui ", Ġ"-- input - directory ", Ġ" rel ativ ed ir ") čĊĠĠĠ ĠassertThat Thrown By { čĊĠĠĠĠĠ Ġval Ġoptions Ġ= Ġh arness ( args ) čĊĠĠĠ Ġ} čĊĠĠĠ Ġ. isInstanceOf ( Usage Error :: class . java ) čĊĠĠĠ Ġ. has Message Containing ("-- gui ") čĊĠĠĠ Ġ. has Message Containing (" absolute ") čĊĠĠĠ Ġ. has Message Containing ("-- input - directory ") čĊĠĠĠ Ġ. has Message Containing (" rel ativ ed ir ") čĊĠ Ġ} čĊčĊĠ Ġ@ Test čĊĠ Ġfun Ġgui Mode Relative Output Directory () Ġ{ čĊĠĠĠ Ġval Ġargs Ġ= ĠarrayOf < String >(" -- gui ", Ġ"-- output - directory ", Ġ" rel ativ ed irectory ") čĊĠĠĠ ĠassertThat Thrown By { čĊĠĠĠĠĠ Ġval Ġoptions Ġ= Ġh arness ( args ) čĊĠĠĠ Ġ} čĊĠĠĠ Ġ. isInstanceOf ( Usage Error :: class . java ) čĊĠĠĠ Ġ. has Message Containing ("-- gui ") čĊĠĠĠ Ġ. has Message Containing (" absolute ") čĊĠĠĠ Ġ. has Message Containing ("-- output - directory ") čĊĠĠĠ Ġ. has Message Containing (" rel ativ ed irectory ") čĊĠ Ġ} čĊčĊĠ Ġ@ Test čĊĠ Ġfun Ġno Args () Ġ{ čĊĠĠĠ Ġval Ġargs Ġ= ĠarrayOf < String >() čĊĠĠĠ ĠassertThat Thrown By { čĊĠĠĠĠĠ Ġval Ġoptions Ġ= Ġh arness ( args ) čĊĠĠĠ Ġ} čĊĠĠĠ Ġ. isInstanceOf ( Usage Error :: class . java ) čĊĠĠĠ Ġ. has Message Containing ("-- yes ") čĊĠ Ġ} čĊčĊč ĊĠ Ġ@ Test čĊĠ Ġfun Ġinteractive Mode Long Form () Ġ{ čĊĠĠĠ Ġval Ġargs Ġ= ĠarrayOf ("-- interactive ") čĊĠĠĠ Ġval Ġoptions Ġ= Ġh arness ( args ) čĊĠĠĠ ĠassertThat ( options . mode ). isEqualTo ( App Mode . INTER ACTIVE ) čĊĠ Ġ} čĊčĊĠ Ġ@ Test čĊĠ Ġfun Ġinteractive Mode Short Form () Ġ{ čĊĠĠĠ Ġval Ġargs Ġ= ĠarrayOf ("- i ") čĊĠĠĠ Ġval Ġoptions Ġ= Ġh arness ( args ) čĊĠĠĠ ĠassertThat ( options . mode ). isEqualTo ( App Mode . INTER ACTIVE ) čĊĠ Ġ} čĊčĊĠ Ġ@ Test čĊĠ Ġfun Ġnon interactive Mode Short Form () Ġ{ čĊĠĠĠ Ġval Ġargs Ġ= ĠarrayOf ("- I ", Ġ"- y ") čĊĠĠĠ Ġval Ġoptions Ġ= Ġh arness ( args ) čĊĠĠĠ ĠassertThat ( options . mode ). isEqualTo ( App Mode . NON _ INTER ACTIVE ) čĊĠ Ġ} čĊčĊĠ Ġ@ Test čĊĠ Ġfun Ġnon interactive Mode Long Form () Ġ{ čĊĠĠĠ Ġval Ġargs Ġ= ĠarrayOf ("-- non - interactive ", Ġ"-- yes ") čĊĠĠĠ Ġval Ġoptions Ġ= Ġh arness ( args ) čĊĠĠĠ ĠassertThat ( options . mode ). isEqualTo ( App Mode . NON _ INTER ACTIVE ) čĊĠ Ġ} čĊčĊĠ Ġ@ Test čĊĠ Ġfun Ġinvalid Option () Ġ{ čĊĠĠĠ Ġval Ġargs Ġ= ĠarrayOf ("-- this IsNot A Valid Option ") čĊĠĠĠ ĠassertThat Thrown By Ġ{ čĊĠĠĠĠĠ Ġval Ġoptions Ġ= Ġh arness ( args ) čĊĠĠĠ Ġ} čĊĠĠĠĠĠ Ġ. isInstanceOf ( NoSuch Option :: class . java ) čĊĠ Ġ} čĊčĊĠ Ġ@ Test čĊĠ Ġfun Ġhelp () Ġ{ čĊĠĠĠ Ġval Ġargs Ġ= ĠarrayOf ("-- help ") čĊĠĠĠ ĠassertThat Thrown By Ġ{ čĊĠĠĠĠĠ Ġval Ġoptions Ġ= Ġh arness ( args ) čĊĠĠĠ Ġ} čĊĠĠĠĠĠ Ġ. isInstanceOf ( Print Help Message :: class . java ) čĊĠ Ġ} čĊčĊĠ Ġ@ Test čĊĠ Ġfun Ġnon interactive No Yes () Ġ{ čĊĠĠĠ Ġval Ġargs Ġ= ĠarrayOf ("- I ") čĊĠĠĠ ĠassertThat Thrown By Ġ{ čĊĠĠĠĠĠ Ġval Ġoptions Ġ= Ġh arness ( args ) čĊĠĠĠ Ġ} čĊĠĠĠ Ġ. isInstanceOf ( Usage Error :: class . java ) čĊĠĠĠ Ġ. has Message Containing ("-- yes ") čĊĠ Ġ} čĊčĊĠ Ġ@ Test čĊĠ Ġfun Ġnon interactive Force () Ġ{ čĊĠĠĠ Ġval Ġargs Ġ= ĠarrayOf ("- y ", Ġ"- f ") čĊĠĠĠ Ġval Ġoptions Ġ= Ġh arness ( args ) čĊĠĠĠ ĠassertThat ( options . overwrite OutputFile ). isTrue () čĊĠ Ġ} čĊčĊĠ Ġ@ Test čĊĠ Ġfun Ġnon interactive Force No Yes () Ġ{ čĊĠĠĠ Ġval Ġargs Ġ= ĠarrayOf ("- f ") čĊĠĠĠ ĠassertThat Thrown By Ġ{ čĊĠĠĠĠĠ Ġval Ġoptions Ġ= Ġh arness ( args ) čĊĠĠĠ Ġ} čĊĠĠĠ Ġ. isInstanceOf ( Usage Error :: class . java ) čĊĠĠĠ Ġ. has Message Containing ("-- yes ") čĊĠ Ġ} čĊč Ċ }