1 // Copyright 2015-present 650 Industries. All rights reserved.
2 package host.exp.exponent.utils
3 
4 import androidx.test.espresso.IdlingResource
5 
6 class ElapsedTimeIdlingResource : IdlingResource {
7   private var startTime: Long = 0
8   private var waitingTime: Long = 0
9   private var resourceCallback: IdlingResource.ResourceCallback? = null
10   private var isSleeping = false
11 
12   fun sleep(waitingTime: Long) {
13     this.waitingTime = waitingTime
14     startTime = System.currentTimeMillis()
15     isSleeping = true
16   }
17 
18   override fun getName(): String {
19     return ElapsedTimeIdlingResource::class.java.name + ":" + waitingTime
20   }
21 
22   override fun isIdleNow(): Boolean {
23     if (!isSleeping) {
24       return true
25     }
26     val elapsed = System.currentTimeMillis() - startTime
27     val idle = elapsed >= waitingTime
28     if (idle) {
29       isSleeping = false
30       resourceCallback!!.onTransitionToIdle()
31     }
32     return idle
33   }
34 
35   override fun registerIdleTransitionCallback(resourceCallback: IdlingResource.ResourceCallback) {
36     this.resourceCallback = resourceCallback
37   }
38 }
39