/* Ċ Ġ* ĠCopyright Ġ( c ) ĠMeta ĠPlatform s , ĠInc . Ġand Ġaffiliates . Ċ Ġ* Ċ Ġ* Ġ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 . facebook . kt fmt . cli Ċ Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . io . Print Stream Ċ import Ġjava . lang . IllegalStateException Ċ import Ġjava . util . concurrent . Fork Join Pool Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert . fail Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ Ċ @ Suppress (" Function Naming ") Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠMain Test Ġ{ ĊĊĠ Ġprivate Ġval Ġroot Ġ= Ġcreate TempDir () ĊĊĠ Ġprivate Ġval Ġempty Input Ġ= Ġ"". byte InputStream () ĊĠ Ġprivate Ġval Ġout Ġ= ĠByteArrayOutputStream () ĊĠ Ġprivate Ġval Ġerr Ġ= ĠByteArrayOutputStream () ĊĊĠ Ġ@ After ĊĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠ Ġroot . delete Re cursively () ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠScenario : Ġsomeone Ġ_ really _ Ġwants Ġto Ġformat Ġthis Ġfile , Ġregardless Ġof Ġits Ġextension . ĠWhen Ġa ĊĠĠ Ġ* Ġsingle Ġargument Ġfile Ġis Ġgiven , Ġit Ġis Ġused Ġas Ġis Ġwithout Ġfiltering Ġby Ġextension . ĊĠĠ Ġ*/ ĊĠ Ġ@ Test ĊĠ Ġfun Ġ` expand Args ToFile Names Ġ- Ġsingle Ġfile Ġarg Ġis Ġused Ġas Ġis `() Ġ{ ĊĠĠĠ Ġval Ġfoo Bar Ġ= Ġroot . resolve (" foo . bar ") ĊĠĠĠ Ġfoo Bar . write Text (" hi ") ĊĠĠĠ ĠassertThat ( Main . expand Args ToFile Names ( listOf ( foo Bar . toString ())) ). contains Exactly ( foo Bar ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` expand Args ToFile Names Ġ- Ġsingle Ġarg Ġwhich Ġis Ġnot Ġa Ġfile Ġis Ġnot Ġreturned `() Ġ{ ĊĠĠĠ Ġval Ġfoo Bar Ġ= Ġroot . resolve (" foo . bar ") ĊĠĠĠ ĠassertThat ( Main . expand Args ToFile Names ( listOf ( foo Bar . toString ())) ). isEmpty () ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` expand Args ToFile Names Ġ- Ġsingle Ġarg Ġwhich Ġis Ġa Ġdirectory Ġis Ġresolved Ġto Ġits Ġrecursively Ġcontained Ġkt Ġfiles `() Ġ{ ĊĠĠĠ Ġval Ġdir Ġ= Ġroot . resolve (" dir ") ĊĠĠĠ Ġdir . mkdir s () ĊĠĠĠ Ġval Ġfoo Ġ= Ġdir . resolve (" foo . kt ") ĊĠĠĠ Ġfoo . write Text ("") ĊĠĠĠ Ġval Ġbar Ġ= Ġdir . resolve (" bar . kt ") ĊĠĠĠ Ġbar . write Text ("") ĊĠĠĠ ĠassertThat ( Main . expand Args ToFile Names ( listOf ( dir . toString ())) ). contains Exactly ( foo , Ġbar ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` expand Args ToFile Names Ġ- Ġmultiple Ġdirectory Ġargs Ġare Ġresolved Ġto Ġtheir Ġrecursively Ġcontained Ġkt Ġfiles `() Ġ{ ĊĠĠĠ Ġval Ġdir 1 Ġ= Ġroot . resolve (" dir 1 ") ĊĠĠĠ Ġdir 1 . mkdir s () ĊĠĠĠ Ġval Ġfoo 1 Ġ= Ġdir 1 . resolve (" foo 1 . kt ") ĊĠĠĠ Ġfoo 1 . write Text ("") ĊĠĠĠ Ġval Ġbar 1 Ġ= Ġdir 1 . resolve (" bar 1 . kt ") ĊĠĠĠ Ġbar 1 . write Text ("") ĊĊĠĠĠ Ġval Ġdir 2 Ġ= Ġroot . resolve (" dir 2 ") ĊĠĠĠ Ġdir 1 . mkdir s () ĊĠĠĠ Ġval Ġfoo 2 Ġ= Ġdir 1 . resolve (" foo 2 . kt ") ĊĠĠĠ Ġfoo 2 . write Text ("") ĊĠĠĠ Ġval Ġbar 2 Ġ= Ġdir 1 . resolve (" bar 2 . kt ") ĊĠĠĠ Ġbar 2 . write Text ("") ĊĊĠĠĠ ĠassertThat ( Main . expand Args ToFile Names ( listOf ( dir 1 . toString (), Ġdir 2 . toString ()))) ĊĠĠĠĠĠĠĠ Ġ. contains Exactly ( foo 1 , Ġbar 1 , Ġfoo 2 , Ġbar 2 ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` expand Args ToFile Names Ġ- Ġa Ġdash Ġis Ġan Ġerror `() Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ ĠMain . expand Args ToFile Names ( listOf ( root . resolve (" foo . bar "). toString (), ĠFile ("- "). toString ())) ĊĠĠĠĠĠ Ġfail (" expected Ġexception , Ġbut Ġnothing Ġwas Ġthrown ") ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalStateException ) Ġ{ ĊĠĠĠĠĠ ĠassertThat ( e . message ). contains (" Error ") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` Using Ġ'-' Ġas Ġthe Ġfilename Ġformats Ġan ĠInputStream `() Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ" fun ĠĠĠ Ġf 1 Ġ( Ġ Ġ) Ġ: ĠĠĠ ĠInt Ġ= ĠĠĠĠ 0 " ĊĠĠĠ ĠMain ( code . byte InputStream (), ĠPrint Stream ( out ), ĠPrint Stream ( err ), ĠarrayOf ("- ")). run () ĊĊĠĠĠ Ġval Ġexpected Ġ= Ġ" fun Ġf 1 (): ĠInt Ġ= Ġ 0 \ n " ĊĠĠĠ ĠassertThat ( out . toString (" UTF - 8 ")). isEqualTo ( expected ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` Parsing Ġerrors Ġare Ġreported Ġ( stdin )` () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ" fun ĠĠĠ Ġf 1 Ġ( Ġ Ġ" ĊĠĠĠ Ġval ĠreturnValue Ġ= ĊĠĠĠĠĠĠĠ ĠMain ( code . byte InputStream (), ĠPrint Stream ( out ), ĠPrint Stream ( err ), ĠarrayOf ("- ")). run () ĊĊĠĠĠ ĠassertThat ( returnValue ). isEqualTo ( 1 ) ĊĠĠĠ ĠassertThat ( err . toString (" UTF - 8 ")). startsWith ("< stdin >: 1 : 1 4 : Ġerror : Ġ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` Parsing Ġerrors Ġare Ġreported Ġ( file )` () Ġ{ ĊĠĠĠ Ġval Ġfoo Bar Ġ= Ġroot . resolve (" foo . kt ") ĊĠĠĠ Ġfoo Bar . write Text (" fun ĠĠĠ Ġf 1 Ġ( Ġ Ġ") ĊĠĠĠ Ġval ĠreturnValue Ġ= ĊĠĠĠĠĠĠĠ ĠMain ( empty Input , ĠPrint Stream ( out ), ĠPrint Stream ( err ), ĠarrayOf ( foo Bar . toString ())). run () ĊĊĠĠĠ ĠassertThat ( returnValue ). isEqualTo ( 1 ) ĊĠĠĠ ĠassertThat ( err . toString (" UTF - 8 ")). contains (" foo . kt : 1 : 1 4 : Ġerror : Ġ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` all Ġfiles Ġin Ġargs Ġare Ġprocessed , Ġeven Ġif Ġone Ġof Ġthem Ġhas Ġan Ġerror `() Ġ{ ĊĠĠĠ Ġval Ġfile 1 Ġ= Ġroot . resolve (" file 1 . kt ") ĊĠĠĠ Ġval Ġfile 2 Broken Ġ= Ġroot . resolve (" file 2 . kt ") ĊĠĠĠ Ġval Ġfile 3 Ġ= Ġroot . resolve (" file 3 . kt ") ĊĠĠĠ Ġfile 1 . write Text (" fun ĠĠĠ Ġf 1 Ġ() Ġ Ġ") ĊĠĠĠ Ġfile 2 Broken . write Text (" fun ĠĠĠ Ġf 1 Ġ( Ġ Ġ") ĊĠĠĠ Ġfile 3 . write Text (" fun ĠĠĠ Ġf 1 Ġ() Ġ Ġ") ĊĊĠĠĠ Ġ// ĠMake ĠMain () Ġprocess Ġfiles Ġser ially . ĊĠĠĠ Ġval Ġfork Join Pool Ġ= ĠFork Join Pool ( 1 ) ĊĊĠĠĠ Ġval ĠreturnValue : ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġfork Join Pool ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. submit < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Input , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( out ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( err ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( file 1 . toString (), Ġfile 2 Broken . toString (), Ġfile 3 . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĊĠĠĠ ĠassertThat ( returnValue ). isEqualTo ( 1 ) ĊĠĠĠ ĠassertThat ( err . toString (" UTF - 8 ")). contains (" Done Ġformatting Ġ$ file 1 ") ĊĠĠĠ ĠassertThat ( err . toString (" UTF - 8 ")). contains (" file 2 . kt : 1 : 1 4 : Ġerror : Ġ") ĊĠĠĠ ĠassertThat ( err . toString (" UTF - 8 ")). contains (" Done Ġformatting Ġ$ file 3 ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` dropbox - style Ġis Ġpassed Ġto Ġformatter Ġ( file )` () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= ĊĠĠĠĠĠĠĠ Ġ""" fun Ġf () Ġ{ ĊĠĠĠ Ġfor Ġ( child Ġin ĊĠĠĠĠĠĠĠ Ġnode . next . next . next . next . next . next . next . next . next . next . next . next . next . next . data ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( child ) ĊĠĠĠ Ġ} Ċ } Ċ """ ĊĠĠĠ Ġval Ġfoo Bar Ġ= Ġroot . resolve (" foo . kt ") ĊĠĠĠ Ġfoo Bar . write Text ( code ) ĊĊĠĠĠ ĠMain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty Input , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( out ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( err ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ("-- dropbox - style ", Ġfoo Bar . toString ())) ĊĠĠĠĠĠĠĠ Ġ. run () ĊĊĠĠĠ ĠassertThat ( foo Bar . read Text ()). isEqualTo ( code ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` dropbox - style Ġis Ġpassed Ġto Ġformatter Ġ( stdin )` () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= ĊĠĠĠĠĠĠĠ Ġ""" fun Ġf () Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| for Ġ( child Ġin ĊĠĠĠĠĠĠĠĠĠ Ġ| node . next . next . next . next . next . next . next . next . next . next . next . next . next . next . data ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| println ( child ) ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĠĠĠ Ġval Ġformatted Ġ= ĊĠĠĠĠĠĠĠ Ġ""" fun Ġf () Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġfor Ġ( child Ġin ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġnode . next . next . next . next . next . next . next . next . next . next . next . next . next . next . data ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠ Ġprintln ( child ) ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĠĠĠ ĠMain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode . byte InputStream (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( out ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( err ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ("-- dropbox - style ", Ġ"- ")) ĊĠĠĠĠĠĠĠ Ġ. run () ĊĊĠĠĠ ĠassertThat ( out . toString (" UTF - 8 ")). isEqualTo ( formatted ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` expand Args ToFile Names Ġ- Ġresolves Ġ' kt ' Ġand Ġ' k ts ' Ġfilenames Ġonly Ġ( re cursively )` () Ġ{ ĊĠĠĠ Ġval Ġf 1 Ġ= Ġroot . resolve (" 1 . kt ") ĊĠĠĠ Ġval Ġf 2 Ġ= Ġroot . resolve (" 2 . kt ") ĊĠĠĠ Ġval Ġf 3 Ġ= Ġroot . resolve (" 3 ") ĊĠĠĠ Ġval Ġf 4 Ġ= Ġroot . resolve (" 4 . dummy ext ") ĊĠĠĠ Ġval Ġf 5 Ġ= Ġroot . resolve (" 5 . k ts ") ĊĊĠĠĠ Ġval Ġdir Ġ= Ġroot . resolve (" foo ") ĊĠĠĠ Ġdir . mkdir s () ĊĠĠĠ Ġval Ġf 6 Ġ= Ġroot . resolve (" foo / 1 . kt ") ĊĠĠĠ Ġval Ġf 7 Ġ= Ġroot . resolve (" foo / 2 . k ts ") ĊĠĠĠ Ġval Ġf 8 Ġ= Ġroot . resolve (" foo / 3 . dummy ext ") ĊĠĠĠ Ġval Ġfiles Ġ= ĠlistOf ( f 1 , Ġf 2 , Ġf 3 , Ġf 4 , Ġf 5 , Ġf 6 , Ġf 7 , Ġf 8 ) ĊĠĠĠ Ġfor Ġ( f Ġin Ġfiles ) Ġ{ ĊĠĠĠĠĠ Ġf . createNew File () ĊĠĠĠ Ġ} ĊĠĠĠ ĠassertThat ( Main . expand Args ToFile Names ( files . map Ġ{ Ġit . toString () Ġ})) ĊĠĠĠĠĠĠĠ Ġ. contains Exactly ( f 1 , Ġf 2 , Ġf 5 , Ġf 6 , Ġf 7 ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` formatting Ġfrom Ġstdin Ġprints Ġformatted Ġcode Ġto Ġstdout Ġregardless Ġof Ġwhether Ġit Ġwas Ġalready Ġformatted `() Ġ{ ĊĠĠĠ Ġval Ġexpected Ġ= Ġ""" fun Ġf () Ġ= Ġprintln (" hello , Ġworld ") """ Ġ+ Ġ"\ n " ĊĊĠĠĠ ĠMain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" fun Ġf Ġ( ĠĠ Ġ) Ġ= ĠĠĠ Ġprintln (" hello , Ġworld ") """. byte InputStream (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( out ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( err ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ("- ")) ĊĠĠĠĠĠĠĠ Ġ. run () ĊĠĠĠ ĠassertThat ( out . toString (" UTF - 8 ")). isEqualTo ( expected ) ĊĊĠĠĠ Ġout . reset () ĊĊĠĠĠ ĠMain ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" fun Ġf Ġ() Ġ= Ġprintln (" hello , Ġworld ") """. byte InputStream (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( out ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( err ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ("- ")) ĊĠĠĠĠĠĠĠ Ġ. run () ĊĠĠĠ ĠassertThat ( out . toString (" UTF - 8 ")). isEqualTo ( expected ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ`-- dry - run Ġprints Ġfilename Ġand Ġdoes Ġnot Ġchange Ġfile `() Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ""" fun Ġf Ġ() Ġ= ĠĠĠ Ġprintln ( Ġ" hello , Ġworld " Ġ) """ ĊĠĠĠ Ġval Ġfile Ġ= Ġroot . resolve (" foo . kt ") ĊĠĠĠ Ġfile . write Text ( code ) ĊĊĠĠĠ ĠMain ( empty Input , ĠPrint Stream ( out ), ĠPrint Stream ( err ), ĠarrayOf ("-- dry - run ", Ġfile . toString ())) ĊĠĠĠĠĠĠĠ Ġ. run () ĊĊĠĠĠ ĠassertThat ( file . read Text ()). isEqualTo ( code ) ĊĠĠĠ ĠassertThat ( out . toString (" UTF - 8 ")). contains ( file . toString ()) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ`-- dry - run Ġprints Ġ' stdin ' Ġand Ġdoes Ġnot Ġre format Ġcode Ġfrom Ġstdin `() Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ""" fun Ġf Ġ() Ġ= ĠĠĠ Ġprintln ( Ġ" hello , Ġworld " Ġ) """ ĊĊĠĠĠ ĠMain ( code . byte InputStream (), ĠPrint Stream ( out ), ĠPrint Stream ( err ), ĠarrayOf ("-- dry - run ", Ġ"- ")) ĊĠĠĠĠĠĠĠ Ġ. run () ĊĊĠĠĠ ĠassertThat ( out . toString (" UTF - 8 ")). does Not Contain (" hello , Ġworld ") ĊĠĠĠ ĠassertThat ( out . toString (" UTF - 8 ")). isEqualTo ("< stdin >\ n ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ`-- dry - run Ġprints Ġnothing Ġwhen Ġthere Ġare Ġno Ġchanges Ġneeded Ġ( file )` () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ""" fun Ġf () Ġ= Ġprintln (" hello , Ġworld ") \ n """ ĊĠĠĠ Ġval Ġfile Ġ= Ġroot . resolve (" foo . kt ") ĊĠĠĠ Ġfile . write Text ( code ) ĊĊĠĠĠ ĠMain ( empty Input , ĠPrint Stream ( out ), ĠPrint Stream ( err ), ĠarrayOf ("-- dry - run ", Ġfile . toString ())) ĊĠĠĠĠĠĠĠ Ġ. run () ĊĊĠĠĠ ĠassertThat ( out . toString (" UTF - 8 ")). isEmpty () ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ`-- dry - run Ġprints Ġnothing Ġwhen Ġthere Ġare Ġno Ġchanges Ġneeded Ġ( stdin )` () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ""" fun Ġf () Ġ= Ġprintln (" hello , Ġworld ") \ n """ ĊĊĠĠĠ ĠMain ( code . byte InputStream (), ĠPrint Stream ( out ), ĠPrint Stream ( err ), ĠarrayOf ("-- dry - run ", Ġ"- ")) ĊĠĠĠĠĠĠĠ Ġ. run () ĊĊĠĠĠ ĠassertThat ( out . toString (" UTF - 8 ")). isEmpty () ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` Exit Ġcode Ġis Ġ 0 Ġwhen Ġthere Ġare Ġchanges Ġ( file )` () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ""" fun Ġf Ġ() Ġ= ĠĠĠ Ġprintln ( Ġ" hello , Ġworld " Ġ) """ ĊĠĠĠ Ġval Ġfile Ġ= Ġroot . resolve (" foo . kt ") ĊĠĠĠ Ġfile . write Text ( code ) ĊĊĠĠĠ Ġval Ġexit Code Ġ= ĊĠĠĠĠĠĠĠ ĠMain ( empty Input , ĠPrint Stream ( out ), ĠPrint Stream ( err ), ĠarrayOf ( file . toString ())). run () ĊĊĠĠĠ ĠassertThat ( exit Code ). isEqualTo ( 0 ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` Ex its Ġwith Ġ 0 Ġwhen Ġthere Ġare Ġchanges Ġ( stdin )` () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ""" fun Ġf Ġ() Ġ= ĠĠĠ Ġprintln ( Ġ" hello , Ġworld " Ġ) """ ĊĊĠĠĠ Ġval Ġexit Code Ġ= ĊĠĠĠĠĠĠĠ ĠMain ( code . byte InputStream (), ĠPrint Stream ( out ), ĠPrint Stream ( err ), ĠarrayOf ("- ")). run () ĊĊĠĠĠ ĠassertThat ( exit Code ). isEqualTo ( 0 ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` Exit Ġcode Ġis Ġ 1 Ġwhen Ġthere Ġare Ġchanges Ġand Ġ-- set - exit - if - changed Ġis Ġset Ġ( file )` () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ""" fun Ġf Ġ() Ġ= ĠĠĠ Ġprintln ( Ġ" hello , Ġworld " Ġ) """ ĊĠĠĠ Ġval Ġfile Ġ= Ġroot . resolve (" foo . kt ") ĊĠĠĠ Ġfile . write Text ( code ) ĊĊĠĠĠ Ġval Ġexit Code Ġ= ĊĠĠĠĠĠĠĠ ĠMain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Input , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( out ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( err ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ("-- set - exit - if - changed ", Ġfile . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run () ĊĊĠĠĠ ĠassertThat ( exit Code ). isEqualTo ( 1 ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` Exit Ġcode Ġis Ġ 1 Ġwhen Ġthere Ġare Ġchanges Ġand Ġ-- set - exit - if - changed Ġis Ġset Ġ( stdin )` () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ""" fun Ġf Ġ() Ġ= ĠĠĠ Ġprintln ( Ġ" hello , Ġworld " Ġ) """ ĊĊĠĠĠ Ġval Ġexit Code Ġ= ĊĠĠĠĠĠĠĠ ĠMain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode . byte InputStream (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( out ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( err ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ("-- set - exit - if - changed ", Ġ"- ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run () ĊĊĠĠĠ ĠassertThat ( exit Code ). isEqualTo ( 1 ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ`-- set - exit - if - changed Ġand Ġ-- dry - run Ġchanges Ġnothing , Ġprints Ġfilenames , Ġand Ġexits Ġwith Ġ 1 Ġ( file )` () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ""" fun Ġf Ġ() Ġ= ĠĠĠ Ġprintln ( Ġ" hello , Ġworld " Ġ) """ ĊĠĠĠ Ġval Ġfile Ġ= Ġroot . resolve (" foo . kt ") ĊĠĠĠ Ġfile . write Text ( code ) ĊĊĠĠĠ Ġval Ġexit Code Ġ= ĊĠĠĠĠĠĠĠ ĠMain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Input , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( out ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( err ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ("-- dry - run ", Ġ"-- set - exit - if - changed ", Ġfile . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run () ĊĊĠĠĠ ĠassertThat ( file . read Text ()). isEqualTo ( code ) ĊĠĠĠ ĠassertThat ( out . toString (" UTF - 8 ")). contains ( file . toString ()) ĊĠĠĠ ĠassertThat ( exit Code ). isEqualTo ( 1 ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ`-- set - exit - if - changed Ġand Ġ-- dry - run Ġchanges Ġnothing , Ġprints Ġfilenames , Ġand Ġexits Ġwith Ġ 1 Ġ( stdin )` () Ġ{ ĊĠĠĠ Ġval Ġcode Ġ= Ġ""" fun Ġf Ġ() Ġ= ĠĠĠ Ġprintln ( Ġ" hello , Ġworld " Ġ) """ ĊĊĠĠĠ Ġval Ġexit Code Ġ= ĊĠĠĠĠĠĠĠ ĠMain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode . byte InputStream (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( out ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPrint Stream ( err ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ("-- dry - run ", Ġ"-- set - exit - if - changed ", Ġ"- ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run () ĊĊĠĠĠ ĠassertThat ( out . toString (" UTF - 8 ")). does Not Contain (" hello , Ġworld ") ĊĠĠĠ ĠassertThat ( out . toString (" UTF - 8 ")). isEqualTo ("< stdin >\ n ") ĊĠĠĠ ĠassertThat ( exit Code ). isEqualTo ( 1 ) ĊĠ Ġ} Ċ } Ċ