package Ġorg . db tools . android . room Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . room . Room Ċ import Ġio . mock k . every Ċ import Ġio . mock k . impl . annotations . Mock K Ċ import Ġio . mock k . junit 5 . Mock K Extension Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . await All Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . coroutines . with Timeout Ċ import Ġorg . db tools . android . room . database . Foo Ċ import Ġorg . db tools . android . room . database . Test Database Ċ import Ġorg . db tools . android . room . jdbc . Jdbc SQLite Open Helper Factory Ċ import Ġorg . db tools . android . room . util . Test Filesystem Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ import Ġorg . junit . jupiter . api . extension . Register Extension Ċ import Ġtim ber . log . Tim ber Ċ Ċ @ Extend With ( Mock K Extension :: class ) Ċ internal Ġclass ĠRoom LiveData Test Ġ{ ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġ@ Register Extension ĊĠĠĠ Ġval Ġinstant Task Executor Extension Ġ= ĠInstant Task Executor Extension () ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġlateinit Ġvar Ġcontext : ĠContext ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . plant ( object Ġ: ĠTim ber . Tree () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġlog ( priority : ĠInt , Ġtag : ĠString ?, Ġmessage : ĠString , Ġt : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlogMessage : ĠString Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ!= Ġnull Ġ&& Ġtag . isNotEmpty () Ġ-> Ġ" [$ tag ] Ġ$ message " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( log Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠTest Filesystem . delete Filesystem () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontext . files Dir Ġ} Ġreturns ĠTest Filesystem . INTERNAL _ FILES _ DIR ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġto LiveData () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Timeout ( 1 0 0 0 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠRoom . database Builder ( context , ĠTest Database :: class . java , Ġ" test . db ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. allow MainThread Queries () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Transaction Executor ( Test Database . transaction Executor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. open Helper Factory ( Jdbc SQLite Open Helper Factory ( Test Filesystem . INTERNAL _ DATABASE S _ DIR _ PATH )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fallback To Dest ruct ive Migration () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlive Data Ġ= ĠRoom LiveData . to LiveData ( listOf ( database . table Change References (" Foo "))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . foo Dao . findAll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġobject Ġ: ĠObserver < List < Foo >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChanged ( it : ĠList < Foo > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ?. size Ġ== Ġmax ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data . remove Observer ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeferred s Ġ= Ġ( 1 .. max ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . foo Dao . insert ( Foo ( value Ġ= Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeferred s . await All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( live Data . has Active Observer s ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }