detox 20.0.11-prerelease.0 → 20.1.0-next-is-hittable-check.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. package/Detox-android/com/wix/detox/{20.0.11-prerelease.0/detox-20.0.11-prerelease.0-javadoc.jar → 20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0-javadoc.jar} +0 -0
  2. package/Detox-android/com/wix/detox/20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0-javadoc.jar.md5 +1 -0
  3. package/Detox-android/com/wix/detox/20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0-javadoc.jar.sha1 +1 -0
  4. package/Detox-android/com/wix/detox/20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0-javadoc.jar.sha256 +1 -0
  5. package/Detox-android/com/wix/detox/20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0-javadoc.jar.sha512 +1 -0
  6. package/Detox-android/com/wix/detox/{20.0.11-prerelease.0/detox-20.0.11-prerelease.0-sources.jar → 20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0-sources.jar} +0 -0
  7. package/Detox-android/com/wix/detox/20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0-sources.jar.md5 +1 -0
  8. package/Detox-android/com/wix/detox/20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0-sources.jar.sha1 +1 -0
  9. package/Detox-android/com/wix/detox/20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0-sources.jar.sha256 +1 -0
  10. package/Detox-android/com/wix/detox/20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0-sources.jar.sha512 +1 -0
  11. package/Detox-android/com/wix/detox/{20.0.11-prerelease.0/detox-20.0.11-prerelease.0.aar → 20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0.aar} +0 -0
  12. package/Detox-android/com/wix/detox/{20.0.11-prerelease.0/detox-20.0.11-prerelease.0.aar.md5 → 20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0.aar.md5} +0 -0
  13. package/Detox-android/com/wix/detox/{20.0.11-prerelease.0/detox-20.0.11-prerelease.0.aar.sha1 → 20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0.aar.sha1} +0 -0
  14. package/Detox-android/com/wix/detox/{20.0.11-prerelease.0/detox-20.0.11-prerelease.0.aar.sha256 → 20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0.aar.sha256} +0 -0
  15. package/Detox-android/com/wix/detox/{20.0.11-prerelease.0/detox-20.0.11-prerelease.0.aar.sha512 → 20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0.aar.sha512} +0 -0
  16. package/Detox-android/com/wix/detox/{20.0.11-prerelease.0/detox-20.0.11-prerelease.0.pom → 20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0.pom} +1 -1
  17. package/Detox-android/com/wix/detox/20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0.pom.md5 +1 -0
  18. package/Detox-android/com/wix/detox/20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0.pom.sha1 +1 -0
  19. package/Detox-android/com/wix/detox/20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0.pom.sha256 +1 -0
  20. package/Detox-android/com/wix/detox/20.1.0-next-is-hittable-check.0/detox-20.1.0-next-is-hittable-check.0.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-app.pro +4 -2
  29. package/index.d.ts +22 -6
  30. package/internals.d.ts +106 -28
  31. package/local-cli/cli.js +7 -5
  32. package/local-cli/init.js +1 -1
  33. package/local-cli/reset-lock-file.js +16 -0
  34. package/local-cli/test.js +4 -4
  35. package/local-cli/test.test.js +85 -37
  36. package/local-cli/testCommand/TestRunnerCommand.js +45 -30
  37. package/local-cli/utils/jestInternals.js +4 -1
  38. package/package.json +3 -3
  39. package/runners/jest/reporters/DetoxReporter.js +22 -2
  40. package/runners/jest/testEnvironment/index.js +83 -82
  41. package/runners/jest/testEnvironment/listeners/DetoxCoreListener.js +9 -24
  42. package/runners/jest/testEnvironment/listeners/DetoxPlatformFilterListener.js +1 -1
  43. package/src/DetoxWorker.js +0 -6
  44. package/src/artifacts/ArtifactsManager.js +0 -18
  45. package/src/configuration/composeLoggerConfig.js +2 -2
  46. package/src/configuration/composeRunnerConfig.js +7 -4
  47. package/src/devices/allocation/drivers/android/emulator/AVDValidator.js +4 -4
  48. package/src/devices/allocation/drivers/android/emulator/EmulatorAllocDriver.js +1 -1
  49. package/src/ipc/IPCClient.js +9 -5
  50. package/src/ipc/IPCServer.js +17 -13
  51. package/src/ipc/SessionState.js +3 -5
  52. package/src/logger/DetoxLogger.js +4 -6
  53. package/src/realms/DetoxContext.js +2 -8
  54. package/src/realms/DetoxInternalsFacade.js +1 -1
  55. package/src/realms/DetoxPrimaryContext.js +6 -8
  56. package/src/realms/DetoxSecondaryContext.js +2 -2
  57. package/src/symbols.js +2 -14
  58. package/src/utils/Timer.js +55 -38
  59. package/src/utils/errorUtils.js +20 -0
  60. package/Detox-android/com/wix/detox/20.0.11-prerelease.0/detox-20.0.11-prerelease.0-javadoc.jar.md5 +0 -1
  61. package/Detox-android/com/wix/detox/20.0.11-prerelease.0/detox-20.0.11-prerelease.0-javadoc.jar.sha1 +0 -1
  62. package/Detox-android/com/wix/detox/20.0.11-prerelease.0/detox-20.0.11-prerelease.0-javadoc.jar.sha256 +0 -1
  63. package/Detox-android/com/wix/detox/20.0.11-prerelease.0/detox-20.0.11-prerelease.0-javadoc.jar.sha512 +0 -1
  64. package/Detox-android/com/wix/detox/20.0.11-prerelease.0/detox-20.0.11-prerelease.0-sources.jar.md5 +0 -1
  65. package/Detox-android/com/wix/detox/20.0.11-prerelease.0/detox-20.0.11-prerelease.0-sources.jar.sha1 +0 -1
  66. package/Detox-android/com/wix/detox/20.0.11-prerelease.0/detox-20.0.11-prerelease.0-sources.jar.sha256 +0 -1
  67. package/Detox-android/com/wix/detox/20.0.11-prerelease.0/detox-20.0.11-prerelease.0-sources.jar.sha512 +0 -1
  68. package/Detox-android/com/wix/detox/20.0.11-prerelease.0/detox-20.0.11-prerelease.0.pom.md5 +0 -1
  69. package/Detox-android/com/wix/detox/20.0.11-prerelease.0/detox-20.0.11-prerelease.0.pom.sha1 +0 -1
  70. package/Detox-android/com/wix/detox/20.0.11-prerelease.0/detox-20.0.11-prerelease.0.pom.sha256 +0 -1
  71. package/Detox-android/com/wix/detox/20.0.11-prerelease.0/detox-20.0.11-prerelease.0.pom.sha512 +0 -1
