detox 19.12.1 → 19.12.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. package/Detox-android/com/wix/detox/{19.12.1-prerelease.0/detox-19.12.1-prerelease.0-javadoc.jar → 19.12.3/detox-19.12.3-javadoc.jar} +0 -0
  2. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3-javadoc.jar.md5 +1 -0
  3. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3-javadoc.jar.sha1 +1 -0
  4. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3-javadoc.jar.sha256 +1 -0
  5. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3-javadoc.jar.sha512 +1 -0
  6. package/Detox-android/com/wix/detox/{19.12.1-prerelease.0/detox-19.12.1-prerelease.0-sources.jar → 19.12.3/detox-19.12.3-sources.jar} +0 -0
  7. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3-sources.jar.md5 +1 -0
  8. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3-sources.jar.sha1 +1 -0
  9. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3-sources.jar.sha256 +1 -0
  10. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3-sources.jar.sha512 +1 -0
  11. package/Detox-android/com/wix/detox/{19.12.1-prerelease.0/detox-19.12.1-prerelease.0.aar → 19.12.3/detox-19.12.3.aar} +0 -0
  12. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3.aar.md5 +1 -0
  13. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3.aar.sha1 +1 -0
  14. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3.aar.sha256 +1 -0
  15. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3.aar.sha512 +1 -0
  16. package/Detox-android/com/wix/detox/{19.12.1-prerelease.0/detox-19.12.1-prerelease.0.pom → 19.12.3/detox-19.12.3.pom} +1 -1
  17. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3.pom.md5 +1 -0
  18. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3.pom.sha1 +1 -0
  19. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3.pom.sha256 +1 -0
  20. package/Detox-android/com/wix/detox/19.12.3/detox-19.12.3.pom.sha512 +1 -0
  21. package/Detox-android/com/wix/detox/maven-metadata.xml +4 -4
  22. package/Detox-android/com/wix/detox/maven-metadata.xml.md5 +1 -1
  23. package/Detox-android/com/wix/detox/maven-metadata.xml.sha1 +1 -1
  24. package/Detox-android/com/wix/detox/maven-metadata.xml.sha256 +1 -1
  25. package/Detox-android/com/wix/detox/maven-metadata.xml.sha512 +1 -1
  26. package/Detox-ios-src.tbz +0 -0
  27. package/Detox-ios.tbz +0 -0
  28. package/android/detox/proguard-rules.pro +3 -0
  29. package/android/detox/src/full/java/com/wix/detox/reactnative/idlingresources/IdlingResourceDescription.kt +19 -13
  30. package/android/detox/src/full/java/com/wix/detox/reactnative/idlingresources/NetworkIdlingResource.java +33 -30
  31. package/android/detox/src/testFull/java/com/wix/detox/reactnative/idlingresources/NetworkIdlingResourcesTest.kt +61 -0
  32. package/package.json +2 -2
  33. package/src/client/actions/formatters/sync-resources/NetworkFormatter.js +1 -1
  34. package/src/devices/common/drivers/ios/tools/AppleSimUtils.js +25 -1
  35. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0-javadoc.jar.md5 +0 -1
  36. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0-javadoc.jar.sha1 +0 -1
  37. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0-javadoc.jar.sha256 +0 -1
  38. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0-javadoc.jar.sha512 +0 -1
  39. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0-sources.jar.md5 +0 -1
  40. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0-sources.jar.sha1 +0 -1
  41. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0-sources.jar.sha256 +0 -1
  42. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0-sources.jar.sha512 +0 -1
  43. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0.aar.md5 +0 -1
  44. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0.aar.sha1 +0 -1
  45. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0.aar.sha256 +0 -1
  46. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0.aar.sha512 +0 -1
  47. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0.pom.md5 +0 -1
  48. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0.pom.sha1 +0 -1
  49. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0.pom.sha256 +0 -1
  50. package/Detox-android/com/wix/detox/19.12.1-prerelease.0/detox-19.12.1-prerelease.0.pom.sha512 +0 -1
@@ -0,0 +1 @@
1
+ 6be640bbb26a68100ac9dc523a8968e2
@@ -0,0 +1 @@
1
+ c41568eb3c834b8637495b4e5e0cb1a009c5c885
@@ -0,0 +1 @@
1
+ a8679c6f6491725d8848c0544990477011148e16f58ea0df9b1e92980e59ff30
@@ -0,0 +1 @@
1
+ 67cb77995d9b1b38c0a56151c55265bbbc9b04efe546f6f8ce6e16af83e21c61a6825f4fc66e98880448b74f454223116dbe3856cd69ed30e19170afc73841f4
@@ -0,0 +1 @@
1
+ 7a6072a3ec1ebe22a490ec3fc828132e
@@ -0,0 +1 @@
1
+ b7fc93850b4c5927a53b349ce098367de13fa60e
@@ -0,0 +1 @@
1
+ 29ef40f0881caa19b79937690b21fcc90ba182de06618854b527f81718629ca5
@@ -0,0 +1 @@
1
+ 6fb34a891f06385672ac7395f8e2b8b7142437e279e4486b9c6ac96663b229343c3133d0e214de2e85c4b66d7687087a06683fc311efece0d6b5072c2997d856
@@ -0,0 +1 @@
1
+ 2c7931e2f81f1c416737d98c54c5ec03
@@ -0,0 +1 @@
1
+ ff7ab3b06537dedb033cdef008d5754ccd657085
@@ -0,0 +1 @@
1
+ 841142d217e137188dda87896be9a2fbc02516b9d289477f57afca3a2576dc63
@@ -0,0 +1 @@
1
+ 82a2c3f1ac41a8d5da57c7435f05ae23fedf75425b30125873d8f96aaba53b6c3a77ce1faff0973df8a31db16864ed8ec00480f3272489ca49d8e88e2ec7d46a
@@ -3,7 +3,7 @@
3
3
  <modelVersion>4.0.0</modelVersion>
4
4
  <groupId>com.wix</groupId>
5
5
  <artifactId>detox</artifactId>
6
- <version>19.12.1-prerelease.0</version>
6
+ <version>19.12.3</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
+ 4457baf485c76fa55b2a381be247b377
@@ -0,0 +1 @@
1
+ 11f0a9cbc34082223f45c47b0e07add7f3a43ed2
@@ -0,0 +1 @@
1
+ dee5704c35164889242458000b7044f2f900c1d98e89e6aa90d3387af883b740
@@ -0,0 +1 @@
1
+ 4db7b2382132ff6f4456dd2a4e22d22af57205212234003e37c4539d624f6d1dd73bb11a5f792f57eb3575a983347668c629f87804b3fd2fb3b23432df3b93ed
@@ -3,11 +3,11 @@
3
3
  <groupId>com.wix</groupId>
4
4
  <artifactId>detox</artifactId>
5
5
  <versioning>
6
- <latest>19.12.1-prerelease.0</latest>
7
- <release>19.12.1-prerelease.0</release>
6
+ <latest>19.12.3</latest>
7
+ <release>19.12.3</release>
8
8
  <versions>
9
- <version>19.12.1-prerelease.0</version>
9
+ <version>19.12.3</version>
10
10
  </versions>
11
- <lastUpdated>20220908095913</lastUpdated>
11
+ <lastUpdated>20220929163901</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- 3260b4e5892c8adbf429cd00a7bcd49f
1
+ 99f562827b42a1dfca170dd13a9d2b9d
@@ -1 +1 @@
1
- 3cb2e8fe8742f97d4cbb2e1af530268b10e5f67f
1
+ 297506da369f3558785d225ec4265a457d9b75a7
@@ -1 +1 @@
1
- 276bed43bb302094199de8720e2438255110faf3c1c71e7869d421af33ba3a1c
1
+ 12a12e3cc2f93e0a2cb3dd463224174f56d7cae8e2a7b726da43710216adfc59
@@ -1 +1 @@
1
- e1ed52b051858ef98392e39889d05c7e5c9dfb6ca5d030ce72080da447ccdf2f8eaae6e91576e8b451e493258cbb538ac91227cced71b47b6659897840bc2867
1
+ 395c54bd07efdf7b403c5f8e19a0fb2ee698fa4bf51945095c061e53797903d8fddd6f93c1e69f37e5c77b84736e769d9f64cb82705e7a57a79e791c37bc1c2f
package/Detox-ios-src.tbz CHANGED
Binary file
package/Detox-ios.tbz CHANGED
Binary file
@@ -13,6 +13,9 @@
13
13
  -dontnote org.hamcrest.**
