/** Ċ < s late _ header > Ċ url : Ġwww . s late kit . com Ċ git : Ġwww . github . com / code - helix / s late kit Ċ org : Ġwww . code helix . co Ċ author : ĠK ish ore ĠRed dy Ċ copyright : Ġ 2 0 1 6 ĠCode Hel ix ĠSolutions ĠInc . Ċ license : Ġrefer Ġto Ġwebsite Ġand / or Ġgithub Ċ about : ĠA ĠKotlin Ġutility Ġlibrary , Ġtool - kit Ġand Ġserver Ġbackend . Ċ man tra : ĠSimp licity Ġabove Ġall Ġelse Ċ </ s late _ header > Ċ Ġ*/ Ċ package Ġtest . common ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby Ġk ish orer ed dy Ġon Ġ 5 / 2 2 / 1 7 . Ċ Ġ*/ Ċ Ċ import Ġorg . junit . Test Ċ import Ġs late kit . common . Result Ċ import Ġs late kit . common . Result Ex Ċ import Ġs late kit . common . Result Msg Ċ import Ġs late kit . common . args . Args Ċ import Ġs late kit . common . args . Args Funcs Ċ import Ġs late kit . common . getOrElse ĊĊ Ċ class ĠArgs Tests Ġ{ ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` can Ġparse Ġargs Ġwith Ġdefaults 2 ` (): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" hello Ġmethod ") ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test Ġfun Ġtest _ m 1 (){ ĊĠĠĠĠĠĠĠ Ġ` can Ġparse Ġargs Ġwith Ġdefaults 2 `() ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test Ġfun Ġcan _ parse _ args _ with _ defaults () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArgs . parse ("- env : loc Ġ- log : info Ġ- region : ny ") ĊĠĠĠĠĠĠĠ Ġensure ( result , Ġtrue , Ġ 3 , ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" env " ĠĠ Ġ, Ġ" loc " Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" log " ĠĠ Ġ, Ġ" info "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" region ", Ġ" ny " Ġ Ġ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test Ġfun Ġcan _ parse _ args _ with _ custom _ prefix _ and _ separator () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArgs . parse ("- env = loc Ġ- log = info Ġ- region = ny ", Ġ"-", Ġ"=" ) ĊĠĠĠĠĠĠĠ Ġensure ( result , Ġtrue , Ġ 3 , ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" env " ĠĠ Ġ, Ġ" loc " Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" log " ĠĠ Ġ, Ġ" info "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" region ", Ġ" ny " Ġ Ġ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test Ġfun Ġcan _ parse _ args _ single _ quotes () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArgs . parse ("- env =' loc ' Ġ- log =' info ' Ġ- region =' ny '", Ġ"-", Ġ"=" ) ĊĠĠĠĠĠĠĠ Ġensure ( result , Ġtrue , Ġ 3 , ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" env " ĠĠ Ġ, Ġ" loc " Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" log " ĠĠ Ġ, Ġ" info "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" region ", Ġ" ny " Ġ Ġ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test Ġfun Ġcan _ parse _ args _ double _ quotes () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArgs . parse ("- env =\" loc \" Ġ- log =\" info \" Ġ- region =\" ny \"", Ġ"-", Ġ"=" ) ĊĠĠĠĠĠĠĠ Ġensure ( result , Ġtrue , Ġ 3 , ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" env " ĠĠ Ġ, Ġ" loc " Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" log " ĠĠ Ġ, Ġ" info "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" region ", Ġ" ny " Ġ Ġ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test Ġfun Ġcan _ parse _ args _ with _ dots () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArgs . parse ("- env . api =' loc ' Ġ- log . level =' info ' Ġ- region . api =' ny '", Ġ"-", Ġ"=" ) ĊĠĠĠĠĠĠĠ Ġensure ( result , Ġtrue , Ġ 3 , ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" env . api " ĠĠ Ġ, Ġ" loc " Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" log . level " Ġ Ġ, Ġ" info "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" region . api ", Ġ" ny " Ġ Ġ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test Ġfun Ġcan _ parse _ arg _ values _ with _ decimals () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArgs . parse ("- env . api =' loc ' Ġ- eg . test = 1 2 . 3 4 ", Ġ"-", Ġ"=" ) ĊĠĠĠĠĠĠĠ Ġensure ( result , Ġtrue , Ġ 2 , ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" env . api " ĠĠ Ġ, Ġ" loc " Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" eg . test " ĠĠ Ġ, Ġ" 1 2 . 3 4 " Ġ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test Ġfun Ġcan _ parse _ arg _ values _ with _ decimals 2 () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArgs . parse ("- env . api =' loc ' Ġ- eg . test = 1 2 . 3 4 Ġ- log . level =' info '", Ġ"-", Ġ"=" ) ĊĠĠĠĠĠĠĠ Ġensure ( result , Ġtrue , Ġ 3 , ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" env . api " ĠĠ Ġ, Ġ" loc " Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" eg . test " ĠĠ Ġ, Ġ" 1 2 . 3 4 " Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" log . level " Ġ Ġ, Ġ" info ") ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test Ġfun Ġcan _ parse _ arg _ values _ with _ dots () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArgs . parse ("- num = 1 2 . 3 4 ", Ġ"-", Ġ"=" ) ĊĠĠĠĠĠĠĠ Ġensure ( result , Ġtrue , Ġ 1 , ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" num " ĠĠ Ġ, Ġ" 1 2 . 3 4 " Ġ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test Ġfun Ġcan _ parse _ actions _ with _ args () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArgs . parse (" area . api . action Ġ- env . api =' loc ' Ġ- log . level =' info ' Ġ- region . api =' ny '", Ġ"-", Ġ"=", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġensure ( result , Ġtrue , Ġ 3 , ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" env . api " ĠĠ Ġ, Ġ" loc " Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" log . level " Ġ Ġ, Ġ" info "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" region . api ", Ġ" ny " Ġ Ġ) ĊĠĠĠĠĠĠĠ Ġ), Ġnull , Ġnull , ĠlistOf (" area ", Ġ" api ", Ġ" action ")) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test Ġfun Ġcan _ parse _ meta _ args () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArgs . parse (" area . api . action Ġ- env . api =' loc ' Ġ- log . level =' info ' Ġ@ api . key =' abc 1 2 3 '", Ġ"-", Ġ"=", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġensure ( result , Ġtrue , Ġ 2 , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" env . api " ĠĠĠ Ġ, Ġ" loc " Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" log . level " Ġ Ġ, Ġ" info ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" api . key " ĠĠĠ Ġ, Ġ" abc 1 2 3 " Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" area ", Ġ" api ", Ġ" action ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test Ġfun Ġcan _ parse _ sys _ args () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArgs . parse (" area . api . action Ġ- env . api =' loc ' Ġ@ api . key =' abc 1 2 3 ' Ġ\$ format = json ", Ġ"-", Ġ"=", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġensure ( result , Ġtrue , Ġ 1 , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" env . api " ĠĠĠ Ġ, Ġ" loc " Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" api . key " ĠĠĠ Ġ, Ġ" abc 1 2 3 " Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" format " ĠĠĠ Ġ, Ġ" json " Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" area ", Ġ" api ", Ġ" action ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test Ġfun Ġcan _ parse _ sys _ args _ only () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġapp . reg . create Sample User Ġ$ command = sample ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArgs . parse (" area . api . action Ġ\$ format = json ", Ġ"-", Ġ"=", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġensure ( result , Ġtrue , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < Pair < String , String >> (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < Pair < String , String >> (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" format " ĠĠĠ Ġ, Ġ" json " Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" area ", Ġ" api ", Ġ" action ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// Ġapp . users . activate ĊĠĠĠ Ġ@ Test Ġfun Ġcan _ parse _ actions _ without _ args () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArgs . parse (" area . api . action ", Ġ"-", Ġ"=", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġensure ( result , Ġtrue , Ġ 0 , ĠlistOf (), Ġnull , Ġnull , ĠlistOf (" area ", Ġ" api ", Ġ" action ")) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test Ġfun Ġis _ meta _ arg _ with _ help () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( ĠArgs Funcs . is Meta Arg ( listOf (" help " Ġ Ġ), Ġ 0 , Ġ" help ", Ġ" info ") Ġ) ĊĠĠĠĠĠĠĠ Ġassert ( ĠArgs Funcs . is Meta Arg ( listOf ("- help " Ġ), Ġ 0 , Ġ" help ", Ġ" info ") Ġ) ĊĠĠĠĠĠĠĠ Ġassert ( ĠArgs Funcs . is Meta Arg ( listOf ("-- help "), Ġ 0 , Ġ" help ", Ġ" info ") Ġ) ĊĠĠĠĠĠĠĠ Ġassert ( ĠArgs Funcs . is Meta Arg ( listOf ("/ help " Ġ), Ġ 0 , Ġ" help ", Ġ" info ") Ġ) ĊĊĠĠĠĠĠĠĠ Ġassert ( ĠArgs Funcs . is Meta Arg ( listOf (" info " Ġ Ġ), Ġ 0 , Ġ" help ", Ġ" info ") Ġ) ĊĠĠĠĠĠĠĠ Ġassert ( ĠArgs Funcs . is Meta Arg ( listOf ("- info " Ġ), Ġ 0 , Ġ" help ", Ġ" info ") Ġ) ĊĠĠĠĠĠĠĠ Ġassert ( ĠArgs Funcs . is Meta Arg ( listOf ("-- info "), Ġ 0 , Ġ" help ", Ġ" info ") Ġ) ĊĠĠĠĠĠĠĠ Ġassert ( ĠArgs Funcs . is Meta Arg ( listOf ("/ info " Ġ), Ġ 0 , Ġ" help ", Ġ" info ") Ġ) ĊĊĠĠĠĠĠĠĠ Ġassert ( Ġ! Args Funcs . is Meta Arg ( listOf ("/ about " Ġ), Ġ 0 , Ġ" help ", Ġ" info ")) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test Ġfun Ġis _ help _ on _ area () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( ĠArgs Funcs . is Help ( listOf (" app ", Ġ"? "), Ġ 1 ) Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġensure ( result : ĠResult Ex < Args >, Ġsuccess : Boolean , Ġsize : Int , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Named : List < Pair < String , String >>, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Meta : List < Pair < String , String >> ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Sys : List < Pair < String , String >> ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparts : List < String >? Ġ= Ġnull ) Ġ: ĠUnit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġsuccess Ġ/ Ġfail ĊĠĠĠĠĠĠĠ Ġassert ( Ġresult . success Ġ== Ġsuccess Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġresult . getOrElse Ġ{ ĠArgs . default () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġsize ĊĠĠĠĠĠĠĠ Ġassert ( Ġargs . size () Ġ== Ġsize ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġexpected ĊĠĠĠĠĠĠĠ Ġfor ( item Ġin Ġexpected Named ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( Ġargs . containsKey ( item . first )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( Ġargs . getString ( item . first ) Ġ== Ġitem . second ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexpected Meta ?. let Ġ{ Ġmeta Args Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor (( first , Ġsecond ) Ġin Ġmeta Args ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( Ġargs . contains Meta Key ( first )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( Ġargs . get Meta String ( first ) Ġ== Ġsecond ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexpected Sys ?. let Ġ{ Ġsys Args Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor (( first , Ġsecond ) Ġin Ġsys Args ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( Ġargs . contains Sys Key ( first )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( Ġargs . get Sys String ( first ) Ġ== Ġsecond ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġparts ?. let Ġ{ Ġp Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( p . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( args . action Parts . size Ġ== Ġp . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 Ġ.. Ġp . size Ġ- Ġ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpart Ġ= Ġp [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( Ġargs . get Verb ( i ) Ġ== Ġpart ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }