/* Ċ Copyright Ġ 2 0 1 9 ĠSpl endo ĠConsult ing ĠB . V . ĠThe ĠNe therlands ĊĊĠĠ Ġ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 . spl endo . kal uga . alerts Ċ Ċ import Ġandroidx . test . ext . junit . rules . Activity Scenario Rule Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġandroidx . test . uia utom ator . By Ċ import Ġandroidx . test . uia utom ator . Ui Device Ċ import Ġandroidx . test . uia utom ator . Until Ċ import Ġcom . spl endo . kal uga . test . Alert Presenter Tests Ċ import Ġkotlinx . coroutines . Comp letable Deferred Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Main Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġkotlin . test . Before Test Ċ import Ġkotlin . test . Ignore Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertNull Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠAndroid Alert Presenter Test Ġ: ĠAlert Presenter Tests () Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġactivity Rule Ġ= ĠActivity Scenario Rule ( Test Activity :: class . java ) ĊĊĠĠĠ Ġprivate Ġval Ġdevice Ġ= ĠUi Device . getInstance ( Instrumentation Registry . get Instrumentation ()) ĊĊĠĠĠ Ġvar Ġactivity : ĠTest Activity ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Before Test ĊĠĠĠ Ġfun Ġactivity Init () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Rule . scenario . on Activity Ġ{ Ġactivity Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġbuilder Ġget () Ġ= Ġactivity !!. viewModel . alert Builder ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ TIMEOUT Ġ= Ġ 5 _ 0 0 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Builder Re use () Ġ= Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . build Alert ( Main Scope ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle (" Test ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button (" OK ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdevice . wait ( Until . find Object ( By . text (" Test ")), ĠDEFAULT _ TIMEOUT ) ĊĠĠĠĠĠĠĠ Ġdevice . wait ( Until . find Object ( By . text (" OK ")), ĠDEFAULT _ TIMEOUT ). click () ĊĠĠĠĠĠĠĠ ĠassertTrue ( device . wait ( Until . g one ( By . text (" Test ")), ĠDEFAULT _ TIMEOUT )) ĊĊĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . build Alert ( Main Scope ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle (" Hello ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button (" CANCEL ") Ġ// Ġsometimes Ġthis Ġends Ġup Ġuppercase d Ġin Ġthe Ġdialog ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdevice . wait ( Until . find Object ( By . text (" Hello ")), ĠDEFAULT _ TIMEOUT ) ĊĠĠĠĠĠĠĠ Ġdevice . wait ( Until . find Object ( By . text (" CANCEL ")), ĠDEFAULT _ TIMEOUT ). click () ĊĠĠĠĠĠĠĠ ĠassertTrue ( device . wait ( Until . g one ( By . text (" Hello ")), ĠDEFAULT _ TIMEOUT )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Concurrent Builders () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalerts Ġ= ĠArray ( 1 0 ) Ġ{ ĠComp letable Deferred < Base Alert Presenter >() Ġ} ĊĊĠĠĠĠĠĠĠ Ġ( 0 .. 9 ). forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalerts [ i ]. complete ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . build Alert ( Main Scope ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle (" Alert $ i ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button (" OK $ i ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ( 0 .. 9 ). forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalerts [ i ]. await (). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . wait ( Until . find Object ( By . text (" Alert $ i ")), ĠDEFAULT _ TIMEOUT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . wait ( Until . find Object ( By . text (" OK $ i ")), ĠDEFAULT _ TIMEOUT ). click () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( device . wait ( Until . g one ( By . text (" Alert $ i ")), ĠDEFAULT _ TIMEOUT )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Alert Show () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . build Alert ( Main Scope ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle (" Hello ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button (" OK ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdevice . wait ( Until . find Object ( By . text (" Hello ")), ĠDEFAULT _ TIMEOUT ) ĊĠĠĠĠĠĠĠ Ġdevice . wait ( Until . find Object ( By . text (" OK ")), ĠDEFAULT _ TIMEOUT ). click () ĊĠĠĠĠĠĠĠ ĠassertTrue ( device . wait ( Until . g one ( By . text (" Hello ")), ĠDEFAULT _ TIMEOUT )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Alert Flow With Cor outines () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠAlert . Action (" OK ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġbuilder . build Alert ( Main Scope ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle (" Hello ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Actions ( listOf ( action )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġwith Context ( coroutine Context ) Ġ{ Ġpresenter . show () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( result , Ġaction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdevice . wait ( Until . find Object ( By . text (" Hello ")), ĠDEFAULT _ TIMEOUT ) ĊĠĠĠĠĠĠĠ Ġdevice . wait ( Until . find Object ( By . text (" OK ")), ĠDEFAULT _ TIMEOUT ). click () ĊĠĠĠĠĠĠĠ ĠassertTrue ( device . wait ( Until . g one ( By . text (" Hello ")), ĠDEFAULT _ TIMEOUT )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Ignore (" test Ġframework Ġfor Ġrotation Ġis Ġun stable ") ĊĠĠĠ Ġfun Ġrotate Activity () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= Ġlaunch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpresenter Ġ= Ġbuilder . build Alert ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle (" Hello ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button (" OK ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button (" Cancel ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcoroutine Context . run Ġ{ Ġpresenter . show () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdevice . wait ( Until . find Object ( By . text (" Hello ")), ĠDEFAULT _ TIMEOUT ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRotate Ġscreen ĊĠĠĠĠĠĠĠ Ġdevice . set Orientation Left () ĊĠĠĠĠĠĠĠ Ġ// ĠH UD Ġshould Ġbe Ġon Ġscreen ĊĠĠĠĠĠĠĠ Ġdevice . wait ( Until . find Object ( By . text (" Hello ")), ĠDEFAULT _ TIMEOUT ) ĊĊĠĠĠĠĠĠĠ Ġdevice . set Orientation Natural () ĊĊĠĠĠĠĠĠĠ Ġjob . cancel () ĊĠĠĠĠĠĠĠ Ġ// ĠFinally Ġshould Ġbe Ġgone ĊĠĠĠĠĠĠĠ ĠassertTrue ( device . wait ( Until . g one ( By . text (" Hello ")), ĠDEFAULT _ TIMEOUT )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Builder From Activity () Ġ{ ĊĠĠĠĠĠĠĠ ĠMain Scope (). launch Ġ{ Ġactivity ?. show Alert () Ġ} ĊĠĠĠĠĠĠĠ Ġdevice . wait ( Until . find Object ( By . text (" Activity ")), ĠDEFAULT _ TIMEOUT ) ĊĠĠĠ Ġ} Ċ } Ċ