package Ġde . ma ib orn w ol ff . domain ch oreo graph . core . api Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . argument Captor Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġcom . squareup . kotlin po et . as ClassName Ċ import Ġde . ma ib orn w ol ff . domain ch oreo graph . core . processing . dependency graph . Dependency Node Ċ import Ġde . ma ib orn w ol ff . domain ch oreo graph . scenarios . ch oreo graphy wit hex ception . Exception Domain Object Ċ import Ġde . ma ib orn w ol ff . domain ch oreo graph . scenarios . ch oreo graphy wit hex ception . Test Exception Ċ import Ġde . ma ib orn w ol ff . domain ch oreo graph . scenarios . deep ch oreo graphy .* Ċ import Ġde . ma ib orn w ol ff . domain ch oreo graph . scenarios . nested ch oreo graphy . Nested Domain Result Ċ import Ġde . ma ib orn w ol ff . domain ch oreo graph . scenarios . simple ch oreo graphy . Simple Domain Object 1 Ċ import Ġde . ma ib orn w ol ff . domain ch oreo graph . scenarios . simple ch oreo graphy . Simple Domain Object 2 Ċ import Ġde . ma ib orn w ol ff . domain ch oreo graph . scenarios . simple ch oreo graphy . Simple Domain Object 3 Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . Test Ċ Ċ class ĠResolve Domain Definition Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` resolve Ġa Ġsimple Ġdomain Ġdefinition Ġduring Ġruntime `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠSimple Domain Object 3 Ġ= Ġresolve Domain Definition ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Domain Object 1 ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Domain Object 2 ( 2 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . sum ). isEqualTo ( 3 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` resolve Ġa Ġnested Ġdomain Ġdefinition Ġduring Ġruntime `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠNested Domain Result Ġ= Ġresolve Domain Definition ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDeep Domain Object 1 ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDeep Domain Object 2 ( 2 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . value ). isEqualTo ( 3 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠResolve Domain Definition WithOptions Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` resolve Ġa Ġsimple Ġdomain Ġdefinition Ġduring Ġruntime Ġwith Ġoptions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠDomain Logger Ġ= Ġmock () ĊĊĠĠĠĠĠĠĠ Ġval Ġobject 1 Ġ= ĠSimple Domain Object 1 ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġobject 2 Ġ= ĠSimple Domain Object 2 ( 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠSimple Domain Object 3 Ġ= Ġresolve Domain Definition WithOptions ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Ch oreo graphy Options ( logger Ġ= Ġset Of ( logger )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnode 1 Ġ= ĠDependency Node . Variable Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠSimple Domain Object 1 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Type Ġ= ĠSimple Domain Object 1 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Parameter Ġ 0 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġnode 2 Ġ= ĠDependency Node . Variable Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠSimple Domain Object 2 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Type Ġ= ĠSimple Domain Object 2 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Parameter Ġ 1 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġnode 3 Ġ= ĠDependency Node . Function Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠSimple Domain Object 3 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Type Ġ= ĠSimple Domain Object 3 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaller Ġ= ĠSimple Domain Object 3 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" create ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . sum ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠDomain Context ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ= ĠDomain Ch oreo graphy Schema ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Node Ġ= Ġnode 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Order Ġ= ĠlistOf ( node 1 , Ġnode 2 , Ġnode 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Domain Object 1 :: class . java Ġto ĠDomain Context Node ( object 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Domain Object 2 :: class . java Ġto ĠDomain Context Node ( object 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Domain Object 3 :: class . java Ġto ĠDomain Context Node ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġch oreo graphy Interface Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġargument Captor < Domain Context > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( logger ). onComplete ( capture ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġfirst Value ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual ). isEqualTo ( expected ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` resolve Ġa Ġnested Ġdomain Ġdefinition Ġduring Ġruntime Ġwith Ġoptions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠDomain Logger Ġ= Ġmock () ĊĊĠĠĠĠĠĠĠ Ġval Ġobject 1 Ġ= ĠDeep Domain Object 1 ( 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġobject 2 Ġ= ĠDeep Domain Object 2 ( 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġobject 3 Ġ= ĠDeep Domain Object 3 ( 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġobject 4 Ġ= ĠDeep Domain Object 4 ( 1 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġobject 5 Ġ= ĠDeep Domain Object 5 ( 5 , Ġ 1 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠNested Domain Result Ġ= Ġresolve Domain Definition WithOptions ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Ch oreo graphy Options ( logger Ġ= Ġset Of ( logger )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnode 1 Ġ= ĠDependency Node . Variable Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠDeep Domain Object 1 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Type Ġ= ĠDeep Domain Object 1 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Parameter Ġ 0 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġnode 2 Ġ= ĠDependency Node . Variable Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠDeep Domain Object 2 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Type Ġ= ĠDeep Domain Object 2 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Parameter Ġ 1 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġnode 3 Ġ= ĠDependency Node . Function Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠDeep Domain Object 3 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Type Ġ= ĠDeep Domain Object 3 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaller Ġ= ĠDeep Domain Object 3 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" create ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġnode 4 Ġ= ĠDependency Node . Function Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠDeep Domain Object 4 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Type Ġ= ĠDeep Domain Object 4 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaller Ġ= ĠDeep Domain Object 4 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" create ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Ġ= ĠlistOf ( node 3 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġnode 5 Ġ= ĠDependency Node . Function Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠDeep Domain Object 5 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Type Ġ= ĠDeep Domain Object 5 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaller Ġ= ĠDeep Domain Object 5 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" create ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Ġ= ĠlistOf ( node 3 , Ġnode 4 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdeep Ch oreo graphy Node Ġ= ĠDependency Node . Ch oreo graphy Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠDeep Ch oreo graphy :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Type Ġ= ĠDeep Ch oreo graphy :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaller Ġ= ĠNested Domain Result :: class . as ClassName () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġnested Domain Result Node Ġ= ĠDependency Node . Function Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠNested Domain Result :: class . java . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Type Ġ= ĠNested Domain Result :: class . java . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaller Ġ= ĠNested Domain Result :: class . java . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" create ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeep Ch oreo graphy Node ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . value ). isEqualTo ( 1 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠDomain Context ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ= ĠDomain Ch oreo graphy Schema ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Node Ġ= Ġnested Domain Result Node , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Order Ġ= ĠlistOf ( node 1 , Ġnode 2 , Ġdeep Ch oreo graphy Node , Ġnested Domain Result Node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDeep Domain Object 1 :: class . java Ġto ĠDomain Context Node ( object 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDeep Domain Object 2 :: class . java Ġto ĠDomain Context Node ( object 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDeep Ch oreo graphy :: class . java Ġto ĠDomain Context Node ( mock ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNested Domain Result :: class . java Ġto ĠDomain Context Node < Nested Domain Result >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġresult , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Context Mapping Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDeep Ch oreo graphy :: class . java Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Context ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġch oreo graphy Interface Ġ= ĠDeep Ch oreo graphy :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ= ĠDomain Ch oreo graphy Schema ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Node Ġ= Ġnode 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Order Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnodes Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDeep Domain Object 1 :: class . java Ġto ĠDomain Context Node ( object 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDeep Domain Object 2 :: class . java Ġto ĠDomain Context Node ( object 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDeep Domain Object 3 :: class . java Ġto ĠDomain Context Node ( object 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDeep Domain Object 4 :: class . java Ġto ĠDomain Context Node ( object 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDeep Domain Object 5 :: class . java Ġto ĠDomain Context Node ( object 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġch oreo graphy Interface Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġargument Captor < Domain Context > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( logger ). onComplete ( capture ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġfirst Value ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual . schema ). isEqualTo ( expected . schema ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual . nodes . size ). isEqualTo ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual . nodes . keys ). isEqualTo ( expected . nodes . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual . nodes [ Deep Domain Object 1 :: class . java ]). isEqualTo ( expected . nodes [ Deep Domain Object 1 :: class . java ]) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual . nodes [ Deep Domain Object 2 :: class . java ]). isEqualTo ( expected . nodes [ Deep Domain Object 2 :: class . java ]) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual . nodes [ Nested Domain Result :: class . java ]). isEqualTo ( expected . nodes [ Nested Domain Result :: class . java ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` resolve Ġa Ġdomain Ġdefinition Ġwith Ġexception Ġduring Ġruntime Ġwith Ġoptions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠDomain Logger Ġ= Ġmock () ĊĊĠĠĠĠĠĠĠ Ġval Ġobject 1 Ġ= ĠSimple Domain Object 1 ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġobject 2 Ġ= ĠSimple Domain Object 2 ( 2 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnode 1 Ġ= ĠDependency Node . Variable Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠSimple Domain Object 1 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Type Ġ= ĠSimple Domain Object 1 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Parameter Ġ 0 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġnode 2 Ġ= ĠDependency Node . Variable Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠSimple Domain Object 2 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Type Ġ= ĠSimple Domain Object 2 :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Parameter Ġ 1 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġnode 3 Ġ= ĠDependency Node . Function Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠException Domain Object :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Type Ġ= ĠException Domain Object :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaller Ġ= ĠException Domain Object :: class . as ClassName (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" create ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Exception Ġ= ĠTest Exception () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠDomain Context ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġschema Ġ= ĠDomain Ch oreo graphy Schema ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Node Ġ= Ġnode 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Order Ġ= ĠlistOf ( node 1 , Ġnode 2 , Ġnode 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodes Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Domain Object 1 :: class . java Ġto ĠDomain Context Node ( object 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Domain Object 2 :: class . java Ġto ĠDomain Context Node ( object 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠException Domain Object :: class . java Ġto ĠDomain Context Node ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġexpected Exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġch oreo graphy Interface Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġexpected Exception ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġexception : ĠTest Exception ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Domain Definition WithOptions < Exception Domain Object >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDomain Ch oreo graphy Options ( logger Ġ= Ġset Of ( logger )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠTest Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThat ( exception ). isEqualTo ( expected Exception ) ĊĠĠĠĠĠĠĠ Ġargument Captor < Domain Context > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( logger ). onComplete ( capture ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġfirst Value ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual ). isEqualTo ( expected ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