@@ -46,9 +46,9 @@ class DetoxPrimaryContext extends DetoxContext {
46
46
  }
47
47
 
48
48
  //#region Internal members
49
- async [symbols.reportFailedTests](testFilePaths, permanent = false) {
49
+ async [symbols.reportTestResults](testResults) {
50
50
  if (this[_ipcServer]) {
51
- this[_ipcServer].onFailedTests({ testFilePaths, permanent });
51
+ this[_ipcServer].onReportTestResults({ testResults });
52
52
  }
53
53
  }
54
54
 
@@ -236,15 +236,14 @@ class DetoxPrimaryContext extends DetoxContext {
236
236
  const { rootDir } = this[symbols.config].artifacts;
237
237
 
238
238
  await fs.mkdirp(rootDir);
239
- const [out1Stream, out2Stream, out3Stream] = ['detox.log.jsonl', 'detox.log', 'detox.trace.json']
239
+ const [out1Stream, out2Stream] = ['detox.log', 'detox.trace.json']
240
240
  .map((filename) => fs.createWriteStream(path.join(rootDir, filename)));
241
241
 
242
242
  const mergedStream = streamUtils.uniteSessionLogs(sessionId);
243
243
 
244
244
  await Promise.all([
245
- pipe(mergedStream, streamUtils.writeJSONL(), out1Stream),
246
- pipe(mergedStream, streamUtils.debugStream(this[symbols.logger].config.options), out2Stream),
247
- pipe(mergedStream, streamUtils.chromeTraceStream(), streamUtils.writeJSON(), out3Stream),
245
+ pipe(mergedStream, streamUtils.debugStream(this[symbols.logger].config.options), out1Stream),
246
+ pipe(mergedStream, streamUtils.chromeTraceStream(), streamUtils.writeJSON(), out2Stream),
248
247
  ]);
249
248
  }
250
249
 
@@ -286,8 +285,7 @@ class DetoxPrimaryContext extends DetoxContext {
286
285
  return true;
287
286
  }
288
287
 
289
- const { failedTestFiles, testFilesToRetry } = this[$sessionState];
290
- return failedTestFiles.length + testFilesToRetry.length > 0;
288
+ return this[$sessionState].testResults.some(r => !r.success);
291
289
  }
292
290
 
