detox 19.13.0 → 20.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (236) hide show
  1. package/Detox-android/com/wix/detox/{19.13.0/detox-19.13.0-javadoc.jar → 20.0.0/detox-20.0.0-javadoc.jar} +0 -0
  2. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0-javadoc.jar.md5 +1 -0
  3. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0-javadoc.jar.sha1 +1 -0
  4. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0-javadoc.jar.sha256 +1 -0
  5. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0-javadoc.jar.sha512 +1 -0
  6. package/Detox-android/com/wix/detox/{19.13.0/detox-19.13.0-sources.jar → 20.0.0/detox-20.0.0-sources.jar} +0 -0
  7. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0-sources.jar.md5 +1 -0
  8. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0-sources.jar.sha1 +1 -0
  9. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0-sources.jar.sha256 +1 -0
  10. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0-sources.jar.sha512 +1 -0
  11. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0.aar +0 -0
  12. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0.aar.md5 +1 -0
  13. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0.aar.sha1 +1 -0
  14. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0.aar.sha256 +1 -0
  15. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0.aar.sha512 +1 -0
  16. package/Detox-android/com/wix/detox/{19.13.0/detox-19.13.0.pom → 20.0.0/detox-20.0.0.pom} +1 -1
  17. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0.pom.md5 +1 -0
  18. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0.pom.sha1 +1 -0
  19. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.0.pom.sha256 +1 -0
  20. package/Detox-android/com/wix/detox/20.0.0/detox-20.0.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/README.md +1 -1
  29. package/android/detox/src/full/java/com/wix/detox/Detox.java +2 -59
  30. package/android/detox/src/full/java/com/wix/detox/NotificationDataParser.kt +3 -3
  31. package/index.d.ts +354 -191
  32. package/index.js +1 -0
  33. package/internals.d.ts +298 -0
  34. package/internals.js +4 -0
  35. package/local-cli/build-framework-cache.js +2 -2
  36. package/local-cli/build.js +7 -8
  37. package/local-cli/build.test.js +46 -40
  38. package/local-cli/clean-framework-cache.js +3 -3
  39. package/local-cli/cli.js +8 -7
  40. package/local-cli/init.js +73 -68
  41. package/local-cli/rebuild-framework-cache.js +1 -1
  42. package/local-cli/reset-lock-file.js +16 -0
  43. package/local-cli/templates/jest.js +14 -36
  44. package/local-cli/test.js +24 -282
  45. package/local-cli/test.test.js +394 -648
  46. package/local-cli/testCommand/TestRunnerCommand.js +163 -0
  47. package/local-cli/{utils/testCommandArgs.js → testCommand/builder.js} +10 -36
  48. package/local-cli/testCommand/middlewares.js +66 -0
  49. package/local-cli/{utils → testCommand}/warnings.js +0 -13
  50. package/local-cli/utils/jestInternals.js +13 -2
  51. package/local-cli/utils/yargsUtils.js +67 -0
  52. package/package.json +32 -19
  53. package/runners/deprecation.js +45 -0
  54. package/runners/jest/JestCircusEnvironment.js +3 -38
  55. package/runners/jest/adapter.d.ts +4 -10
  56. package/runners/jest/adapter.js +3 -6
  57. package/runners/jest/assignReporter.d.ts +4 -1
  58. package/runners/jest/assignReporter.js +3 -6
  59. package/runners/jest/globalSetup.js +1 -0
  60. package/runners/jest/globalTeardown.js +1 -0
  61. package/runners/jest/index.d.ts +60 -0
  62. package/runners/jest/index.js +16 -0
  63. package/runners/jest/index.test.js +13 -0
  64. package/runners/jest/reporter.js +1 -0
  65. package/runners/jest/reporters/DetoxReporter.js +36 -0
  66. package/runners/jest/specReporter.d.ts +4 -9
  67. package/runners/jest/specReporter.js +3 -10
  68. package/runners/jest/streamlineReporter.js +3 -22
  69. package/runners/jest/testEnvironment/index.js +205 -0
  70. package/runners/jest/testEnvironment/listeners/DetoxCoreListener.js +166 -0
  71. package/runners/{jest-circus → jest/testEnvironment}/listeners/DetoxInitErrorListener.js +1 -1
  72. package/runners/jest/testEnvironment/listeners/DetoxPlatformFilterListener.js +27 -0
  73. package/runners/jest/{SpecReporterImpl.js → testEnvironment/listeners/SpecReporter.js} +61 -9
  74. package/runners/jest/testEnvironment/listeners/WorkerAssignReporter.js +30 -0
  75. package/runners/jest/testEnvironment/listeners/index.js +13 -0
  76. package/runners/{jest-circus → jest/testEnvironment}/utils/assertExistingContext.js +2 -2
  77. package/runners/jest/testEnvironment/utils/assertJestCircus27.js +70 -0
  78. package/runners/jest/testEnvironment/utils/assertJestCircus27.test.js +22 -0
  79. package/runners/jest/{utils → testEnvironment/utils}/getFullTestName.js +0 -0
  80. package/runners/jest/{utils → testEnvironment/utils}/hasTimedOut.js +0 -0
  81. package/runners/jest/{utils → testEnvironment/utils}/index.js +0 -0
  82. package/runners/jest/{utils → testEnvironment/utils}/stdout.js +0 -0
  83. package/runners/jest-circus/environment/index.js +6 -0
  84. package/runners/jest-circus/index.js +1 -10
  85. package/runners/jest-circus/reporter.js +1 -0
  86. package/runners/migration.js +37 -0
  87. package/runners/mocha/DetoxMochaAdapter.js +3 -35
  88. package/runners/mocha/adapter.d.ts +4 -7
  89. package/runners/mocha/adapter.js +3 -5
  90. package/src/DetoxWorker.js +327 -0
  91. package/src/android/interactions/native.js +2 -1
  92. package/src/artifacts/ArtifactsManager.js +51 -35
  93. package/src/artifacts/instruments/ios/SimulatorInstrumentsRecording.js +3 -3
  94. package/src/artifacts/log/ios/SimulatorLogRecording.js +1 -1
  95. package/src/artifacts/providers/index.js +0 -4
  96. package/src/artifacts/screenshot/SimulatorScreenshotPlugin.js +1 -1
  97. package/src/artifacts/templates/artifact/Artifact.js +1 -1
  98. package/src/artifacts/templates/plugin/ArtifactPlugin.js +1 -1
  99. package/src/artifacts/utils/buildDefaultArtifactsRootDirpath.js +2 -4
  100. package/src/artifacts/utils/temporaryPath.js +18 -5
  101. package/src/artifacts/video/SimulatorRecordVideoPlugin.js +1 -1
  102. package/src/client/AsyncWebSocket.js +8 -17
  103. package/src/client/Client.js +1 -1
  104. package/src/client/actions/actions.js +2 -2
  105. package/src/configuration/collectCliConfig.js +3 -16
  106. package/src/configuration/composeAppsConfig.js +12 -66
  107. package/src/configuration/composeArtifactsConfig.js +6 -32
  108. package/src/configuration/composeBehaviorConfig.js +3 -13
  109. package/src/configuration/composeDeviceConfig.js +38 -63
  110. package/src/configuration/composeLoggerConfig.js +59 -0
  111. package/src/configuration/composeRunnerConfig.js +127 -14
  112. package/src/configuration/composeSessionConfig.js +1 -3
  113. package/src/configuration/index.js +36 -30
  114. package/src/configuration/loadExternalConfig.js +1 -1
  115. package/src/configuration/utils/deviceAppTypes.js +0 -1
  116. package/src/devices/allocation/DeviceAllocator.js +4 -2
  117. package/src/devices/allocation/drivers/android/emulator/AVDValidator.js +1 -1
  118. package/src/devices/allocation/drivers/android/emulator/EmulatorAllocDriver.js +5 -3
  119. package/src/devices/allocation/drivers/android/emulator/EmulatorAllocationHelper.js +1 -1
  120. package/src/devices/allocation/drivers/android/emulator/EmulatorLauncher.js +3 -5
  121. package/src/devices/allocation/drivers/android/emulator/EmulatorVersionResolver.js +4 -6
  122. package/src/devices/allocation/drivers/android/emulator/launchEmulatorProcess.js +1 -1
  123. package/src/devices/allocation/drivers/android/genycloud/GenyInstanceAllocationHelper.js +1 -1
  124. package/src/devices/allocation/drivers/ios/SimulatorAllocDriver.js +1 -1
  125. package/src/devices/allocation/drivers/ios/SimulatorLauncher.js +3 -3
  126. package/src/devices/allocation/factories/index.js +0 -1
  127. package/src/devices/common/drivers/DeviceLauncher.js +2 -2
  128. package/src/devices/common/drivers/android/emulator/exec/EmulatorExec.js +1 -1
  129. package/src/devices/common/drivers/android/genycloud/services/GenyInstanceNaming.js +4 -9
  130. package/src/devices/common/drivers/android/genycloud/services/GenyRecipesService.js +1 -1
  131. package/src/devices/common/drivers/android/tools/EmulatorTelnet.js +1 -1
  132. package/src/devices/common/drivers/android/tools/FreeDeviceFinder.js +1 -1
  133. package/src/devices/common/drivers/ios/tools/AppleSimUtils.js +35 -10
  134. package/src/devices/lifecycle/GenyGlobalLifecycleHandler.js +13 -15
  135. package/src/devices/runtime/RuntimeDevice.js +85 -86
  136. package/src/devices/runtime/drivers/DeviceDriverBase.js +1 -1
  137. package/src/devices/runtime/drivers/android/AndroidDriver.js +3 -3
  138. package/src/devices/runtime/drivers/index.js +0 -1
  139. package/src/devices/runtime/drivers/ios/SimulatorDriver.js +4 -3
  140. package/src/devices/runtime/factories/ios.js +1 -8
  141. package/src/devices/runtime/utils/LaunchArgsEditor.js +4 -59
  142. package/src/devices/runtime/utils/Storage.js +4 -0
  143. package/src/environmentFactory.js +0 -8
  144. package/src/errors/DetoxConfigErrorComposer.js +92 -30
  145. package/src/errors/DetoxError.js +4 -0
  146. package/src/errors/DetoxRuntimeError.js +5 -5
  147. package/src/errors/index.js +2 -0
  148. package/src/ios/expectTwo.js +2 -1
  149. package/src/ipc/IPCClient.js +117 -0
  150. package/src/ipc/IPCServer.js +98 -0
  151. package/src/ipc/SessionState.js +62 -0
  152. package/src/logger/DetoxLogger.js +348 -0
  153. package/src/logger/index.js +5 -0
  154. package/src/logger/utils/BunyanLogger.js +76 -0
  155. package/src/logger/utils/CategoryThreadDispatcher.js +36 -0
  156. package/src/logger/utils/DetoxLogFinalizer.js +140 -0
  157. package/src/logger/utils/MessageStack.js +24 -0
  158. package/src/logger/utils/ThreadDispatcher.js +61 -0
  159. package/src/{utils → logger/utils}/customConsoleLogger.js +5 -4
  160. package/src/logger/utils/sanitizeBunyanContext.js +30 -0
  161. package/src/logger/utils/streamUtils.js +248 -0
  162. package/src/logger/utils/tracerLegacy.js +37 -0
  163. package/src/realms/DetoxConstants.js +13 -0
  164. package/src/realms/DetoxContext.js +183 -0
  165. package/src/realms/DetoxInternalsFacade.js +31 -0
  166. package/src/realms/DetoxPrimaryContext.js +261 -0
  167. package/src/realms/DetoxSecondaryContext.js +91 -0
  168. package/src/realms/index.js +10 -0
  169. package/src/realms/primary.js +3 -0
  170. package/src/realms/secondary.js +3 -0
  171. package/src/server/DetoxConnection.js +18 -23
  172. package/src/server/DetoxServer.js +7 -10
  173. package/src/server/DetoxSession.js +6 -6
  174. package/src/server/DetoxSessionManager.js +1 -1
  175. package/src/server/handlers/RegisteredConnectionHandler.js +1 -2
  176. package/src/symbols.js +50 -0
  177. package/src/utils/Timer.js +58 -33
  178. package/src/utils/argparse.js +11 -0
  179. package/src/utils/childProcess/exec.js +1 -1
  180. package/src/utils/childProcess/spawn.js +1 -1
  181. package/{local-cli/utils/misc.js → src/utils/envUtils.js} +0 -9
  182. package/src/utils/errorUtils.js +20 -0
  183. package/src/utils/logger.js +2 -162
  184. package/src/utils/shellUtils.js +18 -0
  185. package/src/utils/traceInvocationCall.js +21 -0
  186. package/src/utils/traceMethods.js +15 -0
  187. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0-javadoc.jar.md5 +0 -1
  188. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0-javadoc.jar.sha1 +0 -1
  189. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0-javadoc.jar.sha256 +0 -1
  190. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0-javadoc.jar.sha512 +0 -1
  191. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0-sources.jar.md5 +0 -1
  192. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0-sources.jar.sha1 +0 -1
  193. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0-sources.jar.sha256 +0 -1
  194. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0-sources.jar.sha512 +0 -1
  195. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0.aar +0 -0
  196. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0.aar.md5 +0 -1
  197. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0.aar.sha1 +0 -1
  198. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0.aar.sha256 +0 -1
  199. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0.aar.sha512 +0 -1
  200. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0.pom.md5 +0 -1
  201. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0.pom.sha1 +0 -1
  202. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0.pom.sha256 +0 -1
  203. package/Detox-android/com/wix/detox/19.13.0/detox-19.13.0.pom.sha512 +0 -1
  204. package/local-cli/templates/mocha.js +0 -32
  205. package/local-cli/utils/splitArgv.js +0 -107
  206. package/runners/integration.js +0 -16
  207. package/runners/jest/DetoxAdapterCircus.js +0 -60
  208. package/runners/jest/DetoxAdapterImpl.js +0 -81
  209. package/runners/jest/DetoxAdapterJasmine.js +0 -67
  210. package/runners/jest/DetoxStreamlineJestReporter.js +0 -98
  211. package/runners/jest/FailingTestsReporter.js +0 -16
  212. package/runners/jest/SpecReporterCircus.js +0 -51
  213. package/runners/jest/SpecReporterJasmine.js +0 -39
  214. package/runners/jest/WorkerAssignReporterCircus.js +0 -17
  215. package/runners/jest/WorkerAssignReporterImpl.js +0 -21
  216. package/runners/jest/WorkerAssignReporterJasmine.js +0 -15
  217. package/runners/jest/runnerInfo.js +0 -9
  218. package/runners/jest-circus/environment.js +0 -206
  219. package/runners/jest-circus/listeners/DetoxCoreListener.js +0 -113
  220. package/runners/jest-circus/utils/assertJestCircus26.js +0 -39
  221. package/runners/jest-circus/utils/wrapErrorWithNoopLifecycle.js +0 -14
  222. package/src/Detox.js +0 -317
  223. package/src/DetoxConstants.js +0 -13
  224. package/src/DetoxExportWrapper.js +0 -140
  225. package/src/artifacts/timeline/TimelineArtifactPlugin.js +0 -92
  226. package/src/configuration/utils/warnings.js +0 -12
  227. package/src/devices/allocation/drivers/NoneAllocDriver.js +0 -10
  228. package/src/devices/allocation/factories/none.js +0 -11
  229. package/src/index.js +0 -6
  230. package/src/utils/ChromeTracingExporter.js +0 -54
  231. package/src/utils/MissingDetox.js +0 -78
  232. package/src/utils/fakeTimestampsProvider.js +0 -9
  233. package/src/utils/getWorkerId.js +0 -5
  234. package/src/utils/lastFailedTests.js +0 -38
  235. package/src/utils/sh.js +0 -18
  236. package/src/utils/trace.js +0 -96
