/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . android . tools . idea . testing Ċ Ċ import Ġcom . android . test utils . Virtual Time Scheduler Ċ import Ġcom . android . tools . analytics . Logged Usage Ċ import Ġcom . android . tools . analytics . Test Usage Tracker Ċ import Ġcom . android . tools . analytics . Test Usage Tracker Listener Ċ import Ġcom . android . tools . analytics . Usage Tracker Ċ import Ġcom . android . tools . idea . gradle . project . build . inv oker . Gradle Build Invoker Ċ import Ġcom . android . tools . idea . gradle . project . build . inv oker . Gradle Invocation Result Ċ import Ġcom . android . tools . idea . test artifacts . Test Configuration Testing . create Context Ċ import Ġcom . android . tools . idea . test artifacts . junit . Android JUnit Configuration Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġcom . google . wire less . android . sdk . stats . Android Studio Event Ċ import Ġcom . google . wire less . android . sdk . stats . Test Run Ċ import Ġcom . intellij . execution . Execution Listener Ċ import Ġcom . intellij . execution . Execution Manager Ċ import Ġcom . intellij . execution . Runner And Configuration Settings Ċ import Ġcom . intellij . execution . exec utors . Default Run Executor Ċ import Ġcom . intellij . execution . impl . Execution ManagerImpl Ċ import Ġcom . intellij . execution . junit . JUnit Configuration Ċ import Ġcom . intellij . execution . process . Process Handler Ċ import Ġcom . intellij . execution . runners . Execution Environment Ċ import Ġcom . intellij . execution . runners . Execution Util Ċ import Ġcom . intellij . execution . test framework . Test Search Scope Ċ import Ġcom . intellij . execution . test framework . sm . runner . SM TR un ner Events Adapter Ċ import Ġcom . intellij . execution . test framework . sm . runner . SM TR un ner Events Listener Ċ import Ġcom . intellij . execution . test framework . sm . runner . SM Test Proxy Ċ import Ġcom . intellij . openapi . vfs . Virtual FileManager Ċ import Ġcom . intellij . test Framework . TestRunner Util Ċ import Ġcom . intellij . test Framework . run In Ed t And Wait Ċ import Ġjava . util . concurrent . Concurrent Skip List Set Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . atomic . Atomic Reference Ċ Ċ /** Ċ Ġ* ĠWhether Ġto Ġprint Ġdebug Ġ" status Ġupdates " Ġto Ġstdout . Ċ Ġ* Ċ Ġ* ĠThis Ġmay Ġbe Ġuseful Ġwhen Ġdebugging , Ġsince Ġthe Ġsteps Ġin Ġthis Ġtest Ġcan Ġtake Ġquite Ġsome Ġtime . Ċ Ġ*/ Ċ private Ġconst Ġval ĠPRINT _ LOG Ġ= Ġfalse Ċ Ċ private Ġfun Ġlog ( message : ĠString ) Ġ{ ĊĠ Ġ@ Suppress (" Constant Condition If ") ĊĠ Ġif Ġ( PRINT _ LOG ) Ġ{ ĊĠĠĠ Ġprintln ( message ) ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠIntegration Ġtest Ġthat Ġinvokes Ġour Ġunit Ġtest Ġrun Ġconfigurations . Ċ Ġ* Ċ Ġ* ĠTest Ġcode Ġis Ġexecuted Ġon Ġthe Ġmain Ġthread , Ġnot ĠE DT . ĠThis Ġway Ġwe Ġcan Ġblock Ġwaiting Ġfor Ġtesting Ġto Ġfinish . Ċ Ġ* Ċ Ġ* ĠThe Ġtest Ġproject Ġuses Ġ 3 . 0 Ġfeatures , Ġso Ġyou Ġmay Ġneed Ġto Ġset ĠST UDIO _ CUSTOM _ REPO Ġto Ġpoint Ġto Ġa Ġrecent Ġbuild Ġof Ġour Ġgradle Ġplugin . Ċ Ġ*/ Ċ class ĠUnit Testing Support IntegrationTest Ġ: ĠAndroid Gradle TestCase () Ġ{ ĊĠ Ġoverride Ġfun Ġrun In Dispatch Thread (): ĠBoolean Ġ= Ġfalse ĊĠ Ġoverride Ġfun Ġinvoke Test Runnable ( run nable : ĠRunnable ) Ġ= Ġrunnable . run () ĊĊĠ Ġoverride Ġfun ĠsetUp () Ġ{ ĊĠĠĠ ĠTest Runner Util . replace Ide EventQueue S af ely () Ġ// ĠSee ĠUseful TestCase # run B are Ġwhich Ġshould Ġbe Ġthe Ġstack Ġframe Ġabove Ġthis Ġone . ĊĠĠĠ Ġrun In Ed t And Wait Ġ{ ĊĠĠĠĠĠ Ġsuper . setUp () ĊĠĠĠĠĠ Ġload Project ( Test Project Paths . UNIT _ TEST ING ) ĊĊĠĠĠĠĠ Ġ// ĠWithout Ġthis , Ġthe Ġexecution Ġmanager Ġwill Ġnot Ġinvoke Ġgradle Ġto Ġcompile Ġthe Ġproject , Ġso Ġno Ġtests Ġwill Ġbe Ġfound . ĊĠĠĠĠĠ Ġval Ġexecution Manager Ġ= ĠExecution ManagerImpl . getInstance ( project ) ĊĠĠĠĠĠ Ġlog (" project Ġimported ") ĊĊĠĠĠĠĠ Ġ// ĠCalling Ġthe Ġcode Ġbelow Ġmakes Ġsure Ġthere Ġare Ġno Ġmist akes Ġin Ġthe Ġtest Ġproject Ġand Ġthat Ġall Ġclass Ġfiles Ġare Ġin Ġplace . ĠDo ing Ġthis ĊĠĠĠĠĠ Ġ// Ġ( and Ġsync ing ĠV FS ) Ġseems Ġto Ġfix Ġhuge Ġfl ak iness Ġthat Ġwe Ġobserve Ġotherwise . ĊĠĠĠĠĠ Ġ// ĠTODO ( b / 6 4 6 6 7 9 9 2 ): Ġtry Ġto Ġlisten Ġfor Ġa Ġfinished Ġgradle Ġbuild Ġ( the Ġone Ġfrom Ġ" run Ġbefore " Ġin Ġthe Ġrun Ġconfig ) Ġand Ġsync ĠV FS Ġthen . ĊĠĠĠĠĠ Ġval Ġresult Ġ= Ġinvoke Gradle Tasks ( project , Ġ" test ") ĊĠĠĠĠĠ ĠassertTrue (" Gradle Ġbuild Ġfailed .", Ġresult . is Build Successful ) ĊĠĠĠĠĠ Ġlog (" Command - line Ġtests Ġdone ") ĊĠĠĠĠĠ ĠVirtual FileManager . getInstance (). sync Refresh () ĊĠĠĠĠĠ Ġlog (" V fs Ġsynced ") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠtearDown () Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ ĠUsage Tracker . clean After Testing () ĊĠĠĠ Ġ} ĊĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠ Ġsuper . te ar Down () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġtest App Module () Ġ{ ĊĠĠĠ Ġcheck TestClass ( ĊĠĠĠĠĠ Ġ" com . example . app . App Java UnitTest ", ĊĠĠĠĠĠ Ġexpected Tests Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / aar Dependencies ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / assertions ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / commons Logging ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / enums ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / exceptions ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / instance Fields ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / java Lib Java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / lib Java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / mock Final Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / mock Final Method ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / mock Inner Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / prod Java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / prod R Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / reference Java Lib Java Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / reference Java Lib Kotlin Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / reference Library Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / reference Library Kotlin Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / reference Production Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / reference Production Kotlin Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Java UnitTest / working Dir " ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcheck TestClass ( ĊĠĠĠĠĠ Ġ" com . example . app . App Kotlin UnitTest ", ĊĠĠĠĠĠ Ġexpected Tests Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / aar Dependencies ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / assertions ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / commons Logging ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / enums ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / exceptions ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / instance Fields ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / java Lib Java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / lib Java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / mock Final Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / mock Final Method ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / mock Inner Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / prod Java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / prod R Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / reference Java Lib Java Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / reference Java Lib Kotlin Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / reference Library Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / reference Library Kotlin Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / reference Production Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / reference Production Kotlin Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . app . App Kotlin UnitTest / working Dir " ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġtest Lib Module () Ġ{ ĊĠĠĠ Ġcheck TestClass ( ĊĠĠĠĠĠ Ġ" com . example . lib . Lib Java UnitTest ", ĊĠĠĠĠĠ Ġexpected Tests Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / aar Dependencies ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / assertions ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / commons Logging ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / enums ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / exceptions ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / instance Fields ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / java Lib Java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / lib Java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / mock Final Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / mock Final Method ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / mock Inner Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / prod Java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / prod R Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / reference Java Lib Java Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / reference Java Lib Kotlin Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / reference Library Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / reference Library Kotlin Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / reference Production Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / reference Production Kotlin Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Java UnitTest / working Dir " ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcheck TestClass ( ĊĠĠĠĠĠ Ġ" com . example . lib . Lib Kotlin UnitTest ", ĊĠĠĠĠĠ Ġexpected Tests Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / aar Dependencies ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / assertions ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / commons Logging ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / enums ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / exceptions ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / instance Fields ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / java Lib Java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / lib Java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / mock Final Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / mock Final Method ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / mock Inner Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / prod Java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / prod R Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / reference Java Lib Java Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / reference Java Lib Kotlin Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / reference Library Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / reference Library Kotlin Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / reference Production Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / reference Production Kotlin Code ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . lib . Lib Kotlin UnitTest / working Dir " ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġtest Java Lib Module () Ġ{ ĊĠĠĠ Ġcheck TestClass ( ĊĠĠĠĠĠ Ġ" com . example . jav alib . Java Lib Java Test ", ĊĠĠĠĠĠ Ġexpected Tests Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . jav alib . Java Lib Java Test / assertions ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . jav alib . Java Lib Java Test / java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . jav alib . Java Lib Java Test / prod Java Resources On Classpath ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . jav alib . Java Lib Java Test / reference Java Lib Java Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . jav alib . Java Lib Java Test / reference Java Lib Kotlin Class ", ĊĠĠĠĠĠĠĠ Ġ" java : test :// com . example . jav alib . Java Lib Java Test / working Dir " ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġ// ĠTODO ( b / 6 4 6 6 7 9 9 2 ): Ġcheck ĠJava Lib Kotlin Test Ġonce Ġthe ĠKotlin Ġsetup Ġworks . ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠT ries Ġto Ġtest Ġthat Ġrunning Ġall Ġtests Ġ" ac ross Ġmodule Ġboundaries " Ġdoes Ġthe Ġright Ġthing . ĠUnfortunately Ġthis Ġcannot Ġreally Ġbe Ġdone , Ġso ĊĠĠ Ġ* Ġinstead Ġwe Ġcheck Ġthe Ġright ĠGradle Ġtasks Ġare Ġexecuted Ġand Ġthat Ġenough Ġdirectories Ġare Ġon Ġthe Ġclasspath Ġof Ġthe Ġtest ĠVM . ĠSee Ġthe Ġcomment ĊĠĠ Ġ* Ġin Ġ[ Execution Listener ] Ġbelow Ġfor Ġdetails . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġtest Ac ross Module Bound aries () Ġ{ ĊĠĠĠ Ġval Ġgradle Build Invoker Ġ= ĠGradle Build Invoker . getInstance ( project ) ĊĠĠĠ Ġgradle Build Invoker . add ( object Ġ: ĠGradle Build Invoker . After Gradle Invocation Task Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġexecute ( result : ĠGradle Invocation Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgradle Build Invoker . remove ( this ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . tasks ). contains All Of ( ĊĠĠĠĠĠĠĠĠĠ Ġ": app : compile Debug UnitTest Sources ", ĊĠĠĠĠĠĠĠĠĠ Ġ": util - lib : compile Debug UnitTest Sources ", ĊĠĠĠĠĠĠĠĠĠ Ġ": jav alib : test Classes " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġproject . message Bus . connect ( test Root Disposable ). subscribe ( Execution Manager . EXEC UTION _ TOPIC , Ġobject Ġ: ĠExecution Listener Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġprocess Started ( executor Id : ĠString , Ġenv : ĠExecution Environment , Ġhandler : ĠProcess Handler ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġway Ġtesting Ġ" all Ġin Ġpackage " Ġtypically Ġworks Ġis Ġthat Ġa Ġtesting ĠVM Ġis Ġstarted Ġwith Ġpaths Ġto Ġsome Ġtemporary Ġhelper Ġfiles . ĠThese ĊĠĠĠĠĠĠĠ Ġ// Ġfiles Ġcontain Ġtests Ġto Ġbe Ġexecuted Ġas Ġwell Ġas Ġthe Ġdesired Ġworking Ġdirectory , Ġclasspath Ġetc . ĠFor Ġsome Ġreason , Ġthere 's Ġa Ġmechanism ĊĠĠĠĠĠĠĠ Ġ// Ġin Ġplace Ġin ĠJ Unit Starter Ġthat Ġwill Ġread Ġbyte Ġfrom Ġa Ġlocal Ġsocket Ġbefore Ġopening Ġthe Ġfiles , Ġpres um ably Ġto Ġmake Ġsure Ġthe Ġfiles Ġhave ĊĠĠĠĠĠĠĠ Ġ// Ġbeen Ġupdated Ġwith Ġcorrect Ġcontent Ġ( the Ġsocket 's Ġport Ġnumber Ġis Ġpassed Ġon Ġthe Ġcommand Ġline Ġto Ġthe ĠJ Unit Starter ĠVM ). ĠTest Package ĊĠĠĠĠĠĠĠ Ġ// Ġgenerally Ġuses Ġthis Ġmechanism , Ġso Ġin Ġ` create Java Parameters ` Ġit Ġadds Ġ"- socket 1 2 3 4 " Ġto Ġthe Ġtest ĠVM Ġcommand Ġline . ĠUnfortunately , ĊĠĠĠĠĠĠĠ Ġ// Ġin Ġunit Ġtest Ġmode Ġit Ġnever Ġactually Ġwrites Ġto Ġthe Ġsocket Ġ( see ĊĠĠĠĠĠĠĠ Ġ// Ġ[ com . intellij . execution . test framework . Search For Tests Task # start Search ]), Ġso Ġwe Ġend Ġup Ġwith Ġa Ġdead lock : Ġthe ĠIDE Ġprocess Ġis Ġwaiting ĊĠĠĠĠĠĠĠ Ġ// Ġfor Ġtesting Ġto Ġfinish Ġand Ġthe Ġtesting ĠVM Ġis Ġwaiting Ġon Ġthe ĠIDE Ġto Ġsignal Ġread iness . ĠBecause Ġof Ġthat Ġwe Ġjust Ġkill Ġthe Ġtest ĊĠĠĠĠĠĠĠ Ġ// Ġprocess Ġhere , Ġas Ġthe Ġmost Ġwe Ġcan Ġcheck Ġis Ġthat Ġcorrect ĠGradle Ġtasks Ġhave Ġbeen Ġrun . ĊĠĠĠĠĠĠĠ Ġhandler . destroy Process () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġrun In Ed t And Wait Ġ{ ĊĠĠĠĠĠ Ġval Ġrunner Configuration Settings Ġ= Ġcreate Runner Configuration Settings For Class (" com . example . app . App Java UnitTest ") ĊĠĠĠĠĠ Ġval Ġandroid JUnit Ġ= Ġrunner Configuration Settings . configuration Ġas ĠAndroid JUnit Configuration ĊĠĠĠĠĠ Ġandroid JUnit . persistent Data . TEST _ OBJECT Ġ= ĠJ Unit Configuration . TEST _ PACKAGE ĊĠĠĠĠĠ Ġandroid JUnit . persistent Data . TEST _ SEARCH _ SCOPE . scope Ġ= ĠTest Search Scope . MODULE _ WITH _ DEPEND ENCI ES ĊĠĠĠĠĠ Ġandroid JUnit . persistent Data . MAIN _ CLASS _ NAME Ġ= Ġ"" ĊĠĠĠĠĠ Ġandroid JUnit . persistent Data . PACKAGE _ NAME Ġ= Ġ"" ĊĠĠĠĠĠ ĠassertThat ( android JUnit . test Object . suggest Action Name ()). isEqualTo (" All ĠTests ") ĊĠĠĠĠĠ ĠExecution Util . run Configuration ( runner Configuration Settings , ĠDefault Run Executor . get Run Executor Instance ()) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠChecks Ġthat Ġan Ġ[ com . android . tools . idea . test artifacts . junit . Android Test Object ] Ġwrapping Ġan ĊĠĠ Ġ* Ġ[ com . android . tools . idea . test artifacts . junit . Android Tests Pattern ] Ġdoesn 't Ġfail Ġin Ġ` suggest Action Name `. ĠThis Ġcode Ġpath Ġis Ġhit Ġwhen ĊĠĠ Ġ* Ġright - click ing Ġres Ġnodes Ġin Ġthe ĠAndroid Ġproject Ġview . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġtest Pattern Test Object () Ġ= Ġrun In Ed t And Wait Ġ{ ĊĠĠĠ Ġval Ġrunner Configuration Settings Ġ= Ġcreate Runner Configuration Settings For Class (" com . example . app . App Java UnitTest ") ĊĠĠĠ Ġval Ġandroid JUnit Ġ= Ġrunner Configuration Settings . configuration Ġas ĠAndroid JUnit Configuration ĊĠĠĠ Ġandroid JUnit . persistent Data . TEST _ OBJECT Ġ= ĠJ Unit Configuration . TEST _ PATTERN ĊĠĠĠ Ġandroid JUnit . persistent Data . TEST _ SEARCH _ SCOPE . scope Ġ= ĠTest Search Scope . MODULE _ WITH _ DEPEND ENCI ES ĊĠĠĠ Ġandroid JUnit . persistent Data . MAIN _ CLASS _ NAME Ġ= Ġ"" ĊĠĠĠ Ġandroid JUnit . persistent Data . PACKAGE _ NAME Ġ= Ġ"" ĊĠĠĠ ĠassertThat ( android JUnit . test Object . suggest Action Name ()). isNull () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcheck TestClass ( className : ĠString , Ġexpected Tests : ĠSet < String >) Ġ{ ĊĠĠĠ Ġval Ġpassing Tests Ġ= ĠConcurrent Skip List Set < String >() ĊĠĠĠ Ġval Ġfailing Tests Ġ= ĠConcurrent Skip List Set < String >() ĊĠĠĠ Ġval Ġtesting Finished Ġ= ĠCount DownLatch ( 2 ) ĊĠĠĠ Ġval Ġfailure Ġ= ĠAtomic Reference < Throwable >() ĊĊĠĠĠ Ġval Ġtracker Ġ= ĠTest Usage Tracker ( Virtual Time Scheduler ()) ĊĠĠĠ Ġtracker . listener Ġ= Ġobject : ĠTest Usage Tracker Listener Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon New Usage ( logged Usage : ĠLog ged Usage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( logged Usage . studio Event . kind Ġ== ĠAndroid Studio Event . Event Kind . TEST _ RUN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtesting Finished . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ ĠUsage Tracker . set Writer For Test ( tracker ) ĊĊĠĠĠ Ġrun In Ed t And Wait Ġ{ ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . message Bus . connect ( test Root Disposable ). subscribe ( SM TR un ner Events Listener . TEST _ STATUS , Ġobject Ġ: ĠSM TR un ner Events Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Testing Started ( tests Root : ĠSM Test Proxy . SM Root Test Proxy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Testing Ġ$ className Ġstarted .") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Test Started ( test : ĠSM Test Proxy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ("${ test . name } Ġstarted ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Test Finished ( test : ĠSM Test Proxy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ("${ test . name } Ġfinished ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset Ġ= Ġif Ġ( test . is Passed ) Ġpassing Tests Ġelse Ġfailing Tests ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset . add ( test . location Url Ġ?: Ġreturn ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Testing Finished ( tests Root : ĠSM Test Proxy . SM Root Test Proxy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" Testing Ġ$ className Ġfinished .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtesting Finished . count Down () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġlog (" Running Ġ$ className ") ĊĠĠĠĠĠĠĠ ĠExecution Util . run Configuration ( create Runner Configuration Settings For Class ( className ), ĠDefault Run Executor . get Run Executor Instance ()) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog (" failed !") ĊĠĠĠĠĠĠĠ Ġfailure . set ( t ) ĊĠĠĠĠĠĠĠ Ġtesting Finished . count Down () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠMake Ġsure Ġwe Ġdon 't Ġhang Ġthe Ġentire Ġbuild Ġhere . Ċ /* Ġb / 1 5 4 9 6 3 5 0 7 ĊĠĠĠ ĠassertTrue (" Timed Ġout ", Ġtesting Finished . await ( 1 , ĠTimeUnit . MIN UTES )) ĊĠĠĠ Ġfailure . get ()?. let Ġ{ Ġthrow Ġit Ġ} ĊĊĠĠĠ Ġlog (" Checking Ġ$ className ") ĊĠĠĠ ĠassertThat ( pass ing Tests ). contains Exactly Elements In ( expected Tests ) ĊĠĠĠ ĠassertThat ( fail ing Tests ). isEmpty () ĊĊĠĠĠ Ġval Ġevents Ġ= Ġtracker . us ages ĊĠĠĠĠĠ Ġ. map Ġ{ Ġit . studio Event Ġ} ĊĠĠĠĠĠ Ġ. filter Ġ{ Ġit . kind Ġ== ĠAndroid Studio Event . Event Kind . TEST _ RUN Ġ} ĊĊĠĠĠ ĠassertThat ( events ). has Size ( 1 ) ĊĠĠĠ Ġval Ġtest Run Ġ= Ġevents . single (). test Run !! ĊĊĠĠĠ ĠassertThat ( test Run . test Invocation Type ). isEqualTo ( Test Run . Test Invocation Type . ANDROID _ ST UDIO _ TEST ) ĊĠĠĠ ĠassertThat ( test Run . test Kind ). isEqualTo ( Test Run . Test Kind . UNIT _ TEST ) ĊĠĠĠ ĠassertThat ( test Run . numberOf Tests Executed ). isEqualTo ( expected Tests . size ) ĊĠĠĠ ĠassertThat ( test Run . test Libraries . mockito Version ). isEqualTo (" 2 . 7 . 1 ") Ċ b / 1 5 4 9 6 3 5 0 7 Ġ*/ ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Runner Configuration Settings For Class ( className : ĠString ): ĠRunner And Configuration Settings Ġ{ ĊĠĠĠ Ġreturn Ġcreate Context ( project , Ġmy Fixture . find Class ( className )). configuration !! ĊĠ Ġ} Ċ } Ċ