293
291
  async[_resetLockFile]() {
@@ -29,9 +29,9 @@ class DetoxSecondaryContext extends DetoxContext {
29
29
  }
30
30
 
31
31
  //#region Internal members
32
- async [symbols.reportFailedTests](testFilePaths, permanent = false) {
32
+ async [symbols.reportTestResults](testResults) {
33
33
  if (this[_ipcClient]) {
34
- await this[_ipcClient].reportFailedTests(testFilePaths, permanent);
34
+ await this[_ipcClient].reportTestResults(testResults);
35
35
  } else {
36
36
  throw new DetoxInternalError('Detected an attempt to report failed tests using a non-initialized context.');
37
37
  }
package/src/symbols.js CHANGED
@@ -7,18 +7,12 @@
7
7
  * readonly installWorker: unique symbol;
8
8
  * readonly logger: unique symbol;
9
9
  * readonly onHookFailure: unique symbol;
10
- * readonly onHookStart: unique symbol;
11
- * readonly onHookSuccess: unique symbol;
12
10
  * readonly onRunDescribeFinish: unique symbol;
13
11
  * readonly onRunDescribeStart: unique symbol;
14
- * readonly onRunFinish: unique symbol;
15
- * readonly onRunStart: unique symbol;
16
12
  * readonly onTestDone: unique symbol;
17
13
  * readonly onTestFnFailure: unique symbol;
18
- * readonly onTestFnStart: unique symbol;
19
- * readonly onTestFnSuccess: unique symbol;
20
14
  * readonly onTestStart: unique symbol;
21
- * readonly reportFailedTests: unique symbol;
15
+ * readonly reportTestResults: unique symbol;
22
16
  * readonly resolveConfig: unique symbol;
23
17
  * readonly session: unique symbol;
24
18
  * readonly tracing: unique symbol;
@@ -28,22 +22,16 @@
28
22
  */
29
23
  module.exports = {
30
24
  //#region Lifecycle
31
- onRunStart: Symbol('run_start'),
32
25
  onRunDescribeStart: Symbol('run_describe_start'),
33
26
  onTestStart: Symbol('test_start'),
34
- onHookStart: Symbol('hook_start'),
35
27
  onHookFailure: Symbol('hook_failure'),
36
- onHookSuccess: Symbol('hook_success'),
37
- onTestFnStart: Symbol('test_fn_start'),
38
28
  onTestFnFailure: Symbol('test_fn_failure'),
39
- onTestFnSuccess: Symbol('test_fn_success'),
40
29
  onTestDone: Symbol('test_done'),
41
30
  onRunDescribeFinish: Symbol('run_describe_finish'),
42
- onRunFinish: Symbol('run_finish'),
43
31
  //#endregion
44
32
 
45
33
  //#region IPC
46
- reportFailedTests: Symbol('reportFailedTests'),
34
+ reportTestResults: Symbol('reportTestResults'),
47
35
  //#endregion
48
36
 
49
37
  //#region Main
@@ -1,65 +1,82 @@
1
- // @ts-nocheck
2
- const DetoxRuntimeError = require('../errors/DetoxRuntimeError');
1
+ const { DetoxRuntimeError, DetoxInternalError } = require('../errors');
3
2
 
4
3
  const Deferred = require('./Deferred');
5
4
 
6
5
  class Timer {
6
+ constructor() {
7
+ /** @private */
8
+ this._eta = NaN;
9
+ /** @private */
10
+ this._timeout = NaN;
11
+ /** @type {NodeJS.Timer | null} */
12
+ this._timeoutHandle = null;
13
+ /** @type {Deferred | null} */
14
+ this._timeoutDeferred = null;
15
+ }
16
+
17
+ clear() {
18
+ if (this._timeoutHandle) {
19
+ clearTimeout(this._timeoutHandle);
20
+ this._timeoutHandle = null;
21
+ }
22
+
23
+ this._eta = NaN;
24
+ this._timeout = NaN;
25
+ this._timeoutDeferred = null;
26
+ }
27
+
28
+ get expired() {
29
+ return this._timeoutDeferred ? this._timeoutDeferred.isResolved() : false;
30
+ }
31
+
7
32
  /**
8
- * @param {string} description - gives more context for thrown errors
9
33
  * @param {number} timeout - maximal allowed duration in milliseconds
10
34
  */
11
- constructor({ description, timeout }) {
12
- /** @private */
35
+ schedule(timeout) {
36
+ this.clear();
37
+
38
+ this._eta = Date.now() + timeout;
13
39
  this._timeout = timeout;
14
- /** @public */
15
- this.description = description;
40
+ this._timeoutDeferred = new Deferred();
41
+ this._timeoutHandle = setTimeout(() => {
42
+ this._timeoutDeferred.resolve();
43
+ }, this._timeout);
16
44
 
17
- this._schedule();
45
+ return this;
18
46
  }
19
47
 
20
- _schedule() {
21
- this._createdAt = Date.now();
22
- this._timeoutDeferred = new Deferred();
48
+ extend(ms) {
49
+ if (this.expired) {
50
+ return this.schedule(ms);
51
+ }
52
+
53
+ clearTimeout(this._timeoutHandle);
54
+ this._eta += ms;
55
+ this._timeout += ms;
23
56
  this._timeoutHandle = setTimeout(() => {
24
57
  this._timeoutDeferred.resolve();
25
- }, this._timeout);
58
+ }, this._eta - Date.now());
26
59
  }
27
60
 
28
- async run(action) {
61
+ async run(description, action) {
62
+ if (!this._timeoutDeferred) {
63
+ throw new DetoxInternalError('Cannot run a timer action from an uninitialized timer');
64
+ }
65
+
29
66
  const error = new DetoxRuntimeError({
30
- message: `Exceeded timeout of ${this._timeout}ms while ${this.description}`,
67
+ message: `Exceeded timeout of ${this._timeout}ms while ${description}`,
31
68
  noStack: true,
32
69
  });
33
70
 
71
+ if (this.expired) {
72
+ throw error;
73
+ }
74
+
34
75
  return Promise.race([
35
76
  this._timeoutDeferred.promise.then(() => { throw error; }),
36
77
  Promise.resolve().then(action),
37
78
  ]);
38
79
  }
39
-
40
- dispose() {
41
- clearTimeout(this._timeoutHandle);
42
- }
43
-
44
- reset(extraDelayMs) {
45
- this._timeout = extraDelayMs;
46
-
47
- if (this._timeoutDeferred.status !== Deferred.PENDING) {
48
- this._schedule();
49
- } else {
50
- clearTimeout(this._timeoutHandle);
51
- this._timeoutHandle = setTimeout(() => this._timeoutDeferred.resolve(), extraDelayMs);
52
- }
53
- }
54
-
55
- static async run({ description, timeout, fn }) {
56
- const timer = new Timer({ description, timeout });
57
- try {
58
- await timer.run(fn);
59
- } finally {
60
- timer.dispose();
61
- }
62
- }
63
80
  }
64
81
 
65
82
  module.exports = Timer;
@@ -1,4 +1,6 @@
1
1
  const { isError } = require('lodash');
2
+ const { deserializeError, serializeError } = require('serialize-error');
3
+
2
4
  const CLEAN_AT = /\n\s*at [\s\S]*/m;
3
5
 
4
6
  function filterErrorStack(error, predicate) {
@@ -38,9 +40,27 @@ function asError(error) {
38
40
  return isError(error) ? error : new Error(error);
39
41
  }
40
42
 
43
+ function serializeObjectWithError(obj, errorKey) {
44
+ if (obj[errorKey]) {
45
+ return { ...obj, [errorKey]: serializeError(obj[errorKey]) };
46
+ }
47
+
48
+ return obj;
49
+ }
50
+
51
+ function deserializeObjectWithError(obj, errorKey) {
52
+ if (typeof obj[errorKey] === 'object' && !(obj[errorKey] instanceof Error)) {
53
+ return { ...obj, [errorKey]: deserializeError(obj[errorKey]) };
54
+ }
55
+
56
+ return obj;
57
+ }
58
+
41
59
  module.exports = {
42
60
  asError,
43
61
  replaceErrorStack,
44
62
  filterErrorStack,
45
63
  createErrorWithUserStack,
64
+ serializeObjectWithError,
65
+ deserializeObjectWithError,
46
66
  };
@@ -1 +0,0 @@
1
- 3ac292deb3e60c7f80bb4e138e61decdacb32673
@@ -1 +0,0 @@
1
- 5d4183bf7d91e2375e527f7886a374bcdc227328e09fbe8c5705c82750cb5a80
@@ -1 +0,0 @@
1
- b149751c26413a63ea98c69ff3a4cb19a4d449b4b626e277ecdd1508b725ef5179dbcbb68aca4c4427651de00ebdf30efb517ea981302eb50ec4aed6e26c432f
@@ -1 +0,0 @@
1
- 35e4d7a489d2b9ce8bc3298d4e05ace381938968
@@ -1 +0,0 @@
1
- ba003c4e1afb9667e62a7d1e73db455775e1c082d6f3780d4ed172844e1dcec3
@@ -1 +0,0 @@
1
- a8254a5574422d06bbe1b256abf87d111b2fb56d82a1e82dd9a827407e95321a81279eaeaa79cc68e985d313f547e70b60251c374d784195d05d90c042f6e93a
@@ -1 +0,0 @@
1
- e1de6a89002fc682019853172c69830c
@@ -1 +0,0 @@
1
- 489bc3e987d66596a3d04353e50a9b7528a2ca8f
@@ -1 +0,0 @@
1
- 40f07b6d97cc2f6143e7bf5456fc0070af5ee9316a8585c4abdca7d796409d71
@@ -1 +0,0 @@
1
- 9eae7ac091f209b9ddd0282e6e8eb2dcef416c06d2906857f7d065276787c56cd7a14e19883c710f934005f5831890c33a66218dabb5dbfe6a9143089b6a3462