package Ġde . u ul m . se . co uched it . processing . common . services . diff Ċ Ċ import Ġde . u ul m . se . co uched it . processing . common . model . time . Vector Timestamp Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . assertj . core . api . Assertions . assertThat IllegalStateException Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠVersion Manager Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsystem UnderTest Id Ġ= Ġ" Version Manager _ in _ testing " ĊĊĠĠĠ Ġprivate Ġval Ġsystem UnderTest Ġ= ĠVersion Manager ( system UnderTest Id ) ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġsystem UnderTest . update Version (" start ", ĠVector Timestamp ( mutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto Ġ 4 2 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto Ġ 1 3 3 7 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" x " Ġto Ġ 1 1 1 1 1 L ĊĠĠĠĠĠĠĠ Ġ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠRegister Local Event Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Elements Ġupdated Ġafter Ġthe Ġcall Ġshould Ġbe Ġca us ally Ġdependent Ġon ĠElements Ġupdated Ġbefore Ġthe Ġcall `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp Before Ġ= Ġsystem UnderTest . mark Element Updated (" test ") ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem UnderTest . register Local Event () ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp After Ġ= Ġsystem UnderTest . mark Element Updated (" test ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( timestamp After . relation To ( timestamp Before ) Ġ== ĠVector Timestamp . Ca usal Relation . STRICT LY _ AFTER ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġnot Ġhave Ġinfluence Ġon Ġtimestamps Ġgiven Ġextern ally `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp To Insert Ġ= ĠVector Timestamp ( mutable Map Of (" 1 " Ġto Ġ 1 L , Ġ" 2 " Ġto Ġ 2 L )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid 1 Ġ= Ġ" test " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid 2 Ġ= Ġ" test 2 " ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem UnderTest . update Version ( id 1 , Ġtimestamp To Insert ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem UnderTest . register Local Event () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem UnderTest . update Version ( id 2 , Ġtimestamp To Insert ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( system UnderTest . version Of ( id 1 )). isEqualTo ( system UnderTest . version Of ( id 2 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġnot Ġhave Ġan Ġinfluence Ġon Ġtimestamps Ġalready Ġstored `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ" test " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem UnderTest . mark Element Updated ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp Before Ġ= Ġsystem UnderTest . version Of ( id ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem UnderTest . register Local Event () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp After Ġ= Ġsystem UnderTest . version Of ( id ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( timestamp After ). isEqualTo ( timestamp Before ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠMark Element Updated Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` value Ġshould Ġbe Ġreturned Ġin Ġsubsequent Ġversion Of Ġcalls Ġif Ġaccepted `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ" test " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Timestamp Key Ġ= Ġ" test Key " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= ĠVector Timestamp ( mutable Map Of ( test Timestamp Key Ġto Ġ 9 9 L )) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsystem UnderTest . update Version ( id , Ġtimestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Version Of Ġ= Ġsystem UnderTest . version Of ( id ) !! ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( result ). isTrue () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( new Version Of [ test Timestamp Key ]). isEqualTo ( timestamp [ test Timestamp Key ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` value Ġshould Ġbe Ġrejected Ġif Ġit Ġis Ġbefore Ġthe Ġold Ġstored Ġversion `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ" test " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Timestamp Key Ġ= Ġ" test Key " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= ĠVector Timestamp ( mutable Map Of ( test Timestamp Key Ġto Ġ 6 6 6 L )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġolder Timestamp Ġ= ĠVector Timestamp ( mutable Map Of ( test Timestamp Key Ġto Ġ 3 3 3 L )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsystem UnderTest . update Version ( id , Ġtimestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult 2 Ġ= Ġsystem UnderTest . update Version ( id , Ġolder Timestamp ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Timestamp Ġ= Ġsystem UnderTest . version Of ( id ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( result ). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( result 2 ). isFalse () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( new Timestamp [ test Timestamp Key ]). isEqualTo ( timestamp [ test Timestamp Key ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġthrow ĠIllegalStateException Ġif Ġtrying Ġto Ġupdate Ġthe Ġvalue Ġof ĠVersion Manager 's Ġown Ġtimestamp `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem UnderTest . register Local Event () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem UnderTest . register Local Event () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Timestamp Ġ= Ġsystem UnderTest . mark Element Updated (" test ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Timestamp Ġ= ĠVector Timestamp ( mutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem UnderTest Id Ġto Ġcurrent Timestamp [ system UnderTest Id ] Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat IllegalStateException (). is Thrown By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem UnderTest . update Version (" test ", Ġnew Timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠOn Remove Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` should Ġmake Ġthe ĠVersion Manager Ġreturn Ġnull Ġon Ġsubsequent Ġversion Of Ġcalls `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ" test " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem UnderTest . update Version ( id , ĠVector Timestamp ( mutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" abc " Ġto Ġ 9 5 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem UnderTest . on Remove ( id ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Timestamp Ġ= Ġsystem UnderTest . version Of ( id ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( new Timestamp ). isNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