detox 20.44.0-smoke.2 → 20.44.0-smoke.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Detox-android/com/wix/detox/{20.44.0-smoke.2/detox-20.44.0-smoke.2-sources.jar → 20.44.0-smoke.4/detox-20.44.0-smoke.4-sources.jar} +0 -0
- package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4-sources.jar.md5 +1 -0
- package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4-sources.jar.sha1 +1 -0
- package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4-sources.jar.sha256 +1 -0
- package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4-sources.jar.sha512 +1 -0
- package/Detox-android/com/wix/detox/{20.44.0-smoke.2/detox-20.44.0-smoke.2.aar → 20.44.0-smoke.4/detox-20.44.0-smoke.4.aar} +0 -0
- package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.aar.md5 +1 -0
- package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.aar.sha1 +1 -0
- package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.aar.sha256 +1 -0
- package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.aar.sha512 +1 -0
- package/Detox-android/com/wix/detox/{20.44.0-smoke.2/detox-20.44.0-smoke.2.pom → 20.44.0-smoke.4/detox-20.44.0-smoke.4.pom} +1 -1
- package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.pom.md5 +1 -0
- package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.pom.sha1 +1 -0
- package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.pom.sha256 +1 -0
- package/Detox-android/com/wix/detox/20.44.0-smoke.4/detox-20.44.0-smoke.4.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-framework.tbz +0 -0
- package/Detox-ios-src.tbz +0 -0
- package/Detox-ios-xcuitest.tbz +0 -0
- package/android/detox/src/full/java/com/wix/detox/inquiry/FabricAnimationsInquirer.kt +207 -8
- package/package.json +2 -2
- package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2-sources.jar.md5 +0 -1
- package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2-sources.jar.sha1 +0 -1
- package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2-sources.jar.sha256 +0 -1
- package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2-sources.jar.sha512 +0 -1
- package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.aar.md5 +0 -1
- package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.aar.sha1 +0 -1
- package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.aar.sha256 +0 -1
- package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.aar.sha512 +0 -1
- package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.pom.md5 +0 -1
- package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.pom.sha1 +0 -1
- package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.pom.sha256 +0 -1
- package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2.pom.sha512 +0 -1
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1c1260d5d5dd7ba851908271b86c49c8
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
f5fd22fc1bec6c426f5dbcfa7d57bcb3a2663583
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
d0dcf3a7c33b5aeb99f910b1e264e3979c679531884ac40e3b8c00864890c253
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
f096a65c66dc7241116db2c1dbd5cf1c86553e4a919b4e7ac9c61d618d25a0a5dedd7170fcd55dbf041a252856a32e124c5958eaa52d8aadaedc7c8adf6d0f44
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
21a721aa6c15fde7188e5fbad97cc6af
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
b4d1dc9cfdd36505fabaccdf7a0c97c624a1d3ac
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
4abfe61356f07d39e8fc5291cd4aac0c34bceb987afdb8fef942f43cb07f33c4
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
442065e378030ae4f6cabbb777c80e335ad8c0902c5ed01869c8a18afa14b7fe4b523fd887f19027357dbd8eae8cefd1e18cbb1678ba0d680ef30a5944b8e619
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<modelVersion>4.0.0</modelVersion>
|
|
4
4
|
<groupId>com.wix</groupId>
|
|
5
5
|
<artifactId>detox</artifactId>
|
|
6
|
-
<version>20.44.0-smoke.
|
|
6
|
+
<version>20.44.0-smoke.4</version>
|
|
7
7
|
<packaging>aar</packaging>
|
|
8
8
|
<name>Detox</name>
|
|
9
9
|
<description>Gray box end-to-end testing and automation library for mobile apps</description>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
852edb86e316ab26eafb9490e8069101
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
fa2ef4968b4fd325cb5daab3504e95cf23be0004
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
d998c8d633fc50c9df2155745628c50e3d30585e9f2aaeba00fb2b08cb996a35
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
91d26d9c5cc270127b659984508f52d84cca4e9c97ad54736d0a4bf6d9a661fd0df9797db449133dad5703f99ed62d28e8a8376b92629c309c8d0d1c37294015
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
<groupId>com.wix</groupId>
|
|
4
4
|
<artifactId>detox</artifactId>
|
|
5
5
|
<versioning>
|
|
6
|
-
<latest>20.44.0-smoke.
|
|
7
|
-
<release>20.44.0-smoke.
|
|
6
|
+
<latest>20.44.0-smoke.4</latest>
|
|
7
|
+
<release>20.44.0-smoke.4</release>
|
|
8
8
|
<versions>
|
|
9
|
-
<version>20.44.0-smoke.
|
|
9
|
+
<version>20.44.0-smoke.4</version>
|
|
10
10
|
</versions>
|
|
11
|
-
<lastUpdated>
|
|
11
|
+
<lastUpdated>20251015123718</lastUpdated>
|
|
12
12
|
</versioning>
|
|
13
13
|
</metadata>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
1424a26ea132414e2a25cdf24897ca55
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
419ebf124657f635cb3ecec2f6a3256cce093e46
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
e31c759d7ed1f7bea2b6e77276bbb1eb2ef29291b9d2a81162dfb785de74816d
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
c4e0b8a52b3cb63613de5310d16ef65fbe591dede27d78812e55b19a527b00cc5521e4dcbf9ebe5331147e8c5b37dd0114a366255eacfb4e8788a27f999066f0
|
package/Detox-ios-framework.tbz
CHANGED
|
Binary file
|
package/Detox-ios-src.tbz
CHANGED
|
Binary file
|
package/Detox-ios-xcuitest.tbz
CHANGED
|
Binary file
|
|
@@ -27,6 +27,10 @@ object FabricAnimationsInquirer {
|
|
|
27
27
|
private var propMappingField: Field? = null
|
|
28
28
|
private var nodeValueField: Field? = null
|
|
29
29
|
private var offsetField: Field? = null
|
|
30
|
+
private var preOperationsField: Field? = null
|
|
31
|
+
private var operationsField: Field? = null
|
|
32
|
+
private var mQueueField: Field? = null
|
|
33
|
+
private var mPeekedOperationField: Field? = null
|
|
30
34
|
|
|
31
35
|
fun logAnimatingViews(reactContext: ReactApplicationContext) {
|
|
32
36
|
try {
|
|
@@ -38,15 +42,35 @@ object FabricAnimationsInquirer {
|
|
|
38
42
|
val nodesManager = getNodesManager(reactContext) ?: return
|
|
39
43
|
Log.d(LOG_TAG, "Got nodesManager: ${nodesManager.javaClass.simpleName}")
|
|
40
44
|
|
|
41
|
-
// Check
|
|
45
|
+
// Check for both queued and active animations
|
|
46
|
+
val animatedModule = reactContext.getNativeModule(NativeAnimatedModule::class.java)
|
|
47
|
+
if (animatedModule == null) {
|
|
48
|
+
Log.d(LOG_TAG, "NativeAnimatedModule not found")
|
|
49
|
+
return
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Check queued animations first
|
|
53
|
+
val hasQueued = checkQueuedAnimations(animatedModule)
|
|
54
|
+
Log.d(LOG_TAG, "hasQueuedAnimations() returned: $hasQueued")
|
|
55
|
+
|
|
56
|
+
// Check active animations
|
|
42
57
|
val hasActive = nodesManager.hasActiveAnimations()
|
|
43
58
|
Log.d(LOG_TAG, "hasActiveAnimations() returned: $hasActive")
|
|
44
59
|
|
|
45
|
-
if (!hasActive) {
|
|
46
|
-
Log.d(LOG_TAG, "No active animations detected")
|
|
60
|
+
if (!hasQueued && !hasActive) {
|
|
61
|
+
Log.d(LOG_TAG, "No queued or active animations detected")
|
|
47
62
|
return
|
|
48
63
|
}
|
|
49
64
|
|
|
65
|
+
if (hasQueued) {
|
|
66
|
+
Log.d(LOG_TAG, "Found queued animations - analyzing operations queue")
|
|
67
|
+
val queuedViewTags = analyzeQueuedOperations(animatedModule)
|
|
68
|
+
if (queuedViewTags.isNotEmpty()) {
|
|
69
|
+
Log.d(LOG_TAG, "Found ${queuedViewTags.size} views with queued animations: $queuedViewTags")
|
|
70
|
+
logViews(reactContext, queuedViewTags)
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
50
74
|
// Get all animated nodes from the graph
|
|
51
75
|
val allNodes = getAllAnimatedNodes(nodesManager)
|
|
52
76
|
Log.d(LOG_TAG, "Found ${allNodes.size()} total animated nodes")
|
|
@@ -171,7 +195,7 @@ object FabricAnimationsInquirer {
|
|
|
171
195
|
val visited = mutableSetOf<AnimatedNode>()
|
|
172
196
|
|
|
173
197
|
while (queue.isNotEmpty()) {
|
|
174
|
-
val node = queue.poll()
|
|
198
|
+
val node = queue.poll() ?: continue
|
|
175
199
|
if (node in visited) {
|
|
176
200
|
continue
|
|
177
201
|
}
|
|
@@ -181,15 +205,15 @@ object FabricAnimationsInquirer {
|
|
|
181
205
|
val nodeType = node.javaClass.simpleName
|
|
182
206
|
when (nodeType) {
|
|
183
207
|
"PropsAnimatedNode" -> {
|
|
184
|
-
allRelevantNodes.add(node)
|
|
208
|
+
allRelevantNodes.add(node as Any)
|
|
185
209
|
Log.d(LOG_TAG, "Found PropsAnimatedNode: $nodeType")
|
|
186
210
|
}
|
|
187
211
|
"StyleAnimatedNode" -> {
|
|
188
|
-
allRelevantNodes.add(node)
|
|
212
|
+
allRelevantNodes.add(node as Any)
|
|
189
213
|
Log.d(LOG_TAG, "Found StyleAnimatedNode: $nodeType")
|
|
190
214
|
}
|
|
191
215
|
"ValueAnimatedNode" -> {
|
|
192
|
-
allRelevantNodes.add(node)
|
|
216
|
+
allRelevantNodes.add(node as Any)
|
|
193
217
|
Log.d(LOG_TAG, "Found ValueAnimatedNode: $nodeType")
|
|
194
218
|
}
|
|
195
219
|
else -> {
|
|
@@ -247,6 +271,7 @@ object FabricAnimationsInquirer {
|
|
|
247
271
|
// Log the property mapping to see what properties are being animated
|
|
248
272
|
try {
|
|
249
273
|
val propNodeMappingField = findOrCacheField(node.javaClass, "propNodeMapping", "propNodeMappingField")
|
|
274
|
+
@Suppress("UNCHECKED_CAST")
|
|
250
275
|
val propNodeMapping = propNodeMappingField?.get(node) as? Map<String, Int>
|
|
251
276
|
if (propNodeMapping != null) {
|
|
252
277
|
Log.d(LOG_TAG, "View $viewTag has animated properties: ${propNodeMapping.keys}")
|
|
@@ -263,6 +288,7 @@ object FabricAnimationsInquirer {
|
|
|
263
288
|
// Try to access propMapping to see what properties it handles
|
|
264
289
|
try {
|
|
265
290
|
val propMappingField = findOrCacheField(node.javaClass, "propMapping", "propMappingField")
|
|
291
|
+
@Suppress("UNCHECKED_CAST")
|
|
266
292
|
val propMapping = propMappingField?.get(node) as? Map<String, Int>
|
|
267
293
|
if (propMapping != null) {
|
|
268
294
|
Log.d(LOG_TAG, "StyleAnimatedNode handles properties: ${propMapping.keys}")
|
|
@@ -321,7 +347,17 @@ object FabricAnimationsInquirer {
|
|
|
321
347
|
val view = uiManager.resolveView(tag)
|
|
322
348
|
if (view != null) {
|
|
323
349
|
ViewLifecycleRegistry.markAnimated(view)
|
|
324
|
-
|
|
350
|
+
|
|
351
|
+
// Get view coordinates and dimensions
|
|
352
|
+
val left = view.left
|
|
353
|
+
val top = view.top
|
|
354
|
+
val right = view.right
|
|
355
|
+
val bottom = view.bottom
|
|
356
|
+
val width = right - left
|
|
357
|
+
val height = bottom - top
|
|
358
|
+
|
|
359
|
+
Log.i(LOG_TAG, "Animating view: tag=$tag, class=${view.javaClass.simpleName}, id=${view.id}, " +
|
|
360
|
+
"bounds=[$left,$top,$right,$bottom], size=${width}x${height}")
|
|
325
361
|
} else {
|
|
326
362
|
Log.w(LOG_TAG, "Could not resolve view for tag: $tag")
|
|
327
363
|
}
|
|
@@ -427,4 +463,167 @@ object FabricAnimationsInquirer {
|
|
|
427
463
|
|
|
428
464
|
return -1
|
|
429
465
|
}
|
|
466
|
+
|
|
467
|
+
private fun checkQueuedAnimations(animatedModule: NativeAnimatedModule): Boolean {
|
|
468
|
+
return try {
|
|
469
|
+
// Check mPreOperations queue (Android field name)
|
|
470
|
+
val preOperationsField = findOrCacheField(animatedModule.javaClass, "mPreOperations", "preOperationsField")
|
|
471
|
+
val preOperations = preOperationsField?.get(animatedModule)
|
|
472
|
+
val preOperationsEmpty = checkOperationsQueueEmpty(preOperations)
|
|
473
|
+
Log.d(LOG_TAG, "mPreOperations queue empty: $preOperationsEmpty")
|
|
474
|
+
|
|
475
|
+
// Check mOperations queue (Android field name)
|
|
476
|
+
val operationsField = findOrCacheField(animatedModule.javaClass, "mOperations", "operationsField")
|
|
477
|
+
val operations = operationsField?.get(animatedModule)
|
|
478
|
+
val operationsEmpty = checkOperationsQueueEmpty(operations)
|
|
479
|
+
Log.d(LOG_TAG, "mOperations queue empty: $operationsEmpty")
|
|
480
|
+
|
|
481
|
+
val hasQueued = !preOperationsEmpty || !operationsEmpty
|
|
482
|
+
Log.d(LOG_TAG, "Has queued animations: $hasQueued")
|
|
483
|
+
hasQueued
|
|
484
|
+
} catch (e: Exception) {
|
|
485
|
+
Log.e(LOG_TAG, "Failed to check queued animations", e)
|
|
486
|
+
false
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
private fun checkOperationsQueueEmpty(operationsQueue: Any?): Boolean {
|
|
491
|
+
if (operationsQueue == null) {
|
|
492
|
+
Log.d(LOG_TAG, "Operations queue is null")
|
|
493
|
+
return true
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
return try {
|
|
497
|
+
// Try to get isEmpty method
|
|
498
|
+
val isEmptyMethod = operationsQueue.javaClass.getDeclaredMethod("isEmpty")
|
|
499
|
+
isEmptyMethod.isAccessible = true
|
|
500
|
+
val isEmpty = isEmptyMethod.invoke(operationsQueue) as Boolean
|
|
501
|
+
Log.d(LOG_TAG, "Operations queue isEmpty() result: $isEmpty")
|
|
502
|
+
isEmpty
|
|
503
|
+
} catch (e: Exception) {
|
|
504
|
+
Log.d(LOG_TAG, "Could not call isEmpty() on operations queue, trying property access")
|
|
505
|
+
try {
|
|
506
|
+
// Fallback to property access
|
|
507
|
+
val isEmptyProperty = operationsQueue.javaClass.getDeclaredField("isEmpty")
|
|
508
|
+
isEmptyProperty.isAccessible = true
|
|
509
|
+
val isEmpty = isEmptyProperty.get(operationsQueue) as Boolean
|
|
510
|
+
Log.d(LOG_TAG, "Operations queue isEmpty property: $isEmpty")
|
|
511
|
+
isEmpty
|
|
512
|
+
} catch (e2: Exception) {
|
|
513
|
+
Log.e(LOG_TAG, "Could not access isEmpty property on operations queue", e2)
|
|
514
|
+
true // Assume empty if we can't determine
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
private fun analyzeQueuedOperations(animatedModule: NativeAnimatedModule): Set<Int> {
|
|
520
|
+
val viewTags = mutableSetOf<Int>()
|
|
521
|
+
try {
|
|
522
|
+
Log.d(LOG_TAG, "Analyzing queued operations...")
|
|
523
|
+
|
|
524
|
+
// Analyze mPreOperations queue (Android field name)
|
|
525
|
+
val preOperationsField = findOrCacheField(animatedModule.javaClass, "mPreOperations", "preOperationsField")
|
|
526
|
+
val preOperations = preOperationsField?.get(animatedModule)
|
|
527
|
+
if (preOperations != null) {
|
|
528
|
+
Log.d(LOG_TAG, "Analyzing mPreOperations queue...")
|
|
529
|
+
val preOpsViewTags = analyzeOperationsQueue(preOperations, "mPreOperations")
|
|
530
|
+
viewTags.addAll(preOpsViewTags)
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
// Analyze mOperations queue (Android field name)
|
|
534
|
+
val operationsField = findOrCacheField(animatedModule.javaClass, "mOperations", "operationsField")
|
|
535
|
+
val operations = operationsField?.get(animatedModule)
|
|
536
|
+
if (operations != null) {
|
|
537
|
+
Log.d(LOG_TAG, "Analyzing mOperations queue...")
|
|
538
|
+
val opsViewTags = analyzeOperationsQueue(operations, "mOperations")
|
|
539
|
+
viewTags.addAll(opsViewTags)
|
|
540
|
+
}
|
|
541
|
+
} catch (e: Exception) {
|
|
542
|
+
Log.e(LOG_TAG, "Failed to analyze queued operations", e)
|
|
543
|
+
}
|
|
544
|
+
return viewTags
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
private fun analyzeOperationsQueue(operationsQueue: Any, queueName: String): Set<Int> {
|
|
548
|
+
val viewTags = mutableSetOf<Int>()
|
|
549
|
+
try {
|
|
550
|
+
// Log queue class information first
|
|
551
|
+
Log.d(LOG_TAG, "$queueName queue class: ${operationsQueue.javaClass.simpleName}")
|
|
552
|
+
Log.d(LOG_TAG, "$queueName queue fields: ${operationsQueue.javaClass.declaredFields.map { it.name }}")
|
|
553
|
+
|
|
554
|
+
// Try to access the internal mQueue field (ConcurrentLinkedQueue)
|
|
555
|
+
val mQueueField = findOrCacheField(operationsQueue.javaClass, "mQueue", "mQueueField")
|
|
556
|
+
if (mQueueField != null) {
|
|
557
|
+
val mQueue = mQueueField.get(operationsQueue)
|
|
558
|
+
Log.d(LOG_TAG, "Found mQueue in $queueName: $mQueue")
|
|
559
|
+
|
|
560
|
+
// Try to get queue size
|
|
561
|
+
try {
|
|
562
|
+
val sizeMethod = mQueue.javaClass.getDeclaredMethod("size")
|
|
563
|
+
sizeMethod.isAccessible = true
|
|
564
|
+
val size = sizeMethod.invoke(mQueue) as Int
|
|
565
|
+
Log.d(LOG_TAG, "$queueName mQueue size: $size")
|
|
566
|
+
} catch (e: Exception) {
|
|
567
|
+
Log.d(LOG_TAG, "Could not get size of $queueName mQueue")
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
// Try to peek at queue contents (without removing)
|
|
571
|
+
try {
|
|
572
|
+
val peekMethod = mQueue.javaClass.getDeclaredMethod("peek")
|
|
573
|
+
peekMethod.isAccessible = true
|
|
574
|
+
val peekedOperation = peekMethod.invoke(mQueue)
|
|
575
|
+
if (peekedOperation != null) {
|
|
576
|
+
Log.d(LOG_TAG, "Peeked operation from $queueName: ${peekedOperation.javaClass.simpleName}")
|
|
577
|
+
|
|
578
|
+
// Try to extract view tags from the operation
|
|
579
|
+
val operationViewTags = extractViewTagsFromOperation(peekedOperation)
|
|
580
|
+
viewTags.addAll(operationViewTags)
|
|
581
|
+
}
|
|
582
|
+
} catch (e: Exception) {
|
|
583
|
+
Log.d(LOG_TAG, "Could not peek at $queueName queue contents: ${e.message}")
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
// Try to access mPeekedOperation field
|
|
588
|
+
val mPeekedOperationField = findOrCacheField(operationsQueue.javaClass, "mPeekedOperation", "mPeekedOperationField")
|
|
589
|
+
if (mPeekedOperationField != null) {
|
|
590
|
+
val mPeekedOperation = mPeekedOperationField.get(operationsQueue)
|
|
591
|
+
if (mPeekedOperation != null) {
|
|
592
|
+
Log.d(LOG_TAG, "Found mPeekedOperation in $queueName: ${mPeekedOperation.javaClass.simpleName}")
|
|
593
|
+
|
|
594
|
+
// Try to extract view tags from the peeked operation
|
|
595
|
+
val peekedViewTags = extractViewTagsFromOperation(mPeekedOperation)
|
|
596
|
+
viewTags.addAll(peekedViewTags)
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
} catch (e: Exception) {
|
|
601
|
+
Log.e(LOG_TAG, "Failed to analyze $queueName queue", e)
|
|
602
|
+
}
|
|
603
|
+
return viewTags
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
private fun extractViewTagsFromOperation(operation: Any): Set<Int> {
|
|
607
|
+
val viewTags = mutableSetOf<Int>()
|
|
608
|
+
try {
|
|
609
|
+
Log.d(LOG_TAG, "Analyzing operation: ${operation.javaClass.simpleName}")
|
|
610
|
+
|
|
611
|
+
// Try to find view tags in the operation's fields
|
|
612
|
+
val fields = operation.javaClass.declaredFields
|
|
613
|
+
for (field in fields) {
|
|
614
|
+
field.isAccessible = true
|
|
615
|
+
val value = field.get(operation)
|
|
616
|
+
Log.d(LOG_TAG, "Operation field ${field.name}: $value (${value?.javaClass?.simpleName})")
|
|
617
|
+
|
|
618
|
+
// Look for integer fields that might be view tags
|
|
619
|
+
if (value is Int && value > 0) {
|
|
620
|
+
Log.d(LOG_TAG, "Found potential view tag: $value")
|
|
621
|
+
viewTags.add(value)
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
} catch (e: Exception) {
|
|
625
|
+
Log.d(LOG_TAG, "Failed to extract view tags from operation: ${e.message}")
|
|
626
|
+
}
|
|
627
|
+
return viewTags
|
|
628
|
+
}
|
|
430
629
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "detox",
|
|
3
3
|
"description": "E2E tests and automation for mobile",
|
|
4
|
-
"version": "20.44.0-smoke.
|
|
4
|
+
"version": "20.44.0-smoke.4",
|
|
5
5
|
"bin": {
|
|
6
6
|
"detox": "local-cli/cli.js"
|
|
7
7
|
},
|
|
@@ -120,5 +120,5 @@
|
|
|
120
120
|
"browserslist": [
|
|
121
121
|
"node 14"
|
|
122
122
|
],
|
|
123
|
-
"gitHead": "
|
|
123
|
+
"gitHead": "35e4dca0f8f18ac2e348331d1ae7519f37e237a4"
|
|
124
124
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
fb1630195ebbd2014c1be43fadd17edf
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
2bc090ab7886acf6b461a8f221f8ed068ad66595
|
package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2-sources.jar.sha256
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
b0828f9ccb925e381189df50e59a8cf8a38af81a695ff6700767b756819f18d8
|
package/Detox-android/com/wix/detox/20.44.0-smoke.2/detox-20.44.0-smoke.2-sources.jar.sha512
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
6577058c84bf0f2e9f0f200c83b2e15295cb063415b66f65733b7932124650f3527ea7150b607b39e68c8db423d21f5b65a49339d916546f116d57c202ebadfb
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
d68c582dd3f095bc97c4fe52f2b2c9bb
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
e8379345cc00e6d1f929e8e13c8d9126fb48b83c
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
3ee37344966d136f6ffc73db2a6ed3caddd4c5624bdd70752066a937e893c74e
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
604ba5aee32797797fa722a67583f045e5a2c831c37514d3aa29d094b87f1e75c20e7b6746c73fb8d402dce1cbfd35a14fdeab9d7118ef39ba533840e81cec02
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
70d26301171607b2dbba0e581fc12c81
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
fcef241bd4be7155a23da9ed9e505a53bdbf7c8d
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0fceb53da773f5072b415d8cba73c562fef8dde2cc13c18ef155ff86de33cfde
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
6ec079455199bacdf64876b62b3314f09ba44b3c435d462f00f5627153a985cf32365f5d17924eff0502dd3939a0f1941778b68e76e69d2d6717319ec8a0ab22
|