detox 20.0.4-breaking.new-global-lifecycle.0 → 20.0.7-prerelease.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. package/Detox-android/com/wix/detox/{20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0-javadoc.jar → 20.0.7-prerelease.0/detox-20.0.7-prerelease.0-javadoc.jar} +0 -0
  2. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0-javadoc.jar.md5 +1 -0
  3. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0-javadoc.jar.sha1 +1 -0
  4. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0-javadoc.jar.sha256 +1 -0
  5. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0-javadoc.jar.sha512 +1 -0
  6. package/Detox-android/com/wix/detox/{20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0-sources.jar → 20.0.7-prerelease.0/detox-20.0.7-prerelease.0-sources.jar} +0 -0
  7. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0-sources.jar.md5 +1 -0
  8. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0-sources.jar.sha1 +1 -0
  9. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0-sources.jar.sha256 +1 -0
  10. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0-sources.jar.sha512 +1 -0
  11. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0.aar +0 -0
  12. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0.aar.md5 +1 -0
  13. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0.aar.sha1 +1 -0
  14. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0.aar.sha256 +1 -0
  15. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0.aar.sha512 +1 -0
  16. package/Detox-android/com/wix/detox/{20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0.pom → 20.0.7-prerelease.0/detox-20.0.7-prerelease.0.pom} +1 -1
  17. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0.pom.md5 +1 -0
  18. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0.pom.sha1 +1 -0
  19. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.0.pom.sha256 +1 -0
  20. package/Detox-android/com/wix/detox/20.0.7-prerelease.0/detox-20.0.7-prerelease.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 -0
  29. package/android/detox/src/full/java/com/wix/detox/DetoxCrashHandler.kt +1 -1
  30. package/android/detox/src/full/java/com/wix/detox/LaunchArgs.java +9 -0
  31. package/android/detox/src/full/java/com/wix/detox/TestEngineFacade.kt +1 -1
  32. package/android/detox/src/full/java/com/wix/detox/reactnative/ReactNativeExtension.kt +15 -2
  33. package/android/detox/src/full/java/com/wix/detox/reactnative/ReactNativeIdlingResources.kt +43 -38
  34. package/index.d.ts +58 -40
  35. package/internals.d.ts +63 -15
  36. package/local-cli/cli.js +1 -1
  37. package/local-cli/rebuild-framework-cache.js +1 -1
  38. package/local-cli/test.js +3 -2
  39. package/local-cli/test.test.js +1 -1
  40. package/local-cli/testCommand/TestRunnerCommand.js +10 -7
  41. package/package.json +5 -4
  42. package/runners/jest/globalSetup.js +1 -1
  43. package/runners/jest/globalTeardown.js +1 -1
  44. package/runners/jest/testEnvironment/index.js +36 -18
  45. package/runners/jest/testEnvironment/listeners/DetoxCoreListener.js +76 -41
  46. package/runners/jest/testEnvironment/listeners/SpecReporter.js +1 -1
  47. package/runners/jest/testEnvironment/listeners/WorkerAssignReporter.js +1 -1
  48. package/src/DetoxWorker.js +4 -7
  49. package/src/android/core/NativeElement.js +56 -20
  50. package/src/android/core/NativeExpect.js +28 -9
  51. package/src/android/interactions/native.js +24 -18
  52. package/src/artifacts/ArtifactsManager.js +8 -23
  53. package/src/artifacts/instruments/ios/SimulatorInstrumentsRecording.js +3 -3
  54. package/src/artifacts/log/ios/SimulatorLogRecording.js +1 -1
  55. package/src/artifacts/screenshot/SimulatorScreenshotPlugin.js +1 -1
  56. package/src/artifacts/templates/artifact/Artifact.js +1 -1
  57. package/src/artifacts/templates/plugin/ArtifactPlugin.js +1 -1
  58. package/src/artifacts/timeline/TimelineContextTypes.js +7 -0
  59. package/src/artifacts/utils/temporaryPath.js +18 -7
  60. package/src/artifacts/video/SimulatorRecordVideoPlugin.js +1 -1
  61. package/src/client/AsyncWebSocket.js +8 -17
  62. package/src/client/Client.js +19 -2
  63. package/src/configuration/collectCliConfig.js +1 -1
  64. package/src/configuration/composeDeviceConfig.js +1 -1
  65. package/src/configuration/composeLoggerConfig.js +17 -8
  66. package/src/configuration/composeRunnerConfig.js +1 -1
  67. package/src/configuration/index.js +5 -1
  68. package/src/configuration/loadExternalConfig.js +1 -1
  69. package/src/devices/allocation/DeviceAllocator.js +3 -2
  70. package/src/devices/allocation/drivers/android/emulator/AVDValidator.js +1 -1
  71. package/src/devices/allocation/drivers/android/emulator/EmulatorAllocDriver.js +3 -2
  72. package/src/devices/allocation/drivers/android/emulator/EmulatorAllocationHelper.js +1 -1
  73. package/src/devices/allocation/drivers/android/emulator/EmulatorLauncher.js +3 -2
  74. package/src/devices/allocation/drivers/android/emulator/EmulatorVersionResolver.js +4 -6
  75. package/src/devices/allocation/drivers/android/emulator/launchEmulatorProcess.js +1 -1
  76. package/src/devices/allocation/drivers/android/genycloud/GenyInstanceAllocationHelper.js +1 -1
  77. package/src/devices/common/drivers/android/genycloud/services/GenyInstanceNaming.js +3 -3
  78. package/src/devices/common/drivers/android/genycloud/services/GenyRecipesService.js +1 -1
  79. package/src/devices/common/drivers/android/tools/EmulatorTelnet.js +1 -1
  80. package/src/devices/common/drivers/android/tools/FreeDeviceFinder.js +1 -1
  81. package/src/devices/common/drivers/android/tools/MonitoredInstrumentation.js +1 -1
  82. package/src/devices/common/drivers/ios/tools/AppleSimUtils.js +4 -2
  83. package/src/devices/lifecycle/GenyGlobalLifecycleHandler.js +9 -13
  84. package/src/devices/runtime/RuntimeDevice.js +9 -12
  85. package/src/devices/runtime/drivers/DeviceDriverBase.js +1 -1
  86. package/src/devices/runtime/drivers/android/AndroidDriver.js +10 -2
  87. package/src/devices/runtime/drivers/ios/SimulatorDriver.js +1 -1
  88. package/src/ios/expectTwo.js +152 -67
  89. package/src/ipc/IPCClient.js +3 -8
  90. package/src/ipc/IPCServer.js +11 -11
  91. package/src/ipc/{state.js → SessionState.js} +23 -50
  92. package/src/logger/DetoxLogger.js +268 -155
  93. package/src/logger/index.js +4 -0
  94. package/src/logger/utils/BunyanLogger.js +72 -0
  95. package/src/logger/utils/CategoryThreadDispatcher.js +58 -0
  96. package/src/logger/utils/MessageStack.js +24 -0
  97. package/src/logger/{TraceThreadDispatcher.js → utils/ThreadDispatcher.js} +34 -5
  98. package/src/logger/{customConsoleLogger.js → utils/customConsoleLogger.js} +4 -4
  99. package/src/logger/utils/sanitizeBunyanContext.js +28 -0
  100. package/src/logger/utils/tracerLegacy.js +48 -0
  101. package/src/realms/DetoxContext.js +65 -57
  102. package/src/realms/DetoxInternalsFacade.js +7 -5
  103. package/src/realms/DetoxPrimaryContext.js +125 -40
  104. package/src/realms/DetoxSecondaryContext.js +24 -29
  105. package/src/server/DetoxConnection.js +18 -23
  106. package/src/server/DetoxServer.js +7 -10
  107. package/src/server/DetoxSession.js +6 -6
  108. package/src/server/DetoxSessionManager.js +1 -1
  109. package/src/server/handlers/RegisteredConnectionHandler.js +1 -2
  110. package/src/symbols.js +12 -8
  111. package/src/utils/childProcess/exec.js +1 -1
  112. package/src/utils/childProcess/spawn.js +1 -1
  113. package/src/utils/errorUtils.js +4 -3
  114. package/src/utils/invocationTraceDescriptions.js +43 -0
  115. package/src/utils/streamUtils.js +10 -11
  116. package/src/utils/trace.js +2 -18
  117. package/src/utils/traceMethods.js +15 -0
  118. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0-javadoc.jar.md5 +0 -1
  119. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0-javadoc.jar.sha1 +0 -1
  120. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0-javadoc.jar.sha256 +0 -1
  121. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0-javadoc.jar.sha512 +0 -1
  122. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0-sources.jar.md5 +0 -1
  123. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0-sources.jar.sha1 +0 -1
  124. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0-sources.jar.sha256 +0 -1
  125. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0-sources.jar.sha512 +0 -1
  126. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0.aar +0 -0
  127. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0.aar.md5 +0 -1
  128. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0.aar.sha1 +0 -1
  129. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0.aar.sha256 +0 -1
  130. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0.aar.sha512 +0 -1
  131. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0.pom.md5 +0 -1
  132. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0.pom.sha1 +0 -1
  133. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0.pom.sha256 +0 -1
  134. package/Detox-android/com/wix/detox/20.0.4-breaking.new-global-lifecycle.0/detox-20.0.4-breaking.new-global-lifecycle.0.pom.sha512 +0 -1
  135. package/src/logger/DetoxTraceEventBuilder.js +0 -21
  136. package/src/logger/DetoxTracer.js +0 -133
  137. package/src/utils/ChromeTracingExporter.js +0 -54