@@ -1,56 +1,81 @@
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 {
7
- /**
8
- * @param {string} description - gives more context for thrown errors
9
- * @param {number} timeout - maximal allowed duration in milliseconds
10
- */
11
- constructor({ description, timeout }) {
6
+ constructor() {
12
7
  /** @private */
13
- this._timeout = timeout;
14
- /** @public */
15
- this.description = description;
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
+ }
16
27
 
17
- this._schedule();
28
+ get expired() {
29
+ return this._timeoutDeferred ? this._timeoutDeferred.isResolved() : false;
18
30
  }
19
31
 
20
- _schedule() {
21
- this._createdAt = Date.now();
32
+ /**
33
+ * @param {number} timeout - maximal allowed duration in milliseconds
34
+ */
35
+ schedule(timeout) {
36
+ this.clear();
37
+
38
+ this._eta = Date.now() + timeout;
39
+ this._timeout = timeout;
22
40
  this._timeoutDeferred = new Deferred();
23
41
  this._timeoutHandle = setTimeout(() => {
24
42
  this._timeoutDeferred.resolve();
25
43
  }, this._timeout);
26
- }
27
-
28
- async run(action) {
29
- const error = new DetoxRuntimeError();
30
- delete error.stack;
31
44
 
32
- return Promise.race([
33
- this._timeoutDeferred.promise.then(() => {
34
- error.message = `Exceeded timeout of ${this._timeout}ms while ${this.description}`;
35
- throw error;
36
- }),
37
- Promise.resolve().then(action),
38
- ]);
45
+ return this;
39
46
  }
40
47
 
41
- dispose() {
48
+ extend(ms) {
49
+ if (this.expired) {
50
+ return this.schedule(ms);
51
+ }
52
+
42
53
  clearTimeout(this._timeoutHandle);
54
+ this._eta += ms;
55
+ this._timeout += ms;
56
+ this._timeoutHandle = setTimeout(() => {
57
+ this._timeoutDeferred.resolve();
58
+ }, this._eta - Date.now());
43
59
  }
44
60
 
45
- reset(extraDelayMs) {
46
- this._timeout = extraDelayMs;
61
+ async run(description, action) {
62
+ if (!this._timeoutDeferred) {
63
+ throw new DetoxInternalError('Cannot run a timer action from an uninitialized timer');
64
+ }
65
+
66
+ const error = new DetoxRuntimeError({
67
+ message: `Exceeded timeout of ${this._timeout}ms while ${description}`,
68
+ noStack: true,
69
+ });
47
70
 
48
- if (this._timeoutDeferred.status !== Deferred.PENDING) {
49
- this._schedule();
50
- } else {
51
- clearTimeout(this._timeoutHandle);
52
- this._timeoutHandle = setTimeout(() => this._timeoutDeferred.resolve(), extraDelayMs);
71
+ if (this.expired) {
72
+ throw error;
53
73
  }
74
+
75
+ return Promise.race([
76
+ this._timeoutDeferred.promise.then(() => { throw error; }),
77
+ Promise.resolve().then(action),
78
+ ]);
54
79
  }
55
80
  }
56
81
 
@@ -1,3 +1,5 @@
1
+ const path = require('path');
2
+
1
3
  const _ = require('lodash');
2
4
  const argv = require('minimist')(process.argv.slice(2));
3
5
 
@@ -81,9 +83,18 @@ function joinArgs(keyValues, options = DEFAULT_JOIN_ARGUMENTS_OPTIONS) {
81
83
  return argArray.join(' ');
82
84
  }
83
85
 
86
+ function getCurrentCommand() {
87
+ const cwd = process.cwd();
88
+
89
+ return process.argv.slice(1).map((value, index) => {
90
+ return index ? value : path.relative(cwd, value);
91
+ }).join(' ');
92
+ }
93
+
84
94
  module.exports = {
85
95
  getArgValue,
86
96
  getEnvValue,
87
97
  getFlag,
88
98
  joinArgs,
99
+ getCurrentCommand,
89
100
  };
@@ -3,7 +3,7 @@ const { exec } = require('child-process-promise');
3
3
  const _ = require('lodash');
4
4
 
5
5
  const DetoxRuntimeError = require('../../errors/DetoxRuntimeError');
6
- const rootLogger = require('../logger').child({ __filename });
6
+ const rootLogger = require('../logger').child({ cat: ['child-process', 'child-process-exec'] });
7
7
  const retry = require('../retry');
8
8
 
9
9
  const execsCounter = require('./opsCounter');
@@ -2,7 +2,7 @@
2
2
  const { spawn } = require('child-process-promise');
3
3
  const _ = require('lodash');
4
4
 
5
- const rootLogger = require('../logger').child({ __filename });
5
+ const rootLogger = require('../logger').child({ cat: ['child-process', 'child-process-spawn'] });
6
6
  const { escape } = require('../pipeCommands');
7
7
  const retry = require('../retry');
8
8
 
@@ -1,13 +1,5 @@
1
1
  const path = require('path');
2
2
 
3
- function getPlatformSpecificString(platform) {
4
- switch (platform) {
5
- case 'ios': return ':android:';
6
- case 'android': return ':ios:';
7
- default: return undefined;
8
- }
9
- }
10
-
11
3
  function printEnvironmentVariables(envObject) {
12
4
  return Object.entries(envObject).reduce((cli, [key, value]) => {
13
5
  if (value == null || value === '') {
@@ -33,7 +25,6 @@ function prependNodeModulesBinToPATH(env) {
33
25
  }
34
26
 
35
27
  module.exports = {
36
- getPlatformSpecificString,
37
28
  printEnvironmentVariables,
38
29
  prependNodeModulesBinToPATH,
39
30
  };
@@ -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,164 +1,4 @@
1
- // @ts-nocheck
2
-
3
- const path = require('path');
4
-
5
- const bunyan = require('bunyan');
6
- const bunyanDebugStream = require('bunyan-debug-stream');
7
- const fs = require('fs-extra');
8
- const onExit = require('signal-exit');
9
-
10
- const temporaryPath = require('../artifacts/utils/temporaryPath');
11
-
12
- const argparse = require('./argparse');
13
- const customConsoleLogger = require('./customConsoleLogger');
14
- const { shortFormat: shortDateFormat } = require('./dateUtils');
15
-
16
- function adaptLogLevelName(level) {
17
- switch (level) {
18
- case 'fatal':
19
- case 'error':
20
- case 'warn':
21
- case 'info':
22
- case 'debug':
23
- case 'trace':
24
- return level;
25
-
26
- case 'verbose':
27
- return 'debug';
28
-
29
- default:
30
- return 'info';
31
- }
32
- }
33
-
34
- function tryOverrideConsole(logger, global) {
35
- if (argparse.getArgValue('use-custom-logger') === 'true') {
36
- const userLogger = logger.child({ component: 'USER_LOG' });
37
- customConsoleLogger.overrideConsoleMethods(global.console, userLogger);
38
- }
39
- }
40
-
41
- function createPlainBunyanStream({ logPath, level, showDate = true }) {
42
- const options = {
43
- showDate: showDate,
44
- showLoggerName: true,
45
- showPid: true,
46
- showMetadata: false,
47
- basepath: __dirname,
48
- out: process.stderr,
49
- prefixers: {
50
- '__filename': (filename, { entry }) => {
51
- if (entry.event === 'USER_LOG') {
52
- return '';
53
- }
54
-
55
- if (entry.event === 'ERROR') {
56
- return `${filename}/${entry.event}`;
57
- }
58
-
59
- return entry.event ? entry.event : filename;
60
- },
61
- 'trackingId': id => ` #${id}`,
62
- 'cpid': pid => ` cpid=${pid}`,
63
- },
64
- };
65
-
66
- if (logPath) {
67
- options.colors = false;
68
- options.out = fs.createWriteStream(logPath, {
69
- flags: 'a',
70
- });
71
- }
72
-
73
- if (argparse.getFlag('--no-color')) {
74
- options.colors = false;
75
- }
76
-
77
- return {
78
- level,
79
- type: 'raw',
80
- stream: bunyanDebugStream(options),
81
- serializers: bunyanDebugStream.serializers,
82
- };
83
- }
84
-
85
1
  /**
86
- * @returns {Logger}
2
+ * @type {Detox.Logger}
87
3
  */
88
- function init() {
89
- const levelFromArg = argparse.getArgValue('loglevel', 'l');
90
- const level = adaptLogLevelName(levelFromArg);
91
- const debugStream = createPlainBunyanStream({ level, showDate: shortDateFormat });
92
- const bunyanStreams = [debugStream];
93
-
94
- let jsonFileStreamPath, plainFileStreamPath;
95
- if (!global.DETOX_CLI && !global.IS_RUNNING_DETOX_UNIT_TESTS) {
96
- {
97
- jsonFileStreamPath = temporaryPath.for.log();
98
- fs.ensureFileSync(jsonFileStreamPath);
99
- bunyanStreams.push({
100
- level: 'trace',
101
- path: jsonFileStreamPath,
102
- });
103
- }
104
- {
105
- plainFileStreamPath = temporaryPath.for.log();
106
- fs.ensureFileSync(plainFileStreamPath);
107
- bunyanStreams.push(createPlainBunyanStream({
108
- level: 'trace',
109
- logPath: plainFileStreamPath,
110
- }));
111
- }
112
-
113
- onExit(() => {
114
- try { fs.unlinkSync(jsonFileStreamPath); } catch (e) {}
115
- try { fs.unlinkSync(plainFileStreamPath); } catch (e) {}
116
- });
117
- }
118
-
119
- const logger = bunyan.createLogger({
120
- name: 'detox',
121
- streams: bunyanStreams,
122
- });
123
-
124
- if (jsonFileStreamPath) {
125
- logger.jsonFileStreamPath = jsonFileStreamPath;
126
- }
127
-
128
- if (plainFileStreamPath) {
129
- logger.plainFileStreamPath = plainFileStreamPath;
130
- }
131
-
132
- tryOverrideConsole(logger, global);
133
-
134
- logger.getDetoxLevel = () => level;
135
-
136
- logger.reinitialize = (global) => {
137
- if (jsonFileStreamPath) {
138
- fs.ensureFileSync(jsonFileStreamPath);
139
- }
140
-
141
- if (plainFileStreamPath) {
142
- fs.ensureFileSync(plainFileStreamPath);
143
- }
144
-
145
- tryOverrideConsole(logger, global);
146
- };
147
-
148
- const originalChild = logger.child.bind(logger);
149
-
150
- logger.child = (options) => {
151
- if (options && options.__filename) {
152
- return originalChild({
153
- ...options,
154
- __filename: path.basename(options.__filename)
155
- });
156
- }
157
-
158
- return originalChild(options);
159
- };
160
-
161
- return logger;
162
- }
163
-
164
- module.exports = init();
4
+ module.exports = require('../../internals').log;
@@ -1,7 +1,17 @@
1
+ const SPACE = ' ';
1
2
  const BACK_SLASH = '\\';
2
3
  const SINGLE_QUOTE = "'";
3
4
  const DOUBLE_QUOTE = '"';
4
5
 
6
+ function escapeSpacesCMD(str) {
7
+ return str.includes(' ') ? `"${str}"` : str;
8
+ }
9
+
10
+ const BACK_SLASH_SPACE = BACK_SLASH + SPACE;
11
+ function escapeSpacesShell(str) {
12
+ return str.replace(/ /g, BACK_SLASH_SPACE);
13
+ }
14
+
5
15
  const ESCAPED_DOUBLE_QUOTE = BACK_SLASH + DOUBLE_QUOTE;
6
16
  function escapeInDoubleQuotedString(fragment) {
7
17
  return fragment.replace(/"/g, ESCAPED_DOUBLE_QUOTE);
@@ -62,12 +72,20 @@ const autoEscape = isRunningInCMDEXE()
62
72
  /* istanbul ignore next */ ? autoEscapeCmd
63
73
  /* istanbul ignore next */ : autoEscapeShell;
64
74
 
75
+ const escapeSpaces = isRunningInCMDEXE()
76
+ /* istanbul ignore next */ ? escapeSpacesCMD
77
+ /* istanbul ignore next */ : escapeSpacesShell;
78
+
65
79
  module.exports = {
66
80
  escapeInDoubleQuotedString,
67
81
  escapeInDoubleQuotedRegexp,
68
82
  escapeWithSingleQuotedString,
69
83
  escapeWithDoubleQuotedString,
70
84
  isRunningInCMDEXE,
85
+ escapeSpaces: Object.assign(escapeSpaces, {
86
+ cmd: escapeSpacesCMD,
87
+ shell: escapeSpacesShell,
88
+ }),
71
89
  hasUnsafeChars: Object.assign(hasUnsafeChars, {
72
90
  cmd: hasUnsafeCMDChars,
73
91
  shell: hasUnsafeShellChars,
@@ -0,0 +1,21 @@
1
+ function _getCallStackTrace() {
2
+ return new Error().stack
3
+ .split('\n')
4
+ .slice(1) // Ignore Error message
5
+ .map(line => line
6
+ .replace(/^\s*at\s+/, '')
7
+ .replace(process.cwd(), '')
8
+ )
9
+ .filter(line => !line.includes('/detox/src')) // Ignore detox internal calls
10
+ .join('\n');
11
+ }
12
+
13
+ function invocationCall(logger, sectionName, invocation, action) {
14
+ return logger.trace.complete({
15
+ cat: 'ws-client,ws-client-invocation',
16
+ data: invocation,
17
+ stack: _getCallStackTrace(),
18
+ }, sectionName, action);
19
+ }
20
+
21
+ module.exports = invocationCall;
@@ -0,0 +1,15 @@
1
+ function traceMethods(logger, obj, methodNames) {
2
+ for (const name of methodNames) {
3
+ const originalMethod = obj[name];
4
+
5
+ obj[name] = function tracedMethod(...args) {
6
+ return logger.trace.complete(
7
+ { args },
8
+ name,
9
+ originalMethod.apply.bind(originalMethod, obj, args)
10
+ );
11
+ };
12
+ }
13
+ }
14
+
15
+ module.exports = traceMethods;
@@ -1 +0,0 @@
1
- a8ce440899ef9148a31b864c3094962d
@@ -1 +0,0 @@
1
- 174e8eaf7c6ea466dfa88a298dfd4d1deb637163
@@ -1 +0,0 @@
1
- 8cd8c4dd41157086419503abeb4cce716b5158e8f64de760d0c6a1ec9177840a
@@ -1 +0,0 @@
1
- 2777810ccd14eace29e3885089f2556669558d2290062f3b63f397fd29b3514683dad1df809a3faf6b622775ba13ce2eef069a47185336bdd1f4ad3e358e2a57
@@ -1 +0,0 @@
1
- 0dcf8c98531c3a397bb077037367d943
@@ -1 +0,0 @@
1
- 45419e1782517e6f66b27b21f61c9ebb2e4eefde
@@ -1 +0,0 @@
1
- cfddd6927b600e279e05e31dafc7dc65f16771e130192e95e49f462dfb81bb20
@@ -1 +0,0 @@
1
- 6c89ba08cab48a97f43e271147684bfbd6e0bed6a6d91ec7ec8c312c68b1438d0f39c5405dc9e04d0a6ed6fd71df4c36f2b89a027a36200faefdff60480402a1
@@ -1 +0,0 @@
1
- d01f4a6e5efdfc00a2a36597297e5157
@@ -1 +0,0 @@
1
- f025d605b8b455cc9c242f88e3cb85f62a62b190
@@ -1 +0,0 @@
1
- 4e18865814a0b6c26afb7c157d8aec507a9b9ec0f601e34b45937a7eb8e425d1
@@ -1 +0,0 @@
1
- abb4bae2959c784a4dfc0d2b10c044df4ec22a584bf40b204a9aa402b59d4d507d570d98f7d0bf0ce907232b66d074a14af2df2caf7341bf7ff25660ed0781e1
@@ -1 +0,0 @@
1
- e2ad754efdb027593e52727a78281695
@@ -1 +0,0 @@
1
- 8ab06eb57045034c591c3d818ba7eeec5cf6162d
@@ -1 +0,0 @@
1
- 0e3a9fbaea75253f5690ed2991f97a3fa09c4b93f1f67cc2d3561d96309ad862
@@ -1 +0,0 @@
1
- 616dda94b962b4be24c7012d27f515aa3d6675ac66d16d877a28e401a6e9ce6f27bc4bad9fe1ff43d9492b092c1a7d07982f1d0725ebc25cc8ed8c650b8a6626
@@ -1,32 +0,0 @@
1
- const firstTestContent = require('./firstTestContent');
2
-
3
- const mochaRcContent = JSON.stringify({
4
- recursive: true,
5
- timeout: 120000,
6
- bail: true,
7
- file: 'e2e/init.js',
8
- }, null, 4);
9
-
10
- const initjsContent = `const detox = require('detox');
11
- const adapter = require('detox/runners/mocha/adapter');
12
-
13
- before(async () => {
14
- await detox.init();
15
- });
16
-
17
- beforeEach(async function () {
18
- await adapter.beforeEach(this);
19
- });
20
-
21
- afterEach(async function () {
22
- await adapter.afterEach(this);
23
- });
24
-
25
- after(async () => {
26
- await detox.cleanup();
27
- });
28
- `;
29
-
30
- exports.initjs = initjsContent;
31
- exports.firstTest = firstTestContent;
32
- exports.runnerConfig = mochaRcContent;
@@ -1,107 +0,0 @@
1
- const _ = require('lodash');
2
-
3
- const { resolveJestCliArgs } = require('./jestInternals');
4
- const testCommandArgs = require('./testCommandArgs');
5
-
6
- function extractKnownKeys(yargsBuilder) {
7
- return Object.entries(yargsBuilder).reduce(
8
- (set, [key, option]) => {
9
- if (option.alias) {
10
- if (Array.isArray(option.alias)) {
11
- for (const value of option.alias) {
12
- set.add(value);
13
- }
14
- } else {
15
- set.add(option.alias);
16
- }
17
- }
18
-
19
- return set.add(key);
20
- },
21
- new Set()
22
- );
23
- }
24
-
25
- function disengageBooleanArgs(argv, booleanKeys) {
26
- const result = {};
27
- const passthrough = [];
28
-
29
- for (const entry of Object.entries(argv)) {
30
- const [key, value] = entry;
31
- if (key === '_' || key === '--') {
32
- continue;
33
- }
34
-
35
- const positiveKey = key.startsWith('no-') ? key.slice(3) : key;
36
- if (booleanKeys.has(positiveKey) && typeof value !== 'boolean') {
37
- result[positiveKey] = key === positiveKey;
38
- passthrough.push(value);
39
- } else {
40
- result[key] = value;
41
- }
42
- }
43
-
44
- return {
45
- specs: passthrough.concat(argv._),
46
- passthrough: {
47
- _: argv['--'] || [],
48
- ...result,
49
- },
50
- };
51
- }
52
-
53
- function getJestBooleanArgs() {
54
- return _(resolveJestCliArgs())
55
- .thru(args => args.options)
56
- .pickBy(({ type }) => type === 'boolean')
57
- .thru(extractKnownKeys)
58
- .value();
59
- }
60
-
61
- function getMochaBooleanArgs() {
62
- const metadata = require('mocha/lib/cli/run-option-metadata');
63
-
64
- return _(metadata.types.boolean)
65
- .flatMap(key => [key, ...(metadata.aliases[key] || [])])
66
- .thru(keys => new Set(keys))
67
- .value();
68
- }
69
-
70
- function splitDetoxArgv(argv) {
71
- const aliases = extractKnownKeys(testCommandArgs);
72
- const isDetoxArg = (_value, key) => aliases.has(key);
73
-
74
- const detoxArgs = _.pickBy(argv, isDetoxArg);
75
- const runnerArgs = _.omitBy(argv, isDetoxArg);
76
- runnerArgs._ = runnerArgs._.slice(1); // omit 'test' string, as in 'detox test'
77
- if (typeof detoxArgs['debug-synchronization'] === 'string') {
78
- const erroneousPassthrough = detoxArgs['debug-synchronization'];
79
- detoxArgs['debug-synchronization'] = 3000;
80
- runnerArgs._.unshift(erroneousPassthrough);
81
- }
82
-
83
- return { detoxArgs, runnerArgs };
84
- }
85
-
86
- function splitMochaArgv(argv) {
87
- return disengageBooleanArgs(argv, getMochaBooleanArgs());
88
- }
89
-
90
- function splitJestArgv(argv) {
91
- return realiasJestArgv(disengageBooleanArgs(argv, getJestBooleanArgs()));
92
- }
93
-
94
- function realiasJestArgv({ specs, passthrough }) {
95
- if (passthrough.hasOwnProperty('t')) {
96
- passthrough.testNamePattern = passthrough.t;
97
- delete passthrough.t;
98
- }
99
-
100
- return { specs, passthrough };
101
- }
102
-
103
- module.exports = {
104
- detox: splitDetoxArgv,
105
- jest: splitJestArgv,
106
- mocha: splitMochaArgv,
107
- };
@@ -1,16 +0,0 @@
1
- module.exports = {
2
- lifecycle: {
3
- onRunStart: Symbol('run_start'),
4
- onRunDescribeStart: Symbol('run_describe_start'),
5
- onTestStart: Symbol('test_start'),
6
- onHookStart: Symbol('hook_start'),
7
- onHookFailure: Symbol('hook_failure'),
8
- onHookSuccess: Symbol('hook_success'),
9
- onTestFnStart: Symbol('test_fn_start'),
10
- onTestFnFailure: Symbol('test_fn_failure'),
11
- onTestFnSuccess: Symbol('test_fn_success'),
12
- onTestDone: Symbol('test_done'),
13
- onRunDescribeFinish: Symbol('run_describe_finish'),
14
- onRunFinish: Symbol('run_finish'),
15
- },
16
- };