14
14
  -dontnote com.facebook.**
15
15
 
16
+ -keep class org.apache.commons.lang3.** { *; }
17
+ -keep class org.apache.commons.io.** { *; }
18
+
16
19
  # Detox profiler (optional)
17
20
 
18
21
  -keep class com.wix.detoxprofiler.** { *; }
@@ -1,20 +1,26 @@
1
1
  package com.wix.detox.reactnative.idlingresources
2
2
 
3
3
  class IdlingResourceDescription private constructor(
4
- private val name: String,
5
- private val description: Map<String, Any>) {
6
- fun json(): Map<String, Any> = mutableMapOf<String, Any>("name" to name)
7
- .apply { if (description.isNotEmpty()) put("description", description) }
4
+ private val name: String,
5
+ private val description: Map<String, Any>) {
8
6
 
9
- override fun equals(other: Any?): Boolean = other is IdlingResourceDescription &&
10
- other.json() == this.json()
7
+ fun json() =
8
+ mutableMapOf<String, Any>("name" to name)
9
+ .apply {
10
+ if (description.isNotEmpty()) put("description", description)
11
+ }.toMap()
11
12
 
12
- data class Builder(
13
- var name: String = "unknown",
14
- var description: MutableMap<String, Any> = mutableMapOf()) {
13
+ override fun equals(other: Any?) =
14
+ (other is IdlingResourceDescription && other.json() == this.json())
15
+
16
+ override fun hashCode(): Int =
17
+ (31 * name.hashCode() + description.hashCode())
15
18
 
16
- fun name(name: String) = apply { this.name = name }
17
- fun addDescription(key: String, value: Any) = apply { this.description[key] = value }
18
- fun build() = IdlingResourceDescription(name, description)
19
- }
19
+ data class Builder(
20
+ var name: String = "unknown",
21
+ var description: MutableMap<String, Any> = mutableMapOf()) {
22
+ fun name(value: String) = apply { name = value }
23
+ fun addDescription(key: String, value: Any) = apply { description[key] = value }
24
+ fun build() = IdlingResourceDescription(name, description)
25
+ }
20
26
  }
@@ -69,42 +69,13 @@ public class NetworkIdlingResource extends DetoxBaseIdlingResource implements Ch
69
69
 
70
70
  @NotNull
71
71
  @Override
72
- public IdlingResourceDescription getDescription() {
72
+ public synchronized IdlingResourceDescription getDescription() {
73
73
  return new IdlingResourceDescription.Builder()
74
74
  .name("network")
75
75
  .addDescription("urls", new ArrayList<>(busyResources))
76
76
  .build();
77
77
  }
78
78
 
79
- @Override
80
- protected boolean checkIdle() {
81
- boolean idle = true;
82
- busyResources.clear();
83
- List<Call> calls = dispatcher.runningCalls();
84
- for (Call call : calls) {
85
- idle = false;
86
- String url = call.request().url().toString();
87
- for (Pattern pattern : blacklist) {
88
- if (pattern.matcher(url).matches()) {
89
- idle = true;
90
- break;
91
- }
92
- }
93
- if (!idle) {
94
- busyResources.add(call.request().url().toString());
95
- }
96
- }
97
- if (!idle) {
98
- Choreographer.getInstance().postFrameCallback(this);
99
- Log.i(LOG_TAG, "Network is busy");
100
- } else {
101
- if (callback != null) {
102
- callback.onTransitionToIdle();
103
- }
104
- }
105
- return idle;
106
- }
107
-
108
79
  @Override
109
80
  public void registerIdleTransitionCallback(ResourceCallback callback) {
110
81
  this.callback = callback;
@@ -116,10 +87,42 @@ public class NetworkIdlingResource extends DetoxBaseIdlingResource implements Ch
116
87
  isIdleNow();
117
88
  }
118
89
 
90
+ @Override
91
+ protected synchronized boolean checkIdle() {
92
+ busyResources.clear();
93
+
94
+ List<Call> calls = dispatcher.runningCalls();
95
+ for (Call call: calls) {
96
+ final String url = call.request().url().toString();
97
+
98
+ if (!isUrlBlacklisted(url)) {
99
+ busyResources.add(url);
100
+ }
101
+ }
102
+
103
+ if (!busyResources.isEmpty()) {
104
+ Log.i(LOG_TAG, "Network is busy, with " + busyResources.size() + " in-flight calls");
105
+ Choreographer.getInstance().postFrameCallback(this);
106
+ return false;
107
+ }
108
+
109
+ notifyIdle();
110
+ return true;
111
+ }
112
+
119
113
  @Override
120
114
  protected void notifyIdle() {
121
115
  if (callback != null) {
122
116
  callback.onTransitionToIdle();
123
117
  }
124
118
  }
119
+
120
+ private boolean isUrlBlacklisted(String url) {
121
+ for (Pattern pattern: blacklist) {
122
+ if (pattern.matcher(url).matches()) {
123
+ return true;
124
+ }
125
+ }
126
+ return false;
127
+ }
125
128
  }
