/* Ċ Ġ* Ġ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 . Experimental Workflow Api Ċ import Ġcom . squareup . workflow . State ful Workflow Ċ import Ġcom . squareup . workflow . Worker Ċ import Ġcom . squareup . workflow . Workflow Ċ import Ġcom . squareup . workflow . Workflow Action Ċ import Ġcom . squareup . workflow . Workflow Identifier Ċ import Ġcom . squareup . workflow . Workflow Output Ċ import Ġcom . squareup . workflow . workflow Identifier Ċ import Ġkotlin . reflect . K Class Ċ Ċ @ Deprecated ( ĊĠĠĠ Ġ" Rename d Ġto Ġtest Render ", ĊĠĠĠ ĠReplace With (" test Render ( props )", Ġ" com . squareup . workflow . testing . test Render ") Ċ ) Ċ @ Suppress (" NOTH ING _ TO _ INLINE ") Ċ inline Ġfun Ġ< Props T , ĠOutput T , ĠRendering T > ĠWorkflow < Props T , ĠOutput T , ĠRendering T >. render Tester ( ĊĠ Ġprops : ĠProps T Ċ ): ĠRender Tester < Props T , Ġ*, ĠOutput T , ĠRendering T > Ġ= Ġtest Render ( props ) Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġ[ Render Tester ] Ġto Ġunit Ġtest Ġan Ġindividual Ġrender Ġpass Ġof Ġthis Ġworkflow , Ġusing Ġthe Ċ Ġ* Ġworkflow 's Ġ[ initial Ġstate ][ State ful Workflow . initialState ]. Ċ Ġ* Ċ Ġ* ĠSee Ġ[ Render Tester ] Ġfor Ġusage Ġdocumentation . Ċ Ġ*/ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ fun Ġ< Props T , ĠOutput T , ĠRendering T > ĠWorkflow < Props T , ĠOutput T , ĠRendering T >. test Render ( ĊĠ Ġprops : ĠProps T Ċ ): ĠRender Tester < Props T , Ġ*, ĠOutput T , ĠRendering T > Ġ{ ĊĠ Ġval Ġstate ful Workflow Ġ= Ġas State ful Workflow () Ġas ĠStateful Workflow < Props T , ĠAny ?, ĠOutput T , ĠRendering T > ĊĠ Ġreturn Ġstate ful Workflow . test Render ( ĊĠĠĠĠĠ Ġprops Ġ= Ġprops , ĊĠĠĠĠĠ ĠinitialState Ġ= Ġstate ful Workflow . initialState ( props , Ġnull ) ĊĠ Ġ) Ġas ĠRender Tester < Props T , ĠNothing , ĠOutput T , ĠRendering T > Ċ } Ċ Ċ @ Deprecated ( ĊĠĠĠ Ġ" Rename d Ġto Ġtest Render ", ĊĠĠĠ ĠReplace With ( ĊĠĠĠĠĠĠĠ Ġ" test Render ( props , ĠinitialState )", ĊĠĠĠĠĠĠĠ Ġ" com . squareup . workflow . testing . test Render " ĊĠĠĠ Ġ) Ċ ) Ċ /* Ġk tl int - disable Ġparameter - list - wrapping Ġ*/ Ċ fun Ġ< Props T , ĠState T , ĠOutput T , ĠRendering T > ĊĠĠĠ ĠStateful Workflow < Props T , ĠState T , ĠOutput T , ĠRendering T >. render Tester ( ĊĠ Ġprops : ĠProps T , ĊĠ ĠinitialState : ĠState T Ċ ): ĠRender Tester < Props T , ĠState T , ĠOutput T , ĠRendering T > Ġ= Ġtest Render ( props , ĠinitialState ) Ċ /* Ġk tl int - enable Ġparameter - list - wrapping Ġ*/ Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġ[ Render Tester ] Ġto Ġunit Ġtest Ġan Ġindividual Ġrender Ġpass Ġof Ġthis Ġworkflow . Ċ Ġ* Ċ Ġ* ĠSee Ġ[ Render Tester ] Ġfor Ġusage Ġdocumentation . Ċ Ġ*/ Ċ /* Ġk tl int - disable Ġparameter - list - wrapping Ġ*/ Ċ fun Ġ< Props T , ĠState T , ĠOutput T , ĠRendering T > ĊĠĠĠ ĠStateful Workflow < Props T , ĠState T , ĠOutput T , ĠRendering T >. test Render ( ĊĠ Ġprops : ĠProps T , ĊĠ ĠinitialState : ĠState T Ċ ): ĠRender Tester < Props T , ĠState T , ĠOutput T , ĠRendering T > Ġ= Ċ /* Ġk tl int - enable Ġparameter - list - wrapping Ġ*/ ĊĠ ĠReal Render Tester ( this , Ġprops , ĠinitialState ) Ċ Ċ /** Ċ Ġ* ĠThe Ġprops Ġmust Ġbe Ġspecified , Ġthe Ġinitial Ġstate Ġmay Ġbe Ġspecified , Ġand Ġthen Ġall Ġchild Ġworkflows Ċ Ġ* Ġand Ġworkers Ġthat Ġare Ġexpected Ġto Ġrun , Ġand Ġany Ġoutputs Ġfrom Ġthem , Ġmust Ġbe Ġspecified Ġwith Ċ Ġ* Ġ[ expect Workflow ] Ġand Ġ[ expect Worker ] Ġcalls . ĠThen Ġcall Ġ[ render ] Ġand Ġperform Ġany Ġassertions Ġon Ġthe Ċ Ġ* Ġrendering . ĠAn Ġevent Ġmay Ġalso Ġbe Ġsent Ġto Ġthe Ġrendering Ġif Ġno Ġworkflows Ġor Ġworkers Ġemitted Ġan Ċ Ġ* Ġoutput . ĠLast ly , Ġthe Ġ[ Render TestResult ] Ġreturned Ġby Ġ` render ` Ġmay Ġbe Ġused Ġto Ġassert Ġon Ġthe Ċ Ġ* Ġ[ Workflow Action ] s Ġprocessed Ġto Ġhandle Ġevents Ġor Ġoutputs Ġby Ġcalling Ċ Ġ* Ġ[ verify Action ][ Render TestResult . verify Action ] Ġor Ċ Ġ* Ġ[ verify ActionResult ][ Render TestResult . verify ActionResult ]. Ċ Ġ* Ċ Ġ* Ġ- ĠAll Ġworkflows Ġthat Ġare Ġrendered / ran Ġby Ġthis Ġworkflow Ġmust Ġbe Ġspecified . Ċ Ġ* Ġ- ĠWork ers Ġare Ġoptionally Ġspecified . ĠSpec ified Ġworkers Ġmust Ġrun . ĠUnexpected Ġworkers Ġon Ġa Ġrender Ċ Ġ* ĠĠ Ġpass Ġdo Ġnot Ġcause Ġa Ġtest Ġfailure . Ċ Ġ* Ġ- ĠIt Ġis Ġan Ġerror Ġif Ġmore Ġthan Ġone Ġworkflow Ġor Ġworker Ġspecifies Ġan Ġoutput . Ċ Ġ* Ġ- ĠIt Ġis Ġa Ġtest Ġfailure Ġif Ġany Ġworkflows Ġor Ġworkers Ġthat Ġwere Ġexpected Ġwere Ġnot Ġran . Ċ Ġ* Ġ- ĠIt Ġis Ġa Ġtest Ġfailure Ġif Ġthe Ġworkflow Ġtried Ġto Ġrun Ġany Ġworkflows Ġthat Ġwere Ġnot Ġexpected . Ċ Ġ* Ġ- ĠIt Ġis Ġa Ġtest Ġfailure Ġif Ġno Ġworkflow Ġor Ġworkflow Ġemitted Ġan Ġoutput , Ġno Ġrendering Ġevent Ġwas Ċ Ġ* ĠĠ Ġinvoked , Ġand Ġany Ġof Ġthe Ġaction Ġverification Ġmethods Ġon Ġ[ Render TestResult ] Ġis Ġcalled . Ċ Ġ* Ċ Ġ* Ġ## ĠExamples Ċ Ġ* Ċ Ġ* Ġ### ĠWorker Ġoutput Ċ Ġ* Ċ Ġ* ĠThe Ġfollowing Ġexample Ġtests Ġa Ġrender Ġpass Ġthat Ġruns Ġone Ġworker , Ġ` Submit Login Worker `, Ġwhich Ċ Ġ* Ġis Ġconfigured Ġto Ġhave Ġ" emit ted " Ġan Ġoutput , Ġand Ġone Ġworkflow , Ġ` Child Workflow `, Ġwhich Ġexpects Ġa Ċ Ġ* Ġprops Ġcontaining Ġ" test @ foo . com " Ġand Ġreturning Ġa Ġ` Child Rendering ` Ġas Ġits Ġrendering . Ċ Ġ* Ċ Ġ* ĠIt Ġchecks Ġthat Ġthe Ġrendering Ġproperties Ġare Ġexpected Ġand Ġthat Ġthe Ġoutput Ġhandler Ġfor Ġthe Ċ Ġ* Ġ` Submit Login Worker ` Ġreturned Ġthe Ġ` Complete Login ` Ġaction . Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġworkflow Ċ Ġ* ĠĠ Ġ. render Tester ( Ċ Ġ* ĠĠĠĠ Ġprops Ġ= ĠMy Props ( âĢ¦ ), Ċ Ġ* ĠĠĠĠ ĠinitialState Ġ= ĠMy State ( âĢ¦ ) Ċ Ġ* ĠĠ Ġ) Ċ Ġ* ĠĠ Ġ. expect Worker ( Ċ Ġ* ĠĠĠĠ Ġmatches When Ġ= Ġ{ Ġit Ġis ĠSubmit Login Worker Ġ}, Ċ Ġ* ĠĠĠĠ Ġkey Ġ= Ġ" signin ", Ċ Ġ* ĠĠĠĠ Ġoutput Ġ= ĠWorkflow Output ( Login Response ( success Ġ= Ġtrue )) Ċ Ġ* ĠĠ Ġ) Ċ Ġ* ĠĠ Ġ. expect Workflow ( Ċ Ġ* ĠĠĠĠ Ġworkflow Type Ġ= ĠChild Workflow :: class , Ċ Ġ* ĠĠĠĠ Ġkey Ġ= Ġ" child ", Ċ Ġ* ĠĠĠĠ Ġassert Props Ġ= Ġ{ ĠassertThat ( it . email ). isEqualTo (" test @ foo . com ") Ġ}, Ċ Ġ* ĠĠĠĠ Ġrendering Ġ= ĠChild Rendering (" message ") Ċ Ġ* ĠĠ Ġ) Ċ Ġ* ĠĠ Ġ. render Ġ{ Ġrendering Ġ-> Ċ Ġ* ĠĠĠĠ ĠassertThat ( rendering . text ). isEqualTo (" foo ") Ċ Ġ* ĠĠ Ġ} Ċ Ġ* ĠĠ Ġ. verify Action Ġ{ Ġaction Ġ-> Ċ Ġ* ĠĠĠĠ ĠassertThat ( action ). isEqualTo ( Action . Complete Login ( success Ġ= Ġtrue )) Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ### ĠRendering Ġevent Ċ Ġ* Ċ Ġ* ĠThis Ġis Ġsimilar Ġto Ġthe Ġexample Ġabove , Ġbut Ġwill Ġtest Ġan Ġevent Ġsent Ġto Ġthe Ġrendering Ġinstead . Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġworkflow Ċ Ġ* ĠĠ Ġ. render Tester ( Ċ Ġ* ĠĠĠĠ Ġprops Ġ= ĠMy Props ( âĢ¦ ), Ċ Ġ* ĠĠĠĠ ĠinitialState Ġ= ĠMy State ( âĢ¦ ) Ċ Ġ* ĠĠ Ġ) Ċ Ġ* ĠĠ Ġ. expect Worker ( Ċ Ġ* ĠĠĠĠ Ġmatches When Ġ= Ġ{ Ġit Ġis ĠSubmit Login Worker Ġ}, Ċ Ġ* ĠĠĠĠ Ġkey Ġ= Ġ" signin " Ċ Ġ* ĠĠ Ġ) Ċ Ġ* ĠĠ Ġ. expect Workflow ( Ċ Ġ* ĠĠĠĠ Ġworkflow Type Ġ= ĠChild Workflow :: class , Ċ Ġ* ĠĠĠĠ Ġkey Ġ= Ġ" child ", Ċ Ġ* ĠĠĠĠ Ġassert Props Ġ= Ġ{ ĠassertThat ( it . email ). isEqualTo (" test @ foo . com ") Ġ}, Ċ Ġ* ĠĠĠĠ Ġrendering Ġ= ĠChild Rendering (" message ") Ċ Ġ* ĠĠ Ġ) Ċ Ġ* ĠĠ Ġ. render Ġ{ Ġrendering Ġ-> Ċ Ġ* ĠĠĠĠ Ġrendering . on Cancel Clicked () Ċ Ġ* ĠĠĠĠ ĠassertThat ( rendering . text ). isEqualTo (" foo ") Ċ Ġ* ĠĠ Ġ} Ċ Ġ* ĠĠ Ġ. verify Action Ġ{ Ġaction Ġ-> Ċ Ġ* ĠĠĠĠ ĠassertThat ( action ). isEqualTo ( Action . Cancel Login ) Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ### ĠVerify Ġaction Ġresult Ċ Ġ* Ċ Ġ* ĠThis Ġtest Ġverifies Ġthe Ġaction Ġ_ result _ Ġinstead Ġof Ġthe Ġaction Ġitself . ĠThis Ġtechnique Ġis Ġuseful Ċ Ġ* Ġif Ġthe Ġ[ Workflow Action ] Ġis Ġanonymous Ġor Ġinline . Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġval Ġcurrent State Ġ= ĠâĢ¦ Ċ Ġ* Ġval Ġprevious State Ġ= ĠâĢ¦ Ċ Ġ* Ċ Ġ* Ġworkflow Ċ Ġ* ĠĠ Ġ. render Tester ( Ċ Ġ* ĠĠĠĠ Ġprops Ġ= ĠMy Props ( âĢ¦ ), Ċ Ġ* ĠĠĠĠ ĠinitialState Ġ= Ġcurrent State Ċ Ġ* ĠĠ Ġ) Ċ Ġ* ĠĠ Ġ. render Ġ{ Ġrendering Ġ-> Ċ Ġ* ĠĠĠĠ Ġrendering . on Cancel Clicked () Ċ Ġ* ĠĠ Ġ} Ċ Ġ* ĠĠ Ġ. verify ActionResult Ġ{ ĠnewState , Ġoutput Ġ-> Ċ Ġ* ĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe Ġworkflow Ġnavig ated Ġback Ġcorrectly . Ċ Ġ* ĠĠĠĠ ĠassertThat ( newState ). isEqualTo ( previous State ) Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe Ġworkflow Ġdidn 't Ġemit Ġany Ġoutput Ġfrom Ġthe Ġbutton Ġclick . Ċ Ġ* ĠĠĠĠ ĠassertThat ( output ). isNull () Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ### ĠToo Ġmany Ġoutputs Ċ Ġ* Ċ Ġ* ĠThis Ġis Ġan Ġexample Ġof Ġwhat Ġ** not ** Ġto Ġdo ĠâĢĵ Ġthis Ġtest Ġwill Ġerror Ġout Ġbecause Ġa Ġworker Ġis Ġemit ting Ċ Ġ* Ġand Ġoutput Ġ_ and _ Ġa Ġrendering Ġevent Ġis Ġsent . Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* Ġworkflow Ċ Ġ* ĠĠ Ġ. render Tester ( Ċ Ġ* ĠĠĠĠ Ġprops Ġ= ĠMy Props ( âĢ¦ ), Ċ Ġ* ĠĠĠĠ ĠinitialState Ġ= ĠMy State ( âĢ¦ ) Ċ Ġ* ĠĠ Ġ) Ċ Ġ* ĠĠ Ġ. expect Worker ( Ċ Ġ* ĠĠĠĠ Ġmatches When Ġ= Ġ{ Ġit Ġis ĠSubmit Login Worker Ġ}, Ċ Ġ* ĠĠĠĠ Ġkey Ġ= Ġ" signin ", Ċ Ġ* ĠĠĠĠ Ġoutput Ġ= ĠWorkflow Output ( Login Response ( success Ġ= Ġtrue )) Ċ Ġ* ĠĠ Ġ) Ċ Ġ* ĠĠ Ġ. expect Workflow ( Ċ Ġ* ĠĠĠĠ Ġworkflow Type Ġ= ĠChild Workflow :: class , Ċ Ġ* ĠĠĠĠ Ġkey Ġ= Ġ" child ", Ċ Ġ* ĠĠĠĠ Ġassert Props Ġ= Ġ{ ĠassertThat ( it . email ). isEqualTo (" test @ foo . com ") Ġ}, Ċ Ġ* ĠĠĠĠ Ġrendering Ġ= ĠChild Rendering (" message ") Ċ Ġ* ĠĠ Ġ) Ċ Ġ* ĠĠ Ġ. render Ġ{ Ġrendering Ġ-> Ċ Ġ* ĠĠĠĠ Ġ// ĠThis Ġwill Ġthrow Ġand Ġfail Ġthe Ġtest Ġbecause Ġthe ĠSubmit Login Worker Ġis Ġalso Ġconfigured Ġto Ġemit Ċ Ġ* ĠĠĠĠ Ġ// Ġan Ġoutput . Ċ Ġ* ĠĠĠĠ Ġrendering . on Cancel Clicked () Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ interface ĠRender Tester < Props T , ĠState T , ĠOutput T , ĠRendering T > Ġ{ ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSpecifies Ġthat Ġthis Ġrender Ġpass Ġis Ġexpected Ġto Ġrender Ġa Ġparticular Ġchild Ġworkflow . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ## ĠExpect ing Ġimpost or Ġworkflows ĊĠĠ Ġ* ĊĠĠ Ġ* ĠIdent ifiers Ġare Ġcompared Ġusing Ġ[ Workflow Identifier . matches Actual Identifier For Test ]. ĠIf Ġthe ĊĠĠ Ġ* Ġworkflow - under - test Ġrenders Ġan Ġ[ Imp ost or Workflow ][ com . squareup . workflow . Imp ost or Workflow ], ĊĠĠ Ġ* Ġthe Ġexpected Ġ[ identifier ] Ġmust Ġmatch Ġthe Ġleaf Ġreal Ġidentifier Ġof Ġthe Ġ` Imp ost or Workflow `. ĊĠĠ Ġ* ĊĠĠ Ġ* ĠFor Ġexample , Ġgiven Ġthe Ġ` map Rendering ` Ġworkflow Ġoperator Ġthat Ġreturns Ġan Ġ` Imp ost or Workflow ` ĊĠĠ Ġ* Ġwhich Ġwraps Ġthe Ġmapped Ġworkflow , Ġthe Ġfollowing Ġexpectation Ġwould Ġsucceed : ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ* Ġval Ġworkflow Ġ= ĠWorkflow . state less < âĢ¦ > Ġ{ ĊĠĠ Ġ* ĠĠ Ġrender Child ( child Workflow . map Rendering Ġ{ ĠâĢ¦ Ġ}) ĊĠĠ Ġ* Ġ} ĊĠĠ Ġ* ĊĠĠ Ġ* Ġworkflow . test Render ( âĢ¦ ) ĊĠĠ Ġ* ĠĠ Ġ. expect Workflow ( child Workflow :: class , ĠâĢ¦ ) ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġidentifier ĠThe Ġ[ Workflow Identifier ] Ġof Ġthe Ġexpected Ġworkflow . ĠMay Ġidentify Ġany Ġsup ertype ĊĠĠ Ġ* Ġof Ġthe Ġactual Ġrendered Ġworkflow , Ġe . g . Ġif Ġthe Ġworkflow Ġtype Ġis Ġan Ġinterface Ġand Ġthe ĊĠĠ Ġ* Ġworkflow - under - test Ġinject s Ġa Ġfake . ĊĠĠ Ġ* Ġ@ param Ġrendering ĠThe Ġrendering Ġto Ġreturn Ġfrom ĊĠĠ Ġ* Ġ[ render Child ][ com . squareup . workflow . Render Context . render Child ] Ġwhen Ġthis Ġworkflow Ġis Ġrendered . ĊĠĠ Ġ* Ġ@ param Ġkey ĠThe Ġkey Ġpassed Ġto Ġ[ render Child ][ com . squareup . workflow . Render Context . render Child ] ĊĠĠ Ġ* Ġwhen Ġrendering Ġthis Ġworkflow . ĊĠĠ Ġ* Ġ@ param Ġassert Props ĠA Ġfunction Ġthat Ġperforms Ġassertions Ġon Ġthe Ġprops Ġpassed Ġto ĊĠĠ Ġ* Ġ[ render Child ][ com . squareup . workflow . Render Context . render Child ]. ĊĠĠ Ġ* Ġ@ param Ġoutput ĠIf Ġnon - null , Ġ[ Workflow Output . value ] Ġwill Ġbe Ġ" emit ted " Ġwhen Ġthis Ġworkflow Ġis ĊĠĠ Ġ* Ġrendered . ĠThe Ġ[ Workflow Action ] Ġused Ġto Ġhandle Ġthis Ġoutput Ġcan Ġbe Ġverified Ġusing Ġmethods Ġon ĊĠĠ Ġ* Ġ[ Render TestResult ]. ĊĠĠ Ġ*/ ĊĠ Ġ@ Experimental Workflow Api ĊĠ Ġfun Ġ< Child Output T , ĠChild Rendering T > Ġexpect Workflow ( ĊĠĠĠ Ġidentifier : ĠWorkflow Identifier , ĊĠĠĠ Ġrendering : ĠChild Rendering T , ĊĠĠĠ Ġkey : ĠString Ġ= Ġ"", ĊĠĠĠ Ġassert Props : Ġ( props : ĠAny ?) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġoutput : ĠWorkflow Output < Child Output T >? Ġ= Ġnull ĊĠ Ġ): ĠRender Tester < Props T , ĠState T , ĠOutput T , ĠRendering T > ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSpecifies Ġthat Ġthis Ġrender Ġpass Ġis Ġexpected Ġto Ġrender Ġa Ġparticular Ġchild Ġworkflow . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ## ĠExpect ing Ġimpost or Ġworkflows ĊĠĠ Ġ* ĊĠĠ Ġ* ĠIdent ifiers Ġare Ġcompared Ġusing Ġ[ Workflow Identifier . matches Actual Identifier For Test ]. ĠIf Ġthe ĊĠĠ Ġ* Ġworkflow - under - test Ġrenders Ġan Ġ[ Imp ost or Workflow ][ com . squareup . workflow . Imp ost or Workflow ], ĊĠĠ Ġ* Ġthe Ġexpected Ġ[ identifier ] Ġmust Ġmatch Ġthe Ġleaf Ġreal Ġidentifier Ġof Ġthe Ġ` Imp ost or Workflow `. ĊĠĠ Ġ* ĊĠĠ Ġ* ĠFor Ġexample , Ġgiven Ġthe Ġ` map Rendering ` Ġworkflow Ġoperator Ġthat Ġreturns Ġan Ġ` Imp ost or Workflow ` ĊĠĠ Ġ* Ġwhich Ġwraps Ġthe Ġmapped Ġworkflow , Ġthe Ġfollowing Ġexpectation Ġwould Ġsucceed : ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ* Ġval Ġworkflow Ġ= ĠWorkflow . state less < âĢ¦ > Ġ{ ĊĠĠ Ġ* ĠĠ Ġrender Child ( child Workflow . map Rendering Ġ{ ĠâĢ¦ Ġ}) ĊĠĠ Ġ* Ġ} ĊĠĠ Ġ* ĊĠĠ Ġ* Ġworkflow . test Render ( âĢ¦ ) ĊĠĠ Ġ* ĠĠ Ġ. expect Workflow ( child Workflow :: class , ĠâĢ¦ ) ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġworkflow Type ĠThe Ġ[ K Class ] Ġof Ġthe Ġexpected Ġworkflow . ĠMay Ġalso Ġbe Ġany Ġof Ġthe Ġsup ert ypes ĊĠĠ Ġ* Ġof Ġthe Ġexpected Ġworkflow , Ġe . g . Ġif Ġthe Ġworkflow Ġtype Ġis Ġan Ġinterface Ġand Ġthe Ġworkflow - under - test ĊĠĠ Ġ* Ġinject s Ġa Ġfake . ĊĠĠ Ġ* Ġ@ param Ġrendering ĠThe Ġrendering Ġto Ġreturn Ġfrom ĊĠĠ Ġ* Ġ[ render Child ][ com . squareup . workflow . Render Context . render Child ] Ġwhen Ġthis Ġworkflow Ġis Ġrendered . ĊĠĠ Ġ* Ġ@ param Ġkey ĠThe Ġkey Ġpassed Ġto Ġ[ render Child ][ com . squareup . workflow . Render Context . render Child ] ĊĠĠ Ġ* Ġwhen Ġrendering Ġthis Ġworkflow . ĊĠĠ Ġ* Ġ@ param Ġassert Props ĠA Ġfunction Ġthat Ġperforms Ġassertions Ġon Ġthe Ġprops Ġpassed Ġto ĊĠĠ Ġ* Ġ[ render Child ][ com . squareup . workflow . Render Context . render Child ]. ĊĠĠ Ġ* Ġ@ param Ġoutput ĠIf Ġnon - null , Ġ[ Workflow Output . value ] Ġwill Ġbe Ġ" emit ted " Ġwhen Ġthis Ġworkflow Ġis ĊĠĠ Ġ* Ġrendered . ĠThe Ġ[ Workflow Action ] Ġused Ġto Ġhandle Ġthis Ġoutput Ġcan Ġbe Ġverified Ġusing Ġmethods Ġon ĊĠĠ Ġ* Ġ[ Render TestResult ]. ĊĠĠ Ġ*/ ĊĠ Ġ@ Opt In ( Experimental Workflow Api :: class ) ĊĠ Ġfun Ġ< Child Props T , ĠChild Output T , ĠChild Rendering T > Ġexpect Workflow ( ĊĠĠĠ Ġworkflow Type : ĠK Class < out ĠWorkflow < Child Props T , ĠChild Output T , ĠChild Rendering T >>, ĊĠĠĠ Ġrendering : ĠChild Rendering T , ĊĠĠĠ Ġkey : ĠString Ġ= Ġ"", ĊĠĠĠ Ġassert Props : Ġ( props : ĠChild Props T ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġoutput : ĠWorkflow Output < Child Output T >? Ġ= Ġnull ĊĠ Ġ): ĠRender Tester < Props T , ĠState T , ĠOutput T , ĠRendering T > Ġ= ĊĠĠĠ Ġexpect Workflow ( workflow Type . workflow Identifier , Ġrendering , Ġkey , Ġoutput Ġ= Ġoutput , Ġassert Props Ġ= Ġ{ ĊĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠ Ġassert Props ( it Ġas ĠChild Props T ) ĊĠĠĠ Ġ}) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSpecifies Ġthat Ġthis Ġrender Ġpass Ġis Ġexpected Ġto Ġrun Ġa Ġparticular Ġworker . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġmatches When ĠPredicate Ġused Ġto Ġdetermine Ġif Ġthis Ġmatches Ġthe Ġworker Ġbeing Ġran . ĊĠĠ Ġ* Ġ@ param Ġkey ĠThe Ġkey Ġpassed Ġto Ġ[ running Worker ][ com . squareup . workflow . Render Context . running Worker ] ĊĠĠ Ġ* Ġwhen Ġrendering Ġthis Ġworkflow . ĊĠĠ Ġ* Ġ@ param Ġoutput ĠIf Ġnon - null , Ġ[ Workflow Output . value ] Ġwill Ġbe Ġemitted Ġwhen Ġthis Ġworker Ġis Ġran . ĊĠĠ Ġ* ĠThe Ġ[ Workflow Action ] Ġused Ġto Ġhandle Ġthis Ġoutput Ġcan Ġbe Ġverified Ġusing Ġmethods Ġon ĊĠĠ Ġ* Ġ[ Render TestResult ]. ĊĠĠ Ġ*/ ĊĠ Ġfun Ġexpect Worker ( ĊĠĠĠ Ġmatches When : Ġ( other Worker : ĠWorker <* >) Ġ-> ĠBoolean , ĊĠĠĠ Ġkey : ĠString Ġ= Ġ"", ĊĠĠĠ Ġoutput : ĠWorkflow Output < Any ?> ? Ġ= Ġnull ĊĠ Ġ): ĠRender Tester < Props T , ĠState T , ĠOutput T , ĠRendering T > ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSpecifies Ġthat Ġthis Ġrender Ġpass Ġis Ġexpected Ġto Ġrun Ġa Ġparticular Ġside Ġeffect . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġkey ĠThe Ġkey Ġpassed Ġto ĊĠĠ Ġ* Ġ[ running Side Effect ][ com . squareup . workflow . Render Context . running Side Effect ] Ġwhen Ġrendering Ġthis ĊĠĠ Ġ* Ġworkflow . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġexpect Side Effect ( key : ĠString ): ĠRender Tester < Props T , ĠState T , ĠOutput T , ĠRendering T > ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠExecute Ġthe Ġworkflow 's Ġ` render ` Ġmethod Ġand Ġrun Ġ[ block ] Ġto Ġperform Ġassertions Ġon Ġand Ġsend Ġevents ĊĠĠ Ġ* Ġto Ġthe Ġresulting Ġrendering . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠAll Ġworkflows Ġrendered / ran Ġby Ġthe Ġworkflow Ġmust Ġbe Ġspecified Ġbefore Ġcalling Ġthis ĊĠĠ Ġ* Ġmethod . ĠWork ers Ġare Ġoptionally Ġspecified . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġblock ĠP assed Ġthe Ġresult Ġof Ġthe Ġrender Ġpass Ġto Ġperform Ġassertions Ġon . ĊĠĠ Ġ* ĠIf Ġno Ġchild Ġworkflow Ġor Ġworker Ġwas Ġconfigured Ġto Ġemit Ġan Ġoutput , Ġmay Ġalso Ġinvoke Ġone Ġof Ġthe ĊĠĠ Ġ* Ġrendering 's Ġevent Ġhandlers . ĠIt Ġis Ġan Ġerror Ġto Ġinvoke Ġan Ġevent Ġhandler Ġif Ġa Ġchild Ġemitted Ġan ĊĠĠ Ġ* Ġoutput . ĊĠĠ Ġ* Ġ@ return ĠA Ġ[ Render TestResult ] Ġthat Ġcan Ġbe Ġused Ġto Ġverify Ġthe Ġ[ Workflow Action ] Ġthat Ġwas Ġused Ġto ĊĠĠ Ġ* Ġhandle Ġa Ġworkflow Ġor Ġworker Ġoutput Ġor Ġa Ġrendering Ġevent . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġrender ( block : Ġ( rendering : ĠRendering T ) Ġ-> ĠUnit Ġ= Ġ{} ): ĠRender TestResult < Props T , ĠState T , ĠOutput T > Ċ } Ċ Ċ /** Ċ Ġ* ĠSpecifies Ġthat Ġthis Ġrender Ġpass Ġis Ġexpected Ġto Ġrun Ġa Ġparticular Ġworker . Ċ Ġ* Ċ Ġ* Ġ@ param Ġdoes Same Work As ĠWorker Ġpassed Ġto Ġthe Ġactual Ġworker 's Ċ Ġ* Ġ[ does Same Work As ][ Worker . does Same Work As ] Ġmethod Ġto Ġidentify Ġthe Ġworker . ĠNote Ġthat Ġthe Ġactual Ċ Ġ* Ġmethod Ġis Ġcalled Ġon Ġthe Ġworker Ġinstance Ġgiven Ġby Ġthe Ġworkflow - under - test , Ġand Ġthe Ġvalue Ġof Ġthis Ċ Ġ* Ġargument Ġis Ġpassed Ġto Ġthat Ġmethod ĠâĢĵ Ġif Ġyou Ġneed Ġcustom Ġcomparison Ġlogic Ġfor Ġsome Ġreason , Ġuse Ċ Ġ* Ġthe Ġoverload Ġof Ġthis Ġmethod Ġthat Ġtakes Ġa Ġ` matches When ` Ġparameter . Ċ Ġ* Ġ@ param Ġkey ĠThe Ġkey Ġpassed Ġto Ġ[ running Worker ][ com . squareup . workflow . Render Context . running Worker ] Ċ Ġ* Ġwhen Ġrendering Ġthis Ġworkflow . Ċ Ġ* Ġ@ param Ġoutput ĠIf Ġnon - null , Ġ[ Workflow Output . value ] Ġwill Ġbe Ġemitted Ġwhen Ġthis Ġworker Ġis Ġran . Ċ Ġ* ĠThe Ġ[ Workflow Action ] Ġused Ġto Ġhandle Ġthis Ġoutput Ġcan Ġbe Ġverified Ġusing Ġmethods Ġon Ċ Ġ* Ġ[ Render TestResult ]. Ċ Ġ*/ Ċ /* Ġk tl int - disable Ġparameter - list - wrapping Ġ*/ Ċ fun Ġ< Props T , ĠState T , ĠOutput T , ĠRendering T > ĊĠĠĠ ĠRender Tester < Props T , ĠState T , ĠOutput T , ĠRendering T >. expect Worker ( ĊĠ Ġdoes Same Work As : ĠWorker <* >, ĊĠ Ġkey : ĠString Ġ= Ġ"", ĊĠ Ġoutput : ĠWorkflow Output < Any ?> ? Ġ= Ġnull Ċ ): ĠRender Tester < Props T , ĠState T , ĠOutput T , ĠRendering T > Ġ= Ġexpect Worker ( Ċ /* Ġk tl int - enable Ġparameter - list - wrapping Ġ*/ ĊĠĠĠ Ġmatches When Ġ= Ġ{ Ġit . does Same Work As ( does Same Work As ) Ġ}, ĊĠĠĠ Ġkey Ġ= Ġkey , ĊĠĠĠ Ġoutput Ġ= Ġoutput Ċ ) Ċ Ċ /** Ċ Ġ* ĠWrapper Ġaround Ġa Ġpotentially - nullable Ġ[ Output T ] Ġvalue . Ċ Ġ*/ Ċ @ Deprecated ( ĊĠĠĠ Ġ" Use ĠWorkflow Output ", ĊĠĠĠ ĠReplace With (" Workflow Output < Output T >", Ġ" com . squareup . workflow . Workflow Output ") Ċ ) Ċ type alias ĠE mitted Output < Output T > Ġ= ĠWorkflow Output < Output T > Ċ