package Ġcom . th om ask io ko . tv man iac . settings Ċ Ċ import Ġapp . cash . tur bine . test Ċ import Ġcom . th om ask io ko . tv man iac . settings . api . Tv Man iac Preferences Ċ import Ġcom . th om ask io ko . tv man iac . settings . util . Main Coroutine Rule Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . flow Of Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . coroutines . test . Standard Test Dispatcher Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ @ Experimental Cor outines Api Ċ internal Ġclass ĠSettings ViewModel Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġcoroutine Rule Ġ= ĠMain Coroutine Rule () ĊĊĠĠĠ Ġprivate Ġval Ġtheme Preference : ĠT v Man iac Preferences Ġ= Ġmock k () ĊĠĠĠ Ġprivate Ġval Ġtest Coroutine Dispatcher Ġ= ĠStandard Test Dispatcher () ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠSettings ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Preference , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Coroutine Dispatcher ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` given Theme Is Changed Ġverify Ġupdated Value Is Emit ted `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtheme Preference . observe Theme () Ġ} Ġreturns Ġflow Of ( Theme . LIGHT ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . observe State (). test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . dispatch ( Settings Actions . Theme Selected (" light ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġawait Item () ĠshouldBe ĠSettings State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Ġ= ĠTheme . LIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Popup Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect No Events () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