@@ -0,0 +1,61 @@
1
+ package com.wix.detox.reactnative.idlingresources
2
+
3
+ import com.wix.detox.UTHelpers.yieldToOtherThreads
4
+ import org.assertj.core.api.Assertions.assertThat
5
+
6
+ import okhttp3.Dispatcher
7
+ import org.junit.Before
8
+ import org.junit.Test
9
+ import org.junit.runner.RunWith
10
+ import org.robolectric.RobolectricTestRunner
11
+ import java.util.concurrent.Executors
12
+
13
+ @RunWith(RobolectricTestRunner::class)
14
+ class NetworkIdlingResourcesTest {
15
+ lateinit var dispatcher: Dispatcher
16
+ lateinit var uut: NetworkIdlingResource
17
+
18
+ @Before
19
+ fun setup() {
20
+ dispatcher = Dispatcher()
21
+ uut = NetworkIdlingResource(dispatcher)
22
+ }
23
+
24
+ // Note: Ideally, we should test that the list of busy resources is protected,
25
+ // rather than testing thread-safety as a whole.
26
+ @Test
27
+ fun `should return the description in a thread-safe way`() {
28
+ val localExecutor = Executors.newSingleThreadExecutor()
29
+ var description: IdlingResourceDescription? = null
30
+
31
+ synchronized(uut) {
32
+ localExecutor.submit {
33
+ description = uut.getDescription()
34
+ }
35
+
36
+ yieldToOtherThreads(localExecutor)
37
+ assertThat(description).isNull()
38
+ }
39
+ yieldToOtherThreads(localExecutor)
40
+ assertThat(description).isNotNull()
41
+ }
42
+
43
+ // Note: Ideally, we should test that the list of busy resources is protected,
44
+ // rather than testing thread-safety as a whole.
45
+ @Test
46
+ fun `should check for idle in a thread-safe way`() {
47
+ val localExecutor = Executors.newSingleThreadExecutor()
48
+ var idle = false
49
+
50
+ synchronized(uut) {
51
+ localExecutor.submit {
52
+ idle = uut.isIdleNow
53
+ }
54
+
55
+ yieldToOtherThreads(localExecutor)
56
+ assertThat(idle).isFalse
57
+ }
58
+ yieldToOtherThreads(localExecutor)
59
+ assertThat(idle).isTrue
60
+ }
61
+ }
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": "19.12.1",
4
+ "version": "19.12.3",
5
5
  "bin": {
6
6
  "detox": "local-cli/cli.js"
7
7
  },
@@ -177,5 +177,5 @@
177
177
  }
178
178
  }
179
179
  },
180
- "gitHead": "d47d878de8431f581a558b7458ad68e961cb91d5"
180
+ "gitHead": "23bf330e395a488a6d7334db29a0fe289ce302f6"
181
181
  }
@@ -1,7 +1,7 @@
1
1
  const { makeResourceTitle, makeResourceSubTitle } = require('./utils');
2
2
 
3
3
  function makeURLDescription(url, urlCount) {
4
- return makeResourceSubTitle(`URL #${urlCount}: ${url}.`);
4
+ return makeResourceSubTitle(`URL #${urlCount}: ${url}`);
5
5
  }
6
6
 
