detox 19.9.3 → 19.12.0
Sign up to get free protection for your applications and to get access to all the features.
- package/Detox-android/com/wix/detox/{19.9.3-prerelease.0/detox-19.9.3-prerelease.0-javadoc.jar → 19.12.0/detox-19.12.0-javadoc.jar} +0 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0-javadoc.jar.md5 +1 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0-javadoc.jar.sha1 +1 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0-javadoc.jar.sha256 +1 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0-javadoc.jar.sha512 +1 -0
- package/Detox-android/com/wix/detox/{19.9.3-prerelease.0/detox-19.9.3-prerelease.0-sources.jar → 19.12.0/detox-19.12.0-sources.jar} +0 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0-sources.jar.md5 +1 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0-sources.jar.sha1 +1 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0-sources.jar.sha256 +1 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0-sources.jar.sha512 +1 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0.aar +0 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0.aar.md5 +1 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0.aar.sha1 +1 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0.aar.sha256 +1 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0.aar.sha512 +1 -0
- package/Detox-android/com/wix/detox/{19.9.3-prerelease.0/detox-19.9.3-prerelease.0.pom → 19.12.0/detox-19.12.0.pom} +1 -7
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0.pom.md5 +1 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0.pom.sha1 +1 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0.pom.sha256 +1 -0
- package/Detox-android/com/wix/detox/19.12.0/detox-19.12.0.pom.sha512 +1 -0
- package/Detox-android/com/wix/detox/maven-metadata.xml +4 -4
- package/Detox-android/com/wix/detox/maven-metadata.xml.md5 +1 -1
- package/Detox-android/com/wix/detox/maven-metadata.xml.sha1 +1 -1
- package/Detox-android/com/wix/detox/maven-metadata.xml.sha256 +1 -1
- package/Detox-android/com/wix/detox/maven-metadata.xml.sha512 +1 -1
- package/Detox-ios-src.tbz +0 -0
- package/Detox-ios.tbz +0 -0
- package/android/build.gradle +12 -6
- package/android/detox/build.gradle +13 -9
- package/android/detox/publishing.gradle +27 -27
- package/android/detox/src/full/java/com/wix/detox/DetoxCrashHandler.kt +1 -1
- package/android/detox/src/full/java/com/wix/detox/LaunchArgs.java +9 -0
- package/android/detox/src/full/java/com/wix/detox/TestEngineFacade.kt +1 -1
- package/android/detox/src/full/java/com/wix/detox/reactnative/ReactNativeExtension.kt +15 -2
- package/android/detox/src/full/java/com/wix/detox/reactnative/ReactNativeIdlingResources.kt +43 -38
- package/android/detox/src/full/java/com/wix/detox/reactnative/idlingresources/timers/DelegatedIdleInterrogationStrategy.kt +7 -27
- package/android/detox/src/full/java/com/wix/detox/reactnative/idlingresources/timers/IdleInterrogationStrategy.kt +1 -11
- package/android/detox/src/testFull/java/com/wix/detox/espresso/action/DetoxMultiTapSpec.kt +4 -3
- package/android/detox/src/testFull/java/com/wix/detox/reactnative/idlingresources/timers/DelegatedIdleInterrogationStrategySpec.kt +3 -11
- package/package.json +3 -3
- package/runners/jest-circus/listeners/DetoxCoreListener.js +24 -15
- package/src/DetoxExportWrapper.js +1 -1
- package/src/android/core/NativeElement.js +56 -20
- package/src/android/core/NativeExpect.js +28 -9
- package/src/android/interactions/native.js +24 -18
- package/src/artifacts/timeline/TimelineArtifactPlugin.js +6 -9
- package/src/artifacts/timeline/TimelineContextTypes.js +7 -0
- package/src/client/Client.js +18 -1
- package/src/devices/allocation/DeviceAllocator.js +1 -2
- package/src/devices/allocation/drivers/android/emulator/EmulatorAllocDriver.js +1 -1
- package/src/devices/allocation/drivers/android/emulator/EmulatorLauncher.js +1 -2
- package/src/devices/runtime/RuntimeDevice.js +7 -11
- package/src/devices/runtime/drivers/android/AndroidDriver.js +9 -1
- package/src/ios/expectTwo.js +152 -67
- package/src/utils/invocationTraceDescriptions.js +43 -0
- package/src/utils/trace.js +52 -10
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-javadoc.jar.md5 +0 -1
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-javadoc.jar.sha1 +0 -1
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-javadoc.jar.sha256 +0 -1
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-javadoc.jar.sha512 +0 -1
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-sources.jar.md5 +0 -1
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-sources.jar.sha1 +0 -1
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-sources.jar.sha256 +0 -1
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-sources.jar.sha512 +0 -1
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0.aar +0 -0
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0.aar.md5 +0 -1
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0.aar.sha1 +0 -1
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0.aar.sha256 +0 -1
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0.aar.sha512 +0 -1
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0.pom.md5 +0 -1
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0.pom.sha1 +0 -1
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0.pom.sha256 +0 -1
- package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0.pom.sha512 +0 -1
- package/android/detox/src/full/java/com/wix/detox/reactnative/idlingresources/timers/DefaultIdleInterrogationStrategy.kt +0 -84
- package/android/detox/src/testFull/java/com/wix/detox/reactnative/idlingresources/timers/DefaultIdleInterrogationStrategySpec.kt +0 -115
package/src/utils/trace.js
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
const assert = require('assert');
|
2
|
+
|
3
|
+
const TIMELINE_CONTEXT_TYPES = require('../artifacts/timeline/TimelineContextTypes');
|
4
|
+
|
1
5
|
class Trace {
|
2
6
|
constructor() {
|
3
7
|
this.events = [];
|
@@ -35,20 +39,58 @@ class Trace {
|
|
35
39
|
}
|
36
40
|
|
37
41
|
let trace = new Trace();
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
42
|
+
|
43
|
+
/**
|
44
|
+
* Trace a single call, with a given name and arguments.
|
45
|
+
* @param sectionName The name of the section to trace.
|
46
|
+
* @param promiseOrFunction {Promise|Function} Promise or a function that provides a promise.
|
47
|
+
* @param args {Object} Optional arguments to pass to the trace.
|
48
|
+
* @returns {any} The returned value of the traced call.
|
49
|
+
*
|
50
|
+
* @see https://wix.github.io/Detox/docs/next/api/detox-object-api/#detoxtracecall.
|
51
|
+
*/
|
52
|
+
function traceCall(sectionName, promiseOrFunction, args = {}) {
|
53
|
+
assert(sectionName,
|
54
|
+
`must provide section name when calling \`traceCall\` with args: \n ${JSON.stringify(args)}`);
|
55
|
+
|
56
|
+
const promise = typeof promiseOrFunction === 'function' ? promiseOrFunction() : promiseOrFunction;
|
57
|
+
|
58
|
+
trace.startSection(sectionName, args);
|
59
|
+
return promise
|
60
|
+
.then((result) => {
|
61
|
+
trace.endSection(sectionName, { ...args, success: true });
|
62
|
+
return result;
|
63
|
+
})
|
64
|
+
.catch((error) => {
|
65
|
+
trace.endSection(sectionName, { ...args, success: false, error: error.toString() });
|
66
|
+
throw error;
|
67
|
+
});
|
68
|
+
}
|
69
|
+
|
70
|
+
function traceInvocationCall(sectionName, invocation, promise) {
|
71
|
+
return traceCall(
|
72
|
+
sectionName, promise, {
|
73
|
+
context: TIMELINE_CONTEXT_TYPES.INVOCATION,
|
74
|
+
stackTrace: _getCallStackTrace(),
|
75
|
+
invocation: JSON.stringify(invocation),
|
76
|
+
});
|
77
|
+
}
|
78
|
+
|
79
|
+
function _getCallStackTrace() {
|
80
|
+
return new Error().stack
|
81
|
+
.split('\n')
|
82
|
+
.slice(1) // Ignore Error message
|
83
|
+
.map(line => line
|
84
|
+
.replace(/^\s*at\s+/, '')
|
85
|
+
.replace(process.cwd(), '')
|
86
|
+
)
|
87
|
+
.filter(line => !line.includes('/detox/src')) // Ignore detox internal calls
|
88
|
+
.join('\n');
|
48
89
|
}
|
49
90
|
|
50
91
|
module.exports = {
|
51
92
|
Trace,
|
52
93
|
trace,
|
53
94
|
traceCall,
|
95
|
+
traceInvocationCall
|
54
96
|
};
|
package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-javadoc.jar.md5
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
c6abf5f995f7efef0d18ced1782e394d
|
package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-javadoc.jar.sha1
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
e15ea02b4e45bc609564419df0e4f41637066243
|
package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-javadoc.jar.sha256
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2bb9db3a4f4e8559730726edc7916b2a7f9862a8513b1b63adccb9ecc47945a8
|
package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-javadoc.jar.sha512
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
85f09e8ce6a8d918f4642011aa128ab7e9cc15775dee64c1aa68415338fd8885742654824f5f827102db2e3e0a14e0cbbd7c2840f5245f3782d484ef2c38e0e6
|
package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-sources.jar.md5
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
646e35b842ddf204cec125e12889afc3
|
package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-sources.jar.sha1
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
a19e3a9ee01e68181523ca45c5042f3ba969058b
|
package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-sources.jar.sha256
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2bae62ac910e2b85a65732d408a57ee8a67086f09b34fff3f36cddcc53770e1d
|
package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0-sources.jar.sha512
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
f914567f3fa7f0aa444ca447fe0216bb5e8bf13039f273de27005c4fcb0581ef2cc647e762df524249c1cb1177b09ba6c956edabb34531bb14054b38f53f503b
|
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
f00a26db2932c0f5dd9e4ea695c5f55c
|
@@ -1 +0,0 @@
|
|
1
|
-
39dba13a0e694adb108fc6bb4d15b58b21a4eed5
|
package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0.aar.sha256
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
c9897fd212cfefb379527e059f6f29a94f29c4681b3659e26f8f08b22e20d1ea
|
package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0.aar.sha512
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
f12faacdbbcf214aba48971b1054310eca06c2a69d403404376b087d86beb76345e383bc6d452f6af8ec25b050895700bd930f8a33c9439153a972a179b3c763
|
@@ -1 +0,0 @@
|
|
1
|
-
a765d464fcaef42e8caff137de8d635c
|
@@ -1 +0,0 @@
|
|
1
|
-
00a980a61b3b2cea782cc10be620ad08f83ce69f
|
package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0.pom.sha256
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
246f80766f6b9c4d4a4255fdec9b09540a0fab9e56d7d2ad71a363935de5bcbf
|
package/Detox-android/com/wix/detox/19.9.3-prerelease.0/detox-19.9.3-prerelease.0.pom.sha512
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
a18048b41a07e0dc793b8340714cc3fe86c72269683b4302a41bc5b1100c3750e9a28874cc01b474818ead5c83ee8bb56475865167ddcb96ba9bb10566368697
|
@@ -1,84 +0,0 @@
|
|
1
|
-
@file:RNDropSupportTodo(62, "Remove all of this; Use DelegatedIdleInterrogationStrategy, instead.")
|
2
|
-
|
3
|
-
package com.wix.detox.reactnative.idlingresources.timers
|
4
|
-
|
5
|
-
import com.facebook.react.bridge.ReactContext
|
6
|
-
import com.wix.detox.common.RNDropSupportTodo
|
7
|
-
import com.wix.detox.reactnative.helpers.RNHelpers
|
8
|
-
import org.joor.Reflect
|
9
|
-
import java.util.*
|
10
|
-
|
11
|
-
private const val BUSY_WINDOW_THRESHOLD = 1500
|
12
|
-
|
13
|
-
private class TimerReflected(timer: Any) {
|
14
|
-
private var reflected = Reflect.on(timer)
|
15
|
-
|
16
|
-
val isRepeating: Boolean
|
17
|
-
get() = reflected.field("mRepeat").get()
|
18
|
-
val interval: Int
|
19
|
-
get() = reflected.field("mInterval").get()
|
20
|
-
val targetTime: Long
|
21
|
-
get() = reflected.field("mTargetTime").get()
|
22
|
-
}
|
23
|
-
|
24
|
-
private class TimingModuleReflected(private val timingModule: Any) {
|
25
|
-
val timersQueue: PriorityQueue<Any>
|
26
|
-
get() = Reflect.on(timingModule).field("mTimers").get()
|
27
|
-
val timersLock: Any
|
28
|
-
get() = Reflect.on(timingModule).field("mTimerGuard").get()
|
29
|
-
|
30
|
-
operator fun component1() = timersQueue
|
31
|
-
operator fun component2() = timersLock
|
32
|
-
}
|
33
|
-
|
34
|
-
class DefaultIdleInterrogationStrategy
|
35
|
-
internal constructor(private val timersModule: Any)
|
36
|
-
: IdleInterrogationStrategy {
|
37
|
-
|
38
|
-
override fun isIdleNow(): Boolean {
|
39
|
-
val (timersQueue, timersLock) = TimingModuleReflected(timersModule)
|
40
|
-
synchronized(timersLock) {
|
41
|
-
val nextTimer = timersQueue.peek()
|
42
|
-
nextTimer?.let {
|
43
|
-
return !isTimerInBusyWindow(it) && !hasBusyTimers(timersQueue)
|
44
|
-
}
|
45
|
-
return true
|
46
|
-
}
|
47
|
-
}
|
48
|
-
|
49
|
-
private fun isTimerInBusyWindow(timer: Any): Boolean {
|
50
|
-
val timerReflected = TimerReflected(timer)
|
51
|
-
return when {
|
52
|
-
timerReflected.isRepeating -> false
|
53
|
-
timerReflected.interval > BUSY_WINDOW_THRESHOLD -> false
|
54
|
-
else -> true
|
55
|
-
}
|
56
|
-
}
|
57
|
-
|
58
|
-
private fun hasBusyTimers(timersQueue: PriorityQueue<Any>): Boolean {
|
59
|
-
timersQueue.forEach {
|
60
|
-
if (isTimerInBusyWindow(it)) {
|
61
|
-
return true
|
62
|
-
}
|
63
|
-
}
|
64
|
-
return false
|
65
|
-
}
|
66
|
-
|
67
|
-
companion object {
|
68
|
-
fun createIfSupported(reactContext: ReactContext): DefaultIdleInterrogationStrategy? {
|
69
|
-
// RN = 0.62.0:
|
70
|
-
// Should have been handled by DelegatedIdleInterrogationStrategy.createIfSupported() but seems the new TimingModule class
|
71
|
-
// was released without the awaited-for "hasActiveTimersInRange()" method.
|
72
|
-
try {
|
73
|
-
val timingModule = RNHelpers.getNativeModule(reactContext, "com.facebook.react.modules.core.TimingModule")
|
74
|
-
val timersManager = Reflect.on(timingModule).get<Any>("mJavaTimerManager")
|
75
|
-
return DefaultIdleInterrogationStrategy(timersManager)
|
76
|
-
} catch (ex: Exception) {
|
77
|
-
}
|
78
|
-
|
79
|
-
// RN < 0.62
|
80
|
-
val timingModule = RNHelpers.getNativeModule(reactContext, "com.facebook.react.modules.core.Timing") ?: return null
|
81
|
-
return DefaultIdleInterrogationStrategy(timingModule)
|
82
|
-
}
|
83
|
-
}
|
84
|
-
}
|
@@ -1,115 +0,0 @@
|
|
1
|
-
package com.wix.detox.reactnative.idlingresources.timers
|
2
|
-
|
3
|
-
import com.facebook.react.bridge.NativeModule
|
4
|
-
import com.wix.detox.UTHelpers
|
5
|
-
import org.assertj.core.api.Assertions
|
6
|
-
import org.spekframework.spek2.Spek
|
7
|
-
import org.spekframework.spek2.style.specification.describe
|
8
|
-
import java.util.*
|
9
|
-
import java.util.concurrent.Executors
|
10
|
-
|
11
|
-
private const val BUSY_INTERVAL_MS = 1500
|
12
|
-
private const val MEANINGFUL_TIMER_INTERVAL = BUSY_INTERVAL_MS
|
13
|
-
|
14
|
-
data class TimerStub(
|
15
|
-
private var mCallbackID: Int,
|
16
|
-
private var mTargetTime: Long,
|
17
|
-
private var mInterval: Int,
|
18
|
-
private var mRepeat: Boolean)
|
19
|
-
|
20
|
-
class TimersNativeModuleStub : NativeModule {
|
21
|
-
val mTimers: PriorityQueue<Any> = PriorityQueue(2) { _, _ -> 0}
|
22
|
-
val mTimerGuard = "Lock-Mock"
|
23
|
-
|
24
|
-
override fun onCatalystInstanceDestroy() {}
|
25
|
-
override fun invalidate() {}
|
26
|
-
|
27
|
-
override fun getName(): String = "TimersNativeModuleStub"
|
28
|
-
override fun canOverrideExistingModule() = false
|
29
|
-
override fun initialize() {}
|
30
|
-
}
|
31
|
-
|
32
|
-
private fun now() = System.nanoTime() / 1000000L
|
33
|
-
private fun aTimer(targetTime: Long, interval: Int, isRepeating: Boolean): TimerStub {
|
34
|
-
return TimerStub(-1, targetTime, interval, isRepeating)
|
35
|
-
}
|
36
|
-
private fun aTimer(interval: Int, isRepeating: Boolean) = aTimer(now() + interval + 10, interval, isRepeating)
|
37
|
-
private fun aOneShotTimer(interval: Int) = aTimer(interval, false)
|
38
|
-
private fun aRepeatingTimer(interval: Int) = aTimer(interval, true)
|
39
|
-
private fun anOverdueTimer() = aTimer(now() - 100, 123, false)
|
40
|
-
|
41
|
-
object DefaultIdleInterrogationStrategySpec: Spek({
|
42
|
-
describe("Default timers idle-interrogation strategy") {
|
43
|
-
|
44
|
-
lateinit var timersNativeModule: TimersNativeModuleStub
|
45
|
-
|
46
|
-
beforeEachTest {
|
47
|
-
timersNativeModule = TimersNativeModuleStub()
|
48
|
-
}
|
49
|
-
|
50
|
-
fun givenTimer(timer: Any) {
|
51
|
-
timersNativeModule.mTimers.add(timer)
|
52
|
-
}
|
53
|
-
|
54
|
-
fun uut() = DefaultIdleInterrogationStrategy(timersNativeModule)
|
55
|
-
|
56
|
-
it("should be idle if there are no timers in queue") {
|
57
|
-
Assertions.assertThat(uut().isIdleNow()).isTrue()
|
58
|
-
}
|
59
|
-
|
60
|
-
it("should be busy if there's a meaningful pending timer") {
|
61
|
-
givenTimer(aOneShotTimer(MEANINGFUL_TIMER_INTERVAL))
|
62
|
-
Assertions.assertThat(uut().isIdleNow()).isFalse()
|
63
|
-
}
|
64
|
-
|
65
|
-
it("should be idle if pending timer is too far away (ie not meaningful)") {
|
66
|
-
givenTimer(aOneShotTimer(BUSY_INTERVAL_MS + 1))
|
67
|
-
Assertions.assertThat(uut().isIdleNow()).isTrue()
|
68
|
-
}
|
69
|
-
|
70
|
-
it("should be idle if the only timer is a repeating one") {
|
71
|
-
givenTimer(aRepeatingTimer(MEANINGFUL_TIMER_INTERVAL))
|
72
|
-
Assertions.assertThat(uut().isIdleNow()).isTrue()
|
73
|
-
}
|
74
|
-
|
75
|
-
it("should be busy if a meaningful pending timer lies beyond a repeating one") {
|
76
|
-
givenTimer(aRepeatingTimer(BUSY_INTERVAL_MS / 10))
|
77
|
-
givenTimer(aOneShotTimer(BUSY_INTERVAL_MS))
|
78
|
-
Assertions.assertThat(uut().isIdleNow()).isFalse()
|
79
|
-
}
|
80
|
-
|
81
|
-
/**
|
82
|
-
* Note: Reversed logic due to this issue: https://github.com/wix/Detox/issues/1171 !!!
|
83
|
-
*
|
84
|
-
* Apparently at times (rare) this caused Espresso to think we're idle too soon, rendering
|
85
|
-
* it never to query any idling resource again even after the timer effectively expires...
|
86
|
-
*/
|
87
|
-
it("should be *busy* even if all timers are overdue") {
|
88
|
-
givenTimer(anOverdueTimer())
|
89
|
-
givenTimer(anOverdueTimer())
|
90
|
-
Assertions.assertThat(uut().isIdleNow()).isFalse()
|
91
|
-
}
|
92
|
-
|
93
|
-
it("should be busy if has a meaningful pending timer set beyond an overdue timer") {
|
94
|
-
givenTimer(anOverdueTimer())
|
95
|
-
givenTimer(aOneShotTimer(MEANINGFUL_TIMER_INTERVAL))
|
96
|
-
Assertions.assertThat(uut().isIdleNow()).isFalse()
|
97
|
-
}
|
98
|
-
|
99
|
-
it("should yield to other threads using the timers module") {
|
100
|
-
val executor = Executors.newSingleThreadExecutor()
|
101
|
-
var isIdle: Boolean? = null
|
102
|
-
|
103
|
-
synchronized(timersNativeModule.mTimerGuard) {
|
104
|
-
executor.submit {
|
105
|
-
isIdle = uut().isIdleNow()
|
106
|
-
}
|
107
|
-
UTHelpers.yieldToOtherThreads(executor)
|
108
|
-
Assertions.assertThat(isIdle).isNull()
|
109
|
-
}
|
110
|
-
UTHelpers.yieldToOtherThreads(executor)
|
111
|
-
Assertions.assertThat(isIdle).isNotNull()
|
112
|
-
executor.shutdownNow()
|
113
|
-
}
|
114
|
-
}
|
115
|
-
})
|