package Ġagent Ċ Ċ import Ġco Verify Ċ import Ġhelper . Unique ID Ċ import Ġio . vertx . core . Vert x Ċ import Ġio . vertx . junit 5 . Vert x Extension Ċ import Ġio . vertx . junit 5 . Vert x TestContext Ċ import Ġio . vertx . kotlin . coroutines . dispatcher Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġmodel . process chain . Argument Ċ import Ġmodel . process chain . Argument Variable Ċ import Ġmodel . process chain . Executable Ċ import Ġmodel . process chain . Process Chain Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . assertj . core . api . Assertions . entry Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ import Ġorg . junit . jupiter . api . io . TempDir Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Path Ċ Ċ /** Ċ Ġ* ĠTests Ġfor Ġall Ġ[ Agent ] Ġimplementations Ċ Ġ* Ġ@ author ĠM ic hel ĠK ra em er Ċ Ġ*/ Ċ @ Extend With ( Vert x Extension :: class ) Ċ abstract Ġclass ĠAgent Test Ġ{ ĊĠ Ġabstract Ġfun Ġcreate Agent ( vertx : ĠVert x ): ĠAgent ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠExec utes Ġa Ġprocess Ġchain Ġthat Ġcopies Ġa Ġfile Ġfrom Ġa Ġtemporary Ġdirectory Ġto ĊĠĠ Ġ* Ġanother Ġone ĊĠĠ Ġ* Ġ@ param Ġvert x Ġthe ĠVert . x Ġinstance ĊĠĠ Ġ* Ġ@ param Ġctx Ġthe Ġtest Ġcontext ĊĠĠ Ġ*/ ĊĠ Ġ@ Test ĊĠ Ġopen Ġfun Ġexecute ( vertx : ĠVert x , Ġctx : ĠVert x TestContext , Ġ@ TempDir Ġtemp Dir : ĠPath ) Ġ{ ĊĠĠĠ Ġval Ġtemp Dir 1 Ġ= ĠFile ( temp Dir . to Real Path (). to File (), Ġ" src ") ĊĠĠĠ Ġval Ġtemp Dir 2 Ġ= ĠFile ( temp Dir . to Real Path (). to File (), Ġ" dst ") ĊĠĠĠ Ġtemp Dir 1 . mkdir s () ĊĊĠĠĠ Ġ// Ġcreate Ġtest Ġfile ĊĠĠĠ Ġval Ġinput File Ġ= ĠFile ( temp Dir 1 , Ġ" test . txt ") ĊĠĠĠ Ġinput File . write Text (" Hello Ġworld ") ĊĊĠĠĠ Ġ// Ġcreate Ġprocess Ġchain Ġthat Ġcopies Ġthe Ġtest Ġfile Ġfrom Ġtemp Dir 1 Ġto Ġtemp Dir 2 ĊĠĠĠ Ġval Ġoutput Arg Ġ= ĠArgument ( variable Ġ= ĠArgument Variable ( Unique ID . next (), Ġtemp Dir 2 . toString ()), ĊĠĠĠĠĠĠĠ Ġtype Ġ= ĠArgument . Type . OUTPUT , ĊĠĠĠĠĠĠĠ ĠdataType Ġ= ĠArgument . DATA _ TYPE _ DIRECTORY ) ĊĠĠĠ Ġval Ġprocess Chain Ġ= ĠProcess Chain ( exec ut ables Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠExec utable ( path Ġ= Ġ" cp ", Ġarguments Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArgument ( variable Ġ= ĠArgument Variable ( Unique ID . next (), Ġinput File . toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠArgument . Type . INPUT ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Arg ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ)) ĊĊĠĠĠ Ġval Ġagent Ġ= Ġcreate Agent ( vertx ) ĊĊĠĠĠ ĠGlobal Scope . launch ( vertx . dispatcher ()) Ġ{ ĊĠĠĠĠĠ Ġctx . co Verify Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġexecute Ġprocess Ġchain ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġagent . execute ( process Chain ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġresults ĊĠĠĠĠĠĠĠ Ġval ĠoutputFile Ġ= ĠFile ( temp Dir 2 , Ġinput File . name ) ĊĠĠĠĠĠĠĠ ĠassertThat ( outputFile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. exists () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Same Content As ( inputFile ) ĊĠĠĠĠĠĠĠ ĠassertThat ( results ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Size ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains ( entry ( output Arg . variable . id , ĠlistOf ( outputFile . path ))) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġctx . complete Now () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠExec utes Ġa Ġprocess Ġchain Ġthat Ġcreates Ġa Ġdirectory Ġwith Ġa Ġnew Ġfile . ĠTests ĊĠĠ Ġ* Ġif Ġoutputs Ġcan Ġbe Ġread Ġrecursively . ĊĠĠ Ġ* Ġ@ param Ġvert x Ġthe ĠVert . x Ġinstance ĊĠĠ Ġ* Ġ@ param Ġctx Ġthe Ġtest Ġcontext ĊĠĠ Ġ*/ ĊĠ Ġ@ Test ĊĠ Ġopen Ġfun Ġrecursive ( vertx : ĠVert x , Ġctx : ĠVert x TestContext , Ġ@ TempDir Ġtemp Dir : ĠPath ) Ġ{ ĊĠĠĠ Ġval Ġtemp Dir 1 Ġ= ĠFile ( temp Dir . to Real Path (). to File (), Ġ" src ") ĊĠĠĠ Ġval Ġtemp Dir 2 Ġ= ĠFile ( temp Dir . to Real Path (). to File (), Ġ" dst ") ĊĠĠĠ Ġval Ġnew Dir Ġ= ĠFile ( temp Dir 2 , Ġ" new Dir ") ĊĠĠĠ Ġval Ġnew File Ġ= ĠFile ( new Dir , Ġ" new File . txt ") ĊĠĠĠ Ġtemp Dir 1 . mkdir s () ĊĊĠĠĠ Ġ// Ġcreate Ġtest Ġfile ĊĠĠĠ Ġval Ġinput File Ġ= ĠFile ( temp Dir 1 , Ġ" test . txt ") ĊĠĠĠ Ġinput File . write Text (" Hello Ġworld ") ĊĊĠĠĠ Ġ// Ġcreate Ġprocess Ġchain Ġthat Ġcreates Ġa Ġnew Ġdirectory Ġand Ġthen Ġcopies Ġthe ĊĠĠĠ Ġ// Ġtest Ġfile Ġfrom Ġtemp Dir 1 Ġto Ġtemp Dir 2 / new Dir ĊĠĠĠ Ġval Ġoutput Arg Ġ= ĠArgument ( variable Ġ= ĠArgument Variable ( Unique ID . next (), Ġtemp Dir 2 . toString ()), ĊĠĠĠĠĠĠĠ Ġtype Ġ= ĠArgument . Type . OUTPUT , ĊĠĠĠĠĠĠĠ ĠdataType Ġ= ĠArgument . DATA _ TYPE _ DIRECTORY ) ĊĠĠĠ Ġval Ġoutput New Dir Arg Ġ= ĠArgument ( variable Ġ= ĠArgument Variable ( Unique ID . next (), Ġnew Dir . toString ()), ĊĠĠĠĠĠĠĠ Ġtype Ġ= ĠArgument . Type . OUTPUT , ĊĠĠĠĠĠĠĠ ĠdataType Ġ= ĠArgument . DATA _ TYPE _ DIRECTORY ) ĊĠĠĠ Ġval Ġoutput New File Arg Ġ= ĠArgument ( variable Ġ= ĠArgument Variable ( Unique ID . next (), Ġnew File . toString ()), ĊĠĠĠĠĠĠĠ Ġtype Ġ= ĠArgument . Type . OUTPUT , ĊĠĠĠĠĠĠĠ ĠdataType Ġ= ĠArgument . DATA _ TYPE _ STRING ) ĊĠĠĠ Ġval Ġprocess Chain Ġ= ĠProcess Chain ( exec ut ables Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠExec utable ( path Ġ= Ġ" mkdir ", Ġarguments Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArgument ( label Ġ= Ġ"- p ", Ġvariable Ġ= ĠArgument Variable ( Unique ID . next (), Ġ" true "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠArgument . Type . ARGUMENT , ĠdataType Ġ= ĠArgument . DATA _ TYPE _ BOOLEAN ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput New Dir Arg ĊĠĠĠĠĠĠĠ Ġ)), ĊĠĠĠĠĠĠĠ ĠExec utable ( path Ġ= Ġ" touch ", Ġarguments Ġ= ĠlistOf ( output New File Arg )), ĊĠĠĠĠĠĠĠ ĠExec utable ( path Ġ= Ġ" cp ", Ġarguments Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArgument ( variable Ġ= ĠArgument Variable ( Unique ID . next (), Ġinput File . toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠArgument . Type . INPUT ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Arg ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ)) ĊĊĠĠĠ Ġval Ġagent Ġ= Ġcreate Agent ( vertx ) ĊĊĠĠĠ ĠGlobal Scope . launch ( vertx . dispatcher ()) Ġ{ ĊĠĠĠĠĠ Ġctx . co Verify Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġexecute Ġprocess Ġchain ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġagent . execute ( process Chain ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġresults ĊĠĠĠĠĠĠĠ Ġval ĠoutputFile Ġ= ĠFile ( temp Dir 2 , Ġinput File . name ) ĊĠĠĠĠĠĠĠ ĠassertThat ( outputFile ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. exists () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Same Content As ( inputFile ) ĊĠĠĠĠĠĠĠ ĠassertThat ( new File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. exists () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Content ("") ĊĠĠĠĠĠĠĠ ĠassertThat ( results ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. has Size ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains ( entry ( output Arg . variable . id , ĠlistOf ( outputFile . path , Ġnew File . path ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains ( entry ( output New Dir Arg . variable . id , ĠlistOf ( new File . path ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains ( entry ( output New File Arg . variable . id , ĠlistOf ( new File . path ))) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġctx . complete Now () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