7
7
  module.exports = function(properties) {
@@ -132,6 +132,30 @@ class AppleSimUtils {
132
132
  }
133
133
 
134
134
  async sendToHome(udid) {
135
+ if (await this._isSpringBoardInaccessible(udid)) {
136
+ // SpringBoard is not directly accessible by Simctl on iOS 16.0 and above, therefore we launch and terminate the
137
+ // Settings app instead. This sends the currently open app to the background and brings the home screen to the
138
+ // foreground.
139
+ await this._launchAndTerminateSettings(udid);
140
+ return;
141
+ }
142
+
143
+ await this._launchSpringBoard(udid);
144
+ }
145
+
146
+ async _isSpringBoardInaccessible(udid) {
147
+ const device = await this._findDeviceByUDID(udid);
148
+ const majorIOSVersion = parseInt(device.os.version.split('.')[0]);
149
+ return majorIOSVersion >= 16;
150
+ }
151
+
152
+ async _launchAndTerminateSettings(udid) {
153
+ const bundleId = 'com.apple.Preferences';
154
+ await this._execSimctl({ cmd: `launch ${udid} ${bundleId}`, retries: 10 });
155
+ await this._execSimctl({ cmd: `terminate ${udid} ${bundleId}`, retries: 10 });
156
+ }
157
+
158
+ async _launchSpringBoard(udid) {
135
159
  await this._execSimctl({ cmd: `launch ${udid} com.apple.springboard`, retries: 10 });
136
160
  }
137
161
 
@@ -246,7 +270,7 @@ class AppleSimUtils {
246
270
  // ```
247
271
  // This workaround is done to ignore the error above, as we do not care if the app was running before, we just
248
272
  // want to make sure it isn't now.
249
- if (err.code === 3 &&
273
+ if (err.code === 3 &&
250
274
  (err.stderr.includes(`the app is not currently running`) ||
251
275
  err.stderr.includes(`The operation couldn’t be completed. found nothing to terminate`))) {
252
276
  return;
@@ -1 +0,0 @@
1
- f8e27239ed726b6595f4a96e279d35971bc43f56
@@ -1 +0,0 @@
1
- 928268a34c865197f129e1bd3f1a0312933ece9504b28f47b5cb4e14285677b5
@@ -1 +0,0 @@
1
- 7a63c5b47bc122e758280062930df857698bfe82a5593dfff3312153b4a3462bda6d1379e832b07840ac633b6dc630d31396bfbe562da7a07f3464034f3e9ae8
@@ -1 +0,0 @@
1
- 89c263a2ae95173263087859cfcffe74f835655b
@@ -1 +0,0 @@
1
- 013294faa9812b8f5a91517ee06b1277471192a8598da75a9d0ae3ea7b5d99ab
@@ -1 +0,0 @@
1
- f2159bd60899a606b420ce9693a331fb359fe99ecbe40b1896f5049660588a98615ca2a20687a99d1f4f0c6bce69ef3df82bde336cd0b4a2fa3662e6235e30c5
@@ -1 +0,0 @@
1
- 2880dad223aa8eb4656fa2eb7f7b11d4
@@ -1 +0,0 @@
1
- 0d1996a26206fea48387f32e06bed48097e23442
@@ -1 +0,0 @@
1
- 00c9b8094189ba4f122899781ec77e372172d42bc6c66fcafa4cf3689591fd1f
@@ -1 +0,0 @@
1
- 237c7b2f001531e1d3d779bf63e4892b6d478a5cecc35b1055490911865222bcbe7df58b1ba6876d09372cc881b5a4aa34bb0875f710e82fbe29210e7428166d
@@ -1 +0,0 @@
1
- b8d18c9eea24ca929b6241e98fd7e141
@@ -1 +0,0 @@
1
- 5845c5b4a1040b9ffdd25e84cda718edb81db94e
@@ -1 +0,0 @@
1
- b25852c88b6be313daf9ae68265f1a7343b05c5c9bcd2a7cafcf39e2163dbb3b
@@ -1 +0,0 @@
1
- 35e3934e388e0769116c010427b5b811acc4f650a43f138e8bcbfaf95f75f8c2db4bda62879c581684efbfe6618c08c8389efafb55d659f118a108980c43bd5f