package Ġde . half bit . k not 3 Ċ Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġde . half bit . k not 3 . utils . Scheduler Tester Ċ import Ġio . reactivex . rx java 3 . subjects . Publish Subject Ċ import Ġorg . junit . Test Ċ Ċ class ĠK not Watch State Test Ġ{ ĊĊĠĠĠ Ġprivate Ġsealed Ġclass ĠState Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠZero Ġ: ĠState () ĊĠĠĠĠĠĠĠ Ġobject ĠOne Ġ: ĠState () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsealed Ġclass ĠChange Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠOne Ġ: ĠChange () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġobject ĠAction ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` state Ġ{ Ġwatch All Ġ} Ġreceives Ġinitial ĠState `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwatcher Ġ= ĠPublish Subject . create < State >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġwatcher . test () ĊĠĠĠĠĠĠĠ Ġk not < State , ĠChange , ĠAction > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Ġ= ĠState . Zero ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch All Ġ{ Ġwatcher . onNext ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanges Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreduce Ġ{ Ġthis . only Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġobserver . assert Values ( State . Zero ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` state Ġ{ Ġwatch All Ġ} Ġreceives ĠState Ġmutations `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwatcher Ġ= ĠPublish Subject . create < State >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġwatcher . test () ĊĠĠĠĠĠĠĠ Ġval Ġk not Ġ= Ġk not < State , ĠChange , ĠAction > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Ġ= ĠState . Zero ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch All Ġ{ Ġwatcher . onNext ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanges Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreduce Ġ{ ĠState . One . only Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġk not . state . test () ĊĠĠĠĠĠĠĠ Ġk not . change . accept ( Change . One ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Values ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . Zero , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . One ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` state Ġ{ Ġwatch Ġ} Ġreceives Ġinitial ĠState `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwatcher Ġ= ĠPublish Subject . create < State >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġwatcher . test () ĊĠĠĠĠĠĠĠ Ġk not < State , ĠChange , ĠAction > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Ġ= ĠState . Zero ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch < State . Zero > Ġ{ Ġwatcher . onNext ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanges Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreduce Ġ{ Ġthis . only Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġobserver . assert Values ( State . Zero ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` state Ġ{ Ġwatch Ġ} Ġreceives ĠState Ġmutations `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwatcher Ġ= ĠPublish Subject . create < State >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġwatcher . test () ĊĠĠĠĠĠĠĠ Ġval Ġk not Ġ= Ġk not < State , ĠChange , ĠAction > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Ġ= ĠState . Zero ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch < State . One > Ġ{ Ġwatcher . onNext ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch < State . Zero > Ġ{ Ġwatcher . onNext ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanges Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreduce Ġ{ ĠState . One . only Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġk not . state . test () ĊĠĠĠĠĠĠĠ Ġk not . change . accept ( Change . One ) ĊĠĠĠĠĠĠĠ Ġobserver . assert Values ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . Zero , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠState . One ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` state Ġ{ Ġwatch Ġ} Ġfilters ĠState Ġmutations `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwatcher Ġ= ĠPublish Subject . create < State >() ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġwatcher . test () ĊĠĠĠĠĠĠĠ Ġk not < State , ĠChange , ĠAction > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Ġ= ĠState . Zero ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch < State . One > Ġ{ Ġwatcher . onNext ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanges Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreduce Ġ{ Ġthis . only Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġobserver . assert No Values () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` changes Ġ{ Ġwatch On Ġ} Ġgets Ġapplied `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscheduler Tester Ġ= ĠScheduler Tester () ĊĠĠĠĠĠĠĠ Ġk not < State , ĠChange , ĠAction > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Ġ= ĠState . Zero ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch On Ġ= Ġscheduler Tester . scheduler (" one ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch All Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanges Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreduce Ġ{ Ġthis . only Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġscheduler Tester . assert Schedulers (" one ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` changes Ġ{ Ġwatch On Ġ} Ġis Ġnull Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠ Ġk not < State , ĠChange , ĠAction > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Ġ= ĠState . Zero ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( watch On ). isNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanges Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreduce Ġ{ Ġthis . only Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` changes Ġ{ Ġwatch On Ġ} Ġgets Ġapplied Ġbefore Ġeach Ġwatcher `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscheduler Tester Ġ= ĠScheduler Tester () ĊĠĠĠĠĠĠĠ Ġk not < State , ĠChange , ĠAction > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Ġ= ĠState . Zero ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch On Ġ= Ġscheduler Tester . scheduler (" one ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch All Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch On Ġ= Ġscheduler Tester . scheduler (" two ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwatch All Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanges Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreduce Ġ{ Ġthis . only Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġscheduler Tester . assert Schedulers (" one ") ĊĠĠĠ Ġ} Ċ }