/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 . ĠJetBrains Ġs . r . o . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġjet brains . datal ore . base . observable . collections Ċ Ċ import Ġjet brains . datal ore . base . observable . collections . list . Observable ArrayList Ċ import Ġjet brains . datal ore . base . observable . collections . list . Observable List Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assert Fails With Ċ import Ġkotlin . test . assertTrue Ċ Ċ open Ġclass ĠList Listeners Test Ġ: ĠList eners TestCase () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcreate Collection (): ĠMy List Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTest Observable ArrayList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Throw ing On Add Collection (): ĠMy List Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠTest Observable ArrayList () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo Add ( index : ĠInt , Ġitem : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġcreate Throw ing On Set Collection (): ĠMy List Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠTest Observable ArrayList () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo Set ( index : ĠInt , Ġitem : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Throw ing On Remove Collection (): ĠMy List Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠTest Observable ArrayList () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdo Remove ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbefore After Are Called On Set () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġcreate Collection () ĊĠĠĠĠĠĠĠ Ġc . add ( 0 ) ĊĠĠĠĠĠĠĠ Ġc [ 0 ] Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġc . remove At ( 0 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( c . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġc . before Item Added Calls Number ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġc . before Item Set Calls Number ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġc . before Item Removed Calls Number ) ĊĠĠĠĠĠĠĠ Ġc . verify Before After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbefore After On Set Are nt Affected By Listener Exceptions () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Fails With < Unsupported OperationException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġcreate Collection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . add ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . addListener ( create Throw ing Listener ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc [ 0 ] Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . verify Before After () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . verify Last Success ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . assert Content Equals ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġset Failure Does nt A ffect Before After () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Fails With < IllegalStateException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġcreate Throw ing On Set Collection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . add ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . addListener ( create Throw ing Listener ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc [ 0 ] Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . verify Before After () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . verify Last Success ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . assert Content Equals ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġinterface ĠMy List Ġ: ĠMy Collection , ĠObservable List < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbefore Item Set Calls Number : ĠInt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġopen Ġclass ĠTest Observable ArrayList Ġ: ĠObservable ArrayList < Int >(), ĠMy List Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġbefore Item Added Calls Number : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġafter Item Added Called : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġbefore Item Set Calls Number : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġafter Item Set Called : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġbefore Item Removed Calls Number : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġafter Item Removed Called : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġsuccessful : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Item Added ( index : ĠInt , Ġitem : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Item Added Calls Number ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Item Added ( index : ĠInt , Ġitem : ĠInt , Ġsuccess : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter Item Added Called ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccessful Ġ= Ġsuccess ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Item Set ( index : ĠInt , Ġold Item : ĠInt , Ġnew Item : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Item Set Calls Number ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Item Set ( index : ĠInt , Ġold Item : ĠInt , Ġnew Item : ĠInt , Ġsuccess : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter Item Set Called ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccessful Ġ= Ġsuccess ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Item Removed ( index : ĠInt , Ġitem : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Item Removed Calls Number ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter Item Removed ( index : ĠInt , Ġitem : ĠInt , Ġsuccess : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter Item Removed Called ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccessful Ġ= Ġsuccess ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġverify Last Success ( expected : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġsuccessful ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġverify Before After () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( after Item Added Called , Ġbefore Item Added Calls Number ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( after Item Set Called , Ġbefore Item Set Calls Number ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( after Item Removed Called , Ġbefore Item Removed Calls Number ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġassert Content Equals ( var arg Ġexpected : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < Int >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġexpected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( list , Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }