package Ġmob x . collections Ċ Ċ import Ġmob x . test tools . track able Method Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . spe k framework . spe k 2 . Spe k Ċ import Ġorg . spe k framework . spe k 2 . style . specification . describe Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ Ċ @ Suppress (" Use Property Access Syntax ") Ċ object ĠObservable Mutable Collection Test Ġ: ĠSpe k ({ ĊĊĠĠĠ Ġdescribe (" observable Ġmutable Ġmap ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtrack Call Count Ġby Ġmemoized Ġ{ ĠAtomicInteger ( 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Collection Ġby Ġmemoized Ġ{ Ġmutable ListOf ( 1 , Ġ 2 , Ġ 3 , Ġ 4 , Ġ 5 ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġobservable Collection Ġby Ġmemoized Ġ{ ĠObservable Mutable Collection ( original Collection ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsubscriber Ġby Ġmemoized Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFake Subscriber ( observable Collection ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġnew Ġchange Ġvalue Ġon Ġevery Ġupdate ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchanges Ġ= Ġmutable Set Of < Int >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanges . add ( observable Collection . change ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . add ( 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( changes . size ). isEqualTo ( 1 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġadd Ġitem Ġon Ġcollection ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . add ( 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( observable Collection ). contains Exactly Elements Of ( listOf ( 1 , Ġ 2 , Ġ 3 , Ġ 4 , Ġ 5 , Ġ 6 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġnotify Ġob servers Ġafter Ġadd ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subscriber . subscriber Call Count ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . add ( 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subscriber . subscriber Call Count ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġadd Ġitems Ġon Ġcollection ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . addAll ( listOf ( 6 , Ġ 7 , Ġ 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( observable Collection ). contains Exactly Elements Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġnotify Ġob servers Ġafter Ġitems Ġadd ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subscriber . subscriber Call Count ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . addAll ( listOf ( 6 , Ġ 7 , Ġ 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subscriber . subscriber Call Count ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġclear Ġcollection ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( observable Collection . size ). isNot Zero () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( observable Collection ). isEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" contains () Ġshould Ġwork ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( observable Collection . contains ( 5 )). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( observable Collection . contains ( 1 0 )). isFalse () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" contains () Ġshould Ġnotify Ġtracker ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( track Call Count . get ()). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack able Method ( track Call Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . contains ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( track Call Count . get ()). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" contains All () Ġshould Ġwork ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( observable Collection . contains All ( listOf ( 1 , Ġ 2 , Ġ 3 ))). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( observable Collection . contains All ( listOf ( 1 , Ġ 2 , Ġ 3 , Ġ 1 0 ))). isFalse () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" contains () Ġshould Ġnotify Ġtracker ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( track Call Count . get ()). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack able Method ( track Call Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . contains All ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( track Call Count . get ()). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" isEmpty Ġshould Ġwork ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( observable Collection . isEmpty ()). isFalse () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( observable Collection . isEmpty ()). isTrue () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" isEmpty Ġshould Ġnotify Ġtracker ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( track Call Count . get ()). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack able Method ( track Call Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( track Call Count . get ()). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" remove Ġshould Ġremove Ġitem ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . remove ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( observable Collection ). contains Exactly Elements Of ( listOf ( 1 , Ġ 3 , Ġ 4 , Ġ 5 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" remove Ġshould Ġnotify Ġob servers ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subscriber . subscriber Call Count ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . add ( 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subscriber . subscriber Call Count ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" removeAll Ġshould Ġremove Ġitems ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . removeAll ( listOf ( 2 , Ġ 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( observable Collection ). contains Exactly Elements Of ( listOf ( 1 , Ġ 4 , Ġ 5 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" removeAll Ġshould Ġnotify Ġob servers ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subscriber . subscriber Call Count ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . removeAll ( listOf ( 2 , Ġ 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subscriber . subscriber Call Count ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" retain All Ġshould Ġretain Ġitems ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . retain All ( listOf ( 1 , Ġ 2 , Ġ 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( observable Collection ). contains Exactly Elements Of ( listOf ( 1 , Ġ 2 , Ġ 3 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" retain All Ġshould Ġnotify Ġob servers ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subscriber . subscriber Call Count ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . retain All ( listOf ( 1 , Ġ 2 , Ġ 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subscriber . subscriber Call Count ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" retain All Ġshould Ġnotify Ġob servers Ġonly Ġif Ġitems Ġremoved ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subscriber . subscriber Call Count ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . retain All ( listOf ( 1 , Ġ 2 , Ġ 3 , Ġ 4 , Ġ 5 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subscriber . subscriber Call Count ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġsize ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( observable Collection . size ). isEqualTo ( 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġit (" size Ġshould Ġnotify Ġtracker ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( track Call Count . get ()). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrack able Method ( track Call Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobservable Collection . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( track Call Count . get ()). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdescribe (" iterator Ġtest ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiterator Ġby Ġmemoized Ġ{ Ġobservable Collection . iterator () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġremove Ġitem ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( observable Collection ). contains Exactly Elements Of ( listOf ( 2 , Ġ 3 , Ġ 4 , Ġ 5 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġnotify Ġob servers Ġafter Ġremove ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subscriber . subscriber Call Count ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . remove () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( subscriber . subscriber Call Count ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" hasNext Ġshould Ġnotify Ġtracker ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( track Call Count . get ()). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack able Method ( track Call Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . hasNext () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( track Call Count . get ()). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit (" next Ġshould Ġnotify Ġtracker ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( track Call Count . get ()). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack able Method ( track Call Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( track Call Count . get ()). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