/** Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠO nd re j ĠK ip ila Ġ(@ ok 1 0 0 ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . github . ok 1 0 0 . diff y Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 .* Ċ import Ġorg . junit . Test Ċ Ċ internal Ġclass ĠDiff y Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġon Foo Changed : Ġ( String ) Ġ-> ĠUnit Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġon Bar Changed : Ġ( Int ) Ġ-> ĠUnit Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġon B az Changed : Ġ( Boolean ?) Ġ-> ĠUnit Ġ= Ġmock () ĊĊĠĠĠ Ġprivate Ġval Ġdiff y Ġ= ĠDiff y < State >() ĊĠĠĠĠĠĠĠ Ġ. observe ( State :: foo , Ġon Foo Changed ) ĊĠĠĠĠĠĠĠ Ġ. observe ( State :: bar , Ġon Bar Changed ) ĊĠĠĠĠĠĠĠ Ġ. observe ( State :: baz , Ġon B az Changed ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġcreated , Ġthen Ġno Ġcallback `() Ġ{ ĊĠĠĠĠĠĠĠ Ġverify ( on Foo Changed , Ġnever ()). invoke ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( on Bar Changed , Ġnever ()). invoke ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( on B az Changed , Ġnever ()). invoke ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġfirst Ġstate , Ġthen Ġall Ġcallbacks `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdiff y . diff ( State (" a ", Ġ 1 , Ġnull )) ĊĠĠĠĠĠĠĠ Ġverify ( on Foo Changed ). invoke (" a ") ĊĠĠĠĠĠĠĠ Ġverify ( on Bar Changed ). invoke ( 1 ) ĊĠĠĠĠĠĠĠ Ġverify ( on B az Changed ). invoke ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġnon - null Ġvalue Ġchanges , Ġthen Ġcorrect Ġcallback `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdiff y . diff ( State (" a ", Ġ 1 , Ġnull )) ĊĠĠĠĠĠĠĠ Ġdiff y . diff ( State (" b ", Ġ 1 , Ġnull )) ĊĠĠĠĠĠĠĠ Ġverify ( on Foo Changed ). invoke (" a ") ĊĠĠĠĠĠĠĠ Ġverify ( on Foo Changed ). invoke (" b ") ĊĠĠĠĠĠĠĠ Ġverify ( on Bar Changed , Ġtimes ( 1 )). invoke ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( on B az Changed , Ġtimes ( 1 )). invoke ( any OrNull ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when Ġnullable Ġvalue Ġchanges , Ġthen Ġcorrect Ġcallback `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdiff y . diff ( State (" a ", Ġ 1 , Ġnull )) ĊĠĠĠĠĠĠĠ Ġdiff y . diff ( State (" a ", Ġ 1 , Ġtrue )) ĊĠĠĠĠĠĠĠ Ġverify ( on Foo Changed , Ġtimes ( 1 )). invoke ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( on Bar Changed , Ġtimes ( 1 )). invoke ( any ()) ĊĠĠĠĠĠĠĠ Ġverify ( on B az Changed ). invoke ( null ) ĊĠĠĠĠĠĠĠ Ġverify ( on B az Changed ). invoke ( true ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġdata Ġclass ĠState ( ĊĠĠĠ Ġval Ġfoo : ĠString , ĊĠĠĠ Ġval Ġbar : ĠInt , ĊĠĠĠ Ġval Ġbaz : ĠBoolean ? Ċ )