@@ -9,7 +9,7 @@ const DetoxRuntimeError = require('../errors/DetoxRuntimeError');
9
9
  const failedToReachTheApp = require('../errors/longreads/failedToReachTheApp');
10
10
  const Deferred = require('../utils/Deferred');
11
11
  const { asError, createErrorWithUserStack, replaceErrorStack } = require('../utils/errorUtils');
12
- const log = require('../utils/logger').child({ __filename });
12
+ const log = require('../utils/logger').child({ cat: 'ws-client,ws' });
13
13
 
14
14
  const AsyncWebSocket = require('./AsyncWebSocket');
15
15
  const actions = require('./actions/actions');
@@ -34,6 +34,7 @@ class Client {
34
34
  this._slowInvocationStatusHandle = null;
35
35
  this._whenAppIsConnected = this._invalidState('before connecting to the app');
36
36
  this._whenAppIsReady = this._whenAppIsConnected;
37
+ this._whenAppDisconnected = Deferred.resolved();
37
38
  this._isCleaningUp = false;
38
39
  this._pendingAppCrash = null;
39
40
  this._appTerminationHandle = null;
@@ -201,6 +202,11 @@ class Client {
201
202
  }
202
203
  }
203
204
 
205
+ /** @async */
206
+ waitUntilDisconnected() {
207
+ return this._whenAppDisconnected.promise;
208
+ }
209
+
204
210
  async waitForBackground() {
205
211
  await this.sendAction(new actions.WaitForBackground());
206
212
  }
