package Ġio . github . dl le w el lyn . saf et or un . int ents . file Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġio . github . dl le w el lyn . saf et or un . int ents . utils . assertFalse Ċ import Ġio . github . dl le w el lyn . saf et or un . int ents . utils . assertTrue Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġjunit . framework . TestCase Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . ro bo lectric . Ro bo lectric TestRunner Ċ import Ġjava . io . File Ċ Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ internal Ġclass ĠDefault File Uri Matcher Builder Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcontext Ġ= Ġmock k < Context >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĠpackageName Ġ} Ġreturns ĠPACK AGE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdefault File Uri Matcher Ġ= ĠDefault File Uri Matcher Builder ( context ) ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġthat Ġby Ġdefault Ġwe Ġallow Ġa Ġfile Ġnot Ġin Ġprivate Ġdirectory `() Ġ{ ĊĠĠĠĠĠĠĠ ĠFile (" Ab c ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify File ( context ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertTrue () ĊĊĠĠĠĠĠĠĠ ĠUri . parse (" file :/// sd card / Ab c ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify File ( context ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertTrue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġthat Ġby Ġdefault Ġwe Ġdont Ġallow Ġa Ġfile Ġin Ġprivate Ġdirectory `() Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ("/ data / data /$ PACKAGE / files / abc . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify File ( context ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertFalse () ĊĊĠĠĠĠĠĠĠ ĠUri . parse (" file :/// data / data /$ PACKAGE / files / abc . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify File ( context ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertFalse () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġthat Ġwe Ġare Ġblocked Ġfrom Ġa Ġfile Ġbeing Ġavailable Ġif Ġnot Ġin Ġthe Ġright Ġdirectory `() Ġ{ ĊĠĠĠĠĠĠĠ ĠUri . parse (" file :/// data / data /$ PACKAGE / abc . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify File ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ("/ data / data /$ PACKAGE / files "). allow Directory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertFalse () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġthat Ġby Ġdefault Ġwe Ġdont Ġallow Ġa Ġfile Ġin Ġprivate Ġdirectory Ġuser data `() Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ("/ user / data /$ PACKAGE / files / abc . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify File ( context ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertFalse () ĊĊĠĠĠĠĠĠĠ ĠUri . parse (" file :/// user / data /$ PACKAGE / files / abc . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify File ( context ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertFalse () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġthat Ġwe Ġdo Ġallow Ġa Ġfile Ġin Ġa Ġdirectory Ġthat Ġhas Ġbeen Ġadded `() Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ("/ data / data /$ PACKAGE / files / abc . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify File ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ("/ data / data /$ PACKAGE / files / "). allow Directory () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertTrue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġthat Ġwe Ġdo Ġallow Ġa Ġfile Ġin Ġa Ġdirectory Ġthat Ġhas Ġbeen Ġadded Ġas Ġan Ġexact Ġmatch `() Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ("/ data / data /$ PACKAGE / files / abc . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. verify File ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ("/ data / data /$ PACKAGE / files / abc . txt "). allow Exact File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertTrue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġthat Ġwe Ġdo Ġnot Ġallow Ġa Ġdirectory Ġin Ġprivate Ġdirectory Ġeven Ġwith Ġdirectory Ġtraversal `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdefault File Uri Matcher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. does File Check Pass ( File ("/ data / app /../ data /$ PACKAGE / files / abc . txt ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertFalse () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġthat Ġwe Ġdo Ġallow Ġa Ġfile Ġin Ġa Ġdirectory Ġthat Ġhas Ġbeen Ġadded Ġin Ġa Ġsub dir `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdefault File Uri Matcher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Allowed Parent Directory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Uri Matcher Builder . File Uri Matcher Check ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ("/ data / data /$ PACKAGE / files / "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. does File Check Pass ( File ("/ data / data /$ PACKAGE / files / def / abc . txt ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertTrue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġthat Ġwe Ġdo Ġnot Ġallow Ġa Ġfile Ġin Ġa Ġdirectory Ġthat Ġhas Ġbeen Ġadded Ġin Ġa Ġsub dir `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdefault File Uri Matcher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Allowed Parent Directory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Uri Matcher Builder . File Uri Matcher Check ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ("/ data / data /$ PACKAGE / files / "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. does File Check Pass ( File ("/ data / data /$ PACKAGE / files / def / abc . txt ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertFalse () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġthat Ġwe Ġdo Ġallow Ġa Ġfile Ġif Ġwe Ġallow Ġall `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdefault File Uri Matcher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Any File Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. does File Check Pass ( File ("/ data / data /$ PACKAGE / files / def / abc . txt ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertTrue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPACK AGE Ġ= Ġ" com . safe . to . run " ĊĠĠĠ Ġ} Ċ } Ċ