package Ġcom . op id is . unit of work . data Ċ Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ import Ġorg . junit . jupiter . api . Nested Ċ Ċ internal Ġclass ĠObservable User Test Ġ{ ĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġclass ĠWith No Tracking Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġobservable User : ĠObservable User ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ@ BeforeEach ĊĠĠĠĠĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable User Ġ= ĠObservable User ( name Ġ= Ġ" Ch ris ", Ġaddress Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Id ox ĠSoftware ĠLtd ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The ĠGro sv en or ĠBuilding ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 7 2 ĠG ord on ĠStreet ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" G las g ow ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" G 1 Ġ 3 RS ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" UK " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠonChange Ġ= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ After Each ĊĠĠĠĠĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun ĠgetName () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( observable User ?. name Ġ== Ġ" Ch ris ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun ĠsetName () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable User ?. name Ġ= Ġ" Y oni " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( observable User ?. name Ġ== Ġ" Y oni ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġget Address () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( observable User ?. address ?. size Ġ== Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġset Address () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable User ?. address Ġ= ĠarrayOf (" Op id is , ĠThe ĠGro sv en or ĠBuilding , Ġ 7 2 ĠG ord on ĠStreet , ĠG las g ow , ĠG 1 Ġ 3 RS , ĠUK ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( observable User ?. address ?. size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġclass ĠWith On ChangeListener Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġobservable User : ĠObservable User ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġchanged Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ@ BeforeEach ĊĠĠĠĠĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable User Ġ= ĠObservable User ( name Ġ= Ġ" Ch ris ", Ġaddress Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Id ox ĠSoftware ĠLtd ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The ĠGro sv en or ĠBuilding ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 7 2 ĠG ord on ĠStreet ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" G las g ow ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" G 1 Ġ 3 RS ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" UK " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠonChange Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ After Each ĊĠĠĠĠĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanged Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun ĠgetName () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert (! changed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Name Ġhas Ġchanged " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun ĠsetName () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable User ?. name Ġ= Ġ" Y oni " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( changed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Name Ġshould Ġhave Ġchanged !" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġget Address () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( observable User ?. address ?. size Ġ== Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġset Address () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable User ?. address Ġ= ĠarrayOf (" Op id is , ĠThe ĠGro sv en or ĠBuilding , Ġ 7 2 ĠG ord on ĠStreet , ĠG las g ow , ĠG 1 Ġ 3 RS , ĠUK ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( observable User ?. address ?. size Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun ĠonChange Handler Is Passed Correct Entity () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġobserved User : ĠObservable User ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserved User Ġ= ĠObservable User ( name Ġ= Ġ" Ch ris ", Ġaddress Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Id ox ĠSoftware ĠLtd ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The ĠGro sv en or ĠBuilding ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 7 2 ĠG ord on ĠStreet ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" G las g ow ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" G 1 Ġ 3 RS ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" UK " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠonChange Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( observed User Ġ== Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Incorrect Ġentity Ġpassed Ġto ĠonChange Ġhandler " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserved User . name Ġ= Ġ" G ord on " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊĊ