/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġw ca ok aze Ċ Ġ* Ċ Ġ* Ġ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 Ġvue . k osh ian Ċ Ċ import Ġandroidx . test . ext . junit . rules .* Ċ import Ġandroidx . test . ext . junit . runners .* Ċ import Ġorg . junit .* Ċ import Ġorg . junit . runner .* Ċ import Ġkotlin . test .* Ċ import Ġkotlin . test . Test Ċ Ċ import Ġandroid . content .* Ċ import Ġandroid . view .* Ċ import Ġk osh ian .* Ċ import Ġvue .* Ċ import Ġvue . vu ex .* Ċ import Ġkotlin . contracts .* Ċ Ċ class ĠStore Ġ: ĠV uex Store < State , ĠMutation , ĠAction , ĠGetter >() Ġ{ ĊĠĠ Ġoverride Ġfun ĠcreateState () ĠĠĠ Ġ= ĠState () ĊĠĠ Ġoverride Ġfun Ġcreate Mutation () Ġ= ĠMutation () ĊĠĠ Ġoverride Ġfun Ġcreate Action () ĠĠ Ġ= ĠAction () ĊĠĠ Ġoverride Ġfun Ġcreate Getter () ĠĠ Ġ= ĠGetter () Ċ } Ċ Ċ class ĠState Ġ: ĠV uex State () Ċ class ĠMutation Ġ: ĠV uex Mutation < State >() Ċ class ĠAction Ġ: ĠV uex Action < State , ĠMutation , ĠGetter >() Ċ class ĠGetter Ġ: ĠV uex Getter < State >() Ċ Ċ class ĠNo Store Component ( context : ĠContext ) Ġ: ĠV Component < Nothing >() Ġ{ ĊĠĠ Ġoverride Ġval Ġcomponent View Ġ= ĠView ( context ) ĊĠĠ Ġoverride Ġval Ġstore : ĠNothing Ġget () Ġ= Ġthrow ĠUnsupportedOperationException () Ċ } Ċ Ċ class ĠStore Component ( context : ĠContext , Ġoverride Ġval Ġstore : ĠStore ) Ġ: ĠV Component < Store >() Ġ{ ĊĠĠ Ġoverride Ġval Ġcomponent View Ġ= ĠView ( context ) Ċ } Ċ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠV Component Applicable Test Ġ{ ĊĠĠ Ġ@ get : Rule ĊĠĠ Ġval Ġactivity Scenario Rule Ġ= Ġactivity Scenario Rule < Empty Test Activity >() ĊĊĠĠ Ġ@ Test Ġfun Ġadd Component () Ġ{ ĊĠĠĠĠĠ Ġactivity Scenario Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠ Ġval Ġcomponent As Result : ĠNo Store Component ĊĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġcomponent In Dsl : ĠNo Store Component ĊĊĠĠĠĠĠĠĠĠ Ġ@ Opt In ( Experimental Contracts :: class ) ĊĠĠĠĠĠĠĠĠ Ġval Ġroot View Ġ= Ġk osh ian ( activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFrame Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent As Result Ġ= ĠComponent [ :: No Store Component ] Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent In Dsl Ġ= Ġcomponent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠ ĠassertSame ( component In Dsl , Ġcomponent As Result ) ĊĠĠĠĠĠĠĠĠ ĠassertSame ( root View . getChild At ( 0 ), Ġcomponent As Result . component View ) ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} ĊĊĠĠ Ġ@ Test Ġfun Ġapply Component () Ġ{ ĊĠĠĠĠĠ Ġactivity Scenario Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠ Ġval Ġcomponent As Result : ĠNo Store Component ĊĊĠĠĠĠĠĠĠĠ Ġ@ Opt In ( Experimental Contracts :: class ) ĊĠĠĠĠĠĠĠĠ Ġval Ġroot View Ġ= Ġk osh ian ( activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFrame Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent As Result Ġ= ĠComponent [ :: No Store Component ] Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠ Ġroot View . apply K osh ian Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComponent [ component As Result ] Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertSame ( component As Result , Ġcomponent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} ĊĊĠĠ Ġ@ Test Ġfun Ġmanually Inject () Ġ{ ĊĠĠĠĠĠ Ġval Ġstore Ġ= ĠStore () ĊĊĠĠĠĠĠ Ġactivity Scenario Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠ Ġval Ġcomponent As Result : ĠStore Component ĊĊĠĠĠĠĠĠĠĠ Ġ@ Opt In ( Experimental Contracts :: class ) ĊĠĠĠĠĠĠĠĠ Ġk osh ian ( activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFrame Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent As Result Ġ= ĠComponent [ :: Store Component , Ġstore ] Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠ ĠassertSame ( store , Ġcomponent As Result . store ) ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} ĊĊĠĠ Ġ@ Test Ġfun Ġinherit Store () Ġ{ ĊĠĠĠĠĠ Ġclass ĠInherit Store Component ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( context : ĠContext , Ġoverride Ġval Ġstore : ĠStore ) Ġ: ĠV Component < Store >() ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġcomponent View : ĠView ĊĠĠĠĠĠĠĠĠ Ġval Ġchild Component : ĠStore Component ĊĊĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Opt In ( Experimental Contracts :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk osh ian ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent View Ġ= ĠFrame Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Component Ġ= ĠComponent [ :: Store Component ] Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġstore Ġ= ĠStore () ĊĊĠĠĠĠĠ Ġactivity Scenario Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠ Ġval Ġparent Component : ĠInherit Store Component ĊĊĠĠĠĠĠĠĠĠ Ġ@ Opt In ( Experimental Contracts :: class ) ĊĠĠĠĠĠĠĠĠ Ġk osh ian ( activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFrame Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Component Ġ= ĠComponent [ :: Inherit Store Component , Ġstore ] Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠ ĠassertSame ( store , Ġparent Component . child Component . store ) ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} ĊĊĠĠ Ġ@ Test Ġfun Ġinject Sub module () Ġ{ ĊĠĠĠĠĠ Ġval Ġmodule Key Ġ= ĠV uex Store . Module . Key ( Store :: class ) ĊĊĠĠĠĠĠ Ġclass ĠParent State Ġ: ĠV uex State () ĊĠĠĠĠĠ Ġclass ĠParent Mutation Ġ: ĠV uex Mutation < Parent State >() ĊĠĠĠĠĠ Ġclass ĠParent Getter Ġ: ĠV uex Getter < Parent State >() ĊĠĠĠĠĠ Ġclass ĠParent Action Ġ: ĠV uex Action < Parent State , ĠParent Mutation , ĠParent Getter >() ĊĊĠĠĠĠĠ Ġclass ĠParent Store Ġ: ĠV uex Store < Parent State , ĠParent Mutation , ĠParent Action , ĠParent Getter > Ġ() Ġ{ ĊĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠcreateState () ĠĠĠ Ġ= ĠParent State () ĊĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Mutation () Ġ= ĠParent Mutation () ĊĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Action () ĠĠ Ġ= ĠParent Action () ĊĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Getter () ĠĠ Ġ= ĠParent Getter () ĊĊĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Modules () Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModule ( module Key , ĠStore ()) ĊĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġclass ĠParent Component ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( context : ĠContext , Ġoverride Ġval Ġstore : ĠParent Store ) Ġ: ĠV Component < Parent Store >() ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġcomponent View : ĠView ĊĠĠĠĠĠĠĠĠ Ġval Ġchild Component : ĠStore Component ĊĊĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Opt In ( Experimental Contracts :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk osh ian ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent View Ġ= ĠFrame Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Component Ġ= ĠComponent [ :: Store Component , Ġmodule Key ] Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġparent Store Ġ= ĠParent Store () ĊĠĠĠĠĠ Ġval Ġchild Store Ġ= Ġparent Store . modules [ module Key ] ĊĊĠĠĠĠĠ Ġactivity Scenario Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠ Ġval Ġparent Component : ĠParent Component ĊĊĠĠĠĠĠĠĠĠ Ġ@ Opt In ( Experimental Contracts :: class ) ĊĠĠĠĠĠĠĠĠ Ġk osh ian ( activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFrame Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Component Ġ= ĠComponent [ :: Parent Component , Ġparent Store ] Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠ ĠassertSame ( child Store , Ġparent Component . child Component . store ) ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} ĊĊĠĠ Ġ@ Test Ġfun Ġno Store Component _ as AS ub Component () Ġ{ ĊĠĠĠĠĠ Ġclass ĠInherit Store Component ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( context : ĠContext , Ġoverride Ġval Ġstore : ĠStore ) Ġ: ĠV Component < Store >() ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġcomponent View : ĠView ĊĊĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Opt In ( Experimental Contracts :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk osh ian ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent View Ġ= ĠFrame Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComponent [ :: No Store Component ] Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġstore Ġ= ĠStore () ĊĊĠĠĠĠĠ Ġactivity Scenario Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠ Ġ@ Opt In ( Experimental Contracts :: class ) ĊĠĠĠĠĠĠĠĠ Ġk osh ian ( activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFrame Layout Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComponent [ :: Inherit Store Component , Ġstore ] Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} Ċ } Ċ