/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠEric ĠA . ĠSn ell Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ Ċ package Ġcom . e al va . to que . prefs Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . test . core . app . Application Provider Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġcom . e al va . pref store . store . invoke Ċ import Ġcom . e al va . to que . common . Millis Ċ import Ġcom . e al va . to que . common . Volume Ċ import Ġcom . e al va . to que . prefs . App Prefs Ċ import Ġcom . e al va . to que . prefs . App Prefs . Companion . PLAY _ PAUSE _ FA DE _ RANGE Ċ import Ġcom . e al va . to que . prefs . App Prefs Singleton Ċ import Ġcom . e al va . to que . prefs . Duck Action Ċ import Ġcom . e al va . to que . prefs . EndOf Queue Action Ċ import Ġcom . e al va . to que . prefs . Play Up Next Action Ċ import Ġcom . e al va . to que . prefs . Select Media Action Ċ import Ġcom . e al va . to que . test . shared . Coroutine Rule Ċ import Ġcom . e al va . to que . test . shared . to Not Be Ċ import Ġcom . n ha ar man . expect . expect Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . test . Test Scope Ċ import Ġkotlinx . coroutines . test . run Test Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Temporary Folder Ċ import Ġorg . junit . runner . RunWith Ċ import Ġjava . io . File Ċ import Ġkotlin . time . Duration . Companion . milliseconds Ċ import Ġkotlin . time . Duration . Companion . seconds Ċ Ċ @ Experimental Cor outines Api Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠApp Preferences Test Ġ{ ĊĠ Ġ@ get : Rule ĊĠ Ġvar Ġcoroutine Rule Ġ= ĠCor outine Rule () ĊĊĠ Ġ@ get : Rule ĊĠ Ġval Ġtemp Folder : ĠTemporary Folder Ġ= ĠTemporary Folder () ĊĊĠ Ġprivate Ġlateinit Ġvar Ġapp Ctx : ĠContext ĊĠ Ġprivate Ġlateinit Ġvar Ġtest File : ĠFile ĊĠ Ġprivate Ġlateinit Ġvar Ġdata Store Scope : ĠTest Scope ĊĠ Ġprivate Ġlateinit Ġvar Ġprefs Singleton : ĠApp Prefs Singleton ĊĊĠ Ġ@ Before ĊĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠ Ġapp Ctx Ġ= ĠApplication Provider . getApplicationContext () ĊĠĠĠ Ġtest File Ġ= Ġtemp Folder . new File (" dummy . preferences _ pb ") ĊĠĠĠ Ġdata Store Scope Ġ= ĠTest Scope ( coroutine Rule . test Dispatcher Ġ+ ĠJob ()) ĊĠĠĠ Ġprefs Singleton Ġ= ĠApp Prefs Singleton ( App Prefs . Companion :: make , Ġtest File , Ġdata Store Scope ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest First RunWith Permission () Ġ= Ġrun Test Ġ{ ĊĠĠĠ Ġprefs Singleton Ġ{ ĊĠĠĠĠĠ Ġexpect ( first Run ()). toBe ( first Run . default ) ĊĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠ Ġexpect All Are Default () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Allow Duplicates () Ġ= Ġrun Test Ġ{ ĊĠĠĠ Ġprefs Singleton Ġ{ ĊĠĠĠĠĠ Ġexpect ( allow Duplicates ()). toBe ( allow Duplicates . default ) ĊĠĠĠĠĠ Ġallow Duplicates . set ( true ) ĊĠĠĠĠĠ Ġexpect ( allow Duplicates ()). toBe ( true ) ĊĠĠĠĠĠ Ġallow Duplicates . set ( false ) ĊĠĠĠĠĠ Ġexpect ( allow Duplicates ()). toBe ( false ) ĊĊĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠ Ġexpect All Are Default () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Go To Now Playing () Ġ= Ġrun Test Ġ{ ĊĠĠĠ Ġprefs Singleton Ġ{ ĊĠĠĠĠĠ Ġexpect ( goTo Now Playing ()). toBe ( goTo Now Playing . default ) ĊĠĠĠĠĠ Ġgo To Now Playing . set ( false ) ĊĠĠĠĠĠ Ġexpect ( goTo Now Playing ()). toBe ( false ) ĊĠĠĠĠĠ Ġgo To Now Playing . set ( true ) ĊĠĠĠĠĠ Ġexpect ( goTo Now Playing ()). toBe ( true ) ĊĊĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠ Ġexpect All Are Default () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Ignore Small Files () Ġ= Ġrun Test Ġ{ ĊĠĠĠ Ġprefs Singleton Ġ{ ĊĠĠĠĠĠ Ġexpect ( ignore Small Files ()). toBe ( ignore Small Files . default ) ĊĠĠĠĠĠ Ġignore Small Files . set ( true ) ĊĠĠĠĠĠ Ġexpect ( ignore Small Files ()). toBe ( true ) ĊĊĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠ Ġexpect All Are Default () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Ignore Threshold () Ġ= Ġrun Test Ġ{ ĊĠĠĠ Ġprefs Singleton Ġ{ ĊĠĠĠĠĠ Ġexpect ( ignore Threshold ()). toBe ( ignore Threshold . default ) ĊĠĠĠĠĠ Ġignore Threshold . set ( 5 . seconds ) ĊĠĠĠĠĠ Ġexpect ( ignore Threshold ()). toBe ( 5 . seconds ) ĊĊĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠ Ġexpect All Are Default () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Last Scan Time () Ġ= Ġrun Test Ġ{ ĊĠĠĠ Ġprefs Singleton Ġ{ ĊĠĠĠĠĠ Ġ// Ġwe Ġnever Ġreset Ġlast Ġscan Ġtime Ġto Ġdefault Ġof ĠDEFAULT _ LAST _ SCAN _ TIME , Ġso Ġlet 's Ġnot Ġtest Ġthat ĊĠĠĠĠĠ Ġlast Scan Time . set ( Millis . ONE _ MINUTE ) ĊĠĠĠĠĠ Ġexpect ( last Scan Time ()). toBe ( Millis . ONE _ MINUTE ) ĊĠĠĠĠĠ Ġlast Scan Time . set ( last Scan Time . default ) ĊĠĠĠĠĠ Ġexpect ( last Scan Time ()). toBe ( last Scan Time . default ) ĊĊĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠ Ġexpect All Are Default () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Fade On Play Pause () Ġ= Ġrun Test Ġ{ ĊĠĠĠ Ġprefs Singleton Ġ{ ĊĠĠĠĠĠ Ġexpect ( play Pause Fade ()). toBe ( play Pause Fade . default ) ĊĠĠĠĠĠ Ġplay Pause Fade . set ( true ) ĊĠĠĠĠĠ Ġexpect ( play Pause Fade ()). toBe ( true ) ĊĊĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠ Ġexpect All Are Default () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Play Pause Fade () Ġ= Ġrun Test Ġ{ ĊĠĠĠ Ġprefs Singleton Ġ{ ĊĠĠĠĠĠ Ġexpect ( play Pause Fade Duration ()). toBe ( play Pause Fade Duration . default ) ĊĠĠĠĠĠ Ġplay Pause Fade Duration . set ( 1 . seconds ) ĊĠĠĠĠĠ Ġexpect ( play Pause Fade Duration ()). toBe ( 1 . seconds ) ĊĠĠĠĠĠ Ġplay Pause Fade Duration . set ( 2 . seconds ) ĊĠĠĠĠĠ Ġexpect ( play Pause Fade Duration ()). toBe ( 2 . seconds ) ĊĠĠĠĠĠ Ġplay Pause Fade Duration . set ( 1 0 0 . milliseconds ) ĊĠĠĠĠĠ Ġexpect ( play Pause Fade Duration ()). toBe ( PLAY _ PAUSE _ FA DE _ RANGE . start ) ĊĠĠĠĠĠ Ġplay Pause Fade Duration . set ( 5 . seconds ) ĊĠĠĠĠĠ Ġexpect ( play Pause Fade Duration ()). toBe ( PLAY _ PAUSE _ FA DE _ RANGE . end Inclusive ) ĊĊĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠ Ġexpect All Are Default () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Duck Action () Ġ= Ġrun Test Ġ{ ĊĠĠĠ Ġprefs Singleton Ġ{ ĊĠĠĠĠĠ Ġexpect ( duck Action ()). toBe ( duck Action . default ) ĊĠĠĠĠĠ ĠD uck Action . values (). forEach Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠ Ġdu ck Action . set ( action ) ĊĠĠĠĠĠĠĠ Ġexpect ( duck Action ()). toBe ( action ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠ Ġexpect All Are Default () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Duck Volume () Ġ= Ġrun Test Ġ{ ĊĠĠĠ Ġprefs Singleton Ġ{ ĊĠĠĠĠĠ Ġexpect ( duck Volume ()). toBe ( duck Volume . default ) ĊĠĠĠĠĠ Ġdu ck Volume . set ( Volume (- 1 0 0 )) ĊĠĠĠĠĠ Ġexpect ( duck Volume ()). toBe ( Volume . NONE ) ĊĠĠĠĠĠ Ġdu ck Volume . set ( Volume ( 1 0 0 0 )) ĊĠĠĠĠĠ Ġexpect ( duck Volume ()). toBe ( Volume . MAX ) ĊĠĠĠĠĠ ĠarrayOf ( Volume ( 1 0 ), ĠVolume ( 3 0 ), ĠVolume ( 6 7 ), ĠVolume ( 9 1 )). forEach Ġ{ Ġvol Ġ-> ĊĠĠĠĠĠĠĠ Ġdu ck Volume . set ( vol ) ĊĠĠĠĠĠĠĠ Ġexpect ( duck Volume ()). toBe ( vol ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠ Ġexpect All Are Default () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Play Up Next Action () Ġ= Ġrun Test Ġ{ ĊĠĠĠ Ġprefs Singleton Ġ{ ĊĠĠĠĠĠ Ġexpect ( play Up Next Action ()). toBe ( play Up Next Action . default ) ĊĠĠĠĠĠ ĠPlay Up Next Action . values (). forEach Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠ Ġplay Up Next Action . set ( action ) ĊĠĠĠĠĠĠĠ Ġexpect ( play Up Next Action ()). toBe ( action ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠ Ġexpect All Are Default () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest EndOf Queue Action () Ġ= Ġrun Test Ġ{ ĊĠĠĠ Ġprefs Singleton Ġ{ ĊĠĠĠĠĠ Ġexpect ( end Of Queue Action ()). toBe ( end Of Queue Action . default ) ĊĠĠĠĠĠ ĠEnd Of Queue Action . values (). forEach Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠ Ġend Of Queue Action . set ( action ) ĊĠĠĠĠĠĠĠ Ġexpect ( end Of Queue Action ()). toBe ( action ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠ Ġexpect All Are Default () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Select Media Action () Ġ= Ġrun Test Ġ{ ĊĠĠĠ Ġprefs Singleton Ġ{ ĊĠĠĠĠĠ Ġexpect ( select Media Action ()). toBe ( select Media Action . default ) ĊĠĠĠĠĠ ĠSelect Media Action . values (). forEach Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠ Ġselect Media Action . set ( action ) ĊĠĠĠĠĠĠĠ Ġexpect ( select Media Action ()). toBe ( action ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠ Ġexpect All Are Default () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Reset All To Default () Ġ= Ġrun Test Ġ{ ĊĠĠĠ Ġprefs Singleton Ġ{ ĊĠĠĠĠĠ Ġ// Ġclear Ġall Ġand Ġensure Ġdefault ĊĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠ Ġexpect All Are Default () ĊĊĠĠĠĠĠ Ġ// Ġset Ġnon - default Ġvalues Ġfor Ġall Ġand Ġensure Ġnot Ġdefault ĊĠĠĠĠĠ Ġfirst Run (! first Run . default ) ĊĠĠĠĠĠ Ġallow Duplicates (! allow Duplicates . default ) ĊĠĠĠĠĠ Ġgo To Now Playing (! goTo Now Playing . default ) ĊĠĠĠĠĠ Ġignore Small Files (! ignore Small Files . default ) ĊĠĠĠĠĠ Ġignore Threshold ( ignore Threshold . default Ġ+ Ġ 1 . seconds ) ĊĠĠĠĠĠ Ġplay Pause Fade (! play Pause Fade . default ) ĊĠĠĠĠĠ Ġplay Pause Fade Duration ( play Pause Fade Duration . default Ġ+ Ġ 5 0 0 . milliseconds ) ĊĠĠĠĠĠ Ġdu ck Action ( Duck Action . Pause ) ĊĠĠĠĠĠ Ġdu ck Volume ( duck Volume . default Ġ+ Ġ 1 ) ĊĠĠĠĠĠ Ġplay Up Next Action ( Play Up Next Action . Clear Up Next ) ĊĠĠĠĠĠ Ġend Of Queue Action ( EndOf Queue Action . Stop ) ĊĠĠĠĠĠ Ġselect Media Action ( Select Media Action . AddTo Up Next ) ĊĠĠĠĠĠ Ġexpect All Are Not Default () ĊĊĠĠĠĠĠ Ġ// Ġclear Ġall Ġand Ġensure Ġdefault ĊĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠ Ġexpect All Are Default () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠApp Prefs . expect All Are Default () Ġ{ ĊĠĠĠ Ġexpect ( first Run ()). toBe ( first Run . default ) ĊĠĠĠ Ġexpect ( last Scan Time ()). toBe ( last Scan Time . default ) ĊĠĠĠ Ġexpect ( allow Duplicates ()). toBe ( allow Duplicates . default ) ĊĠĠĠ Ġexpect ( goTo Now Playing ()). toBe ( goTo Now Playing . default ) ĊĠĠĠ Ġexpect ( ignore Small Files ()). toBe ( ignore Small Files . default ) ĊĠĠĠ Ġexpect ( ignore Threshold ()). toBe ( ignore Threshold . default ) ĊĠĠĠ Ġexpect ( play Pause Fade ()). toBe ( play Pause Fade . default ) ĊĠĠĠ Ġexpect ( play Pause Fade Duration ()). toBe ( play Pause Fade Duration . default ) ĊĠĠĠ Ġexpect ( duck Action ()). toBe ( duck Action . default ) ĊĠĠĠ Ġexpect ( duck Volume ()). toBe ( duck Volume . default ) ĊĠĠĠ Ġexpect ( play Up Next Action ()). toBe ( play Up Next Action . default ) ĊĠĠĠ Ġexpect ( select Media Action ()). toBe ( select Media Action . default ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠApp Prefs . expect All Are Not Default () Ġ{ ĊĠĠĠ Ġexpect ( first Run ()). to Not Be ( first Run . default ) ĊĠĠĠ Ġexpect ( allow Duplicates ()). to Not Be ( allow Duplicates . default ) ĊĠĠĠ Ġexpect ( goTo Now Playing ()). to Not Be ( goTo Now Playing . default ) ĊĠĠĠ Ġexpect ( ignore Small Files ()). to Not Be ( ignore Small Files . default ) ĊĠĠĠ Ġexpect ( ignore Threshold ()). to Not Be ( ignore Threshold . default ) ĊĠĠĠ Ġexpect ( play Pause Fade ()). to Not Be ( play Pause Fade . default ) ĊĠĠĠ Ġexpect ( play Pause Fade Duration ()). to Not Be ( play Pause Fade Duration . default ) ĊĠĠĠ Ġexpect ( duck Action ()). to Not Be ( duck Action . default ) ĊĠĠĠ Ġexpect ( duck Volume ()). to Not Be ( duck Volume . default ) ĊĠĠĠ Ġexpect ( play Up Next Action ()). to Not Be ( play Up Next Action . default ) ĊĠĠĠ Ġexpect ( select Media Action ()). to Not Be ( select Media Action . default ) ĊĠ Ġ} Ċ } Ċ