package Ġcom . bk ahl ert . kom mon s . shell Ċ Ċ import Ġcom . bk ahl ert . kom mon s . docker . Docker Container Ċ import Ġcom . bk ahl ert . kom mon s . docker . Docker Image Ċ import Ġcom . bk ahl ert . kom mon s . docker . Docker Run CommandLine Ċ import Ġcom . bk ahl ert . kom mon s . docker . Docker Run CommandLine . Options Ċ import Ġcom . bk ahl ert . kom mon s . docker . Docker Stop CommandLine Ċ import Ġcom . bk ahl ert . kom mon s . docker . Mount Options Ċ import Ġcom . bk ahl ert . kom mon s . exec . CommandLine Ċ import Ġcom . bk ahl ert . kom mon s . exec . IO . Output Ċ import Ġcom . bk ahl ert . kom mon s . exec . exit Code Ċ import Ġcom . bk ahl ert . kom mon s . exec . exit Code OrNull Ċ import Ġcom . bk ahl ert . kom mon s . exec . io Ċ import Ġcom . bk ahl ert . kom mon s . http Ċ import Ġcom . bk ahl ert . kom mon s . io . path . Locations Ċ import Ġcom . bk ahl ert . kom mon s . io . path . as Path Ċ import Ġcom . bk ahl ert . kom mon s . io . path . has Content Ċ import Ġcom . bk ahl ert . kom mon s . io . path . is Inside Ċ import Ġcom . bk ahl ert . kom mon s . io . path . path String Ċ import Ġcom . bk ahl ert . kom mon s . io . path . random File Ċ import Ġcom . bk ahl ert . kom mon s . io . path . write Bytes Ċ import Ġcom . bk ahl ert . kom mon s . shell . Shell Script . Companion . is Script Ċ import Ġcom . bk ahl ert . kom mon s . shell . Shell Script . Script Context Ċ import Ġcom . bk ahl ert . kom mon s . test . Slow Ċ import Ġcom . bk ahl ert . kom mon s . test . S moke Ċ import Ġcom . bk ahl ert . kom mon s . test . expect Throws Ċ import Ġcom . bk ahl ert . kom mon s . test . junit . UniqueId Ċ import Ġcom . bk ahl ert . kom mon s . test . string Ċ import Ġcom . bk ahl ert . kom mon s . test . test Each Ċ import Ġcom . bk ahl ert . kom mon s . test . tests Ċ import Ġcom . bk ahl ert . kom mon s . test . toString Is EqualTo Ċ import Ġcom . bk ahl ert . kom mon s . test . with TempDir Ċ import Ġcom . bk ahl ert . kom mon s . text . Banner Ċ import Ġcom . bk ahl ert . kom mon s . text . Line Separ ators . LF Ċ import Ġcom . bk ahl ert . kom mon s . text . Line Separ ators . lines Ċ import Ġcom . bk ahl ert . kom mon s . text . join Lines ToString Ċ import Ġcom . bk ahl ert . kom mon s . text . lines Ċ import Ġcom . bk ahl ert . kom mon s . text . matches Cur ly Pattern Ċ import Ġcom . bk ahl ert . kom mon s . text . toString Matches Cur ly Pattern Ċ import Ġcom . bk ahl ert . kom mon s . time . seconds Ċ import Ġcom . bk ahl ert . kom mon s . time . sleep Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . Test Factory Ċ import Ġstri kt . api . Assertion . Builder Ċ import Ġstri kt . api . expect Ċ import Ġstri kt . api . expect That Ċ import Ġstri kt . assertions . contains Ċ import Ġstri kt . assertions . contains Exactly Ċ import Ġstri kt . assertions . first Ċ import Ġstri kt . assertions . isEmpty Ċ import Ġstri kt . assertions . isEqualTo Ċ import Ġstri kt . assertions . isFalse Ċ import Ġstri kt . assertions . is GreaterThan Ċ import Ġstri kt . assertions . is LessThan Ċ import Ġstri kt . assertions . isNotNull Ċ import Ġstri kt . assertions . isNull Ċ import Ġstri kt . assertions . isTrue Ċ import Ġstri kt . assertions . startsWith Ċ import Ġstri kt . java . exists Ċ import Ġstri kt . java . fileName Ċ import Ġstri kt . java . is Executable Ċ import Ġjava . net . URI Ċ import Ġjava . nio . file . Path Ċ import Ġkotlin . concurrent . thread Ċ import Ġkotlin . io . path . exists Ċ import Ġkotlin . io . path . inputStream Ċ import Ġkotlin . time . measure Time Ċ import Ġcom . bk ahl ert . kom mon s . text . Unicode . ESCAPE Ġas Ġe Ċ Ċ class ĠShell Script Test Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġshell Script ( name : ĠString ? Ġ= Ġ" Test ") Ġ= ĠShell Script ( name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshe bang ĊĠĠĠĠĠĠĠ Ġchange Directory Or Exit ( Path . of ("/ some / where ")) ĊĠĠĠĠĠĠĠ Ġecho (" Hello ĠWorld !") ĊĠĠĠĠĠĠĠ Ġecho (" By e !") ĊĠĠĠĠĠĠĠ Ġexit ( 4 2 u ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġbuild Ġvalid Ġscript `() Ġ{ ĊĠĠĠĠĠĠĠ Ġexpect That ( shell Script ()). toString Is EqualTo (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ#!/ bin / sh ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' cd ' Ġ'/ some / where ' Ġ|| Ġ' exit ' Ġ' 1 ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' echo ' Ġ' Hello ĠWorld !' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' echo ' Ġ' By e !' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' exit ' Ġ' 4 2 ' ĊĊĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġremove Ansi Ġ= Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġbuild Ġtrim Ġindent Ġcontent `() Ġ{ ĊĠĠĠĠĠĠĠ Ġexpect That ( Shell Script (" ĠĠĠ Ġecho Ġ' ðŁĳ Ī Ġno Ġpadding ' ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString Is EqualTo (" echo Ġ' ðŁĳ Ī Ġno Ġpadding '$ LF ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġbuild Ġwith Ġstring `() Ġ{ ĊĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ Ġ" print env ĠHOME " Ġ}). toString Is EqualTo (" print env ĠHOME $ LF ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġbuild Ġwith Ġcommand `() Ġ{ ĊĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ Ġecho (" test ") Ġ}). toString Is EqualTo ("' echo ' Ġ' test '$ LF ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġbuild Ġwith Ġcommand Ġand Ġstring `() Ġ{ ĊĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ Ġecho (" test "); Ġ" print env ĠHOME " Ġ}). toString Is EqualTo ("' echo ' Ġ' test ' ${ LF } print env ĠHOME $ LF ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠTo File Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġwrite Ġvalid Ġscript `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġshell Script (). to File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Content (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ#!/ bin / sh ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' cd ' Ġ'/ some / where ' Ġ|| Ġ' exit ' Ġ' 1 ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' echo ' Ġ' Hello ĠWorld !' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' echo ' Ġ' By e !' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' exit ' Ġ' 4 2 ' ĊĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġuse Ġname Ġfor Ġfilename `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġshell Script (" my Ġscript "). to File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Inside ( Locations . temp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fileName . path String . startsWith (" my - script ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġwrite Ġexecutable Ġscript `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġrandom File ( extension Ġ= Ġ". sh ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturned Script Ġ= Ġshell Script (). to File ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( returned Script ). is Executable () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġreturn Ġsame Ġfile Ġas Ġsaved Ġto Ġfile `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= Ġrandom File ( extension Ġ= Ġ". sh ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturned Script Ġ= Ġshell Script (). to File ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( returned Script ). isEqualTo ( file ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠTo CommandLine Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġuse Ġexisting Ġshe bang `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe bang ("/ bin / custom Ġ- x ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho (" test ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to CommandLine ()). isEqualTo ( CommandLine ("/ bin / custom ", Ġ"- x ", Ġ"- c ", Ġ"' echo ' Ġ' test '$ LF ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġuse Ġdefault Ġinterpreter Ġon Ġmissing Ġshe bang `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho (" test ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to CommandLine ()). isEqualTo ( CommandLine ("/ bin / sh ", Ġ"- c ", Ġ"' echo ' Ġ' test '$ LF ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠHas She bang Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġreturn Ġtrue Ġif Ġstarts Ġwith Ġshe bang `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe bang ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho (" she bang ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. has She bang ). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġreturn Ġfalse Ġif Ġnot Ġstarts Ġwith Ġshe bang `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho (" she bang ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe bang ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. has She bang ). isFalse () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġreturn Ġfalse Ġif Ġshe bang Ġis Ġmissing `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho (" she bang ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. has She bang ). isFalse () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠShe bang Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġreturn Ġshe bang `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ#!/ bin / bash ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho Ġ' test ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Ġ{ Ġshe bang Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( CommandLine ("/ bin / bash ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġreturn Ġshe bang Ġwith Ġwith Ġarguments `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ#!/ bin / bash Ġarg 1 Ġ'- arg 2 ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho Ġ' test ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Ġ{ Ġshe bang Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( CommandLine ("/ bin / bash ", Ġ" arg 1 ", Ġ"- arg 2 ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġreturn Ġnull Ġon Ġmissing Ġshe bang Ġin Ġfirst Ġline `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho Ġ' test ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ#!/ bin / bash Ġarg 1 Ġ- arg 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Ġ{ Ġshe bang Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠName Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtest Banner Ġ= Ġ"$ e [ 9 0 ; 4 0 m âĸĳ $ e [ 3 9 ; 4 9 m $ e [ 9 6 ; 4 6 m âĸĳ $ e [ 3 9 ; 4 9 m " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ e [ 9 4 ; 4 4 m âĸĳ $ e [ 3 9 ; 4 9 m $ e [ 9 2 ; 4 2 m âĸĳ $ e [ 3 9 ; 4 9 m $ e [ 9 3 ; 4 3 m âĸĳ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ e [ 3 9 ; 4 9 m $ e [ 9 5 ; 4 5 m âĸĳ $ e [ 3 9 ; 4 9 m $ e [ 9 1 ; 4 1 m âĸĳ $ e [ 3 9 ; 4 9 m Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ e [ 9 6 m TEST $ e [ 3 9 m " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdifferent Banner Ġ= Ġ"$ e [ 9 0 ; 4 0 m âĸĳ $ e [ 3 9 ; 4 9 m $ e [ 9 6 ; 4 6 m âĸĳ $ e [ 3 9 ; 4 9 m " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ e [ 9 4 ; 4 4 m âĸĳ $ e [ 3 9 ; 4 9 m $ e [ 9 2 ; 4 2 m âĸĳ $ e [ 3 9 ; 4 9 m $ e [ 9 3 ; 4 3 m âĸĳ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ e [ 3 9 ; 4 9 m $ e [ 9 5 ; 4 5 m âĸĳ $ e [ 3 9 ; 4 9 m $ e [ 9 1 ; 4 1 m âĸĳ $ e [ 3 9 ; 4 9 m Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ e [ 9 6 m DI FFER ENT $ e [ 3 9 m " ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġnot Ġecho Ġname `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsh Ġ= ĠShell Script (" test ", Ġ" exit Ġ 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( sh . toString ()). isEqualTo (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Ġ 0 ĊĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġecho Ġname Ġif Ġspecified `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsh Ġ= ĠShell Script (" test ", Ġ" exit Ġ 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( sh . toString ( echo Name Ġ= Ġtrue )). toString Is EqualTo (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho Ġ'$ test Banner ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Ġ 0 ĊĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġuse Ġdifferent Ġname Ġif Ġspecified `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsh Ġ= ĠShell Script (" test ", Ġ" exit Ġ 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( sh . toString ( true , Ġ" different ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains (" DI FFER ENT ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot Ġ{ Ġcontains (" TEST ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġecho Ġname Ġafter Ġshe bang Ġin Ġfirst Ġline `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsh Ġ= ĠShell Script (" test ", Ġ"# !/ bin / sh \ n exit Ġ 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( sh . toString ( echo Name Ġ= Ġtrue )). toString Is EqualTo (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ#!/ bin / sh ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho Ġ'$ test Banner ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Ġ 0 ĊĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġecho Ġname Ġin Ġfirst Ġline Ġon Ġmissing Ġshe bang Ġin Ġfirst Ġline `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsh Ġ= ĠShell Script (" test ", Ġ" exit Ġ 0 \ n #!/ bin / sh ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( sh . toString ( echo Name Ġ= Ġtrue )). toString Is EqualTo (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho Ġ'$ test Banner ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ#!/ bin / sh ĊĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġecho Ġname Ġin Ġfirst Ġline Ġon Ġempty Ġscript `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsh Ġ= ĠShell Script (" test ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( sh . toString ( echo Name Ġ= Ġtrue )). toString Is EqualTo (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho Ġ'$ test Banner ' ĊĠĠĠĠĊĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠContent Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġprovide Ġcontent `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( shell Script ( null ). content ). matches Cur ly Pattern (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ#!/ bin / sh ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{{ }} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' echo ' Ġ' Hello ĠWorld !' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' echo ' Ġ' By e !' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' exit ' Ġ' 4 2 ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠUsing Script Context Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠShe bang Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġadd Ġusing Ġproperty `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe bang ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho (" she bang ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). contains Exactly ("# !/ bin / sh ", Ġ"' echo ' Ġ' she bang '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġadd Ġusing Ġfunction `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe bang () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho (" she bang ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). contains Exactly ("# !/ bin / sh ", Ġ"' echo ' Ġ' she bang '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġadd Ġcustom Ġinterpreter `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe bang ("/ bin / bash ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho (" she bang ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). contains Exactly ("# !/ bin / bash ", Ġ"' echo ' Ġ' she bang '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġadd Ġcustom Ġpath Ġinterpreter `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe bang ("/ bin / bash ". as Path ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho (" she bang ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). contains Exactly ("# !/ bin / bash ", Ġ"' echo ' Ġ' she bang '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġadd Ġcustom Ġinterpreter Ġwith Ġarguments `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe bang ("/ bin / bash ", Ġ" arg 1 ", Ġ"- arg 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho (" she bang ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). contains Exactly ("# !/ bin / bash Ġarg 1 Ġ- arg 2 ", Ġ"' echo ' Ġ' she bang '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġadd Ġcustom Ġpath Ġinterpreter Ġwith Ġarguments `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe bang ("/ bin / bash ". as Path (), Ġ" arg 1 ", Ġ"- arg 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho (" she bang ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). contains Exactly ("# !/ bin / bash Ġarg 1 Ġ- arg 2 ", Ġ"' echo ' Ġ' she bang '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġadd Ġanywhere `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe bang ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho (" she bang ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe bang ("/ bin / bash ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). contains Exactly ("# !/ bin / sh ", Ġ"' echo ' Ġ' she bang '", Ġ"# !/ bin / bash ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠWith Line Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test Factory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġor `() Ġ= Ġtest Each ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Script Ġ{ Ġecho (" A ") Ġor Ġecho (" B "); Ġecho (" C ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Script Ġ{ Ġecho (" A ") Ġor Ġ"' echo ' Ġ' B '"; Ġecho (" C ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġit Ġ} Ġthat Ġ{ Ġcontains Exactly ("' echo ' Ġ' A ' Ġ|| Ġ' echo ' Ġ' B '", Ġ"' echo ' Ġ' C '") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test Factory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġor Ġat Ġend `() Ġ= Ġtest Each ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Script Ġ{ Ġecho (" A "); Ġecho (" B ") Ġor Ġecho (" C ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Script Ġ{ Ġecho (" A "); Ġecho (" B ") Ġor Ġ"' echo ' Ġ' C '" Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġit Ġ} Ġthat Ġ{ Ġcontains Exactly ("' echo ' Ġ' A '", Ġ"' echo ' Ġ' B ' Ġ|| Ġ' echo ' Ġ' C '") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test Factory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġand `() Ġ= Ġtest Each ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Script Ġ{ Ġecho (" A ") Ġand Ġecho (" B "); Ġecho (" C ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Script Ġ{ Ġecho (" A ") Ġand Ġ"' echo ' Ġ' B '"; Ġecho (" C ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġit Ġ} Ġthat Ġ{ Ġcontains Exactly ("' echo ' Ġ' A ' Ġ&& Ġ' echo ' Ġ' B '", Ġ"' echo ' Ġ' C '") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test Factory ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġand Ġat Ġend `() Ġ= Ġtest Each ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Script Ġ{ Ġecho (" A "); Ġecho (" B ") Ġand Ġecho (" C ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Script Ġ{ Ġecho (" A "); Ġecho (" B ") Ġand Ġ"' echo ' Ġ' C '" Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġit Ġ} Ġthat Ġ{ Ġcontains Exactly ("' echo ' Ġ' A '", Ġ"' echo ' Ġ' B ' Ġ&& Ġ' echo ' Ġ' C '") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġredirect Ġto Ġfile `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ Ġecho (" A ") Ġredirect To Ġ" file ". as Path (); Ġecho (" B ") Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains Exactly ("' echo ' Ġ' A ' Ġ> Ġ' file '", Ġ"' echo ' Ġ' B '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġredirect Ġto Ġfile Ġat Ġend `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ Ġecho (" A "); Ġecho (" B ") Ġredirect To Ġ" file ". as Path () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains Exactly ("' echo ' Ġ' A '", Ġ"' echo ' Ġ' B ' Ġ> Ġ' file '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠChange Directory Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġbuild Ġchange Ġdirectory Ġcommand `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ Ġchange Directory (" a / b / c ". as Path ()) Ġ}). contains Exactly ("' cd ' Ġ' a / b / c '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġbuild Ġchange Ġdirectory Ġcommand Ġor Ġexit `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ Ġchange Directory Or Exit (" a / b / c ". as Path ()) Ġ}). contains Exactly ("' cd ' Ġ' a / b / c ' Ġ|| Ġ' exit ' Ġ' 1 '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test Factory ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġecho `() Ġ= Ġtest Each < Pair < String , ĠScript Init >>( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"' echo '" Ġto Ġ{ Ġecho () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"' echo ' Ġ' Hello ! '" Ġto Ġ{ Ġecho (" Hello !") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"' echo ' Ġ' Hello ĠWorld ! '" Ġto Ġ{ Ġecho (" Hello ĠWorld !") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"' echo ' Ġ' Hello ' Ġ' World ! '" Ġto Ġ{ Ġecho (" Hello ", Ġ" World !") Ġ}, ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ( expected , Ġinit ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ ĠShell Script Ġ{ Ġinit () Ġ} Ġ} Ġthat Ġ{ Ġstring . lines (). first (). isEqualTo ( expected ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Slow Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠPoll Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġproceed Ġif Ġconnection Ġsucceeds `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassed Time Ġ= Ġhttp ( 8 9 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Script Ġ{ Ġpoll ( URI (" http :// localhost : 8 9 0 0 ")) Ġ}. exec . logging () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( passed Time ). is LessThan ( 3 . seconds ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġretry Ġuntil Ġsucceeds `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassed Time Ġ= Ġmeasure Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 . seconds . sleep () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhttp ( 8 9 0 1 ) Ġ{ Ġ 5 . seconds . sleep () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Script Ġ{ Ġpoll ( URI (" http :// localhost : 8 9 0 1 "), Ġinterval Ġ= Ġ 3 . seconds ) Ġ}. exec . logging () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( passed Time ). is GreaterThan ( 3 . seconds ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġnot Ġprint `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexec Ġ= Ġhttp ( 8 9 0 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Script Ġ{ Ġpoll ( URI (" http :// localhost : 8 9 0 2 "), Ġinterval Ġ= Ġ 1 . seconds ) Ġ}. exec . logging () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( exec ). io . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġprint Ġif Ġspecified `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexec Ġ= Ġhttp ( 8 9 0 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Script Ġ{ Ġpoll ( URI (" http :// localhost : 8 9 0 3 "), Ġinterval Ġ= Ġ 3 . seconds , Ġverbose Ġ= Ġtrue ) Ġ}. exec . logging () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( exec ). io ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains ( Output Ġtyped Ġ" Polling Ġhttp :// localhost : 8 9 0 3 ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains ( Output Ġtyped Ġ" Pol led Ġhttp :// localhost : 8 9 0 3 Ġsuccessfully .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġexit Ġon Ġtimeout `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassed Time Ġ= Ġmeasure Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoll ( URI (" http :// localhost : 8 9 0 4 "), Ġtimeout Ġ= Ġ 1 . seconds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. exec . logging () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( passed Time ). is LessThan ( 5 . seconds ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġexit Ġwith Ġ 1 2 4 Ġon Ġtimeout `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexec Ġ= ĠShell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoll ( URI (" http :// localhost : 8 9 0 5 "), Ġtimeout Ġ= Ġ 1 . seconds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. exec . logging () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( exec . exit Code ). isEqualTo ( 1 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġthrow Ġon Ġinvalid Ġinterval `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Throws < IllegalArgumentException > Ġ{ ĠShell Script Ġ{ Ġpoll ( URI (" http :// localhost "), Ġinterval Ġ= Ġ. 5 . seconds ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġthrow Ġon Ġinvalid Ġattempt Ġtimeout `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Throws < IllegalArgumentException > Ġ{ ĠShell Script Ġ{ Ġpoll ( URI (" http :// localhost "), Ġattempt Timeout Ġ= Ġ. 5 . seconds ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġthrow Ġon Ġinvalid Ġtimeout `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Throws < IllegalArgumentException > Ġ{ ĠShell Script Ġ{ Ġpoll ( URI (" http :// localhost "), Ġtimeout Ġ= Ġ. 5 . seconds ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠFile Operations Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġprovide Ġfile Ġoperations Ġby Ġstring `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile (" file . txt ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Line (" content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). toString Matches Cur ly Pattern (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcat Ġ<< HERE - {} Ġ>> " file . txt " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHERE - {} ĊĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġprovide Ġfile Ġoperations Ġby Ġpath `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile (" file . txt ". as Path ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Line (" content ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). toString Matches Cur ly Pattern (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcat Ġ<< HERE - {} Ġ>> " file . txt " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHERE - {} ĊĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠEmbed Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Embedded Shell Script () Ġ= ĠShell Script (" embedded Ġscript ĠðŁĵ Ŀ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe bang ("/ bin / bash ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! " mkdir Ġ' dir '" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! " cd Ġ' dir '" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! " sleep Ġ 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! " echo Ġ' test ' Ġ> Ġ' file . txt '" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun ĠScript Context . shell Script ( echo Name : ĠBoolean ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe bang ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! " echo Ġ' about Ġto Ġrun Ġembedded Ġscript '" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġembed ( get Embedded Shell Script (), Ġecho Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! " echo Ġ' finished Ġto Ġrun Ġembedded Ġscript '" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! " echo Ġ$( pwd )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġembed Ġshell Ġscript `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ Ġshell Script ( false ) Ġ}). toString Matches Cur ly Pattern (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ#!/ bin / sh ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho Ġ' about Ġto Ġrun Ġembedded Ġscript ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'/ bin / bash ' Ġ'- c ' Ġ' mkdir Ġ'" '" ' dir '" '" ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcd Ġ'" '" ' dir '" '" ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsleep Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho Ġ'" '" ' test '" '" ' Ġ> Ġ'" '" ' file . txt '" '" ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho Ġ' finished Ġto Ġrun Ġembedded Ġscript ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho Ġ$( pwd ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġembed Ġshell Ġscript Ġwith Ġname Ġif Ġspecified `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ Ġshell Script ( true ) Ġ}). toString Matches Cur ly Pattern (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ#!/ bin / sh ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho Ġ' about Ġto Ġrun Ġembedded Ġscript ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'/ bin / bash ' Ġ'- c ' Ġ' echo Ġ'" '" ' ${ Banner . banner (" embedded Ġscript ĠðŁĵ Ŀ ")} '" '" ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmkdir Ġ'" '" ' dir '" '" ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcd Ġ'" '" ' dir '" '" ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsleep Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho Ġ'" '" ' test '" '" ' Ġ> Ġ'" '" ' file . txt '" '" ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho Ġ' finished Ġto Ġrun Ġembedded Ġscript ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġecho Ġ$( pwd ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ S moke Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġpreserve Ġfunctionality `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexec Ġ= ĠShell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Directory Or Exit ( this @ with TempDir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshell Script ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. exec . logging () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthat ( exec . exit Code OrNull ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthat ( exec . io . ansi Removed . lines (). filter Ġ{ Ġ" terminated Ġsuccessfully Ġat " Ġ! in Ġit Ġ}. join Lines ToString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. matches Cur ly Pattern (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabout Ġto Ġrun Ġembedded Ġscript ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġâĸ ĳ âĸĳâĸĳ âĸĳâĸĳ âĸĳâĸĳ ĠE MB ED DED ĠS CRIPT ĠðŁĵ Ŀ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinished Ġto Ġrun Ġembedded Ġscript ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ path String ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthat ( resolve (" dir / file . txt ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexists () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Content (" test $ LF ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠDocker Command Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Long Line ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġbuild Ġvalid Ġdocker Ġrun `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe bang ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! Docker Run CommandLine ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Ġ= ĠDocker Image Ġ{ Ġ" image " Ġ/ Ġ" name " Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Ġ= ĠOptions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠDocker Container . from (" container - name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmount s Ġ= ĠMount Options Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . of ("/ a / b ") Ġmount At Ġ"/ c / d " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . of ("/ e / f /../ g ") Ġmount At Ġ"// h " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecutable Ġ= ĠCommandLine ("- arg 1 ", Ġ"-- argument ", Ġ" 2 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). toString Is EqualTo (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ#!/ bin / sh ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' docker ' Ġ' run ' Ġ'-- name ' Ġ' container - name ' Ġ'-- rm ' Ġ'-- interactive ' Ġ'-- mount ' Ġ' type = bind , source =/ a / b , target =/ c / d ' Ġ'-- mount ' Ġ' type = bind , source =/ e / f /../ g , target =/ h ' Ġ' image / name ' Ġ'- arg 1 ' Ġ'-- argument ' Ġ' 2 ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġbuild Ġvalid Ġdocker Ġstop `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshe bang ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! Docker Stop CommandLine (" busybox ", Ġ" guest fish ", Ġtime Ġ= Ġ 4 2 . seconds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). toString Is EqualTo (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ#!/ bin / sh ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' docker ' Ġ' stop ' Ġ'-- time ' Ġ' 4 2 ' Ġ' busybox ' Ġ' guest fish ' ĊĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠShutdown Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġbuild Ġshutdown Ġcommand `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ Ġshutdown () Ġ}). contains Exactly ("' shutdown ' Ġ'- h ' Ġ' now '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġbuild Ġshutdown Ġcommand Ġwithout Ġhalt Ġflag Ġif Ġspecified `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ Ġshutdown ( halt Ġ= Ġfalse ) Ġ}). contains Exactly ("' shutdown ' Ġ' now '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġbuild Ġshutdown Ġcommand Ġwith Ġspecified Ġtime `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ Ġshutdown ( time Ġ= Ġ"+ 2 ") Ġ}). contains Exactly ("' shutdown ' Ġ'- h ' Ġ'+ 2 '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġbuild Ġshutdown Ġcommand Ġwith Ġspecified Ġmessage `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ Ġshutdown ( message Ġ= Ġ" sh ut ting Ġdown Ġnow ") Ġ}). contains Exactly ("' shutdown ' Ġ'- h ' Ġ' now ' Ġ' sh ut ting Ġdown Ġnow '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠExit Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġbuild Ġexit Ġcommand `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsh Ġ= ĠShell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexit ( 4 2 u ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( sh ). contains Exactly ("' exit ' Ġ' 4 2 '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠComment Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġbuild Ġcomments `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsh Ġ= ĠShell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment (" test ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exit Ġ 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( sh ). contains Exactly ("# Ġtest ", Ġ" exit Ġ 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġbuild Ġmulti - line Ġcomments `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" exit Ġ 0 " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). contains Exactly ("# Ġline Ġ 1 ", Ġ"# Ġline Ġ 2 ", Ġ" exit Ġ 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠS udo Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġcreate Ġsudo Ġline `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsudo (" a Ġpassword ", Ġ" a Ġcommand ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). get Ġ{ Ġlast () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo (" echo Ġ\" a Ġpassword \" Ġ| Ġsudo Ġ- S Ġa Ġcommand ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠDelete On Completion Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġcreate Ġrm Ġline `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( Shell Script Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Self () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). get Ġ{ Ġlast () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo (" rm Ġ-- Ġ\" \$ 0 \" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġnot Ġremove Ġitself Ġby Ġdefault `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscript Ġ= ĠShell Script (). to File ( resolve (" script . sh ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Script Ġ{ Ġ! script . path String Ġ}. exec . logging () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( resolve (" script . sh ")). exists () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` should Ġremove Ġitself `( unique Id : ĠUnique Id ) Ġ= Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscript Ġ= ĠShell Script Ġ{ Ġdelete Self () Ġ}. to File ( resolve (" script . sh ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShell Script Ġ{ Ġ! script . path String Ġ}. exec . logging () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( resolve (" script . sh ")). not Ġ{ Ġexists () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠComp anion Object Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test Factory ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġcheck Ġif Ġis Ġscript `( unique Id : ĠUnique Id ) Ġ= Ġtests Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith TempDir ( unique Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġ"# ! ". toByteArray () Ġ} Ġthat Ġ{ Ġis Script () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġ"# ". toByteArray () Ġ} Ġthat Ġ{ Ġnot Ġ{ Ġis Script () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġ" foo ". toByteArray () Ġ} Ġthat Ġ{ Ġnot Ġ{ Ġis Script () Ġ} Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġ"# !" Ġ} Ġthat Ġ{ Ġis Script () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġ"#" Ġ} Ġthat Ġ{ Ġnot Ġ{ Ġis Script () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġ" foo " Ġ} Ġthat Ġ{ Ġnot Ġ{ Ġis Script () Ġ} Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġrandom File (). write Bytes ("# ! ". toByteArray ()) Ġ} Ġthat Ġ{ Ġis Script () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġrandom File (). write Bytes ("# ". toByteArray ()) Ġ} Ġthat Ġ{ Ġnot Ġ{ Ġis Script () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġrandom File (). write Bytes (" foo ". toByteArray ()) Ġ} Ġthat Ġ{ Ġnot Ġ{ Ġis Script () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpecting Ġ{ Ġresolve (" does - not - exist ") Ġ} Ġthat Ġ{ Ġnot Ġ{ Ġis Script () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠBuilder < ByteArray >. is Script (): ĠBuilder < ByteArray > Ġ= ĊĠĠĠ Ġassert (" is Ġscript ") Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . is Script ) Ġpass () ĊĠĠĠĠĠĠĠ Ġelse Ġfail (" starts Ġwith Ġ${ it . take ( 2 )} ") ĊĠĠĠ Ġ} Ċ Ċ @ Jvm Name (" char Sequence Is Script ") Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠCharSequence > ĠBuilder < T >. is Script () Ġ= ĊĠĠĠ Ġassert (" is Ġscript ") Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . is Script ) Ġpass () ĊĠĠĠĠĠĠĠ Ġelse Ġfail (" starts Ġwith Ġ${ it . take ( 2 )} ") ĊĠĠĠ Ġ} Ċ Ċ @ Jvm Name (" file Is Script ") Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠPath > ĠBuilder < T >. is Script () Ġ= ĊĠĠĠ Ġassert (" is Ġscript ") Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it . is Script ) Ġpass () ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ(! it . exists ()) Ġfail (" does Ġnot Ġexist ") ĊĠĠĠĠĠĠĠ Ġelse Ġfail (" starts Ġwith Ġ${ it . inputStream (). read N Bytes ( 2 )} ") ĊĠĠĠ Ġ} Ċ