package Ġorg . vide ol an . v lc . view models . browser Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroidx . core . net . to Uri Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . jr ask a . li ved ata . test Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . spy k Ċ import Ġjunit . framework . Assert .* Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . Obsolete Cor outines Api Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Temporary Folder Ċ import Ġorg . vide ol an . lib v lc . Lib VL C Ċ import Ġorg . vide ol an . lib v lc . interfaces . IM edia Ċ import Ġorg . vide ol an . lib v lc . stubs . Stub Media Ċ import Ġorg . vide ol an . lib v lc . util . Media Browser Ċ import Ġorg . vide ol an . med iali brary . interfaces . media . Media Wrapper Ċ import Ġorg . vide ol an . med iali brary . stubs . Stub Media Wrapper Ċ import Ġorg . vide ol an . tools . Coroutine Context Provider Ċ import Ġorg . vide ol an . v lc . Base Test Ċ import Ġorg . vide ol an . v lc . database . Browser Fav Dao Ċ import Ġorg . vide ol an . v lc . providers . Browser Provider Ċ import Ġorg . vide ol an . v lc . repository . Browser Fav Repository Ċ import Ġorg . vide ol an . v lc . util . Test Coroutine Context Provider Ċ import Ġorg . vide ol an . v lc . util . apply Mock Ċ import Ġjava . io . File ĊĊ Ċ @ Obsolete Cor outines Api Ċ @ Experimental Cor outines Api Ċ class ĠFile Browser Model Test Ġ: ĠBaseTest () Ġ{ ĊĠĠĠ Ġ// ĠPreferences Ġchoose Ġdirectories Ġto Ġadd Ġin Ġmed iali brary Ġscan . ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġtemporary Folder Ġ= ĠTemporary Folder () ĊĊĠĠĠ Ġprivate Ġval Ġmocked Lib V lc : ĠLib VL C Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmedia Browser : ĠMedia Browser ĊĠĠĠ Ġprivate Ġval Ġmocked F avorites Dao : ĠBrowser Fav Dao Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġmocked F avorites Repo : ĠBrowser Fav Repository Ġ= Ġspy k ( Browser Fav Repository ( mocked F avorites Dao )) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbrowser Model : ĠBrowser Model ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbrowser Provider : ĠBrowser Provider ĊĊĠĠĠ Ġprivate Ġval Ġcount Videos Ġ= Ġ 2 ĊĠĠĠ Ġprivate Ġval Ġcount Dirs Ġ= Ġ 4 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠBrowser Fav Repository . apply Mock ( mocked F avorites Repo ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠBrowser Handler Ġmocked . ĊĠĠĠĠĠĠĠ Ġval Ġhandler : ĠHandler Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ ĠBrowser Provider . override Creator Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠBrowser Provider . register Creator Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ File Browser Model Test . media Browser Ġ= Ġspy k ( Media Browser ( mocked Lib V lc , Ġnull , Ġhandler )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Browser ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠBrowser Provider . register Creator ( clazz Ġ= ĠCor outine Context Provider :: class . java ) Ġ{ ĠTest Coroutine Context Provider () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbefore Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . before Test () ĊĠĠĠĠĠĠĠ Ġsetup Test Files () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Browser Model ( url : ĠString ?, Ġshow Hidden Files : ĠBoolean , Ġshow Dummy Category : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbrowser Model Ġ= ĠBrowser Model ( application , Ġurl , ĠTYPE _ FILE , Ġshow Hidden Files , Ġshow Dummy Category , ĠTest Coroutine Context Provider ()) ĊĠĠĠĠĠĠĠ Ġbrowser Provider Ġ= Ġbrowser Model . provider ĊĠĠĠĠĠĠĠ Ġmedia Browser Ġ= ĠBrowser Provider . get ( browser Provider ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Test Files () Ġ{ ĊĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġcount Dirs ). map Ġ{ Ġtemporary Folder . new File (" dir $ it ") Ġ} ĊĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġcount Videos ). map Ġ{ Ġtemporary Folder . new File (" video $ it . mp 4 ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd File To Provider ( i : ĠInt , Ġfile : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt Ġ= ĠStub Media ( mocked Lib V lc , Ġ" file ://${ file . path } "). apply Ġ{ Ġif Ġ(! file . name . endsWith (". mp 4 ")) Ġtype Ġ= ĠI Media . Type . Directory Ġ} ĊĠĠĠĠĠĠĠ Ġbrowser Provider . add Media ( Stub Media Wrapper ( t )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfill Files In Dataset ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfile . list Files (). sorted (). map Indexed ( this :: add File To Provider ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Fake Browser Fav ( index : ĠInt ): Ġorg . vide ol an . v lc . medi adb . models . Browser Fav Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġtemporary Folder . new File (" fake _ media $ index ") ĊĠĠĠĠĠĠĠ Ġreturn Ġorg . vide ol an . v lc . medi adb . models . Browser Fav ( t . path . to Uri (), Ġ 0 , Ġ" vid _$ index ", Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen At Root And Internal Storage IsEmpty _ check Shows Folder IsEmpty () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Browser Model ( null , Ġshow Hidden Files Ġ= Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinternal Storage Ġ= Ġbrowser Model . dataset . test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. await Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. value ()[ 0 ] ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO ĠHas Ġto Ġwait Ġfor Ġbrowser Channel Ġqueue ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( browser Model . is Folder Empty ( internal Storage Ġas ĠMedia Wrapper )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen At Root And Internal Storage Has Directories _ check Shows Folder Is NotEmpty () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Browser Model ( null , Ġshow Hidden Files Ġ= Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinternal Storage Ġ= Ġbrowser Model . dataset . test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. await Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. value ()[ 0 ] ĊĊĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ// ĠTODO ĠHack Ġbecause Ġparse Sub Directories Ġis Ġcalled Ġtwice Ġfor Ġsome Ġreason . ĊĠĠĠĠĠĠĠ Ġfill Files In Dataset ( temporary Folder . root ) ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( browser Model . is Folder Empty ( internal Storage Ġas ĠMedia Wrapper )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen At Root And Saved List _ check Pref etch List Is Filled () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Browser Model ( null , Ġshow Hidden Files Ġ= Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinternal Storage Ġ= Ġbrowser Model . dataset . test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. await Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. value ()[ 0 ] ĊĊĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġfill Files In Dataset ( temporary Folder . root ) ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġbrowser Model . save List ( internal Storage Ġas ĠMedia Wrapper ) ĊĊĠĠĠĠĠĠĠ Ġinit Browser Model ( internal Storage . uri . toString (), Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Result Ġ= Ġbrowser Model . dataset . test (). value () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( count Dirs Ġ+ Ġcount Videos , Ġtest Result . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwhen At Root And Has Local Favorite _ check DataSet Contains It () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlive F avorites : ĠMutable LiveData < List < org . vide ol an . v lc . medi adb . models . Browser Fav >> Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmocked F avorites Repo . local F avorites Ġ} Ġreturns Ġlive F avorites ĊĊĠĠĠĠĠĠĠ Ġinit Browser Model ( null , Ġshow Hidden Files Ġ= Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġval Ġno Fav Ġ= Ġbrowser Model . dataset . test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. await Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. value () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġno Fav . size ) ĊĊĠĠĠĠĠĠĠ Ġlive F avorites . value Ġ= ĠlistOf ( get Fake Browser Fav ( 0 )) ĊĊĠĠĠĠĠĠĠ Ġval Ġhas Fav Ġ= Ġbrowser Model . dataset . test () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. await Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. value () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġhas Fav . size ) ĊĠĠĠ Ġ} Ċ }