/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 0 - 2 0 2 1 . ĠAx on ĠFramework Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . ax on framework . extension . kotlin . test Ċ Ċ import Ġorg . ax on framework . test . aggregate . Aggregate TestFixture Ċ import Ġorg . ax on framework . test . aggregate . Fixture Configuration Ċ import Ġorg . ax on framework . test . aggregate . Result Validator Ċ import Ġorg . ax on framework . test . aggregate . Test Executor Ċ import Ġorg . ax on framework . test . saga . Saga TestFixture Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠCreates Ġan Ġaggregate Ġtest Ġfixture Ġfor Ġaggregate Ġ[ T ]. Ċ Ġ* Ġ@ param ĠT Ġre ified Ġtype Ġof Ġthe Ġaggregate . Ċ Ġ* Ġ@ return Ġaggregate Ġtest Ġfixture . Ċ Ġ* Ġ@ since Ġ 0 . 2 . 0 Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġaggregate TestFixture () Ġ= ĊĠĠĠĠĠĠĠ ĠAggregate TestFixture ( T :: class . java ) Ċ Ċ /** Ċ Ġ* ĠAlias Ġfor Ġthe Ġ` when ` Ġmethod Ġto Ġavoid Ġname Ġcl ash Ġwith ĠKotlin 's Ġ` when `. Ċ Ġ* Ġ@ param Ġcommand Ġcommand Ġto Ġpass Ġto Ġthe Ġwhen Ġmethod . Ċ Ġ* Ġ@ param ĠT Ġaggregate Ġtype . Ċ Ġ* Ġ@ return Ġresult Ġvalidator . Ċ Ġ* Ġ@ since Ġ 0 . 2 . 0 Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠAny > ĠTest Executor < T >. wh enever ( command : ĠAny ): ĠResult Validator < T > Ġ= Ġthis .` when `( command ) Ċ Ċ /** Ċ Ġ* ĠAlias Ġfor Ġthe Ġ` when ` Ġmethod Ġto Ġavoid Ġname Ġcl ash Ġwith ĠKotlin 's Ġ` when `. Ċ Ġ* Ġ@ param Ġcommand Ġcommand Ġto Ġpass Ġto Ġthe Ġwhen Ġmethod . Ċ Ġ* Ġ@ param ĠmetaData Ġmetadata Ġmap . Ċ Ġ* Ġ@ param ĠT Ġaggregate Ġtype . Ċ Ġ* Ġ@ return Ġresult Ġvalidator . Ċ Ġ* Ġ@ since Ġ 0 . 2 . 0 Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠAny > ĠTest Executor < T >. wh enever ( command : ĠAny , ĠmetaData : ĠMap < String , ĠAny >): ĠResult Validator < T > Ġ= Ġthis .` when `( command , ĠmetaData ) Ċ Ċ /** Ċ Ġ* ĠRegisters Ġsub types Ġof Ġthis Ġaggregate Ġto Ġsupport Ġaggregate Ġpol ym orphism . ĠCommand ĠHand lers Ġdefined Ġon Ġthis Ġsubtype Ċ Ġ* Ġwill Ġbe Ġconsidered Ġpart Ġof Ġthis Ġaggregate 's Ġhandlers . Ċ Ġ* Ċ Ġ* Ġ@ param Ġsub types Ġsub types Ġin Ġthis Ġpol ymorphic Ġhierarchy Ċ Ġ* Ġ@ return Ġthe Ġcurrent ĠFix ture Configuration , Ġfor Ġfluent Ġinter facing Ċ Ġ* Ġ@ since Ġ 0 . 2 . 0 Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠAny > ĠAggregate TestFixture < T >. with Sub types ( var arg Ġsub types : ĠK Class < out ĠT >) Ġ= ĊĠĠĠĠĠĠĠ Ġthis . with Sub types (* Ġsub types . map Ġ{ Ġit . java Ġ}. to Typed Array ()) Ċ Ċ /** Ċ Ġ* ĠIndicates Ġthat Ġa Ġfield Ġwith Ġgiven Ġ{@ code ĠfieldName }, Ġwhich Ġis Ġdeclared Ġin Ġgiven Ġ{@ code Ġdeclaring Class } Ċ Ġ* Ġis Ġignored Ġwhen Ġperforming Ġdeep Ġequality Ġchecks . Ċ Ġ* Ċ Ġ* Ġ@ param ĠT Ġtype Ġof Ġfixture Ġtarget . Ċ Ġ* Ġ@ param ĠF Ġfiled Ġtype . Ċ Ġ* Ġ@ param ĠfieldName ĠThe Ġname Ġof Ġthe Ġfield Ċ Ġ* Ġ@ return Ġthe Ġcurrent ĠFix ture Configuration , Ġfor Ġfluent Ġinter facing Ċ Ġ* Ġ@ since Ġ 0 . 2 . 0 Ċ Ġ*/ Ċ inline Ġfun Ġ< T Ġ: ĠAny , Ġre ified ĠF Ġ: ĠAny > ĠFix ture Configuration < T >. register Ignored Field ( fieldName : ĠString ): ĠFix ture Configuration < T > Ġ= ĊĠĠĠĠĠĠĠ Ġthis . register Ignored Field ( F :: class . java , ĠfieldName ) Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġs aga Ġtest Ġfixture Ġfor Ġs aga Ġ[ T ]. Ċ Ġ* Ġ@ param ĠT Ġre ified Ġtype Ġof Ġthe Ġs aga . Ċ Ġ* Ġ@ return Ġs aga Ġtest Ġfixture . Ċ Ġ* Ġ@ since Ġ 0 . 2 . 0 Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġs aga TestFixture () Ġ= ĊĠĠĠĠĠĠĠ ĠS aga TestFixture ( T :: class . java ) Ċ Ċ /** Ċ Ġ* ĠRe ified Ġversion Ġof Ġcommand Ġgateway Ġregistration . Ċ Ġ* Ġ@ param ĠT Ġs aga Ġtype Ċ Ġ* Ġ@ param ĠI Ġcommand Ġgateway Ġtype . Ċ Ġ* Ġ@ return Ġregistered Ġcommand Ġgateway Ġinstance . Ċ Ġ* Ġ@ since Ġ 0 . 2 . 0 Ċ Ġ*/ Ċ inline Ġfun Ġ< T Ġ: ĠAny , Ġre ified ĠI Ġ: ĠAny > ĠS aga TestFixture < T >. register Command Gateway (): ĠI Ġ= ĊĠĠĠĠĠĠĠ Ġthis . register Command Gateway ( I :: class . java ) Ċ Ċ /** Ċ Ġ* ĠRe ified Ġversion Ġof Ġcommand Ġgateway Ġregistration . Ċ Ġ* Ġ@ param ĠT Ġs aga Ġtype Ċ Ġ* Ġ@ param ĠI Ġcommand Ġgateway Ġtype . Ċ Ġ* Ġ@ param Ġstub Implementation Ġstub Ġimplementation . Ċ Ġ* Ġ@ return Ġregistered Ġcommand Ġgateway Ġinstance . Ċ Ġ* Ġ@ since Ġ 0 . 2 . 0 Ċ Ġ*/ Ċ inline Ġfun Ġ< T Ġ: ĠAny , Ġre ified ĠI Ġ: ĠAny > ĠS aga TestFixture < T >. register Command Gateway ( stub Implementation : ĠI ): ĠI Ġ= ĊĠĠĠĠĠĠĠ Ġthis . register Command Gateway ( I :: class . java , Ġstub Implementation ) Ċ Ċ /** Ċ Ġ* ĠExpect Ġa ĠK Class Ġexception Ġfor Ġaggregate Ġ[ T ]. Ċ Ġ* Ġ@ param ĠT Ġaggregate Ġtype Ċ Ġ* Ġ@ param ĠE Ġexception Ġtype Ċ Ġ* Ġ@ param Ġexpected Exception Ġkotlin Ġclass Ġof Ġthe Ġexception Ċ Ġ* Ġ@ return Ġthis Ċ Ġ* Ġ@ since Ġ 0 . 2 . 0 Ċ Ġ*/ Ċ fun Ġ< T Ġ: ĠAny , ĠE Ġ: ĠK Class < out ĠThrowable >> ĠResult Validator < T >. expect Exception ( expected Exception : ĠE ): ĠResult Validator < T > Ġ= ĊĠĠĠĠĠĠĠ Ġthis . expect Exception ( expected Exception . java )