@@ -301,6 +307,8 @@ class Client {
301
307
  } else {
302
308
  this._whenAppIsConnected = Deferred.resolved();
303
309
  }
310
+
311
+ this._whenAppDisconnected = new Deferred();
304
312
  }
305
313
 
306
314
  _onAppReady() {
@@ -320,6 +328,10 @@ class Client {
320
328
  }
321
329
 
322
330
  _onBeforeAppCrash({ params }) {
331
+ if (this._pendingAppCrash) {
332
+ return;
333
+ }
334
+
323
335
  this._pendingAppCrash = new DetoxRuntimeError({
324
336
  message: 'The app has crashed, see the details below:',
325
337
  debugInfo: params.errorDetails,
@@ -338,10 +350,15 @@ class Client {
338
350
  this._whenAppIsReady = this._whenAppIsConnected;
339
351
 
340
352
  if (this._pendingAppCrash) {
353
+ this._whenAppDisconnected.reject(this._pendingAppCrash);
341
354
  this._asyncWebSocket.rejectAll(this._pendingAppCrash);
342
355
  this._pendingAppCrash = null;
343
356
  } else if (this._asyncWebSocket.hasPendingActions()) {
344
- this._asyncWebSocket.rejectAll(new DetoxRuntimeError('The app has unexpectedly disconnected from Detox server.'));
357
+ const error = new DetoxRuntimeError('The app has unexpectedly disconnected from Detox server.');
358
+ this._asyncWebSocket.rejectAll(error);
359
+ this._whenAppDisconnected.resolve();
360
+ } else {
361
+ this._whenAppDisconnected.resolve();
345
362
  }
346
363
  }
347
364
 
@@ -1,7 +1,7 @@
1
1
  const _ = require('lodash');
2
2
 
3
3
  const argparse = require('../utils/argparse');
4
- const log = require('../utils/logger').child({ __filename });
4
+ const log = require('../utils/logger').child({ cat: 'config' });
5
5
 
6
6
  const { DEVICE_LAUNCH_ARGS_GENERIC_DEPRECATION } = require('./utils/warnings');
7
7
 
@@ -2,7 +2,7 @@
2
2
  const _ = require('lodash');
3
3
 
4
4
  const environmentFactory = require('../environmentFactory');
5
- const log = require('../utils/logger').child({ __filename });
5
+ const log = require('../utils/logger').child({ cat: 'config' });
6
6
 
7
7
  /**
8
8
  * @param {DetoxConfigErrorComposer} opts.errorComposer
@@ -7,25 +7,34 @@ const { castLevel, defaultOptions } = require('../logger/DetoxLogger');
7
7
  * @param {Detox.DetoxConfig} opts.globalConfig
8
8
  * @param {Detox.DetoxConfiguration} opts.localConfig
9
9
  * @param {*} opts.cliConfig
10
- * @returns {Detox.DetoxLoggerConfig}
11
10
  */
12
11
  function composeLoggerConfig(opts) {
13
12
  const { globalConfig, localConfig, cliConfig } = opts;
14
13
 
15
- return _.merge(
14
+ const items = [
16
15
  {
17
16
  level: 'info',
18
17
  overrideConsole: 'sandbox',
19
- options: {
20
- ...defaultOptions,
21
- prefixers: {
22
- ...defaultOptions.prefixers,
23
- },
24
- },
18
+ options: defaultOptions,
25
19
  },
26
20
  globalConfig.logger,
27
21
  localConfig.logger,
28
22
  adaptCLI(cliConfig),
23
+ ];
24
+
25
+ return items.reduce(
26
+ /**
27
+ * @param {Partial<Detox.DetoxLoggerConfig>} acc
28
+ * @param config
29
+ */
30
+ (acc, config) => {
31
+ if (!config) return acc;
32
+ const { options } = config;
33
+ return _.merge(acc, {
34
+ options: typeof options === 'function' ? options(acc) : options
35
+ });
36
+ },
37
+ items.reduce((a, b) => _.merge(a, _.omit(b, 'options')))
29
38
  );
30
39
  }
31
40
 
@@ -8,7 +8,7 @@ const log = require('../utils/logger');
8
8
  * @param {object} opts
9
9
  * @param {Detox.DetoxConfig} opts.globalConfig
10
10
  * @param {Detox.DetoxConfiguration} opts.localConfig
11
- * @param {DetoxInternals.DetoxCLIConfig} opts.cliConfig
11
+ * @param {DetoxInternals.CLIConfig} opts.cliConfig
12
12
  * @param {Record<string, any>} opts.testRunnerArgv
13
13
  * @param {import('../errors/DetoxConfigErrorComposer')} opts.errorComposer
14
14
  * @returns {Detox.DetoxTestRunnerConfig} opts.testRunnerArgv
@@ -106,7 +106,6 @@ async function composeDetoxConfig({
106
106
 
107
107
  const result = {
108
108
  configurationName,
109
- errorComposer,
110
109
 
111
110
  apps: appsConfig,
112
111
  artifacts: artifactsConfig,
@@ -118,6 +117,11 @@ async function composeDetoxConfig({
118
117
  session: sessionConfig,
119
118
  };
120
119
 
120
+ Object.defineProperty(result, 'errorComposer', {
121
+ enumerable: false,
122
+ value: errorComposer,
123
+ });
124
+
121
125
  return result;
122
126
  }
123
127
 
@@ -6,7 +6,7 @@ const fs = require('fs-extra');
6
6
  const _ = require('lodash');
7
7
  const resolveFrom = require('resolve-from');
8
8
 
9
- const log = require('../utils/logger').child({ __filename });
9
+ const log = require('../utils/logger').child({ cat: 'config' });
10
10
 
11
11
  async function locateExternalConfig(cwd) {
12
12
  return findUp([
@@ -1,5 +1,6 @@
1
1
  // @ts-nocheck
2
- const { traceMethods } = require('../../utils/trace');
2
+ const log = require('../../utils/logger').child({ cat: 'device' });
3
+ const traceMethods = require('../../utils/traceMethods');
3
4
 
4
5
  class DeviceAllocator {
5
6
  /**
@@ -7,7 +8,7 @@ class DeviceAllocator {
7
8
  */
8
9
  constructor(allocationDriver) {
9
10
  this._driver = allocationDriver;
10
- traceMethods(this, 'device', ['allocate', 'free']);
11
+ traceMethods(log, this, ['allocate', 'free']);
11
12
  }
12
13
 
13
14
  /**
@@ -2,7 +2,7 @@ const _ = require('lodash');
2
2
 
3
3
  const DetoxRuntimeError = require('../../../../../errors/DetoxRuntimeError');
4
4
  const environment = require('../../../../../utils/environment');
5
- const logger = require('../../../../../utils/logger').child({ __filename });
5
+ const logger = require('../../../../../utils/logger').child({ cat: 'device' });
6
6
 
7
7
  const REQUIRED_EMULATOR_MAJOR = 29;
8
8
 
@@ -1,7 +1,8 @@
1
1
  // @ts-nocheck
2
2
  const _ = require('lodash');
3
3
 
4
- const { traceMethods } = require('../../../../../utils/trace');
4
+ const log = require('../../../../../utils/logger').child({ cat: 'device' });
5
+ const traceMethods = require('../../../../../utils/traceMethods');
5
6
  const AndroidEmulatorCookie = require('../../../../cookies/AndroidEmulatorCookie');
6
7
  const AllocationDriverBase = require('../../AllocationDriverBase');
7
8
 
@@ -23,7 +24,7 @@ class EmulatorAllocDriver extends AllocationDriverBase {
23
24
  this._emulatorLauncher = emulatorLauncher;
24
25
  this._allocationHelper = allocationHelper;
25
26
 
26
- traceMethods(this, 'device', ['_launchEmulator']);
27
+ traceMethods(log, this, ['_launchEmulator']);
27
28
  }
28
29
 
29
30
  /**
@@ -1,4 +1,4 @@
1
- const logger = require('../../../../../utils/logger').child({ __filename });
1
+ const logger = require('../../../../../utils/logger').child({ cat: 'device' });
2
2
  const DeviceAllocationHelper = require('../../../../common/drivers/DeviceAllocationHelper');
3
3
 
4
4
  const DetoxEmulatorsPortRange = {
@@ -1,7 +1,8 @@
1
1
  // @ts-nocheck
2
2
  const { DetoxRuntimeError } = require('../../../../../errors');
3
+ const log = require('../../../../../utils/logger').child({ cat: 'device' });
3
4
  const retry = require('../../../../../utils/retry');
4
- const { traceMethods } = require('../../../../../utils/trace');
5
+ const traceMethods = require('../../../../../utils/traceMethods');
5
6
  const DeviceLauncher = require('../../../../common/drivers/DeviceLauncher');
6
7
  const { LaunchCommand } = require('../../../../common/drivers/android/emulator/exec/EmulatorExec');
7
8
 
@@ -14,7 +15,7 @@ class EmulatorLauncher extends DeviceLauncher {
14
15
  super(eventEmitter);
15
16
  this._adb = adb;
16
17
  this._emulatorExec = emulatorExec;
17
- traceMethods(this, 'device', ['_awaitEmulatorBoot']);
18
+ traceMethods(log, this, ['_awaitEmulatorBoot']);
18
19
  }
19
20
 
20
21
  /**
@@ -1,8 +1,6 @@
1
- const log = require('../../../../../utils/logger').child({ __filename });
1
+ const log = require('../../../../../utils/logger').child({ cat: 'device' });
2
2
  const { QueryVersionCommand } = require('../../../../common/drivers/android/emulator/exec/EmulatorExec');
3
3
 
4
- const EMU_BIN_VERSION_DETECT_EV = 'EMU_BIN_VERSION_DETECT';
5
-
6
4
  class EmulatorVersionResolver {
7
5
  constructor(emulatorExec) {
8
6
  this._emulatorExec = emulatorExec;
@@ -21,18 +19,18 @@ class EmulatorVersionResolver {
21
19
  try {
22
20
  rawOutput = await this._emulatorExec.exec(new QueryVersionCommand({ headless })) || '';
23
21
  } catch (error) {
24
- log.error({ event: EMU_BIN_VERSION_DETECT_EV, success: false, error }, 'Could not detect emulator binary version', error);
22
+ log.error({ success: false, error }, 'Could not detect emulator binary version', error);
25
23
  return null;
26
24
  }
27
25
 
28
26
  const matches = rawOutput.match(/Android emulator version ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]*)/);
29
27
  if (!matches) {
30
- log.warn({ event: EMU_BIN_VERSION_DETECT_EV, success: false }, 'Could not detect emulator binary version, got:', rawOutput);
28
+ log.warn({ success: false }, 'Could not detect emulator binary version, got:', rawOutput);
31
29
  return null;
32
30
  }
33
31
 
34
32
  const version = this._parseVersionString(matches[1]);
35
- log.debug({ event: EMU_BIN_VERSION_DETECT_EV, success: true }, 'Detected emulator binary version', version);
33
+ log.debug({ success: true }, 'Detected emulator binary version', version);
36
34
  return version;
37
35
  }
38
36
 
@@ -3,7 +3,7 @@ const fs = require('fs');
3
3
  const _ = require('lodash');
4
4
  const { Tail } = require('tail');
5
5
 
6
- const unitLogger = require('../../../../../utils/logger').child({ __filename });
6
+ const unitLogger = require('../../../../../utils/logger').child({ cat: 'device' });
7
7
 
8
8
  function launchEmulatorProcess(emulatorName, emulatorExec, emulatorLaunchCommand) {
9
9
  let childProcessOutput;
@@ -1,5 +1,5 @@
1
1
  // @ts-nocheck
2
- const logger = require('../../../../../utils/logger').child({ __filename });
2
+ const logger = require('../../../../../utils/logger').child({ cat: 'device' });
3
3
  const DeviceAllocationHelper = require('../../../../common/drivers/DeviceAllocationHelper');
4
4
 
5
5
  const { ALLOCATE_DEVICE_LOG_EVT } = DeviceAllocationHelper;
@@ -1,9 +1,9 @@
1
- const session = () => require('../../../../../../../internals').session;
1
+ const internals = () => require('../../../../../../../internals');
2
2
 
3
3
  class GenyInstanceNaming {
4
4
  generateName() {
5
- const { id, workerId } = session();
6
- return `Detox.${id}.${workerId}`;
5
+ const { session, worker } = internals();
6
+ return `Detox.${session.id}.${worker.id}`;
7
7
  }
8
8
 
9
9
  isFamilial(name) {
@@ -1,4 +1,4 @@
1
- const logger = require('../../../../../../utils/logger').child({ __filename });
1
+ const logger = require('../../../../../../utils/logger').child({ cat: 'device' });
2
2
 
3
3
  const Recipe = require('./dto/GenyRecipe');
4
4
 
@@ -5,7 +5,7 @@ const path = require('path');
5
5
  const fs = require('fs-extra');
6
6
  const Telnet = require('telnet-client');
7
7
 
8
- const log = require('../../../../../utils/logger').child({ __filename });
8
+ const log = require('../../../../../utils/logger').child({ cat: 'device' });
9
9
 
10
10
  class EmulatorTelnet {
11
11
  constructor() {
@@ -1,4 +1,4 @@
1
- const log = require('../../../../../utils/logger').child({ __filename });
1
+ const log = require('../../../../../utils/logger').child({ cat: 'device' });
2
2
 
3
3
  const DEVICE_LOOKUP_LOG_EVT = 'DEVICE_LOOKUP';
4
4
 
@@ -77,7 +77,7 @@ class MonitoredInstrumentation {
77
77
  'while it was waiting for "ready" message (over WebSocket) ' +
78
78
  'from the instrumentation process.',
79
79
  debugInfo: this.instrumentationStackTrace
80
- ? `Native stacktrace dump: ${this.instrumentationStackTrace}`
80
+ ? `Native stacktrace dump:\n${this.instrumentationStackTrace}`
81
81
  : '',
82
82
  });
83
83
  }
@@ -7,7 +7,7 @@ const DetoxRuntimeError = require('../../../../../errors/DetoxRuntimeError');
7
7
  const { joinArgs } = require('../../../../../utils/argparse');
8
8
  const childProcess = require('../../../../../utils/childProcess');
9
9
  const environment = require('../../../../../utils/environment');
10
- const log = require('../../../../../utils/logger').child({ __filename });
10
+ const log = require('../../../../../utils/logger').child({ cat: 'device' });
11
11
  const { quote } = require('../../../../../utils/shellQuote');
12
12
 
13
13
  class AppleSimUtils {
@@ -271,7 +271,9 @@ class AppleSimUtils {
271
271
  // ```
272
272
  // This workaround is done to ignore the error above, as we do not care if the app was running before, we just
273
273
  // want to make sure it isn't now.
274
- if (err.code === 3 && err.stderr.includes(`the app is not currently running`)) {
274
+ if (err.code === 3 &&
275
+ (err.stderr.includes(`the app is not currently running`) ||
276
+ err.stderr.includes(`The operation couldn’t be completed. found nothing to terminate`))) {
275
277
  return;
276
278
  }
277
279
 
@@ -1,6 +1,4 @@
1
- const onSignalExit = require('signal-exit');
2
-
3
- const logger = require('../../utils/logger').child({ __filename });
1
+ const logger = require('../../utils/logger').child({ cat: 'device' });
4
2
 
5
3
  const cleanupLogData = {
6
4
  event: 'GENYCLOUD_TEARDOWN',
@@ -12,16 +10,14 @@ class GenyGlobalLifecycleHandler {
12
10
  this._instanceLifecycleService = instanceLifecycleService;
13
11
  }
14
12
 
15
- async globalInit() {
16
- onSignalExit((code, signal) => {
17
- if (signal) {
18
- const { rawDevices } = this._deviceCleanupRegistry.readRegisteredDevicesUNSAFE();
19
- const instanceHandles = rawDevicesToInstanceHandles(rawDevices);
20
- if (instanceHandles.length) {
21
- reportGlobalCleanupSummary(instanceHandles);
22
- }
23
- }
24
- });
13
+ async globalInit() {}
14
+
15
+ emergencyCleanup() {
16
+ const { rawDevices } = this._deviceCleanupRegistry.readRegisteredDevicesUNSAFE();
17
+ const instanceHandles = rawDevicesToInstanceHandles(rawDevices);
18
+ if (instanceHandles.length) {
19
+ reportGlobalCleanupSummary(instanceHandles);
20
+ }
25
21
  }
26
22
 
27
23
  async globalCleanup() {
@@ -1,6 +1,8 @@
1
1
  const DetoxRuntimeError = require('../../errors/DetoxRuntimeError');
2
2
  const debug = require('../../utils/debug'); // debug utils, leave here even if unused
3
- const { traceCall, traceMethods } = require('../../utils/trace');
3
+ const log = require('../../utils/logger').child({ cat: 'device' });
4
+ const { traceCall } = require('../../utils/trace');
5
+ const traceMethods = require('../../utils/traceMethods');
4
6
  const wrapWithStackTraceCutter = require('../../utils/wrapWithStackTraceCutter');
5
7
 
6
8
  const LaunchArgsEditor = require('./utils/LaunchArgsEditor');
@@ -48,7 +50,7 @@ class RuntimeDevice {
48
50
  'unreverseTcpPort',
49
51
  ];
50
52
 
51
- traceMethods(this, 'device', methodNames);
53
+ traceMethods(log, this, methodNames);
52
54
  wrapWithStackTraceCutter(this, methodNames);
53
55
 
54
56
  this._appsConfig = appsConfig;
@@ -234,29 +236,24 @@ class RuntimeDevice {
234
236
  }
235
237
 
236
238
  async installApp(binaryPath, testBinaryPath) {
237
- await traceCall('appInstall', () => {
238
- const currentApp = binaryPath ? { binaryPath, testBinaryPath } : this._getCurrentApp();
239
- return this.deviceDriver.installApp(currentApp.binaryPath, currentApp.testBinaryPath);
240
- });
239
+ const currentApp = binaryPath ? { binaryPath, testBinaryPath } : this._getCurrentApp();
240
+ await this.deviceDriver.installApp(currentApp.binaryPath, currentApp.testBinaryPath);
241
241
  }
242
242
 
243
243
  async uninstallApp(bundleId) {
244
244
  const _bundleId = bundleId || this._bundleId;
245
- await traceCall('appUninstall', () =>
246
- this.deviceDriver.uninstallApp(_bundleId));
245
+ await this.deviceDriver.uninstallApp(_bundleId);
247
246
  }
248
247
 
249
248
  async installUtilBinaries() {
250
249
  const paths = this._deviceConfig.utilBinaryPaths;
251
250
  if (paths) {
252
- await traceCall('installUtilBinaries', () =>
253
- this.deviceDriver.installUtilBinaries(paths));
251
+ await traceCall('installUtilBinaries', this.deviceDriver.installUtilBinaries(paths));
254
252
  }
255
253
  }
256
254
 
257
255
  async reloadReactNative() {
258
- await traceCall('reloadRN', () =>
259
- this.deviceDriver.reloadReactNative());
256
+ await traceCall('reload React Native', this.deviceDriver.reloadReactNative());
260
257
  }
261
258
 
262
259
  async openURL(params) {
@@ -4,7 +4,7 @@ const path = require('path');
4
4
 
5
5
  const fs = require('fs-extra');
6
6
 
7
- const log = require('../../../utils/logger').child({ __filename });
7
+ const log = require('../../../utils/logger').child({ cat: 'device' });
8
8
 
9
9
  /**
10
10
  * @typedef DeviceDriverDeps
@@ -18,7 +18,7 @@ const sleep = require('../../../../utils/sleep');
18
18
  const apkUtils = require('../../../common/drivers/android/tools/apk');
19
19
  const DeviceDriverBase = require('../DeviceDriverBase');
20
20
 
21
- const log = logger.child({ __filename });
21
+ const log = logger.child({ cat: 'device' });
22
22
 
23
23
  /**
24
24
  * @typedef AndroidDriverProps
@@ -148,7 +148,15 @@ class AndroidDriver extends DeviceDriverBase {
148
148
 
149
149
  async waitUntilReady() {
150
150
  try {
151
- await Promise.race([super.waitUntilReady(), this.instrumentation.waitForCrash()]);
151
+ await Promise.race([
152
+ super.waitUntilReady(),
153
+ this.instrumentation.waitForCrash()
154
+ ]);
155
+ } catch (e) {
156
+ log.warn({ error: e }, 'An error occurred while waiting for the app to become ready. Waiting for disconnection...');
157
+ await this.client.waitUntilDisconnected();
158
+ log.warn('The app disconnected.');
159
+ throw e;
152
160
  } finally {
153
161
  this.instrumentation.abortWaitForCrash();
154
162
  }
@@ -7,7 +7,7 @@ const _ = require('lodash');
7
7
  const temporaryPath = require('../../../../artifacts/utils/temporaryPath');
8
8
  const DetoxRuntimeError = require('../../../../errors/DetoxRuntimeError');
9
9
  const getAbsoluteBinaryPath = require('../../../../utils/getAbsoluteBinaryPath');
10
- const log = require('../../../../utils/logger').child({ __filename });
10
+ const log = require('../../../../utils/logger').child({ cat: 'device' });
11
11
  const pressAnyKey = require('../../../../utils/pressAnyKey');
12
12
 
13
13
  const IosDriver = require('./IosDriver');