/* Ċ Ġ* Ġ( c ) ĠCopyright Ġ 2 0 1 9 ĠGl ade ĠDiv ine y . Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ import Ġio . gl aded . watch able . Group Change Ċ import Ġio . gl aded . watch able . Set Change Ċ import Ġio . gl aded . watch able . Value Change Ċ import Ġio . gl aded . watch able . group Ċ import Ġio . gl aded . watch able . watch Ċ import Ġio . gl aded . watch able . watch able Set Of Ċ import Ġio . gl aded . watch able . watch able ValueOf Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Test Ċ Ċ class ĠGroup Test Ġ{ ĊĠĠĠ Ġval Ġchanges Ġ= ĠChannel < Group Change >( Channel . UN LIMIT ED ) ĊĊĠĠĠ Ġ@ Test Ġfun Ġcoverage () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġint Value Ġ= Ġwatch able ValueOf ( 1 ) ĊĠĠĠĠĠĠĠ Ġcover ( Group Change ( intValue , ĠValue Change ( null , Ġ 1 , Ġtrue ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` subscribe Ġto Ġa Ġgroup Ġof Ġwatch ables `() Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġint Value Ġ= Ġwatch able ValueOf ( 1 ) ĊĠĠĠĠĠĠĠ Ġval ĠsetValue Ġ= Ġwatch able Set Of (" 1 ") ĊĠĠĠĠĠĠĠ Ġgroup ( intValue , ĠsetValue ). watch ( this ) Ġ{ Ġchanges . send ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinitial List Ġ= ĠlistOf ( changes . receive (), Ġchanges . receive ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGroup Change ( intValue , ĠValue Change ( null , Ġ 1 , Ġtrue )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGroup Change ( setValue , ĠSet Change . Initial ( set Of (" 1 ")) )), Ġinitial List ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( true , Ġtrue ), Ġinitial List . map Ġ{ Ġit . is Initial Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` watch Ġa Ġgroup Ġof Ġwatch ables `() Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġint Value Ġ= Ġwatch able ValueOf ( 1 ) ĊĠĠĠĠĠĠĠ Ġval ĠsetValue Ġ= Ġwatch able Set Of (" 1 ") ĊĠĠĠĠĠĠĠ Ġwatch ( group ( intValue , ĠsetValue )) Ġ{ Ġchanges . send ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġchanges . must Be ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGroup Change ( intValue , ĠValue Change ( null , Ġ 1 , Ġtrue )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGroup Change ( setValue , ĠSet Change . Initial ( set Of (" 1 ")) )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` close Ġwatching Ġof Ġa Ġgroup `() Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġint Value Ġ= Ġwatch able ValueOf ( 1 ) ĊĠĠĠĠĠĠĠ Ġval ĠsetValue Ġ= Ġwatch able Set Of (" 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġhandle Ġ= Ġwatch ( group ( intValue , ĠsetValue )) Ġ{ Ġchanges . send ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġchanges . must Be ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGroup Change ( intValue , ĠValue Change ( null , Ġ 1 , Ġtrue )), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGroup Change ( setValue , ĠSet Change . Initial ( set Of (" 1 ")) )) ĊĠĠĠĠĠĠĠ Ġhandle . stop () ĊĠĠĠĠĠĠĠ Ġchanges . must Be () ĊĠĠĠĠĠĠĠ ĠsetValue Ġ{ Ġadd (" 2 ") Ġ} ĊĠĠĠĠĠĠĠ Ġchanges . must Be () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Opt In ( Experimental Cor outines Api :: class ) ĊĠĠĠ Ġ@ Test Ġfun Ġ` cancel Ġwatching Ġof Ġa Ġgroup `() Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġint Value Ġ= Ġwatch able ValueOf ( 1 ) ĊĠĠĠĠĠĠĠ Ġval ĠsetValue Ġ= Ġwatch able Set Of (" 1 ") ĊĠĠĠĠĠĠĠ Ġpause Dispatcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandle Ġ= Ġwatch ( group ( intValue , ĠsetValue )) Ġ{ Ġchanges . send ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle . cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġchanges . must Be () ĊĠĠĠĠĠĠĠ ĠsetValue Ġ{ Ġadd (" 2 ") Ġ} ĊĠĠĠĠĠĠĠ Ġchanges . must Be () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Opt In ( Experimental Cor outines Api :: class ) ĊĠĠĠ Ġ@ Test Ġfun Ġ` start Ġa Ġgroup Ġof Ġwatch ables `() Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġint Value Ġ= Ġwatch able ValueOf ( 1 ) ĊĠĠĠĠĠĠĠ Ġpause Dispatcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwatcher Ġ= Ġwatch ( group ( intValue )) Ġ{ Ġchanges . send ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanges . must Be () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwatcher . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanges . must Be ( Group Change ( intValue , ĠValue Change ( null , Ġ 1 , Ġis Initial Ġ= Ġtrue ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