gitextract_fulntfha/ ├── .buildkite/ │ ├── jobs/ │ │ ├── pipeline.android_demo_app_rn_82.yml │ │ ├── pipeline.android_demo_app_rn_83.yml │ │ ├── pipeline.android_rn_77.yml │ │ ├── pipeline.android_rn_82.yml │ │ ├── pipeline.android_rn_83.yml │ │ ├── pipeline.ios_demo_app_rn_82.yml │ │ ├── pipeline.ios_demo_app_rn_83.yml │ │ ├── pipeline.ios_rn_77.yml │ │ ├── pipeline.ios_rn_82.yml │ │ └── pipeline.ios_rn_83.yml │ ├── pipeline.debug.yml │ ├── pipeline.post_processing.yml │ ├── pipeline.release.fast.yml │ ├── pipeline.release.yml │ ├── pipeline.sh │ └── pipeline_common.sh ├── .cursor/ │ └── rules/ │ ├── detox-idomatic.mdc │ └── detox-unittests.mdc ├── .editorconfig ├── .ghp/ │ └── wix.json ├── .gitattributes ├── .github/ │ ├── CODEOWNERS │ ├── ISSUE_TEMPLATE/ │ │ ├── BUG_REPORT_ANDROID.yml │ │ ├── BUG_REPORT_IOS.yml │ │ ├── BUG_REPORT_OTHER.yml │ │ ├── ENHANCEMENT.yml │ │ ├── HELP_WITH_USING_DETOX.yml │ │ └── config.yml │ ├── ISSUE_TEMPLATE.md │ ├── lock.yml │ ├── no-response.yml │ ├── pull_request_template.md │ ├── stale.yml │ └── workflows/ │ ├── broken-links-scan.yml │ ├── docs.yml │ ├── looking-for-contributors.yml │ ├── rapid-test.yml │ ├── reproduction-required.yml │ ├── support.yml │ ├── surge-purge.yml │ └── website.yml ├── .gitignore ├── .gitmodules ├── .husky/ │ └── pre-commit ├── .markdownlintrc ├── .nvmrc ├── .prettierrc ├── .remarkignore ├── .remarkrc.mjs ├── .remarkrc.nightly.mjs ├── .retext-spell.dic ├── .xcoderc ├── .yarn/ │ └── releases/ │ └── yarn-4.12.0.cjs ├── .yarnrc.yml ├── ARCHITECTURE.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── detox/ │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── __tests__/ │ │ ├── helpers.js │ │ └── setupJest.js │ ├── android/ │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── detox/ │ │ │ ├── .gitignore │ │ │ ├── build.gradle │ │ │ ├── proguard-rules-app.pro │ │ │ ├── proguard-rules.pro │ │ │ ├── publish-pom.gradle │ │ │ ├── publishing.gradle │ │ │ └── src/ │ │ │ ├── coreNative/ │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── wix/ │ │ │ │ └── detox/ │ │ │ │ └── actions/ │ │ │ │ └── DetoxViewActions.kt │ │ │ ├── full/ │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── wix/ │ │ │ │ ├── detox/ │ │ │ │ │ ├── ActivityLaunchHelper.kt │ │ │ │ │ ├── Delegator.java │ │ │ │ │ ├── Detox.java │ │ │ │ │ ├── DetoxANRHandler.kt │ │ │ │ │ ├── DetoxCrashHandler.kt │ │ │ │ │ ├── DetoxJUnitRunner.java │ │ │ │ │ ├── DetoxMain.kt │ │ │ │ │ ├── LaunchArgs.java │ │ │ │ │ ├── LaunchIntentsFactory.kt │ │ │ │ │ ├── NotificationDataParser.kt │ │ │ │ │ ├── TestEngineFacade.kt │ │ │ │ │ ├── adapters/ │ │ │ │ │ │ └── server/ │ │ │ │ │ │ ├── DetoxActionHandlers.kt │ │ │ │ │ │ ├── DetoxActionsDispatcher.kt │ │ │ │ │ │ ├── DetoxServerAdapter.kt │ │ │ │ │ │ ├── DetoxServerInfo.kt │ │ │ │ │ │ ├── QueryStatusActionHandler.kt │ │ │ │ │ │ └── WebSocketClient.java │ │ │ │ │ ├── common/ │ │ │ │ │ │ ├── KotlinReflectUtils.kt │ │ │ │ │ │ ├── RNAnnotations.kt │ │ │ │ │ │ └── UIExtensions.kt │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── DetoxConfig.kt │ │ │ │ │ │ └── DetoxIdlePolicyConfig.kt │ │ │ │ │ ├── espresso/ │ │ │ │ │ │ ├── DetoxAction.java │ │ │ │ │ │ ├── DetoxAssertion.java │ │ │ │ │ │ ├── DetoxFailureHandler.kt │ │ │ │ │ │ ├── DetoxMatcher.java │ │ │ │ │ │ ├── DetoxViewActions.java │ │ │ │ │ │ ├── EspressoDetox.java │ │ │ │ │ │ ├── UiAutomatorHelper.java │ │ │ │ │ │ ├── action/ │ │ │ │ │ │ │ ├── AdjustSliderToPositionAction.kt │ │ │ │ │ │ │ ├── DetoxTypeTextAction.java │ │ │ │ │ │ │ ├── GetAttributesAction.kt │ │ │ │ │ │ │ ├── RNClickAction.java │ │ │ │ │ │ │ └── RNDetoxAccessibilityAction.kt │ │ │ │ │ │ ├── assertion/ │ │ │ │ │ │ │ └── ViewAssertions.java │ │ │ │ │ │ ├── common/ │ │ │ │ │ │ │ ├── MaterialSliderHelper.kt │ │ │ │ │ │ │ ├── ReactSliderHelper.kt │ │ │ │ │ │ │ └── UiControllerImplReflected.kt │ │ │ │ │ │ ├── errors/ │ │ │ │ │ │ │ ├── DetoxAmbiguousViewMatcherException.kt │ │ │ │ │ │ │ ├── DetoxExceptionUtils.kt │ │ │ │ │ │ │ ├── DetoxExceptionWithHierarchy.kt │ │ │ │ │ │ │ └── DetoxNoMatchingViewException.kt │ │ │ │ │ │ ├── hierarchy/ │ │ │ │ │ │ │ ├── RootViewsHelper.kt │ │ │ │ │ │ │ └── ViewHierarchyGenerator.kt │ │ │ │ │ │ ├── idlingresources/ │ │ │ │ │ │ │ └── DescriptiveIdlingResource.kt │ │ │ │ │ │ ├── matcher/ │ │ │ │ │ │ │ ├── IsDisplayingAtLeastDetoxMatcher.kt │ │ │ │ │ │ │ ├── RegexMatcher.kt │ │ │ │ │ │ │ ├── ViewAtIndexMatcher.kt │ │ │ │ │ │ │ ├── ViewMatchers.kt │ │ │ │ │ │ │ └── WithAccessibilityLabelMatcher.kt │ │ │ │ │ │ ├── performer/ │ │ │ │ │ │ │ ├── MultipleViewsActionPerformer.kt │ │ │ │ │ │ │ ├── SingleViewActionPerformer.kt │ │ │ │ │ │ │ └── ViewActionPerformer.kt │ │ │ │ │ │ ├── registry/ │ │ │ │ │ │ │ └── BusyResourcesInquirer.kt │ │ │ │ │ │ └── web/ │ │ │ │ │ │ ├── DetoxWebAtomMatcher.java │ │ │ │ │ │ ├── EspressoWebDetox.java │ │ │ │ │ │ ├── WebElement.java │ │ │ │ │ │ ├── WebExpect.java │ │ │ │ │ │ └── WebViewElement.java │ │ │ │ │ ├── genymotion/ │ │ │ │ │ │ └── DetoxGenymotionManager.java │ │ │ │ │ ├── inquiry/ │ │ │ │ │ │ ├── DetoxBusyResource.kt │ │ │ │ │ │ └── DetoxBusyResourceDescription.kt │ │ │ │ │ ├── instruments/ │ │ │ │ │ │ ├── DetoxInstrumentsException.java │ │ │ │ │ │ ├── DetoxInstrumentsManager.java │ │ │ │ │ │ ├── Instruments.java │ │ │ │ │ │ ├── InstrumentsRecording.java │ │ │ │ │ │ └── reflected/ │ │ │ │ │ │ ├── InstrumentsRecordingReflected.java │ │ │ │ │ │ └── InstrumentsReflected.java │ │ │ │ │ ├── reactnative/ │ │ │ │ │ │ ├── ReactApplicationExt.kt │ │ │ │ │ │ ├── ReactMarkersLogger.kt │ │ │ │ │ │ ├── ReactNativeExtension.kt │ │ │ │ │ │ ├── ReactNativeInfo.kt │ │ │ │ │ │ ├── ReactNativeLoadingMonitor.kt │ │ │ │ │ │ ├── helpers/ │ │ │ │ │ │ │ └── RNHelpers.kt │ │ │ │ │ │ ├── idlingresources/ │ │ │ │ │ │ │ ├── DetoxIdlingResource.kt │ │ │ │ │ │ │ ├── ReactNativeIdlingResources.kt │ │ │ │ │ │ │ ├── StabilizedIdlingResource.kt │ │ │ │ │ │ │ ├── animations/ │ │ │ │ │ │ │ │ └── AnimatedModuleIdlingResource.kt │ │ │ │ │ │ │ ├── bridge/ │ │ │ │ │ │ │ │ └── BridgeIdlingResource.kt │ │ │ │ │ │ │ ├── factory/ │ │ │ │ │ │ │ │ ├── DetoxIdlingResourceFactory.kt │ │ │ │ │ │ │ │ ├── DetoxIdlingResourceFactoryStrategy.kt │ │ │ │ │ │ │ │ ├── FabricDetoxIdlingResourceFactoryStrategy.kt │ │ │ │ │ │ │ │ ├── IdlingResourcesName.kt │ │ │ │ │ │ │ │ ├── LooperName.kt │ │ │ │ │ │ │ │ └── OldArchitectureDetoxIdlingResourceFactoryStrategy.kt │ │ │ │ │ │ │ ├── looper/ │ │ │ │ │ │ │ │ └── MQThreadsReflector.kt │ │ │ │ │ │ │ ├── network/ │ │ │ │ │ │ │ │ ├── NetworkIdlingResource.kt │ │ │ │ │ │ │ │ └── NetworkingModuleReflected.kt │ │ │ │ │ │ │ ├── storage/ │ │ │ │ │ │ │ │ ├── AsyncStorageIdlingResource.kt │ │ │ │ │ │ │ │ └── SerialExecutorReflected.kt │ │ │ │ │ │ │ ├── timers/ │ │ │ │ │ │ │ │ ├── FabricTimersIdlingResource.kt │ │ │ │ │ │ │ │ ├── JavaTimersReflected.kt │ │ │ │ │ │ │ │ └── TimersIdlingResource.kt │ │ │ │ │ │ │ └── uimodule/ │ │ │ │ │ │ │ ├── fabric/ │ │ │ │ │ │ │ │ └── FabricUIManagerIdlingResources.kt │ │ │ │ │ │ │ └── paper/ │ │ │ │ │ │ │ ├── DispatchCommandOperationReflected.kt │ │ │ │ │ │ │ ├── NativeHierarchyManagerReflected.kt │ │ │ │ │ │ │ ├── UIManagerModuleReflected.kt │ │ │ │ │ │ │ ├── UIModuleIdlingResource.kt │ │ │ │ │ │ │ └── ViewCommandOpsQueueReflected.kt │ │ │ │ │ │ ├── reloader/ │ │ │ │ │ │ │ ├── ReactNativeReloader.kt │ │ │ │ │ │ │ └── ReactNativeReloaderFactory.kt │ │ │ │ │ │ ├── ui/ │ │ │ │ │ │ │ └── UIExtensions.kt │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ └── RNUtils.kt │ │ │ │ │ └── uiautomator/ │ │ │ │ │ └── UiAutomator.java │ │ │ │ └── invoke/ │ │ │ │ ├── MethodInvocation.java │ │ │ │ ├── MethodUtilsExt.java │ │ │ │ ├── exceptions/ │ │ │ │ │ └── EmptyInvocationInstructionException.java │ │ │ │ ├── parser/ │ │ │ │ │ └── JsonParser.java │ │ │ │ └── types/ │ │ │ │ ├── ClassTarget.java │ │ │ │ ├── Invocation.java │ │ │ │ ├── InvocationTarget.java │ │ │ │ ├── ObjectInstanceTarget.java │ │ │ │ └── Target.java │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── java/ │ │ │ │ │ ├── com/ │ │ │ │ │ │ └── wix/ │ │ │ │ │ │ └── detox/ │ │ │ │ │ │ ├── action/ │ │ │ │ │ │ │ └── common/ │ │ │ │ │ │ │ └── MotionDefs.kt │ │ │ │ │ │ ├── common/ │ │ │ │ │ │ │ ├── DetoxErrors.java │ │ │ │ │ │ │ ├── DetoxLog.kt │ │ │ │ │ │ │ ├── ErrorUtils.kt │ │ │ │ │ │ │ ├── JsonConverter.kt │ │ │ │ │ │ │ ├── TextFileReader.kt │ │ │ │ │ │ │ ├── UIThread.kt │ │ │ │ │ │ │ ├── collect/ │ │ │ │ │ │ │ │ └── PairsIterator.kt │ │ │ │ │ │ │ └── proxy/ │ │ │ │ │ │ │ ├── MethodsSpy.kt │ │ │ │ │ │ │ └── SpyingInvocationHandler.kt │ │ │ │ │ │ └── espresso/ │ │ │ │ │ │ ├── DeviceDisplay.kt │ │ │ │ │ │ ├── MultipleViewsAction.kt │ │ │ │ │ │ ├── UiControllerSpy.kt │ │ │ │ │ │ ├── ViewActionWithResult.kt │ │ │ │ │ │ ├── action/ │ │ │ │ │ │ │ ├── DetoxCustomTapper.kt │ │ │ │ │ │ │ ├── DetoxSingleTap.kt │ │ │ │ │ │ │ ├── DetoxSwipeWithLongPress.kt │ │ │ │ │ │ │ ├── LongPressAndDragAction.kt │ │ │ │ │ │ │ ├── ScrollToIndexAction.kt │ │ │ │ │ │ │ ├── TakeViewScreenshotAction.kt │ │ │ │ │ │ │ ├── ViewScreenshot.kt │ │ │ │ │ │ │ └── common/ │ │ │ │ │ │ │ ├── DetoxViewConfiguration.kt │ │ │ │ │ │ │ ├── MotionEvents.kt │ │ │ │ │ │ │ ├── ReflectUtils.kt │ │ │ │ │ │ │ ├── TapEvents.kt │ │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ │ ├── UiControllerUtils.kt │ │ │ │ │ │ │ └── ViewInteractionExt.kt │ │ │ │ │ │ ├── scroll/ │ │ │ │ │ │ │ ├── DetoxScrollActions.kt │ │ │ │ │ │ │ ├── DetoxSwipe.kt │ │ │ │ │ │ │ ├── DetoxSwiper.kt │ │ │ │ │ │ │ ├── LinearSwiper.kt │ │ │ │ │ │ │ ├── ScrollEdgeException.kt │ │ │ │ │ │ │ ├── ScrollHelper.java │ │ │ │ │ │ │ ├── ScrollProbes.kt │ │ │ │ │ │ │ └── SwipeHelper.kt │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ └── Vector2D.kt │ │ │ │ │ └── org/ │ │ │ │ │ └── joor/ │ │ │ │ │ ├── Reflect.java │ │ │ │ │ └── ReflectException.java │ │ │ │ └── res/ │ │ │ │ └── values/ │ │ │ │ └── strings.xml │ │ │ └── testFull/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── wix/ │ │ │ │ ├── detox/ │ │ │ │ │ ├── ActivityLaunchHelperTest.kt │ │ │ │ │ ├── UTHelpers.kt │ │ │ │ │ ├── adapters/ │ │ │ │ │ │ └── server/ │ │ │ │ │ │ ├── DetoxActionHandlersSpec.kt │ │ │ │ │ │ └── QueryStatusActionHandlerSpec.kt │ │ │ │ │ ├── common/ │ │ │ │ │ │ ├── JsonConverterTest.kt │ │ │ │ │ │ ├── TapEventsSpec.kt │ │ │ │ │ │ ├── UIExtensionsTest.kt │ │ │ │ │ │ ├── collect/ │ │ │ │ │ │ │ └── PairsIteratorSpec.kt │ │ │ │ │ │ └── proxy/ │ │ │ │ │ │ └── MethodsSpySpec.kt │ │ │ │ │ ├── espresso/ │ │ │ │ │ │ ├── action/ │ │ │ │ │ │ │ ├── DetoxCustomTapperSpec.kt │ │ │ │ │ │ │ └── GetAttributesActionTest.kt │ │ │ │ │ │ ├── common/ │ │ │ │ │ │ │ ├── MaterialSliderHelperTest.kt │ │ │ │ │ │ │ └── ReactSliderHelperTest.kt │ │ │ │ │ │ ├── errors/ │ │ │ │ │ │ │ └── DetoxExceptionUtilsTest.kt │ │ │ │ │ │ ├── matcher/ │ │ │ │ │ │ │ ├── RegexMatcherTest.kt │ │ │ │ │ │ │ └── ViewAtIndexMatcherSpec.kt │ │ │ │ │ │ ├── performer/ │ │ │ │ │ │ │ └── ViewActionPerformerSpec.kt │ │ │ │ │ │ ├── registry/ │ │ │ │ │ │ │ └── BusyResourcesInquirerTest.kt │ │ │ │ │ │ ├── scroll/ │ │ │ │ │ │ │ ├── DetoxSwipeSpec.kt │ │ │ │ │ │ │ ├── ScrollHelperTest.kt │ │ │ │ │ │ │ └── SwipeHelperSpec.kt │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ └── Vector2DSpec.kt │ │ │ │ │ ├── inquiry/ │ │ │ │ │ │ ├── DetoxBusyResourceDescriptionSpec.kt │ │ │ │ │ │ └── DetoxBusyResourceSpec.kt │ │ │ │ │ ├── instruments/ │ │ │ │ │ │ └── DetoxInstrumentsManagerSpec.kt │ │ │ │ │ └── reactnative/ │ │ │ │ │ └── idlingresources/ │ │ │ │ │ ├── AsyncStorageIdlingResourceTest.kt │ │ │ │ │ ├── NetworkIdlingResourcesTest.kt │ │ │ │ │ ├── SerialExecutorReflectedSpec.kt │ │ │ │ │ └── timers/ │ │ │ │ │ └── TimersIdlingResourceTest.kt │ │ │ │ └── invoke/ │ │ │ │ ├── JsonParserTest.java │ │ │ │ ├── MethodInvocationTest.java │ │ │ │ ├── TestUtils.java │ │ │ │ └── types/ │ │ │ │ └── InvocationTest.java │ │ │ └── resources/ │ │ │ ├── fromJsonTargetInvocationWithListParams.json │ │ │ ├── mockito-extensions/ │ │ │ │ └── org.mockito.plugins.MockMaker │ │ │ ├── robolectric.properties │ │ │ ├── targetClassStaticMethodNoParams.json │ │ │ ├── targetClassStaticMethodOneParam.json │ │ │ ├── targetInvocationEspresso.json │ │ │ ├── targetInvocationEspressoDetox.json │ │ │ ├── targetInvocationEspressoWebDetox.json │ │ │ ├── targetInvocationEspressoWebDetoxScript.json │ │ │ └── targetInvocationMethodOfClassStaticMethodOneParam.json │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── libs/ │ │ │ └── genymotion-api-1.2.0.jar │ │ ├── rninfo.gradle │ │ └── settings.gradle │ ├── detox-native/ │ │ └── README.md │ ├── detox.d.ts │ ├── globals.d.ts │ ├── index.d.ts │ ├── index.js │ ├── internals.d.ts │ ├── internals.js │ ├── ios/ │ │ ├── .tbzignore │ │ ├── Detox/ │ │ │ ├── Actions/ │ │ │ │ ├── NSObject+DetoxActions.h │ │ │ │ ├── NSObject+DetoxActions.m │ │ │ │ ├── UIApplication+DetoxActions.swift │ │ │ │ ├── UIDatePicker+DetoxActions.h │ │ │ │ ├── UIDatePicker+DetoxActions.m │ │ │ │ ├── UIDevice+DetoxActions.h │ │ │ │ ├── UIDevice+DetoxActions.m │ │ │ │ ├── UIPickerView+DetoxActions.h │ │ │ │ ├── UIPickerView+DetoxActions.m │ │ │ │ ├── UIScrollView+DetoxActions.h │ │ │ │ └── UIScrollView+DetoxActions.m │ │ │ ├── AppleInternals/ │ │ │ │ └── DTXAppleInternals.h │ │ │ ├── AppleTouchEvents/ │ │ │ │ ├── DTXSyntheticEvents.h │ │ │ │ ├── DTXSyntheticEvents.m │ │ │ │ ├── DTXTouchInfo-Private.h │ │ │ │ ├── DTXTouchInfo.h │ │ │ │ ├── DTXTouchInfo.m │ │ │ │ ├── DTXTouchInjector.h │ │ │ │ ├── DTXTouchInjector.m │ │ │ │ ├── UITouch+DTXAdditions.h │ │ │ │ └── UITouch+DTXAdditions.m │ │ │ ├── Assertions/ │ │ │ │ ├── DTXAssertionHandler+Swift.swift │ │ │ │ ├── DTXAssertionHandler.h │ │ │ │ └── DTXAssertionHandler.m │ │ │ ├── Detox.h │ │ │ ├── Detox.modulemap │ │ │ ├── Detox.pch │ │ │ ├── Detox.xcconfig │ │ │ ├── DetoxAppDelegateProxy.h │ │ │ ├── DetoxAppDelegateProxy.m │ │ │ ├── DetoxInit.m │ │ │ ├── DetoxManager.swift │ │ │ ├── Info.plist │ │ │ ├── Invocation/ │ │ │ │ ├── Action.swift │ │ │ │ ├── Element.swift │ │ │ │ ├── Expectation.swift │ │ │ │ ├── InvocationManager.swift │ │ │ │ ├── Modifier.swift │ │ │ │ ├── Predicate.swift │ │ │ │ ├── WKWebView+evaluateJSAfterLoading.swift │ │ │ │ ├── WKWebView+findView.swift │ │ │ │ ├── WKWebViewConfiguration+Detox.h │ │ │ │ ├── WKWebViewConfiguration+Detox.m │ │ │ │ ├── WebAction.swift │ │ │ │ ├── WebActionType.swift │ │ │ │ ├── WebCodeBuilder+createAction.swift │ │ │ │ ├── WebCodeBuilder+createExpectation.swift │ │ │ │ ├── WebCodeBuilder+createFocusAction.swift │ │ │ │ ├── WebCodeBuilder+createGetTextAction.swift │ │ │ │ ├── WebCodeBuilder+createGetTitleAction.swift │ │ │ │ ├── WebCodeBuilder+createGetURLAction.swift │ │ │ │ ├── WebCodeBuilder+createMoveCursorToEndAction.swift │ │ │ │ ├── WebCodeBuilder+createRunScriptAction.swift │ │ │ │ ├── WebCodeBuilder+createScrollIntoViewAction.swift │ │ │ │ ├── WebCodeBuilder+createSelectAllTextAction.swift │ │ │ │ ├── WebCodeBuilder+createSelector.swift │ │ │ │ ├── WebCodeBuilder+createTapAction.swift │ │ │ │ ├── WebCodeBuilder+createTypeAction.swift │ │ │ │ ├── WebCodeBuilder.swift │ │ │ │ ├── WebExpectation.swift │ │ │ │ ├── WebExpectationModifier.swift │ │ │ │ ├── WebExpectationType.swift │ │ │ │ ├── WebInteraction.swift │ │ │ │ ├── WebPredicate.swift │ │ │ │ └── WebPredicateType.swift │ │ │ ├── Matchers/ │ │ │ │ ├── UIView+DetoxMatchers.h │ │ │ │ └── UIView+DetoxMatchers.m │ │ │ ├── Policy/ │ │ │ │ ├── DetoxPolicy.h │ │ │ │ └── DetoxPolicy.m │ │ │ └── Utilities/ │ │ │ ├── ApproximateEquality.swift │ │ │ ├── DTXDurationFormatter.h │ │ │ ├── DTXDurationFormatter.m │ │ │ ├── DTXLoggingSubsystem.h │ │ │ ├── DTXRunLoopSpinner.h │ │ │ ├── DTXRunLoopSpinner.m │ │ │ ├── DetoxCrashHandler.h │ │ │ ├── DetoxCrashHandler.mm │ │ │ ├── DetoxInstrumentsManager.h │ │ │ ├── DetoxInstrumentsManager.m │ │ │ ├── DetoxUserActivityDispatcher.swift │ │ │ ├── DetoxUserNotificationDispatcher.swift │ │ │ ├── ExternalLogging.h │ │ │ ├── ExternalLogging.m │ │ │ ├── NSException+DetoxUtils.swift │ │ │ ├── NSObject+DetoxUtils.h │ │ │ ├── NSObject+DetoxUtils.m │ │ │ ├── NSObject+DontCrash.h │ │ │ ├── NSObject+DontCrash.m │ │ │ ├── NSThread+DetoxUtils.h │ │ │ ├── NSThread+DetoxUtils.m │ │ │ ├── NSURL+DetoxUtils.h │ │ │ ├── NSURL+DetoxUtils.m │ │ │ ├── ReactNativeSupport/ │ │ │ │ ├── ReactNativeHeaders.h │ │ │ │ ├── ReactNativeSupport.h │ │ │ │ └── ReactNativeSupport.m │ │ │ ├── ReactNativeSupport.m │ │ │ ├── String+LocalizedError.swift │ │ │ ├── String+matchesJSRegex.swift │ │ │ ├── SwiftSupport/ │ │ │ │ ├── DetoxSwiftBridge.h │ │ │ │ └── DetoxSwiftBridge.m │ │ │ ├── TimeInterval+DetoxUtils.swift │ │ │ ├── UIApplication+DTXAdditions.h │ │ │ ├── UIApplication+DTXAdditions.m │ │ │ ├── UIImage+DetoxUtils.h │ │ │ ├── UIImage+DetoxUtils.m │ │ │ ├── UIResponder+First.h │ │ │ ├── UIResponder+First.m │ │ │ ├── UISlider+DetoxUtils.h │ │ │ ├── UISlider+DetoxUtils.m │ │ │ ├── UIView+DetoxSpeedup.h │ │ │ ├── UIView+DetoxSpeedup.m │ │ │ ├── UIView+DetoxUtils.h │ │ │ ├── UIView+DetoxUtils.m │ │ │ ├── UIView+Drawing.h │ │ │ ├── UIView+Drawing.m │ │ │ ├── UIWindow+DetoxUtils.h │ │ │ ├── UIWindow+DetoxUtils.m │ │ │ ├── ViewHierarchyGenerator.swift │ │ │ └── WebSocket.swift │ │ ├── Detox.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ └── Detox.xcscheme │ │ └── DetoxXCUITestRunner/ │ │ ├── DetoxXCUITestRunner/ │ │ │ ├── Assets.xcassets/ │ │ │ │ ├── AccentColor.colorset/ │ │ │ │ │ └── Contents.json │ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ │ ├── ContentView.swift │ │ │ ├── DetoxXCUITestRunner.swift │ │ │ ├── DetoxXCUITestRunnerApp.swift │ │ │ ├── Extensions/ │ │ │ │ ├── ElementType+Extensions.swift │ │ │ │ ├── InvocationParams+matcherDescription.swift │ │ │ │ ├── TimeInterval+defaultTimeout.swift │ │ │ │ └── XCUIApplication+Extensions.swift │ │ │ ├── Handlers/ │ │ │ │ ├── ActionHandler.swift │ │ │ │ ├── ExpectationHandler.swift │ │ │ │ └── PredicateHandler.swift │ │ │ ├── Params Reader/ │ │ │ │ ├── InvocationParams.swift │ │ │ │ └── InvocationParamsReader.swift │ │ │ ├── Preview Content/ │ │ │ │ └── Preview Assets.xcassets/ │ │ │ │ └── Contents.json │ │ │ └── Utils/ │ │ │ ├── DTXAssert.swift │ │ │ ├── Environment.swift │ │ │ ├── LogUtils.swift │ │ │ └── XCUIElement+Extensions.swift │ │ ├── DetoxXCUITestRunner.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ └── DetoxXCUITestRunner.xcscheme │ │ └── DetoxXCUITestRunner.xctestplan │ ├── jest.config.js │ ├── jsconfig.json │ ├── local-cli/ │ │ ├── __mocks__/ │ │ │ ├── detox.config.js │ │ │ └── executable │ │ ├── __snapshots__/ │ │ │ └── run-server.test.js.snap │ │ ├── build-framework-cache.js │ │ ├── build.js │ │ ├── build.test.js │ │ ├── clean-framework-cache.js │ │ ├── cli.js │ │ ├── init.js │ │ ├── rebuild-framework-cache.js │ │ ├── reset-lock-file.js │ │ ├── run-server.js │ │ ├── run-server.test.js │ │ ├── start.js │ │ ├── start.test.js │ │ ├── startCommand/ │ │ │ └── AppStartCommand.js │ │ ├── templates/ │ │ │ ├── firstTestContent.js │ │ │ └── jest.js │ │ ├── test.js │ │ ├── test.test.js │ │ ├── testCommand/ │ │ │ ├── TestRunnerCommand.js │ │ │ ├── TestRunnerError.js │ │ │ ├── TestRunnerError.test.js │ │ │ ├── builder.js │ │ │ ├── middlewares.js │ │ │ └── warnings.js │ │ └── utils/ │ │ ├── cliErrorHandling.js │ │ ├── frameworkUtils.js │ │ ├── interruptListeners.js │ │ ├── jestInternals.js │ │ ├── patchJestUtil.js │ │ └── yargsUtils.js │ ├── package.json │ ├── runners/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── migration.test.js.snap │ │ │ ├── migration.test.js │ │ │ └── reporter.test.js │ │ ├── deprecation.js │ │ ├── jest/ │ │ │ ├── JestCircusEnvironment.js │ │ │ ├── adapter.d.ts │ │ │ ├── adapter.js │ │ │ ├── assignReporter.d.ts │ │ │ ├── assignReporter.js │ │ │ ├── globalSetup.js │ │ │ ├── globalTeardown.js │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── index.test.js │ │ │ ├── reporter.js │ │ │ ├── reporters/ │ │ │ │ ├── DetoxIPCReporter.js │ │ │ │ ├── DetoxReporterDispatcher.js │ │ │ │ ├── DetoxReporterDispatcher.test.js │ │ │ │ ├── DetoxSummaryReporter.js │ │ │ │ ├── DetoxVerboseReporter.js │ │ │ │ └── index.js │ │ │ ├── specReporter.d.ts │ │ │ ├── specReporter.js │ │ │ ├── streamlineReporter.js │ │ │ └── testEnvironment/ │ │ │ ├── index.js │ │ │ ├── listeners/ │ │ │ │ ├── DetoxCoreListener.js │ │ │ │ ├── DetoxInitErrorListener.js │ │ │ │ ├── DetoxPlatformFilterListener.js │ │ │ │ ├── REPLListener.js │ │ │ │ ├── SpecReporter.js │ │ │ │ ├── WorkerAssignReporter.js │ │ │ │ └── index.js │ │ │ └── utils/ │ │ │ ├── assertExistingContext.js │ │ │ ├── getFullTestName.js │ │ │ ├── hasTimedOut.js │ │ │ ├── index.js │ │ │ ├── stdout.js │ │ │ ├── validateAndPatchProjectConfig.js │ │ │ └── validateAndPatchProjectConfig.test.js │ │ ├── jest-circus/ │ │ │ ├── environment/ │ │ │ │ └── index.js │ │ │ ├── index.js │ │ │ └── reporter.js │ │ ├── migration.js │ │ └── mocha/ │ │ ├── DetoxMochaAdapter.js │ │ ├── adapter.d.ts │ │ └── adapter.js │ ├── scripts/ │ │ ├── build_framework.ios.sh │ │ ├── build_local_framework.ios.sh │ │ ├── build_local_xcuitest.ios.sh │ │ ├── build_xcuitest.ios.sh │ │ ├── pack_ios.sh │ │ ├── postinstall.js │ │ ├── updateGradle.js │ │ └── utils.js │ ├── src/ │ │ ├── DetoxWorker.js │ │ ├── DetoxWorker.test.js │ │ ├── __mocks__/ │ │ │ └── DetoxWorker.js │ │ ├── android/ │ │ │ ├── AndroidExpect.js │ │ │ ├── AndroidExpect.test.js │ │ │ ├── actions/ │ │ │ │ ├── native.js │ │ │ │ └── web.js │ │ │ ├── core/ │ │ │ │ ├── NativeElement.js │ │ │ │ ├── NativeExpect.js │ │ │ │ ├── NativeMatcher.js │ │ │ │ ├── NativeWaitFor.js │ │ │ │ ├── WebElement.js │ │ │ │ ├── WebExpect.js │ │ │ │ └── WebMatcher.js │ │ │ ├── espressoapi/ │ │ │ │ ├── Detox.js │ │ │ │ ├── DetoxAction.js │ │ │ │ ├── DetoxAssertion.js │ │ │ │ ├── DetoxGenymotionManager.js │ │ │ │ ├── DetoxMatcher.js │ │ │ │ ├── DetoxViewActions.js │ │ │ │ ├── EspressoDetox.js │ │ │ │ ├── UIAutomator.js │ │ │ │ ├── UIDevice.js │ │ │ │ ├── UiDeviceProxy.js │ │ │ │ ├── UiDeviceProxy.test.js │ │ │ │ ├── ViewActions.js │ │ │ │ └── web/ │ │ │ │ ├── DetoxWebAtomMatcher.js │ │ │ │ ├── EspressoWebDetox.js │ │ │ │ ├── WebElement.js │ │ │ │ ├── WebExpect.js │ │ │ │ ├── WebViewElement.js │ │ │ │ └── simpleAtoms.js │ │ │ ├── interactions/ │ │ │ │ ├── native.js │ │ │ │ └── web.js │ │ │ └── matchers/ │ │ │ ├── index.js │ │ │ ├── native.js │ │ │ ├── native.test.js │ │ │ └── web.js │ │ ├── artifacts/ │ │ │ ├── ArtifactsManager.js │ │ │ ├── ArtifactsManager.test.js │ │ │ ├── __mocks__/ │ │ │ │ ├── FakePathBuilder.js │ │ │ │ └── testSummaries.mock.js │ │ │ ├── factories/ │ │ │ │ ├── index.js │ │ │ │ └── index.test.js │ │ │ ├── instruments/ │ │ │ │ ├── InstrumentsArtifactPlugin.js │ │ │ │ ├── InstrumentsArtifactPlugin.test.js │ │ │ │ ├── InstrumentsArtifactRecording.js │ │ │ │ ├── InstrumentsArtifactRecording.test.js │ │ │ │ ├── android/ │ │ │ │ │ ├── AndroidInstrumentsPlugin.js │ │ │ │ │ ├── AndroidInstrumentsPlugin.test.js │ │ │ │ │ ├── AndroidInstrumentsRecording.js │ │ │ │ │ └── AndroidInstrumentsRecording.test.js │ │ │ │ └── ios/ │ │ │ │ ├── SimulatorInstrumentsPlugin.js │ │ │ │ ├── SimulatorInstrumentsPlugin.test.js │ │ │ │ ├── SimulatorInstrumentsRecording.js │ │ │ │ └── SimulatorInstrumentsRecording.test.js │ │ │ ├── log/ │ │ │ │ ├── LogArtifactPlugin.js │ │ │ │ ├── LogArtifactPlugin.test.js │ │ │ │ ├── android/ │ │ │ │ │ ├── ADBLogcatPlugin.js │ │ │ │ │ └── ADBLogcatRecording.js │ │ │ │ └── ios/ │ │ │ │ ├── SimulatorLogPlugin.js │ │ │ │ ├── SimulatorLogPlugin.test.js │ │ │ │ └── SimulatorLogRecording.js │ │ │ ├── providers/ │ │ │ │ └── index.js │ │ │ ├── screenshot/ │ │ │ │ ├── ADBScreencapPlugin.js │ │ │ │ ├── ScreenshotArtifactPlugin.js │ │ │ │ ├── ScreenshotArtifactPlugin.test.js │ │ │ │ └── SimulatorScreenshotPlugin.js │ │ │ ├── templates/ │ │ │ │ ├── artifact/ │ │ │ │ │ ├── Artifact.js │ │ │ │ │ ├── Artifact.test.js │ │ │ │ │ ├── FileArtifact.js │ │ │ │ │ ├── FileArtifact.test.js │ │ │ │ │ └── __mocks__/ │ │ │ │ │ └── ArtifactMock.js │ │ │ │ └── plugin/ │ │ │ │ ├── ArtifactPlugin.js │ │ │ │ ├── ArtifactPlugin.test.js │ │ │ │ ├── StartupAndTestRecorderPlugin.js │ │ │ │ ├── StartupAndTestRecorderPlugin.test.js │ │ │ │ ├── TwoSnapshotsPerTestPlugin.js │ │ │ │ ├── TwoSnapshotsPerTestPlugin.test.js │ │ │ │ ├── WholeTestRecorderPlugin.js │ │ │ │ ├── WholeTestRecorderPlugin.test.js │ │ │ │ └── __mocks__/ │ │ │ │ ├── ArtifactsApi.mock.js │ │ │ │ └── testSuite.mock.js │ │ │ ├── timeline/ │ │ │ │ └── TimelineContextTypes.js │ │ │ ├── uiHierarchy/ │ │ │ │ ├── IosUIHierarchyPlugin.js │ │ │ │ └── IosUIHierarchyPlugin.test.js │ │ │ ├── utils/ │ │ │ │ ├── AndroidDevicePathBuilder.js │ │ │ │ ├── AndroidDevicePathBuilder.test.js │ │ │ │ ├── ArtifactPathBuilder.js │ │ │ │ ├── ArtifactPathBuilder.test.js │ │ │ │ ├── buildDefaultArtifactsRootDirpath.js │ │ │ │ ├── buildDefaultArtifactsRootDirpath.test.js │ │ │ │ ├── getTimeStampString.js │ │ │ │ ├── getTimeStampString.test.js │ │ │ │ ├── temporaryPath.js │ │ │ │ └── temporaryPath.test.js │ │ │ └── video/ │ │ │ ├── ADBScreenrecorderArtifact.js │ │ │ ├── ADBScreenrecorderPlugin.js │ │ │ ├── SimulatorRecordVideoPlugin.js │ │ │ ├── VideoArtifactPlugin.js │ │ │ └── VideoArtifactPlugin.test.js │ │ ├── client/ │ │ │ ├── AsyncWebSocket.js │ │ │ ├── AsyncWebSocket.test.js │ │ │ ├── Client.js │ │ │ ├── Client.test.js │ │ │ ├── InflightRequest.js │ │ │ ├── __mocks__/ │ │ │ │ └── Client.js │ │ │ ├── __snapshots__/ │ │ │ │ ├── AsyncWebSocket.test.js.snap │ │ │ │ └── Client.test.js.snap │ │ │ └── actions/ │ │ │ ├── SyncStatusSchema.json │ │ │ ├── actions.js │ │ │ └── formatters/ │ │ │ ├── SyncStatusFormatter.js │ │ │ ├── SyncStatusFormatter.test.js │ │ │ ├── __snapshots__/ │ │ │ │ └── SyncStatusFormatter.test.js.snap │ │ │ └── sync-resources/ │ │ │ ├── AnimationUpdateResourceFormatter.js │ │ │ ├── BgThreadFormatter.js │ │ │ ├── DelayedPerformSelectorFormatter.js │ │ │ ├── DispatchQueueFormatter.js │ │ │ ├── JavaScriptTimersFormatter.js │ │ │ ├── LooperFormatter.js │ │ │ ├── NetworkFormatter.js │ │ │ ├── OneTimeEventsFormatter.js │ │ │ ├── RunLoopFormatter.js │ │ │ ├── TimersFormatter.js │ │ │ ├── UIFormatter.js │ │ │ ├── UnknownResourceFormatter.js │ │ │ └── utils.js │ │ ├── configuration/ │ │ │ ├── __mocks__/ │ │ │ │ └── configuration/ │ │ │ │ ├── badconfig/ │ │ │ │ │ └── detox.config.js │ │ │ │ ├── cjs/ │ │ │ │ │ └── .detoxrc.cjs │ │ │ │ ├── extends/ │ │ │ │ │ ├── .detoxrc.json │ │ │ │ │ ├── badPointer.json │ │ │ │ │ ├── base.json │ │ │ │ │ └── middle/ │ │ │ │ │ └── index.js │ │ │ │ ├── oldschema/ │ │ │ │ │ └── package.json │ │ │ │ ├── packagejson/ │ │ │ │ │ └── package.json │ │ │ │ └── priority/ │ │ │ │ ├── .detoxrc.js │ │ │ │ ├── detox-config.json │ │ │ │ ├── empty.js │ │ │ │ └── package.json │ │ │ ├── __snapshots__/ │ │ │ │ └── composeRunnerConfig.test.js.snap │ │ │ ├── collectCliConfig.js │ │ │ ├── collectCliConfig.test.js │ │ │ ├── composeAppsConfig.js │ │ │ ├── composeAppsConfig.test.js │ │ │ ├── composeArtifactsConfig.js │ │ │ ├── composeArtifactsConfig.test.js │ │ │ ├── composeBehaviorConfig.js │ │ │ ├── composeBehaviorConfig.test.js │ │ │ ├── composeCommandsConfig.js │ │ │ ├── composeCommandsConfig.test.js │ │ │ ├── composeDeviceConfig.js │ │ │ ├── composeDeviceConfig.test.js │ │ │ ├── composeLoggerConfig.js │ │ │ ├── composeLoggerConfig.test.js │ │ │ ├── composeRunnerConfig.js │ │ │ ├── composeRunnerConfig.test.js │ │ │ ├── composeSessionConfig.js │ │ │ ├── composeSessionConfig.test.js │ │ │ ├── configurations.mock.js │ │ │ ├── index.js │ │ │ ├── index.test.js │ │ │ ├── loadExternalConfig.js │ │ │ ├── loadExternalConfig.test.js │ │ │ ├── selectConfiguration.js │ │ │ ├── selectConfiguration.test.js │ │ │ └── utils/ │ │ │ └── deviceAppTypes.js │ │ ├── devices/ │ │ │ ├── allocation/ │ │ │ │ ├── DeviceAllocator.js │ │ │ │ ├── DeviceAllocator.test.js │ │ │ │ ├── DeviceList.js │ │ │ │ ├── DeviceList.test.js │ │ │ │ ├── DeviceRegistry.js │ │ │ │ ├── DeviceRegistry.test.js │ │ │ │ ├── drivers/ │ │ │ │ │ ├── AllocationDriverBase.d.ts │ │ │ │ │ ├── android/ │ │ │ │ │ │ ├── AndroidAllocDriver.js │ │ │ │ │ │ ├── FreeDeviceFinder.js │ │ │ │ │ │ ├── FreeDeviceFinder.test.js │ │ │ │ │ │ ├── __mocks__/ │ │ │ │ │ │ │ └── handles.js │ │ │ │ │ │ ├── attached/ │ │ │ │ │ │ │ └── AttachedAndroidAllocDriver.js │ │ │ │ │ │ ├── emulator/ │ │ │ │ │ │ │ ├── AVDValidator.js │ │ │ │ │ │ │ ├── AVDValidator.test.js │ │ │ │ │ │ │ ├── AVDsResolver.js │ │ │ │ │ │ │ ├── AVDsResolver.test.js │ │ │ │ │ │ │ ├── EmulatorAllocDriver.js │ │ │ │ │ │ │ ├── EmulatorLauncher.js │ │ │ │ │ │ │ ├── EmulatorLauncher.test.js │ │ │ │ │ │ │ ├── EmulatorVersionResolver.js │ │ │ │ │ │ │ ├── EmulatorVersionResolver.test.js │ │ │ │ │ │ │ ├── FreeEmulatorFinder.js │ │ │ │ │ │ │ ├── FreeEmulatorFinder.test.js │ │ │ │ │ │ │ ├── FreePortFinder.js │ │ │ │ │ │ │ ├── FreePortFinder.test.js │ │ │ │ │ │ │ ├── launchEmulatorProcess.js │ │ │ │ │ │ │ └── patchAvdSkinConfig.js │ │ │ │ │ │ ├── genycloud/ │ │ │ │ │ │ │ ├── GenyAllocDriver.js │ │ │ │ │ │ │ ├── GenyInstanceLauncher.js │ │ │ │ │ │ │ ├── GenyInstanceLauncher.test.js │ │ │ │ │ │ │ ├── GenyRecipeQuerying.js │ │ │ │ │ │ │ ├── GenyRecipeQuerying.test.js │ │ │ │ │ │ │ ├── GenyRegistry.js │ │ │ │ │ │ │ ├── GenyRegistry.test.js │ │ │ │ │ │ │ ├── exec/ │ │ │ │ │ │ │ │ ├── GenyCloudExec.js │ │ │ │ │ │ │ │ └── GenyCloudExec.test.js │ │ │ │ │ │ │ └── services/ │ │ │ │ │ │ │ ├── GenyInstanceLifecycleService.js │ │ │ │ │ │ │ ├── GenyInstanceLifecycleService.test.js │ │ │ │ │ │ │ ├── GenyRecipesService.js │ │ │ │ │ │ │ ├── GenyRecipesService.test.js │ │ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ │ │ └── GenyRecipesService.test.js.snap │ │ │ │ │ │ │ └── dto/ │ │ │ │ │ │ │ ├── GenyInstance.js │ │ │ │ │ │ │ ├── GenyInstance.test.js │ │ │ │ │ │ │ ├── GenyRecipe.js │ │ │ │ │ │ │ └── GenyRecipe.test.js │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ ├── DeviceInitCache.js │ │ │ │ │ │ ├── SystemUICfgHelper.js │ │ │ │ │ │ ├── SystemUICfgHelper.test.js │ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ │ └── SystemUICfgHelper.test.js.snap │ │ │ │ │ │ └── systemUICfgPresets.js │ │ │ │ │ └── ios/ │ │ │ │ │ ├── SimulatorAllocDriver.js │ │ │ │ │ └── SimulatorQuery.js │ │ │ │ └── factories/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── external.test.js.snap │ │ │ │ ├── android.js │ │ │ │ ├── base.js │ │ │ │ ├── external.js │ │ │ │ ├── external.test.js │ │ │ │ ├── index.js │ │ │ │ └── ios.js │ │ │ ├── common/ │ │ │ │ └── drivers/ │ │ │ │ ├── DeviceCookie.d.ts │ │ │ │ ├── android/ │ │ │ │ │ ├── cookies.d.ts │ │ │ │ │ ├── emulator/ │ │ │ │ │ │ └── exec/ │ │ │ │ │ │ └── EmulatorExec.js │ │ │ │ │ ├── exec/ │ │ │ │ │ │ ├── AAPT.js │ │ │ │ │ │ ├── AAPT.test.js │ │ │ │ │ │ ├── ADB.js │ │ │ │ │ │ ├── ADB.test.js │ │ │ │ │ │ ├── BinaryExec.js │ │ │ │ │ │ ├── BinaryExec.test.js │ │ │ │ │ │ ├── __mocks__/ │ │ │ │ │ │ │ └── aapt-results.js │ │ │ │ │ │ └── __snapshots__/ │ │ │ │ │ │ ├── AAPT.test.js.snap │ │ │ │ │ │ └── ADB.test.js.snap │ │ │ │ │ └── tools/ │ │ │ │ │ ├── ApkValidator.js │ │ │ │ │ ├── ApkValidator.test.js │ │ │ │ │ ├── AppInstallHelper.js │ │ │ │ │ ├── AppInstallHelper.test.js │ │ │ │ │ ├── AppUninstallHelper.js │ │ │ │ │ ├── AppUninstallHelper.test.js │ │ │ │ │ ├── DeviceHandle.js │ │ │ │ │ ├── DeviceHandle.test.js │ │ │ │ │ ├── EmulatorHandle.js │ │ │ │ │ ├── EmulatorHandle.test.js │ │ │ │ │ ├── EmulatorTelnet.js │ │ │ │ │ ├── FileTransfer.js │ │ │ │ │ ├── FileTransfer.test.js │ │ │ │ │ ├── Instrumentation.js │ │ │ │ │ ├── Instrumentation.test.js │ │ │ │ │ ├── InstrumentationLogsParser.js │ │ │ │ │ ├── InstrumentationLogsParser.test.js │ │ │ │ │ ├── MonitoredInstrumentation.js │ │ │ │ │ ├── MonitoredInstrumentation.test.js │ │ │ │ │ ├── TempFileTransfer.js │ │ │ │ │ ├── TempFileTransfer.test.js │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ └── ApkValidator.test.js.snap │ │ │ │ │ ├── apk.js │ │ │ │ │ ├── apk.test.js │ │ │ │ │ ├── instrumentationArgs.js │ │ │ │ │ └── instrumentationArgs.test.js │ │ │ │ └── ios/ │ │ │ │ ├── cookies.d.ts │ │ │ │ └── tools/ │ │ │ │ ├── AppleSimUtils.js │ │ │ │ ├── SimulatorAppCache.js │ │ │ │ ├── SimulatorAppCache.test.js │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── SimulatorAppCache.test.js.snap │ │ │ │ ├── applesimutils.mock.json │ │ │ │ └── xcrunSimctlList.mock.json │ │ │ ├── cookies/ │ │ │ │ └── index.js │ │ │ ├── runtime/ │ │ │ │ ├── RuntimeDevice.js │ │ │ │ ├── RuntimeDevice.test.js │ │ │ │ ├── drivers/ │ │ │ │ │ ├── DeviceDriverBase.js │ │ │ │ │ ├── android/ │ │ │ │ │ │ ├── AndroidDriver.js │ │ │ │ │ │ ├── AndroidDriver.test.js │ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ │ └── AndroidDriver.test.js.snap │ │ │ │ │ │ ├── attached/ │ │ │ │ │ │ │ ├── AttachedAndroidDriver.js │ │ │ │ │ │ │ └── AttachedAndroidDriver.test.js │ │ │ │ │ │ ├── emulator/ │ │ │ │ │ │ │ └── EmulatorDriver.js │ │ │ │ │ │ └── genycloud/ │ │ │ │ │ │ ├── GenyCloudDriver.js │ │ │ │ │ │ └── GenyCloudDriver.test.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── ios/ │ │ │ │ │ ├── AppStateResetFallback.js │ │ │ │ │ ├── AppStateResetFallback.test.js │ │ │ │ │ ├── IosDriver.js │ │ │ │ │ ├── SimulatorDriver.js │ │ │ │ │ └── SimulatorDriver.test.js │ │ │ │ ├── factories/ │ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ │ └── external.test.js.snap │ │ │ │ │ ├── android.js │ │ │ │ │ ├── base.js │ │ │ │ │ ├── external.js │ │ │ │ │ ├── external.test.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── ios.js │ │ │ │ └── utils/ │ │ │ │ ├── LaunchArgsEditor.js │ │ │ │ ├── LaunchArgsEditor.test.js │ │ │ │ ├── ScopedLaunchArgsEditor.js │ │ │ │ └── Storage.js │ │ │ ├── servicelocator/ │ │ │ │ └── android/ │ │ │ │ ├── emulatorServiceLocator.js │ │ │ │ ├── genycloudServiceLocator.js │ │ │ │ └── index.js │ │ │ └── validation/ │ │ │ ├── EnvironmentValidatorBase.js │ │ │ ├── android/ │ │ │ │ ├── GenycloudEnvValidator.js │ │ │ │ ├── GenycloudEnvValidator.test.js │ │ │ │ └── __snapshots__/ │ │ │ │ └── GenycloudEnvValidator.test.js.snap │ │ │ ├── factories/ │ │ │ │ └── index.js │ │ │ └── ios/ │ │ │ ├── IosSimulatorEnvValidator.js │ │ │ └── IosSimulatorEnvValidator.test.js │ │ ├── environmentFactory.js │ │ ├── environmentFactory.test.js │ │ ├── errors/ │ │ │ ├── DetoxConfigError.js │ │ │ ├── DetoxConfigErrorComposer.js │ │ │ ├── DetoxConfigErrorComposer.test.js │ │ │ ├── DetoxError.js │ │ │ ├── DetoxInternalError.js │ │ │ ├── DetoxInternalError.test.js │ │ │ ├── DetoxRuntimeError.js │ │ │ ├── DetoxRuntimeError.test.js │ │ │ ├── DetoxRuntimeErrorComposer.js │ │ │ ├── DetoxRuntimeErrorComposer.test.js │ │ │ ├── __snapshots__/ │ │ │ │ ├── DetoxConfigErrorComposer.test.js.snap │ │ │ │ ├── DetoxInternalError.test.js.snap │ │ │ │ ├── DetoxRuntimeError.test.js.snap │ │ │ │ └── DetoxRuntimeErrorComposer.test.js.snap │ │ │ ├── index.js │ │ │ └── longreads/ │ │ │ ├── __snapshots__/ │ │ │ │ └── failedToReachTheApp.test.js.snap │ │ │ ├── failedToReachTheApp.js │ │ │ └── failedToReachTheApp.test.js │ │ ├── invoke/ │ │ │ ├── Espresso.js │ │ │ ├── EspressoWeb.js │ │ │ ├── Invoke.js │ │ │ └── Invoke.test.js │ │ ├── invoke.js │ │ ├── invoke.test.js │ │ ├── ios/ │ │ │ ├── XCUITestRunner.js │ │ │ ├── XCUITestRunner.test.js │ │ │ ├── expectTwo.js │ │ │ ├── expectTwo.test.js │ │ │ ├── expectTwoApiCoverage.test.js │ │ │ ├── system.js │ │ │ └── web.js │ │ ├── ipc/ │ │ │ ├── IPCClient.js │ │ │ ├── IPCServer.js │ │ │ ├── SessionState.js │ │ │ ├── SessionState.test.js │ │ │ └── ipc.test.js │ │ ├── logger/ │ │ │ ├── DetoxLogger.js │ │ │ ├── DetoxLogger.test.js │ │ │ ├── __mocks__/ │ │ │ │ ├── DetoxLogger.js │ │ │ │ └── index.js │ │ │ ├── __snapshots__/ │ │ │ │ └── DetoxLogger.test.js.snap │ │ │ ├── index.js │ │ │ └── utils/ │ │ │ ├── BunyanLogger.js │ │ │ ├── CategoryThreadDispatcher.js │ │ │ ├── DetoxLogFinalizer.js │ │ │ ├── DetoxLogFinalizer.test.js │ │ │ ├── MessageStack.js │ │ │ ├── ThreadDispatcher.js │ │ │ ├── __snapshots__/ │ │ │ │ └── DetoxLogFinalizer.test.js.snap │ │ │ ├── customConsoleLogger.js │ │ │ ├── customConsoleLogger.test.js │ │ │ ├── getMainCategory.js │ │ │ ├── sanitizeBunyanContext.js │ │ │ ├── streams/ │ │ │ │ ├── BunyanTransformer.js │ │ │ │ ├── BunyanTransformer.test.js │ │ │ │ ├── ChromeTraceTransformer.js │ │ │ │ ├── DetoxJSONLParser.js │ │ │ │ ├── JSONLStringer.js │ │ │ │ ├── JSONLStringer.test.js │ │ │ │ ├── index.js │ │ │ │ └── transformers.js │ │ │ └── tracerLegacy.js │ │ ├── matchers/ │ │ │ ├── factories/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── index.test.js.snap │ │ │ │ ├── index.js │ │ │ │ └── index.test.js │ │ │ ├── semanticTypes.js │ │ │ └── semanticTypes.test.js │ │ ├── pilot/ │ │ │ ├── DetoxPilot.js │ │ │ └── DetoxPilot.test.js │ │ ├── realms/ │ │ │ ├── DetoxConstants.js │ │ │ ├── DetoxContext.js │ │ │ ├── DetoxInternalsFacade.js │ │ │ ├── DetoxPrimaryContext.js │ │ │ ├── DetoxPrimaryContext.test.js │ │ │ ├── DetoxSecondaryContext.js │ │ │ ├── DetoxSecondaryContext.test.js │ │ │ ├── __snapshots__/ │ │ │ │ └── DetoxPrimaryContext.test.js.snap │ │ │ ├── primary.js │ │ │ ├── secondary.js │ │ │ └── symbols.js │ │ ├── server/ │ │ │ ├── DetoxConnection.js │ │ │ ├── DetoxServer.js │ │ │ ├── DetoxServer.test.js │ │ │ ├── DetoxSession.js │ │ │ ├── DetoxSession.test.js │ │ │ ├── DetoxSessionManager.js │ │ │ ├── __mocks__/ │ │ │ │ └── FakeWebSocket.js │ │ │ ├── __snapshots__/ │ │ │ │ ├── DetoxServer.test.js.snap │ │ │ │ └── DetoxSession.test.js.snap │ │ │ ├── __tests__/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── server-integration.test.js.snap │ │ │ │ └── server-integration.test.js │ │ │ └── handlers/ │ │ │ ├── AnonymousConnectionHandler.js │ │ │ ├── AppConnectionHandler.js │ │ │ ├── RegisteredConnectionHandler.js │ │ │ └── TesterConnectionHandler.js │ │ └── utils/ │ │ ├── AsyncEmitter.js │ │ ├── AsyncEmitter.test.js │ │ ├── Deferred.js │ │ ├── Deferred.test.js │ │ ├── ExclusiveLockfile.js │ │ ├── ExclusiveLockfile.test.js │ │ ├── PIDService.js │ │ ├── PIDService.test.js │ │ ├── Timer.js │ │ ├── Timer.test.js │ │ ├── __mocks__/ │ │ │ ├── logger.js │ │ │ └── trace.js │ │ ├── __snapshots__/ │ │ │ └── assertArgument.test.js.snap │ │ ├── appdatapath.js │ │ ├── appendFile.js │ │ ├── appendFile.test.js │ │ ├── argparse.js │ │ ├── argparse.test.js │ │ ├── assertArgument.js │ │ ├── assertArgument.test.js │ │ ├── assertIsFunction.js │ │ ├── assertIsFunction.test.js │ │ ├── callsites.js │ │ ├── callsites.test.js │ │ ├── childProcess/ │ │ │ ├── exec.js │ │ │ ├── exec.test.js │ │ │ ├── index.js │ │ │ ├── opsCounter.js │ │ │ ├── spawn.js │ │ │ └── spawn.test.js │ │ ├── constructSafeFilename.js │ │ ├── constructSafeFilename.test.js │ │ ├── dateUtils.js │ │ ├── dateUtils.test.js │ │ ├── debug.js │ │ ├── encoding.js │ │ ├── encoding.test.js │ │ ├── envUtils.js │ │ ├── envUtils.test.js │ │ ├── environment.js │ │ ├── environment.test.js │ │ ├── errorUtils.js │ │ ├── errorUtils.test.js │ │ ├── fsext.js │ │ ├── fsext.test.js │ │ ├── getAbsoluteBinaryPath.js │ │ ├── getAbsoluteBinaryPath.test.js │ │ ├── invocationTraceDescriptions.js │ │ ├── isArrowFunction.js │ │ ├── isArrowFunction.test.js │ │ ├── isPromise.js │ │ ├── isPromise.test.js │ │ ├── isRegExp.js │ │ ├── isValidWebsocketURL.js │ │ ├── isValidWebsocketURL.test.js │ │ ├── logger.js │ │ ├── mapDeviceLongPressArguments.js │ │ ├── mapDeviceLongPressArguments.test.js │ │ ├── mapLongPressArguments.js │ │ ├── mapLongPressArguments.test.js │ │ ├── pathUtils.js │ │ ├── pathUtils.test.js │ │ ├── pipeCommands.js │ │ ├── pressAnyKey.js │ │ ├── repl.js │ │ ├── resolveModuleFromPath.js │ │ ├── resolveModuleFromPath.test.js │ │ ├── retry.js │ │ ├── retry.test.js │ │ ├── rn-consts/ │ │ │ └── rn-consts.js │ │ ├── safeAsync.js │ │ ├── safeAsync.test.js │ │ ├── setUniqueProperty.js │ │ ├── setUniqueProperty.test.js │ │ ├── shellQuote.js │ │ ├── shellQuote.test.js │ │ ├── shellUtils.js │ │ ├── shellUtils.test.js │ │ ├── sleep.js │ │ ├── sleep.test.js │ │ ├── string.js │ │ ├── string.test.js │ │ ├── tempfile.js │ │ ├── tempfile.test.js │ │ ├── trace.test.js │ │ ├── traceInvocationCall.js │ │ ├── traceInvocationCall.test.js │ │ ├── traceMethods.js │ │ ├── uuid.js │ │ ├── wrapWithStackTraceCutter.js │ │ └── wrapWithStackTraceCutter.test.js │ ├── test/ │ │ ├── .buckconfig │ │ ├── .eslintignore │ │ ├── .eslintrc.js │ │ ├── .gitignore │ │ ├── .nycrc │ │ ├── android/ │ │ │ ├── app/ │ │ │ │ ├── BUCK │ │ │ │ ├── build.gradle │ │ │ │ ├── keystore.jks │ │ │ │ ├── proguard-rules.pro │ │ │ │ └── src/ │ │ │ │ ├── androidTest/ │ │ │ │ │ └── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── example/ │ │ │ │ │ ├── DetoxTest.java │ │ │ │ │ ├── DetoxTestAppJUnitRunner.java │ │ │ │ │ └── TestButlerProbe.java │ │ │ │ └── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── example/ │ │ │ │ │ ├── AnimationViewManager.java │ │ │ │ │ ├── CrashingActivity.java │ │ │ │ │ ├── DetoxRNHost.kt │ │ │ │ │ ├── DoubleTapsTextViewManager.java │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ ├── MainApplication.kt │ │ │ │ │ ├── NativeModule.java │ │ │ │ │ ├── NativeModulePackage.java │ │ │ │ │ ├── SingleInstanceActivity.java │ │ │ │ │ ├── SluggishTextTextViewManager.java │ │ │ │ │ └── utils/ │ │ │ │ │ ├── AnimatorListenerStub.java │ │ │ │ │ ├── DetoxSoLoader.kt │ │ │ │ │ ├── DoubleTapListenerStub.java │ │ │ │ │ ├── ReactNativeExtensionReflected.java │ │ │ │ │ └── ViewSpies.java │ │ │ │ └── res/ │ │ │ │ ├── layout/ │ │ │ │ │ └── animation_test.xml │ │ │ │ └── values/ │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ ├── build.gradle │ │ │ ├── gradle/ │ │ │ │ └── wrapper/ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ └── gradle-wrapper.properties │ │ │ ├── gradle.properties │ │ │ ├── gradlew │ │ │ ├── gradlew.bat │ │ │ ├── keystores/ │ │ │ │ ├── BUCK │ │ │ │ └── debug.keystore.properties │ │ │ └── settings.gradle │ │ ├── e2e/ │ │ │ ├── 01.sanity.test.js │ │ │ ├── 02.matchers.test.js │ │ │ ├── 03.actions-scroll.test.js │ │ │ ├── 03.actions.test.js │ │ │ ├── 03.actions.visibility-workaround.test.js │ │ │ ├── 03.integ-actions.test.js │ │ │ ├── 04.assertions.test.js │ │ │ ├── 05.waitfor.misc.test.js │ │ │ ├── 05.waitfor.test.js │ │ │ ├── 06.device-orientation.test.js │ │ │ ├── 06.device-tap.test.js │ │ │ ├── 06.device.test.js │ │ │ ├── 06.device.view-hierarchy.test.js │ │ │ ├── 07.stress-tests.test.js │ │ │ ├── 08.stress-root.test.js │ │ │ ├── 09.stress-timeouts.test.js │ │ │ ├── 10.async-and-callbacks.test.js │ │ │ ├── 11.user-notifications.test.js │ │ │ ├── 12.animations.test.js │ │ │ ├── 13.permissions.test.js │ │ │ ├── 14.network.test.js │ │ │ ├── 15.urls-and-launchArgs.test.js │ │ │ ├── 15.urls.test.js │ │ │ ├── 16.location.test.js │ │ │ ├── 17.datePicker.test.js │ │ │ ├── 17.picker.test.js │ │ │ ├── 18.user-activities.test.js │ │ │ ├── 19.app-responsiveness.test.js │ │ │ ├── 19.crash-handling.test.js │ │ │ ├── 20.background-foreground.transitions.test.js │ │ │ ├── 21.artifacts.test.js │ │ │ ├── 22.launch-args.test.js │ │ │ ├── 23.flows.test.js │ │ │ ├── 24.uidevice.test.js │ │ │ ├── 26.element-screenshots.test.js │ │ │ ├── 27.retries.test.js │ │ │ ├── 27.semantic-types.test.js │ │ │ ├── 28.drag-and-drop.test.js │ │ │ ├── 29.webview.test.js │ │ │ ├── 30.custom-keyboard.test.js │ │ │ ├── 32.visibility-debug-artifacts.test.js │ │ │ ├── 33.attributes.test.js │ │ │ ├── 34.visibility.test.js │ │ │ ├── 35.overlay.test.js │ │ │ ├── 36.system.test.js │ │ │ ├── 37.dialogs.test.js │ │ │ ├── 38.config-systemui.test.js │ │ │ ├── assets/ │ │ │ │ ├── view-hierarchy-web-view.73.android.txt │ │ │ │ ├── view-hierarchy-web-view.73.ios.txt │ │ │ │ ├── view-hierarchy-web-view.75.android.txt │ │ │ │ ├── view-hierarchy-web-view.75.ios.txt │ │ │ │ ├── view-hierarchy-web-view.76.android.txt │ │ │ │ ├── view-hierarchy-web-view.76.ios.new-arch.txt │ │ │ │ ├── view-hierarchy-web-view.76.ios.txt │ │ │ │ ├── view-hierarchy-with-test-id-injection.73.android.txt │ │ │ │ ├── view-hierarchy-with-test-id-injection.73.ios.txt │ │ │ │ ├── view-hierarchy-with-test-id-injection.75.android.txt │ │ │ │ ├── view-hierarchy-with-test-id-injection.75.ios.txt │ │ │ │ ├── view-hierarchy-with-test-id-injection.76.android.txt │ │ │ │ ├── view-hierarchy-with-test-id-injection.76.ios.new-arch.txt │ │ │ │ ├── view-hierarchy-with-test-id-injection.76.ios.txt │ │ │ │ ├── view-hierarchy-without-test-id-injection.73.android.txt │ │ │ │ ├── view-hierarchy-without-test-id-injection.73.ios.txt │ │ │ │ ├── view-hierarchy-without-test-id-injection.75.android.txt │ │ │ │ ├── view-hierarchy-without-test-id-injection.75.ios.txt │ │ │ │ ├── view-hierarchy-without-test-id-injection.76.android.txt │ │ │ │ ├── view-hierarchy-without-test-id-injection.76.ios.new-arch.txt │ │ │ │ └── view-hierarchy-without-test-id-injection.76.ios.txt │ │ │ ├── customPathBuilder.js │ │ │ ├── detox.config-android.js │ │ │ ├── detox.config.js │ │ │ ├── drivers/ │ │ │ │ ├── actions-driver.js │ │ │ │ ├── fs-scroll-driver.js │ │ │ │ ├── integ-actions-drivers.js │ │ │ │ ├── launch-args-driver.js │ │ │ │ └── url-driver.js │ │ │ ├── jest.config.js │ │ │ ├── pilot/ │ │ │ │ ├── 01.pilot.sanity.test.js │ │ │ │ ├── 02.pilot.actions.test.js │ │ │ │ ├── 03.pilot.shape-match.test.js │ │ │ │ ├── 04.webview.test.js │ │ │ │ ├── 05.system.test.js │ │ │ │ ├── 06.waitfor.test.js │ │ │ │ ├── 07.pilot.assertions.test.js │ │ │ │ ├── 08.pilot.location.test.js │ │ │ │ ├── 09.pilot.datepicker.test.js │ │ │ │ ├── 10.pilot.visibility.test.js │ │ │ │ └── __pilot_cache__/ │ │ │ │ ├── 01.pilot.sanity.test.json │ │ │ │ ├── 02.pilot.actions.test.json │ │ │ │ ├── 03.pilot.shape-match.test.json │ │ │ │ ├── 04.webview.test.json │ │ │ │ ├── 06.waitfor.test.json │ │ │ │ ├── 07.pilot.assertions.test.json │ │ │ │ ├── 08.pilot.location.test.json │ │ │ │ ├── 09.pilot.datepicker.test.json │ │ │ │ └── 10.pilot.visibility.test.json │ │ │ ├── setup.js │ │ │ ├── testEnvironment.js │ │ │ └── utils/ │ │ │ ├── WixPromptHandler.js │ │ │ ├── artifactUtils.js │ │ │ ├── custom-describes.js │ │ │ ├── custom-expects.js │ │ │ ├── deviceInfo.js │ │ │ ├── log-interceptor.js │ │ │ ├── notifications.js │ │ │ ├── rnSkipper.js │ │ │ ├── sleep.js │ │ │ ├── snapshot.js │ │ │ └── waitForCondition.js │ │ ├── e2e-unhappy/ │ │ │ ├── early-syntax-error.test.js │ │ │ ├── env-setup-timeout.test.js │ │ │ ├── failing-device-method.test.js │ │ │ └── failing-matcher.test.js │ │ ├── index.android.js │ │ ├── index.ios.js │ │ ├── integration/ │ │ │ ├── __snapshots__/ │ │ │ │ └── timeline-artifact.test.js.snap │ │ │ ├── bail-test.test.js │ │ │ ├── e2e/ │ │ │ │ ├── config.js │ │ │ │ ├── custom-reporter.js │ │ │ │ ├── flaky.test.js │ │ │ │ ├── focused.test.js │ │ │ │ ├── passing-sandbox.test.js │ │ │ │ ├── passing-simple.test.js │ │ │ │ └── passing-skipped.test.js │ │ │ ├── initialization-test.test.js │ │ │ ├── jest.config.js │ │ │ ├── stub/ │ │ │ │ ├── StubArtifactPluginsProvider.js │ │ │ │ ├── StubDeviceAllocationDriver.js │ │ │ │ ├── StubEnvValidator.js │ │ │ │ ├── StubExpect.js │ │ │ │ ├── StubRuntimeDriver.js │ │ │ │ ├── index.js │ │ │ │ └── stubSleeps.js │ │ │ ├── timeline-artifact.test.js │ │ │ └── utils/ │ │ │ ├── exec.js │ │ │ ├── printConsole.mjs │ │ │ └── simplistic-runner.js │ │ ├── ios/ │ │ │ ├── .xcode.env │ │ │ ├── AppDelegate Extensions/ │ │ │ │ └── AppDelegate+OverlayView.swift │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Podfile │ │ │ ├── ReactModules/ │ │ │ │ ├── NativeModule.h │ │ │ │ ├── NativeModule.m │ │ │ │ ├── ShakeEventEmitter.h │ │ │ │ └── ShakeEventEmitter.m │ │ │ ├── UI/ │ │ │ │ ├── CustomKeyboardDelegate.swift │ │ │ │ ├── NativeScreenManager.h │ │ │ │ ├── NativeScreenManager.swift │ │ │ │ ├── OverlayMessageView.swift │ │ │ │ └── UIViewController+Shake.swift │ │ │ ├── example/ │ │ │ │ ├── Images.xcassets/ │ │ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ ├── Info.plist │ │ │ │ ├── LaunchScreen.storyboard │ │ │ │ ├── PrivacyInfo.xcprivacy │ │ │ │ └── example.entitlements │ │ │ ├── example-Bridging-Header.h │ │ │ ├── example-ci-Bridging-Header.h │ │ │ ├── example.xcodeproj/ │ │ │ │ ├── project.pbxproj │ │ │ │ └── xcshareddata/ │ │ │ │ └── xcschemes/ │ │ │ │ └── example.xcscheme │ │ │ └── main.m │ │ ├── metro.config.js │ │ ├── mock-server/ │ │ │ └── mock-server.js │ │ ├── package.json │ │ ├── registerEarlyCrashIfNeeded.js │ │ ├── repeat_suite.sh │ │ ├── rn-cli.config.js │ │ ├── scripts/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── verify_artifacts_are_not_missing.android.test.js.snap │ │ │ │ └── verify_artifacts_are_not_missing.ios.test.js.snap │ │ │ ├── assert_timeout.js │ │ │ ├── ci_unhappy.sh │ │ │ ├── postinstall.js │ │ │ ├── test_android.sh │ │ │ ├── verify_artifacts_are_not_missing.android.test.js │ │ │ ├── verify_artifacts_are_not_missing.ios.test.js │ │ │ └── verify_artifacts_are_not_missing.js │ │ ├── src/ │ │ │ ├── Screens/ │ │ │ │ ├── AbstractArgsListScreen.js │ │ │ │ ├── ActionsScreen.js │ │ │ │ ├── AlertScreen.tsx │ │ │ │ ├── AnimationsScreen.js │ │ │ │ ├── AssertionsScreen.js │ │ │ │ ├── AttributesScreen.js │ │ │ │ ├── DatePickerScreen.js │ │ │ │ ├── DeviceScreen.js │ │ │ │ ├── DeviceTapScreen.tsx │ │ │ │ ├── DragNDropScreen.tsx │ │ │ │ ├── ElementScreenshotScreen.js │ │ │ │ ├── IntegActionsScreen.js │ │ │ │ ├── LanguageScreen.js │ │ │ │ ├── LaunchArgsScreen.js │ │ │ │ ├── LaunchNotificationScreen.js │ │ │ │ ├── LaunchUrlScreen.js │ │ │ │ ├── LocationScreen.js │ │ │ │ ├── MatchersScreen.js │ │ │ │ ├── NativeAnimationsScreen.js │ │ │ │ ├── NetworkScreen.js │ │ │ │ ├── Orientation.js │ │ │ │ ├── OverlayScreen.js │ │ │ │ ├── Permissions.js │ │ │ │ ├── PickerViewScreen.js │ │ │ │ ├── SanityScreen.js │ │ │ │ ├── ScrollActionsScreen.js │ │ │ │ ├── SemanticTypesScreen.js │ │ │ │ ├── ShakeScreen.js │ │ │ │ ├── ShapeMatchGameScreen.tsx │ │ │ │ ├── StressScreen.js │ │ │ │ ├── SwitchRootScreen.js │ │ │ │ ├── SystemDialogsScreen.js │ │ │ │ ├── TimeoutsScreen.js │ │ │ │ ├── VirtualizedListStressScreen.js │ │ │ │ ├── VisibilityExpectationScreen.js │ │ │ │ ├── VisibilityScreen.js │ │ │ │ ├── WaitForScreen.js │ │ │ │ ├── WebViewScreen.js │ │ │ │ └── index.js │ │ │ ├── Views/ │ │ │ │ ├── BadgeButton.js │ │ │ │ ├── ScrollBarGradient.js │ │ │ │ ├── SegmentedControl.js │ │ │ │ └── TextInput.js │ │ │ ├── app.js │ │ │ ├── helpers/ │ │ │ │ ├── buffers.js │ │ │ │ └── storage.js │ │ │ └── types.d.ts │ │ ├── tsconfig.json │ │ └── types/ │ │ ├── .eslintrc.js │ │ ├── detox-global-tests.ts │ │ ├── detox-integration-tests.ts │ │ ├── detox-internals-tests.ts │ │ ├── detox-module-tests.ts │ │ └── tsconfig.json │ ├── tsconfig.json │ └── wallaby.js ├── detox-cli/ │ ├── cli.js │ └── package.json ├── docs/ │ ├── api/ │ │ ├── actions.md │ │ ├── device.md │ │ ├── expect.md │ │ ├── internals.mdx │ │ ├── logger.mdx │ │ ├── matchers.md │ │ ├── partials/ │ │ │ ├── _lifecycle-cli-many-workers.md │ │ │ ├── _lifecycle-cli-single-worker.md │ │ │ ├── _lifecycle-jest-many-workers.md │ │ │ └── _lifecycle-jest-single-worker.md │ │ ├── pilot.md │ │ ├── system.md │ │ └── webviews.md │ ├── architecture/ │ │ ├── artifacts.md │ │ ├── client-server.md │ │ └── devices.md │ ├── articles/ │ │ ├── design-principles.md │ │ ├── how-detox-works.md │ │ └── third-party-drivers.md │ ├── cli/ │ │ ├── build-framework-cache.md │ │ ├── build.md │ │ ├── clean-framework-cache.md │ │ ├── init.md │ │ ├── overview.md │ │ ├── rebuild-framework-cache.md │ │ ├── recorder.md │ │ ├── reset-lock-file.md │ │ ├── run-server.md │ │ ├── start.md │ │ └── test.md │ ├── config/ │ │ ├── apps.mdx │ │ ├── artifacts.mdx │ │ ├── behavior.mdx │ │ ├── devices.mdx │ │ ├── logger.mdx │ │ ├── overview.mdx │ │ ├── partials/ │ │ │ ├── _location-dictionaries.mdx │ │ │ └── _location.mdx │ │ ├── session.mdx │ │ └── testRunner.mdx │ ├── contributing/ │ │ ├── code/ │ │ │ ├── building-and-testing.md │ │ │ ├── example-projects.md │ │ │ ├── overview.md │ │ │ ├── reviewing-pull-requests.md │ │ │ ├── setting-up-the-dev-environment.md │ │ │ └── submitting-pull-requests.md │ │ ├── code-of-conduct.md │ │ ├── documentation.md │ │ ├── feature-requests.md │ │ ├── questions/ │ │ │ ├── answering-questions.md │ │ │ └── asking-questions.md │ │ └── reporting-bugs.md │ ├── contributing.md │ ├── demo.mdx │ ├── guide/ │ │ ├── android-dev-env.md │ │ ├── cucumber-js-integration.md │ │ ├── detox-repl.md │ │ ├── developing-while-writing-tests.md │ │ ├── genymotion-saas.mdx │ │ ├── launch-args.md │ │ ├── migration.md │ │ ├── mocking-open-with-url.md │ │ ├── mocking-user-activity.md │ │ ├── mocking-user-notifications.md │ │ ├── mocking.md │ │ ├── parallel-test-execution.md │ │ ├── proguard-configuration.md │ │ ├── taking-screenshots.md │ │ ├── test-id.md │ │ ├── testing-webviews.md │ │ ├── typescript.md │ │ └── uninstalling.md │ ├── introduction/ │ │ ├── debugging.mdx │ │ ├── environment-setup.md │ │ ├── getting-started.mdx │ │ ├── partials/ │ │ │ ├── _debugging-attach-chrome.mdx │ │ │ ├── _debugging-attach-vscode.mdx │ │ │ ├── _debugging-attach-webstorm.mdx │ │ │ ├── _debugging-native-code-compliing-android.mdx │ │ │ ├── _debugging-native-code-compliing-ios.mdx │ │ │ ├── _debugging-native-code-config-android.mdx │ │ │ ├── _debugging-native-code-config-ios.mdx │ │ │ ├── _debugging-native-code-run-android.mdx │ │ │ ├── _debugging-native-code-run-ios.mdx │ │ │ ├── _debugging-native-code-troubleshooting-android.mdx │ │ │ ├── _getting-started-expo.md │ │ │ ├── _getting-started-other.mdx │ │ │ ├── _getting-started-rn.md │ │ │ ├── _project-setup-apps-android.mdx │ │ │ ├── _project-setup-apps-ios.mdx │ │ │ ├── _project-setup-bootstrap-other.mdx │ │ │ ├── _project-setup-bootstrap-rn.mdx │ │ │ ├── _project-setup-build.mdx │ │ │ ├── _project-setup-devices-android.mdx │ │ │ └── _project-setup-devices-ios.mdx │ │ ├── preparing-for-ci.md │ │ ├── project-setup.mdx │ │ └── your-first-test.mdx │ ├── pilot/ │ │ ├── best-practices.md │ │ └── testing-with-pilot.md │ ├── troubleshooting/ │ │ ├── artifacts.md │ │ ├── building-the-app.md │ │ ├── element-matching.md │ │ ├── flakiness.md │ │ ├── running-tests.md │ │ └── synchronization.md │ └── uml/ │ └── sequence/ │ ├── boot-cli-many-workers.uml │ ├── boot-cli-single-worker.uml │ ├── boot-jest-many-workers.uml │ ├── boot-jest-single-worker.uml │ ├── jest-diagram-runInBand.uml │ └── jest-diagram.uml ├── examples/ │ ├── SwiftExample/ │ │ ├── SwiftExample/ │ │ │ ├── AppDelegate.swift │ │ │ ├── Assets.xcassets/ │ │ │ │ └── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj/ │ │ │ │ ├── LaunchScreen.storyboard │ │ │ │ └── Main.storyboard │ │ │ ├── Info.plist │ │ │ └── ViewController.swift │ │ └── SwiftExample.xcodeproj/ │ │ └── project.pbxproj │ ├── demo-native-android/ │ │ ├── README.md │ │ ├── app/ │ │ │ ├── build.gradle │ │ │ ├── proguard-rules.pro │ │ │ └── src/ │ │ │ ├── androidTest/ │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── detox/ │ │ │ │ └── example/ │ │ │ │ └── detoxexample/ │ │ │ │ ├── ExampleInstrumentedTest.java │ │ │ │ ├── MainActivityTest.java │ │ │ │ └── MainActivityTest2.java │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── detox/ │ │ │ │ │ └── example/ │ │ │ │ │ └── detoxexample/ │ │ │ │ │ └── MainActivity.java │ │ │ │ └── res/ │ │ │ │ ├── layout/ │ │ │ │ │ └── activity_test.xml │ │ │ │ ├── values/ │ │ │ │ │ ├── colors.xml │ │ │ │ │ ├── dimens.xml │ │ │ │ │ ├── strings.xml │ │ │ │ │ └── styles.xml │ │ │ │ └── values-w820dp/ │ │ │ │ └── dimens.xml │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── detox/ │ │ │ └── example/ │ │ │ └── detoxexample/ │ │ │ └── ExampleUnitTest.java │ │ ├── build.gradle │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── package.json │ │ └── settings.gradle │ ├── demo-native-ios/ │ │ ├── .gitignore │ │ ├── NativeExample/ │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Assets.xcassets/ │ │ │ │ └── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ ├── Base.lproj/ │ │ │ │ └── LaunchScreen.storyboard │ │ │ ├── GreetingViewController.h │ │ │ ├── GreetingViewController.m │ │ │ ├── Info.plist │ │ │ ├── Main.storyboard │ │ │ ├── ViewController.h │ │ │ ├── ViewController.m │ │ │ └── main.m │ │ ├── NativeExample.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ └── NativeExample.xcscheme │ │ ├── README.md │ │ └── package.json │ ├── demo-plugin/ │ │ ├── driver.js │ │ ├── e2e/ │ │ │ ├── app-hello.test.js │ │ │ └── config.json │ │ └── package.json │ ├── demo-pure-native-android/ │ │ ├── .gitignore │ │ ├── app/ │ │ │ ├── .gitignore │ │ │ ├── build.gradle │ │ │ ├── proguard-rules.pro │ │ │ └── src/ │ │ │ ├── androidTest/ │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── example/ │ │ │ │ └── detox/ │ │ │ │ └── purenative/ │ │ │ │ └── SanityInstrumentationTest.kt │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── example/ │ │ │ │ └── detox/ │ │ │ │ └── purenative/ │ │ │ │ ├── ActionsFragment.kt │ │ │ │ ├── DetoxRVAdapter.kt │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── MainFragment.kt │ │ │ │ └── utils/ │ │ │ │ └── RainbowColors.kt │ │ │ └── res/ │ │ │ ├── drawable/ │ │ │ │ └── ic_launcher_background.xml │ │ │ ├── drawable-v24/ │ │ │ │ └── ic_launcher_foreground.xml │ │ │ ├── layout/ │ │ │ │ ├── actions_rv_item.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── content_main.xml │ │ │ │ ├── fragment_actions.xml │ │ │ │ └── fragment_main.xml │ │ │ ├── menu/ │ │ │ │ └── menu_main.xml │ │ │ ├── mipmap-anydpi-v26/ │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── navigation/ │ │ │ │ └── nav_graph.xml │ │ │ └── values/ │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── build.gradle │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ └── settings.gradle │ ├── demo-react-native/ │ │ ├── .buckconfig │ │ ├── .flowconfig │ │ ├── .gitignore │ │ ├── .watchmanconfig │ │ ├── Gemfile │ │ ├── README.md │ │ ├── android/ │ │ │ ├── app/ │ │ │ │ ├── BUCK │ │ │ │ ├── build.gradle │ │ │ │ ├── keystore.jks │ │ │ │ ├── proguard-rules.pro │ │ │ │ └── src/ │ │ │ │ ├── androidTest/ │ │ │ │ │ └── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── example/ │ │ │ │ │ ├── DetoxTest.java │ │ │ │ │ └── DetoxTestAppJUnitRunner.java │ │ │ │ └── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── example/ │ │ │ │ │ ├── MainActivity.kt │ │ │ │ │ └── MainApplication.kt │ │ │ │ └── res/ │ │ │ │ ├── values/ │ │ │ │ │ ├── strings.xml │ │ │ │ │ └── styles.xml │ │ │ │ └── xml/ │ │ │ │ └── network_security_config.xml │ │ │ ├── build.gradle │ │ │ ├── gradle/ │ │ │ │ └── wrapper/ │ │ │ │ ├── gradle-wrapper.jar │ │ │ │ └── gradle-wrapper.properties │ │ │ ├── gradle.properties │ │ │ ├── gradlew │ │ │ ├── gradlew.bat │ │ │ ├── keystores/ │ │ │ │ ├── BUCK │ │ │ │ └── debug.keystore.properties │ │ │ └── settings.gradle │ │ ├── app.js │ │ ├── babel.config.json │ │ ├── detox.config.js │ │ ├── e2e/ │ │ │ ├── globalSetup.ts │ │ │ ├── jest.config.js │ │ │ ├── setup.ts │ │ │ ├── suite1.test.ts │ │ │ └── suite2.test.ts │ │ ├── index.android.js │ │ ├── index.ios.js │ │ ├── ios/ │ │ │ ├── Podfile │ │ │ ├── example/ │ │ │ │ ├── AppDelegate.h │ │ │ │ ├── AppDelegate.m │ │ │ │ ├── Base.lproj/ │ │ │ │ │ └── LaunchScreen.xib │ │ │ │ ├── Images.xcassets/ │ │ │ │ │ └── AppIcon.appiconset/ │ │ │ │ │ └── Contents.json │ │ │ │ ├── Info.plist │ │ │ │ ├── PrivacyInfo.xcprivacy │ │ │ │ └── main.m │ │ │ ├── example.xcodeproj/ │ │ │ │ ├── project.pbxproj │ │ │ │ └── xcshareddata/ │ │ │ │ └── xcschemes/ │ │ │ │ ├── example Release.xcscheme │ │ │ │ └── example.xcscheme │ │ │ ├── example.xcworkspace/ │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ └── xcshareddata/ │ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ │ └── WorkspaceSettings.xcsettings │ │ │ └── exampleTests/ │ │ │ ├── Info.plist │ │ │ └── exampleTests.m │ │ ├── metro.config.js │ │ ├── package.json │ │ ├── rn-cli.config.js │ │ ├── scripts/ │ │ │ ├── bloatBundle.mjs │ │ │ ├── postinstall.js │ │ │ └── start-rn.sh │ │ └── tsconfig.json │ └── demo-react-native-detox-instruments/ │ ├── .buckconfig │ ├── .flowconfig │ ├── .gitignore │ ├── .watchmanconfig │ ├── README.md │ ├── app.js │ ├── index.android.js │ ├── index.js │ ├── ios/ │ │ ├── example/ │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Base.lproj/ │ │ │ │ └── LaunchScreen.xib │ │ │ ├── Images.xcassets/ │ │ │ │ └── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ ├── Info.plist │ │ │ └── main.m │ │ ├── example.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ ├── example Release.xcscheme │ │ │ └── example.xcscheme │ │ └── exampleTests/ │ │ ├── Info.plist │ │ └── exampleTests.m │ ├── metro.config.js │ └── package.json ├── generation/ │ ├── .prettierignore │ ├── README.md │ ├── __tests__/ │ │ ├── __snapshots__/ │ │ │ ├── android.js.snap │ │ │ ├── global-functions.js.snap │ │ │ └── helpers.js.snap │ │ ├── android.js │ │ ├── global-functions.js │ │ └── helpers.js │ ├── adapters/ │ │ └── android.js │ ├── check-for-git-changes.sh │ ├── core/ │ │ ├── generator.js │ │ ├── global-functions.js │ │ └── type-checks.js │ ├── fixtures/ │ │ └── example.java │ ├── helpers.js │ ├── index.js │ ├── package.json │ └── utils/ │ ├── __tests__/ │ │ └── downloadFile.js │ ├── downloadEspresso.js │ └── downloadFile.js ├── package.json ├── scripts/ │ ├── aggregate_coverage.sh │ ├── assets.uml.sh │ ├── change_all_react_native_versions.sh │ ├── change_react_native_version.js │ ├── ci.android-release.js │ ├── ci.android.sh │ ├── ci.ios-release.sh │ ├── ci.ios.sh │ ├── ci.release.js │ ├── ci.sh │ ├── create_redirect_html.js │ ├── demo-projects.android.sh │ ├── demo-projects.ios.sh │ ├── demo-projects.sh │ ├── demo-rn-bloat-bundle-test.sh │ ├── install.android.sh │ ├── install.ios.sh │ ├── install.sh │ ├── logger.sh │ ├── publish.sh │ ├── purge_expired_domains.mjs │ ├── unit.ios.sh │ ├── upload_artifact.sh │ └── utils/ │ ├── publishNewVersion.js │ ├── releaseArgs.js │ ├── releaseDocumentation.js │ └── tagVersion.js └── website/ ├── .gitignore ├── README.md ├── babel.config.js ├── blog/ │ ├── 2022-11-10-detox-20-is-out.md │ ├── 2024-10-09-detox-copilot-is-out.md │ └── authors.yml ├── docusaurus.config.js ├── package.json ├── showcase.json ├── sidebars.js ├── snapshots.yml ├── src/ │ ├── components/ │ │ ├── CustomBanner/ │ │ │ ├── StandWithUkraine.js │ │ │ └── StandWithUkraine.module.scss │ │ ├── CustomLayout.js │ │ ├── FlavorizedCodeBlock.js │ │ ├── Homepage/ │ │ │ ├── Features/ │ │ │ │ ├── FeatureList.js │ │ │ │ ├── Features.js │ │ │ │ ├── Features.module.scss │ │ │ │ ├── HomepageFeatures.js │ │ │ │ └── HomepageFeatures.module.scss │ │ │ ├── Header/ │ │ │ │ ├── HomepageHeader.js │ │ │ │ └── HomepageHeader.module.scss │ │ │ └── SubHeader/ │ │ │ ├── HomepageSubHeader.js │ │ │ └── HomepageSubHeader.module.scss │ │ └── Showcase/ │ │ ├── Card.js │ │ ├── Card.module.scss │ │ ├── Hero.js │ │ ├── Hero.module.scss │ │ ├── Showcase.js │ │ ├── Showcase.module.scss │ │ └── index.js │ ├── css/ │ │ ├── _benefits-section.scss │ │ ├── _colors.scss │ │ ├── _fonts.scss │ │ ├── _footer.scss │ │ ├── _header-github.scss │ │ ├── _markdown.scss │ │ ├── _navbar.scss │ │ ├── _root.scss │ │ ├── _showcase-link.scss │ │ └── custom.scss │ ├── pages/ │ │ ├── index.js │ │ └── showcase.js │ └── theme/ │ ├── Footer/ │ │ ├── Copyright/ │ │ │ └── index.js │ │ ├── Layout/ │ │ │ └── index.js │ │ ├── LinkItem/ │ │ │ └── index.js │ │ ├── Links/ │ │ │ └── index.js │ │ ├── Logo/ │ │ │ ├── index.js │ │ │ └── styles.module.css │ │ └── index.js │ ├── Icon/ │ │ └── Menu/ │ │ └── index.js │ └── Navbar/ │ └── Search/ │ ├── index.js │ └── styles.module.scss ├── static/ │ └── .nojekyll ├── versioned_docs/ │ ├── version-19.x/ │ │ ├── APIRef.ActionsOnElement.md │ │ ├── APIRef.Artifacts.md │ │ ├── APIRef.DetoxCLI.md │ │ ├── APIRef.DetoxObjectAPI.md │ │ ├── APIRef.DeviceObjectAPI.md │ │ ├── APIRef.Expect.md │ │ ├── APIRef.LaunchArgs.md │ │ ├── APIRef.Matchers.md │ │ ├── APIRef.MockingOpenWithURL.md │ │ ├── APIRef.MockingUserActivity.md │ │ ├── APIRef.MockingUserNotifications.md │ │ ├── APIRef.Screenshots.md │ │ ├── APIRef.TestLifecycle.md │ │ ├── Guide.Contributing.md │ │ ├── Guide.DebuggingInAndroidStudio.md │ │ ├── Guide.DebuggingInXcode.md │ │ ├── Guide.DevelopingWhileWritingTests.md │ │ ├── Guide.Expo.md │ │ ├── Guide.Jest.md │ │ ├── Guide.Migration.md │ │ ├── Guide.Mocha.md │ │ ├── Guide.Mocking.md │ │ ├── Guide.ParallelTestExecution.md │ │ ├── Guide.RunningLocally.md │ │ ├── Guide.RunningOnCI.md │ │ ├── Guide.ThirdPartyDrivers.md │ │ ├── Guide.Uninstalling.md │ │ ├── Introduction.Android.md │ │ ├── Introduction.AndroidDevEnv.md │ │ ├── Introduction.DesignPrinciples.md │ │ ├── Introduction.HowDetoxWorks.md │ │ ├── Introduction.Workflows.md │ │ ├── Introduction.WritingFirstTest.md │ │ ├── Introduction.iOS.md │ │ ├── Introduction.iOSDevEnv.md │ │ ├── README.md │ │ ├── Troubleshooting.BuildingTheApp.md │ │ ├── Troubleshooting.Flakiness.md │ │ ├── Troubleshooting.RunningTests.md │ │ ├── Troubleshooting.Synchronization.md │ │ ├── Troubleshooting.md │ │ ├── config/ │ │ │ └── overview.md │ │ └── introduction/ │ │ └── getting-started.md │ └── version-20.x/ │ ├── api/ │ │ ├── actions.md │ │ ├── device.md │ │ ├── expect.md │ │ ├── internals.mdx │ │ ├── logger.mdx │ │ ├── matchers.md │ │ ├── partials/ │ │ │ ├── _lifecycle-cli-many-workers.md │ │ │ ├── _lifecycle-cli-single-worker.md │ │ │ ├── _lifecycle-jest-many-workers.md │ │ │ └── _lifecycle-jest-single-worker.md │ │ ├── pilot.md │ │ ├── system.md │ │ └── webviews.md │ ├── articles/ │ │ ├── design-principles.md │ │ ├── how-detox-works.md │ │ └── third-party-drivers.md │ ├── cli/ │ │ ├── build-framework-cache.md │ │ ├── build.md │ │ ├── clean-framework-cache.md │ │ ├── init.md │ │ ├── overview.md │ │ ├── rebuild-framework-cache.md │ │ ├── recorder.md │ │ ├── reset-lock-file.md │ │ ├── run-server.md │ │ ├── start.md │ │ └── test.md │ ├── config/ │ │ ├── apps.mdx │ │ ├── artifacts.mdx │ │ ├── behavior.mdx │ │ ├── devices.mdx │ │ ├── logger.mdx │ │ ├── overview.mdx │ │ ├── partials/ │ │ │ ├── _location-dictionaries.mdx │ │ │ └── _location.mdx │ │ ├── session.mdx │ │ └── testRunner.mdx │ ├── contributing/ │ │ ├── code/ │ │ │ ├── building-and-testing.md │ │ │ ├── example-projects.md │ │ │ ├── overview.md │ │ │ ├── reviewing-pull-requests.md │ │ │ ├── setting-up-the-dev-environment.md │ │ │ └── submitting-pull-requests.md │ │ ├── code-of-conduct.md │ │ ├── documentation.md │ │ ├── feature-requests.md │ │ ├── questions/ │ │ │ ├── answering-questions.md │ │ │ └── asking-questions.md │ │ └── reporting-bugs.md │ ├── contributing.md │ ├── demo.mdx │ ├── guide/ │ │ ├── android-dev-env.md │ │ ├── cucumber-js-integration.md │ │ ├── detox-repl.md │ │ ├── developing-while-writing-tests.md │ │ ├── genymotion-saas.mdx │ │ ├── launch-args.md │ │ ├── migration.md │ │ ├── mocking-open-with-url.md │ │ ├── mocking-user-activity.md │ │ ├── mocking-user-notifications.md │ │ ├── mocking.md │ │ ├── parallel-test-execution.md │ │ ├── proguard-configuration.md │ │ ├── taking-screenshots.md │ │ ├── test-id.md │ │ ├── testing-webviews.md │ │ ├── typescript.md │ │ └── uninstalling.md │ ├── introduction/ │ │ ├── debugging.mdx │ │ ├── environment-setup.md │ │ ├── getting-started.mdx │ │ ├── partials/ │ │ │ ├── _debugging-attach-chrome.mdx │ │ │ ├── _debugging-attach-vscode.mdx │ │ │ ├── _debugging-attach-webstorm.mdx │ │ │ ├── _debugging-native-code-compliing-android.mdx │ │ │ ├── _debugging-native-code-compliing-ios.mdx │ │ │ ├── _debugging-native-code-config-android.mdx │ │ │ ├── _debugging-native-code-config-ios.mdx │ │ │ ├── _debugging-native-code-run-android.mdx │ │ │ ├── _debugging-native-code-run-ios.mdx │ │ │ ├── _debugging-native-code-troubleshooting-android.mdx │ │ │ ├── _getting-started-expo.md │ │ │ ├── _getting-started-other.mdx │ │ │ ├── _getting-started-rn.md │ │ │ ├── _project-setup-apps-android.mdx │ │ │ ├── _project-setup-apps-ios.mdx │ │ │ ├── _project-setup-bootstrap-other.mdx │ │ │ ├── _project-setup-bootstrap-rn.mdx │ │ │ ├── _project-setup-build.mdx │ │ │ ├── _project-setup-devices-android.mdx │ │ │ └── _project-setup-devices-ios.mdx │ │ ├── preparing-for-ci.md │ │ ├── project-setup.mdx │ │ └── your-first-test.mdx │ ├── pilot/ │ │ ├── best-practices.md │ │ └── testing-with-pilot.md │ ├── troubleshooting/ │ │ ├── artifacts.md │ │ ├── building-the-app.md │ │ ├── element-matching.md │ │ ├── flakiness.md │ │ ├── running-tests.md │ │ └── synchronization.md │ └── uml/ │ └── sequence/ │ ├── boot-cli-many-workers.uml │ ├── boot-cli-single-worker.uml │ ├── boot-jest-many-workers.uml │ ├── boot-jest-single-worker.uml │ ├── jest-diagram-runInBand.uml │ └── jest-diagram.uml ├── versioned_sidebars/ │ ├── version-19.x-sidebars.json │ └── version-20.x-sidebars.json └── versions.json