package Ġa lex i . rx preferences Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertNull Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito .* Ċ import Ġorg . mockito . junit . Mockito JUnit Runner Ċ Ċ private Ġconst Ġval ĠKEY Ġ= Ġ" key " Ċ Ċ @ RunWith ( Mockito JUnit Runner :: class ) Ċ class ĠPreference Test Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Value Ġ= Ġ"" ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġspy Preference : ĠTest Preference ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġshared Preferences : ĠSharedPreferences ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġeditor : ĠSharedPreferences . Editor ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġspy Preference Ġ= Ġspy ( Test Preference ( shared Preferences , ĠKEY )) ĊĊĠĠĠĠĠĠĠ Ġ` when `( spy Preference . preferences ). thenReturn ( shared Preferences ) ĊĠĠĠĠĠĠĠ Ġ` when `( shared Preferences . edit ()). thenReturn ( editor ) ĊĠĠĠĠĠĠĠ Ġ` when `( shared Preferences . getString ( eq ( KEY ), Ġany ())). then Ġ{ Ġcurrent Value Ġ} ĊĠĠĠĠĠĠĠ Ġ` when `( editor . putString ( any String (), Ġany String ())). then Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Value Ġ= Ġit . arguments [ 1 ] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspy Preference . on Preference Changed Listener ?. on Shared Preference Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . arguments [ 0 ] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsource Ġregisters Ġshared Ġpreferences Ġupdate Ġlistener `() Ġ{ ĊĠĠĠĠĠĠĠ Ġspy Preference . to Observable (). test () ĊĠĠĠĠĠĠĠ Ġverify ( shared Preferences ). register On Shared Preference ChangeListener ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsource Ġunregister Ġpreferences Ġlistener Ġon Ġdispose `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsubscription Ġ= Ġspy Preference . to Observable (). test () ĊĠĠĠĠĠĠĠ Ġsubscription . dispose () ĊĠĠĠĠĠĠĠ ĠassertNull ( spy Preference . on Preference Changed Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsource Ġemits Ġvalue Ġon Ġsubscribe `() Ġ{ ĊĠĠĠĠĠĠĠ Ġspy Preference . to Observable (). test (). value Count () Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsource Ġupdates Ġon Ġpreference Ġchange `() Ġ{ ĊĠĠĠĠĠĠĠ Ġspy Preference . to Observable (). test (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). putString ( KEY , Ġ" first ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). putString ( KEY , Ġ" second ") ĊĠĠĠĠĠĠĠ Ġ}. assert Values ("", Ġ" first ", Ġ" second ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsource Ġnot Ġupdates Ġwhen Ġpreference Ġwith Ġdifferent Ġkey Ġchanged `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġspy Preference . to Observable (). test () ĊĠĠĠĠĠĠĠ Ġshared Preferences . edit (). putString (" wrong Ġkey ", Ġ" first ") ĊĠĠĠĠĠĠĠ Ġsource . assert No Errors () ĊĠĠĠĠĠĠĠ ĠassertEquals ( source . value Count (), Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsource Ġnot Ġemit Ġrepeated Ġvalues `() Ġ{ ĊĠĠĠĠĠĠĠ Ġspy Preference . to Observable (). test (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). putString ( KEY , Ġ" first ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). putString ( KEY , Ġ" first ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). putString ( KEY , Ġ" second ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . edit (). putString ( KEY , Ġ" first ") ĊĠĠĠĠĠĠĠ Ġ}. assert Values ("", Ġ" first ", Ġ" second ", Ġ" first ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsource Ġshares Ġvalue Ġbetween Ġdifferent Ġsubscribers `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠarrayOf (" first ", Ġ" second ", Ġ" third ") ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observable Ġ= Ġspy Preference . to Observable () ĊĠĠĠĠĠĠĠ Ġval Ġfirst Subscription Ġ= Ġtest Observable . test () ĊĠĠĠĠĠĠĠ Ġshared Preferences . edit (). putString ( KEY , Ġvalues [ 0 ]) ĊĠĠĠĠĠĠĠ Ġshared Preferences . edit (). putString ( KEY , Ġvalues [ 1 ]) ĊĠĠĠĠĠĠĠ Ġval Ġsecond Subscription Ġ= Ġtest Observable . test () ĊĠĠĠĠĠĠĠ Ġshared Preferences . edit (). putString ( KEY , Ġvalues [ 2 ]) ĊĊĠĠĠĠĠĠĠ Ġfirst Subscription . assert Values ("", Ġvalues [ 0 ], Ġvalues [ 1 ], Ġvalues [ 2 ]) ĊĠĠĠĠĠĠĠ Ġsecond Subscription . assert Values ( values [ 1 ], Ġvalues [ 2 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠTest Preference ( ĊĠĠĠĠĠĠĠ Ġshared Preferences : ĠSharedPreferences , ĊĠĠĠĠĠĠĠ Ġkey : ĠString , ĊĠĠĠĠĠĠĠ Ġdef Value : ĠString Ġ= Ġ"" ĊĠĠĠ Ġ) Ġ: ĠPreference < String >( ĊĠĠĠĠĠĠĠ Ġshared Preferences , ĊĠĠĠĠĠĠĠ Ġkey , ĊĠĠĠĠĠĠĠ Ġdef Value ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetValue (): ĠString Ġ= Ġpreferences . getString ( key , Ġdef Value ) !! ĊĠĠĠ Ġ} Ċ }