package Ġeu . j rie . jetbrains . kotlin shell . shell . pip ing Ċ Ċ import Ġeu . j rie . jetbrains . kotlin shell . processes . Process Command er Ċ import Ġeu . j rie . jetbrains . kotlin shell . processes . execution . ExecutionContext Ċ import Ġeu . j rie . jetbrains . kotlin shell . processes . pipeline . Pipeline Ċ import Ġeu . j rie . jetbrains . kotlin shell . processes . pipeline . Pipeline Context Lambda Ċ import Ġeu . j rie . jetbrains . kotlin shell . processes . process . Process Channel Ċ import Ġeu . j rie . jetbrains . kotlin shell . processes . process . Process Receive Channel Ċ import Ġeu . j rie . jetbrains . kotlin shell . processes . process . Process Send Channel Ċ import Ġeu . j rie . jetbrains . kotlin shell . shell . Execution Mode Ċ import Ġeu . j rie . jetbrains . kotlin shell . shell . Readonly Ċ import Ġio . mock k . mock k Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . io . core . Byte Read Packet Ċ import Ġkotlinx . io . core . build Packet Ċ import Ġkotlinx . io . core . read Bytes Ċ import Ġkotlinx . io . core . write Text Ċ import Ġkotlinx . io . streams . write Packet Ċ import Ġorg . junit . jupiter . api . Assertions Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . io . File Ċ Ċ @ Experimental Cor outines Api Ċ class ĠShell Pip ing Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġshell Ġ= ĠSample Shell () ĊĊĠĠĠ Ġprivate Ġval Ġabc : ĠByte Read Packet Ġget () Ġ= Ġbuild Packet Ġ{ Ġwrite Text (" abc ") Ġ} ĊĠĠĠ Ġprivate Ġval Ġdef : ĠByte Read Packet Ġget () Ġ= Ġbuild Packet Ġ{ Ġwrite Text (" def ") Ġ} ĊĠĠĠ Ġprivate Ġval Ġxyz : ĠByte Read Packet Ġget () Ġ= Ġbuild Packet Ġ{ Ġwrite Text (" xyz ") Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcreate ĠContext Lambda `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġlambda Ġ= Ġshell . context Lambda Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . stdin . receive () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . stdout . send ( abc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . stderr . send ( def ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Lambda ( lambda ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcreate ĠPacket Lambda `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġlambda Ġ= Ġshell . packet Lambda Ġ{ Ġabc Ġto Ġdef Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Lambda ( lambda ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcreate ĠByteArray Lambda `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġlambda Ġ= Ġshell . byteArray Lambda Ġ{ Ġabc . read Bytes () Ġto Ġdef . read Bytes () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Lambda ( lambda ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcreate ĠString Lambda `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġlambda Ġ= Ġshell . string Lambda Ġ{ Ġabc . read Text () Ġto Ġdef . read Text () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Lambda ( lambda ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcreate ĠStream Lambda `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġexpect Ġno Ġerror ĊĠĠĠĠĠĠĠ Ġshell . stream Lambda Ġ{ Ġstdin , Ġstdout , Ġstderr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstdin . use Ġ{ Ġit . read Bytes () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstdout . write Packet ( abc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstderr . write Packet ( def ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcreate Ġpacket Ġfrom Ġgiven ĠByteArray `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġ" abc ". toByteArray () ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġpacket Ġ= Ġshell . packet ( bytes ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠAssertions . assert Iterable Equals ( bytes . toList (), Ġpacket . read Bytes (). toList ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcreate Ġpacket Ġfrom Ġgiven ĠString `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġstring Ġ= Ġ" abc " ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġpacket Ġ= Ġshell . packet ( string ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertEquals ( string , Ġpacket . read Text ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcreate Ġempty Ġpacket `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġpacket Ġ= Ġshell . empty Packet () ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertTrue ( packet . isEmpty ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcreate Ġempty ĠByteArray `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġshell . empty ByteArray () ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġarray . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Lambda ( lambda : ĠPipeline Context Lambda ) Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠSample Context () ĊĊĠĠĠĠĠĠĠ Ġ( context . stdin Ġas ĠProcess Channel ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( xyz ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlambda ( context ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( abc . read Text (), Ġ( context . stdout Ġas ĠProcess Channel ). receive (). read Text ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( def . read Text (), Ġ( context . stderr Ġas ĠProcess Channel ). receive (). read Text ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( context . stdout . isEmpty ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( context . stderr . isEmpty ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSample Shell Ġ: ĠShell Pip ing Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġtest Scope : ĠCor outine Scope ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġscope : ĠCor outine Scope Ġget () Ġ= Ġtest Scope !! ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġenvironment : ĠMap < String , ĠString > Ġ= Ġmap Of (" PIPELINE _ CHANNEL _ BUFFER _ SIZE " Ġto Ġ" 1 ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġpipeline ( mode : ĠExecution Mode , Ġpipeline Config : ĠPipeline Config ): ĠPipeline Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdet ached P ipelines : ĠList < Pair < Int , ĠPipeline >> Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġdetach ( pipeline Config : ĠPipeline Config ): ĠPipeline Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġfg ( pipeline : ĠPipeline ) Ġ= ĠUnit ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcd ( dir : ĠFile ): ĠFile Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvariable ( variable : ĠPair < String , ĠString >) Ġ= ĠUnit ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠReadonly . variable ( variable : ĠPair < String , ĠString >) Ġ= ĠUnit ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexport ( env : ĠPair < String , ĠString >) Ġ= ĠUnit ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠReadonly . export ( env : ĠPair < String , ĠString >) Ġ= ĠUnit ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġunset ( key : ĠString ) Ġ= ĠUnit ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġvariables : ĠMap < String , ĠString > Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdirectory : ĠFile Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġfinalize () Ġ Ġ= ĠUnit ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġstdin : ĠProcess Receive Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġstdout : ĠProcess Send Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġstderr : ĠProcess Send Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcommand er : ĠProcess Command er Ġ= Ġmock k () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSample Pip ing DSL Shell Ġ: ĠAbstract Pip ing DSL Shell Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġtest Scope : ĠCor outine Scope ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġscope : ĠCor outine Scope Ġget () Ġ= Ġtest Scope !! ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġenvironment : ĠMap < String , ĠString > Ġ= Ġmap Of (" PIPELINE _ CHANNEL _ BUFFER _ SIZE " Ġto Ġ" 1 ") ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcd ( dir : ĠFile ): ĠFile Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvariable ( variable : ĠPair < String , ĠString >) Ġ= ĠUnit ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠReadonly . variable ( variable : ĠPair < String , ĠString >) Ġ= ĠUnit ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġexport ( env : ĠPair < String , ĠString >) Ġ= ĠUnit ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠReadonly . export ( env : ĠPair < String , ĠString >) Ġ= ĠUnit ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġunset ( key : ĠString ) Ġ= ĠUnit ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġvariables : ĠMap < String , ĠString > Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdirectory : ĠFile Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġfinalize () Ġ Ġ= ĠUnit ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġstdin : ĠProcess Receive Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġstdout : ĠProcess Send Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġstderr : ĠProcess Send Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcommand er : ĠProcess Command er Ġ= Ġmock k () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠSample Context Ġ: ĠExecutionContext Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġstdin : ĠProcess Receive Channel Ġ= ĠChannel ( 5 ) ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġstdout : ĠProcess Send Channel Ġ= ĠChannel ( 5 ) ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġstderr : ĠProcess Send Channel Ġ= ĠChannel ( 5 ) ĊĠĠĠ Ġ} Ċ }