/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠSquare ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 . squareup . workflow . testing Ċ Ċ import Ġcom . squareup . workflow . Render Context Ċ import Ġcom . squareup . workflow . Snapshot Ċ import Ġcom . squareup . workflow . State ful Workflow Ċ import Ġcom . squareup . workflow . State less Workflow Ċ import Ġcom . squareup . workflow . Workflow Ċ import Ġcom . squareup . workflow . Workflow Action . Companion . enter State Ċ import Ġcom . squareup . workflow . render Child Ċ import Ġcom . squareup . workflow . state less Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . fail Ċ Ċ class ĠRender Tester Test Ġ{ ĊĊĠ Ġ@ Test Ġfun Ġ` state less Ġinput Ġand Ġrendering `() Ġ{ ĊĠĠĠ Ġval Ġworkflow Ġ= ĠWorkflow . state less < String , ĠString , ĠString > Ġ{ Ġinput Ġ-> ĊĠĠĠĠĠ Ġreturn @ state less Ġ" input : Ġ$ input " ĊĠĠĠ Ġ} Ġas ĠStateless Workflow ĊĊĠĠĠ Ġworkflow . test Render (" start ") Ġ{ ĊĠĠĠĠĠ ĠassertEquals (" input : Ġstart ", Ġrendering ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġ` state ful Ġworkflow Ġgets Ġstate `() Ġ{ ĊĠĠĠ Ġval Ġworkflow Ġ= Ġobject Ġ: ĠStateful Workflow < String , ĠString , ĠNothing , ĠString >() Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun ĠinitialState ( ĊĠĠĠĠĠĠĠ Ġinput : ĠString , ĊĠĠĠĠĠĠĠ Ġsnapshot : ĠSnapshot ? ĊĠĠĠĠĠ Ġ): ĠString Ġ= Ġfail (" Expected ĠinitialState Ġnot Ġto Ġbe Ġcalled .") ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġrender ( ĊĠĠĠĠĠĠĠ Ġinput : ĠString , ĊĠĠĠĠĠĠĠ Ġstate : ĠString , ĊĠĠĠĠĠĠĠ Ġcontext : ĠRender Context < String , ĠNothing > ĊĠĠĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" input =$ input , Ġstate =$ state " ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġsnapshot State ( state : ĠString ): ĠSnapshot Ġ= ĊĠĠĠĠĠĠĠ Ġfail (" Expected Ġsnapshot State Ġnot Ġto Ġbe Ġcalled .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġworkflow . test Render ( input Ġ= Ġ" foo ", Ġstate Ġ= Ġ" bar ") Ġ{ ĊĠĠĠĠĠ ĠassertEquals (" input = foo , Ġstate = bar ", Ġrendering ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġ` test Render InitialState Ġuses Ġcorrect Ġstate `() Ġ{ ĊĠĠĠ Ġval Ġworkflow Ġ= Ġobject Ġ: ĠStateful Workflow < String , ĠString , ĠString , ĠString >() Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun ĠinitialState ( ĊĠĠĠĠĠĠĠ Ġinput : ĠString , ĊĠĠĠĠĠĠĠ Ġsnapshot : ĠSnapshot ? ĊĠĠĠĠĠ Ġ): ĠString Ġ= Ġinput ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġrender ( ĊĠĠĠĠĠĠĠ Ġinput : ĠString , ĊĠĠĠĠĠĠĠ Ġstate : ĠString , ĊĠĠĠĠĠĠĠ Ġcontext : ĠRender Context < String , ĠString > ĊĠĠĠĠĠ Ġ): ĠString Ġ= Ġ" input : Ġ$ input , Ġstate : Ġ$ state " ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġsnapshot State ( state : ĠString ): ĠSnapshot Ġ= Ġfail () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġworkflow . test Render InitialState (" initial ") Ġ{ ĊĠĠĠĠĠ ĠassertEquals (" input : Ġinitial , Ġstate : Ġinitial ", Ġrendering ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġ` assert Ġno Ġcomposition `() Ġ{ ĊĠĠĠ Ġval Ġworkflow Ġ= ĠWorkflow . state less < Unit , ĠNothing , ĠUnit > Ġ{ ĠUnit Ġ} Ġas ĠStateless Workflow ĊĊĠĠĠ Ġworkflow . test Render Ġ{ ĊĠĠĠĠĠ Ġassert No Workflow s Rendered () ĊĠĠĠĠĠ Ġassert No Workers R an () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġ` renders Ġchild Ġwith Ġinput `() Ġ{ ĊĠĠĠ Ġval Ġchild Ġ= ĠMock Child Workflow < String , ĠString > Ġ{ Ġ" input : Ġ$ it " Ġ} ĊĠĠĠ Ġval Ġworkflow Ġ= ĠWorkflow . state less < Unit , ĠNothing , ĠString > Ġ{ ĊĠĠĠĠĠ Ġ" child : Ġ" Ġ+ Ġrender Child ( child , Ġ" foo ") ĊĠĠĠ Ġ} Ġas ĠStateless Workflow ĊĊĠĠĠ Ġworkflow . test Render Ġ{ ĊĠĠĠĠĠ ĠassertEquals (" foo ", Ġchild . last Seen Input ) ĊĠĠĠĠĠ ĠassertEquals (" child : Ġinput : Ġfoo ", Ġrendering ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġ` renders Ġworker Ġoutput `() Ġ{ ĊĠĠĠ Ġval Ġworker Ġ= ĠMock Worker < String >(" worker ") ĊĠĠĠ Ġval Ġworkflow Ġ= Ġobject Ġ: ĠStateful Workflow < Unit , ĠString , ĠString , ĠUnit >() Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun ĠinitialState ( ĊĠĠĠĠĠĠĠ Ġinput : ĠUnit , ĊĠĠĠĠĠĠĠ Ġsnapshot : ĠSnapshot ? ĊĠĠĠĠĠ Ġ): ĠString Ġ= Ġfail () ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġrender ( ĊĠĠĠĠĠĠĠ Ġinput : ĠUnit , ĊĠĠĠĠĠĠĠ Ġstate : ĠString , ĊĠĠĠĠĠĠĠ Ġcontext : ĠRender Context < String , ĠString > ĊĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . on Worker Output Or Finished ( worker ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġenter State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" state : Ġ$ it ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ting Output Ġ= Ġ" output : Ġ$ it " ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġsnapshot State ( state : ĠString ): ĠSnapshot Ġ= Ġfail () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġworkflow . test Render ("") Ġ{ ĊĠĠĠĠĠ Ġassert No Workflow s Rendered () ĊĠĠĠĠĠ Ġworker . assert R an () ĊĊĠĠĠĠĠ Ġ// ĠOutput ĊĠĠĠĠĠ Ġval Ġ( output State , Ġoutput ) Ġ= Ġworker . handle Output (" work !") ĊĠĠĠĠĠ ĠassertEquals (" state : ĠOutput ( value = work ! )", Ġoutput State ) ĊĠĠĠĠĠ ĠassertEquals (" output : ĠOutput ( value = work ! )", Ġoutput ) ĊĊĠĠĠĠĠ Ġ// ĠFinish ĊĠĠĠĠĠ Ġval Ġ( finish State , Ġfinish ) Ġ= Ġworker . handle Finish () ĊĠĠĠĠĠ ĠassertEquals (" state : ĠFinished ", Ġfinish State ) ĊĠĠĠĠĠ ĠassertEquals (" output : ĠFinished ", Ġfinish ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġ` child Ġworkflow Ġoutput `() Ġ{ ĊĠĠĠ Ġval Ġchild : ĠWorkflow < Unit , ĠString , ĠUnit > Ġ= ĠMock Child Workflow ( Unit ) ĊĠĠĠ Ġval Ġworkflow Ġ= Ġobject Ġ: ĠStateful Workflow < Unit , ĠString , ĠString , ĠUnit >() Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun ĠinitialState ( ĊĠĠĠĠĠĠĠ Ġinput : ĠUnit , ĊĠĠĠĠĠĠĠ Ġsnapshot : ĠSnapshot ? ĊĠĠĠĠĠ Ġ): ĠString Ġ= Ġfail () ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġrender ( ĊĠĠĠĠĠĠĠ Ġinput : ĠUnit , ĊĠĠĠĠĠĠĠ Ġstate : ĠString , ĊĠĠĠĠĠĠĠ Ġcontext : ĠRender Context < String , ĠString > ĊĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . render Child ( child ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġenter State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" state : Ġ$ it ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ting Output Ġ= Ġ" output : Ġ$ it " ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġsnapshot State ( state : ĠString ): ĠSnapshot Ġ= Ġfail () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġworkflow . test Render ("") Ġ{ ĊĠĠĠĠĠ Ġassert No Workers R an () ĊĠĠĠĠĠ Ġchild . assert Rendered () ĊĠĠĠĠĠ Ġval Ġ( state , Ġoutput ) Ġ= Ġchild . handle Output (" output !") ĊĠĠĠĠĠ ĠassertEquals (" state : Ġoutput !", Ġstate ) ĊĠĠĠĠĠ ĠassertEquals (" output : Ġoutput !", Ġoutput ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġ` getEvent Result Ġworks `() Ġ{ ĊĠĠĠ Ġval Ġworkflow Ġ= Ġobject Ġ: ĠStateful Workflow < Unit , ĠString , ĠString , Ġ( String ) Ġ-> ĠUnit >() Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun ĠinitialState ( ĊĠĠĠĠĠĠĠ Ġinput : ĠUnit , ĊĠĠĠĠĠĠĠ Ġsnapshot : ĠSnapshot ? ĊĠĠĠĠĠ Ġ): ĠString Ġ= Ġfail () ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġrender ( ĊĠĠĠĠĠĠĠ Ġinput : ĠUnit , ĊĠĠĠĠĠĠĠ Ġstate : ĠString , ĊĠĠĠĠĠĠĠ Ġcontext : ĠRender Context < String , ĠString > ĊĠĠĠĠĠ Ġ): Ġ( String ) Ġ-> ĠUnit Ġ= Ġcontext . on Event Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠ Ġenter State ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnewState Ġ= Ġ" from Ġ$ state Ġon Ġ$ event ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ting Output Ġ= Ġ" event : Ġ$ event " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġsnapshot State ( state : ĠString ): ĠSnapshot Ġ= Ġfail () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġworkflow . test Render ( state Ġ= Ġ" initial ") Ġ{ ĊĠĠĠĠĠ Ġrendering . invoke (" foo ") ĊĊĠĠĠĠĠ Ġval Ġ( state , Ġoutput ) Ġ= Ġget Event Result () ĊĠĠĠĠĠ ĠassertEquals (" from Ġinitial Ġon Ġfoo ", Ġstate ) ĊĠĠĠĠĠ ĠassertEquals (" event : Ġfoo ", Ġoutput ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