package Ġcom . example . travel together Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . view . Gravity Ċ import Ġandroidx . core . graphics . drawable . to Bitmap Ċ import Ġandroidx . test . core . app . Activity Scenario Ċ import Ġandroidx . test . espress o . Esp ress o . on View Ċ import Ġandroidx . test . espress o . Esp ress o . press Back Ċ import Ġandroidx . test . espress o . action . View Actions . click Ċ import Ġandroidx . test . espress o . assertion . View Assertions . matches Ċ import Ġandroidx . test . espress o . contrib . Drawer Actions Ċ import Ġandroidx . test . espress o . contrib . Drawer Matchers Ċ import Ġandroidx . test . espress o . matcher . View Matchers . with Id Ċ import Ġandroidx . test . espress o . matcher . View Matchers . with Text Ċ import Ġandroidx . test . ext . junit . rules . Activity Scenario Rule Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġcom . google . android . gms . tasks . Tasks . await Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . auth . UserProfile Change Request Ċ import Ġkotlinx . android . synt hetic . main . activity _ profile .* Ċ import Ġkotlinx . coroutines . await All Ċ import Ġorg . jetbrains . ank o . do Async Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġjava . util .* ĊĊ Ċ /** Ċ Ġ* ĠInstrument ed Ġtest , Ġwhich Ġwill Ġexecute Ġon Ġan ĠAndroid Ġdevice . Ċ Ġ* Ċ Ġ* ĠSee Ġ[ testing Ġdocumentation ]( http :// d . android . com / tools / testing ). Ċ Ġ*/ Ċ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠProfile Update Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġactivity Rule Ġ= ĠActivity Scenario Rule ( Profile Activity :: class . java ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlogin User : ĠLogin User ĊĊĠĠĠ Ġprivate Ġvar Ġref Bitmap : ĠBitmap Ġ= ĠBitmap . create Bitmap ( 1 0 0 , Ġ 2 0 0 , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġlogin User Ġ= ĠLogin User (" test 1 @ gmail . com ", Ġ" Name ", Ġ" 1 2 3 4 5 6 7 8 ", Ġ"") ĊĠĠĠĠĠĠĠ Ġlogin User . signIn () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Bitmap () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( ref Bitmap ) ĊĠĠĠĠĠĠĠ Ġval Ġrnd Ġ= ĠRandom () ĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠColor . arg b ( 2 5 5 , Ġrnd . nextInt ( 2 5 6 ), Ġrnd . nextInt ( 2 5 6 ), Ġrnd . nextInt ( 2 5 6 )) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Color ( color ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcheck If Photo Uri Updates () Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Bitmap () ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠUser Profile Change Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Photo Uri ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠFirebase Auth . getInstance (). currentUser ĊĠĠĠĠĠĠĠ Ġuser ?. update Profile ( request )?. let Ġ{ Ġawait ( it ) Ġ} ĊĠĠĠĠĠĠĠ ĠAssert . assertNull ( Firebase Auth . getInstance (). currentUser ?. photoUrl ) ĊĊĠĠĠĠĠĠĠ Ġval Ġscenario : ĠActivity Scenario < Profile Activity >? Ġ= Ġactivity Rule . scenario ĊĠĠĠĠĠĠĠ Ġscenario ?. on Activity Ġ{ Ġactivity Ġ-> Ġrun Ġ{ Ġactivity . upload Image And Save Uri ( ref Bitmap )} Ġ} ĊĠĠĠĠĠĠĠ Ġscenario ?. on Activity Ġ{ Ġactivity Ġ-> Ġactivity . profile _ picture . setImage Bitmap ( ref Bitmap )} ĊĊĠĠĠĠĠĠĠ ĠThread . sleep ( 4 0 0 0 ) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertNotNull ( Firebase Auth . getInstance (). currentUser ?. photoUrl ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcheck If Photo Bitmap Updates () Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Bitmap () ĊĠĠĠĠĠĠĠ Ġval Ġscenario : ĠActivity Scenario < Profile Activity >? Ġ= Ġactivity Rule . scenario ĊĠĠĠĠĠĠĠ Ġvar Ġold Bitmap Ġ: ĠBitmap Ġ= ĠBitmap . create Bitmap ( 1 0 0 , Ġ 2 0 0 , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġscenario ?. on Activity Ġ{ Ġactivity Ġ-> Ġold Bitmap Ġ= Ġactivity . profile _ picture . drawable . to Bitmap ()} ĊĊĠĠĠĠĠĠĠ Ġscenario ?. on Activity Ġ{ Ġactivity Ġ-> Ġrun Ġ{ Ġactivity . upload Image And Save Uri ( ref Bitmap ) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġscenario ?. on Activity Ġ{ Ġactivity Ġ-> Ġactivity . profile _ picture . setImage Bitmap ( ref Bitmap ) Ġ} ĊĊĠĠĠĠĠĠĠ ĠThread . sleep ( 4 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġpress Back () ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . drawer _ layout )). perform ( Drawer Actions . open ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . drawer _ layout )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( Drawer Matchers . isOpen ( Gravity . LEFT ))) ĊĊĠĠĠĠĠĠĠ Ġon View ( with Text (" Profile ")). perform ( click ()) ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 2 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġscenario ?. on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertFalse ( equals ( old Bitmap , Ġactivity . profile _ picture . drawable . to Bitmap ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġequals ( bmp 1 : ĠBitmap , Ġbmp 2 : ĠBitmap ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bmp 1 . width Ġ!= Ġbmp 2 . width Ġ|| Ġbmp 1 . height Ġ!= Ġbmp 2 . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġbmp 1 . width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 Ġuntil Ġbmp 1 . height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bmp 1 . get Pixel ( x , Ġy ) Ġ!= Ġbmp 2 . get Pixel ( x , Ġy )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ Ċ }