appium-espresso-driver 1.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/LICENSE +201 -0
- package/README.md +864 -0
- package/build/index.js +48 -0
- package/build/lib/commands/execute.js +67 -0
- package/build/lib/commands/general.js +337 -0
- package/build/lib/commands/idling-resources.js +31 -0
- package/build/lib/commands/index.js +26 -0
- package/build/lib/commands/services.js +27 -0
- package/build/lib/desired-caps.js +65 -0
- package/build/lib/driver.js +475 -0
- package/build/lib/espresso-runner.js +381 -0
- package/build/lib/logger.js +18 -0
- package/build/lib/server-builder.js +213 -0
- package/build/lib/server.js +39 -0
- package/build/lib/utils.js +85 -0
- package/espresso-server/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk +0 -0
- package/espresso-server/app/build/outputs/apk/androidTest/debug/output-metadata.json +18 -0
- package/espresso-server/app/build.gradle.kts +153 -0
- package/espresso-server/app/proguard-rules.pro +25 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/EspressoServerRunnerTest.kt +93 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/AppDriver.kt +29 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/ComposeDriver.kt +73 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/DriverContext.kt +35 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/EspressoDriver.kt +70 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/AcceptAlert.kt +32 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Back.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Clear.kt +40 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Click.kt +27 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/CreateSession.kt +58 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/DeleteSession.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/DismissAlert.kt +32 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/DrawerActionHandler.kt +45 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementEquals.kt +19 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementScreenshot.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementValue.kt +85 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindActive.kt +32 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindElement.kt +29 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindElements.kt +43 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetAlertText.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetAttribute.kt +101 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetClipboard.kt +65 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetDeviceInfo.kt +44 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetDisplayed.kt +28 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetEnabled.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocation.kt +32 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocationInView.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetName.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetOrientation.kt +44 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetRect.kt +38 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetRotation.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSelected.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSession.kt +34 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSessions.kt +41 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSettings.kt +25 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSize.kt +32 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetToastVisibility.kt +34 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetWindowRect.kt +43 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetWindowSize.kt +42 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/HideKeyboard.kt +29 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Keys.kt +82 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ListIdlingResources.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileBackdoor.kt +42 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileClickAction.kt +49 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileSwipe.kt +71 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileViewFlash.kt +50 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MoveTo.kt +50 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MultiTouchAction.kt +50 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/NavigateTo.kt +42 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/NoSessionCommandHandler.kt +4 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/NotYetImplemented.kt +28 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/OpenNotifications.kt +28 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PerformAction.kt +42 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PerformAutofillDismissal.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PerformEditorAction.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PointerEventHandler.kt +281 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PressKeyCode.kt +90 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/RegisterIdlingResources.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ReleaseActions.kt +41 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/RequestHandler.kt +43 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ScreenshotHandler.kt +29 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ScrollToPage.kt +60 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetClipboard.kt +64 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetDate.kt +41 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetOrientation.kt +61 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetRotation.kt +46 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetTime.kt +41 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Source.kt +29 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/StartActivity.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/StartService.kt +40 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Status.kt +26 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/StopService.kt +37 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Text.kt +28 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/TouchAction.kt +49 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Uiautomator.kt +68 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/UiautomatorPageSource.kt +35 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/UnregisterIdlingResources.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/UpdateSettings.kt +35 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/WebAtoms.kt +69 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/AppiumException.kt +40 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/DuplicateRouteException.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/ElementNotVisibleException.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/InvalidArgumentException.kt +35 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/InvalidElementStateException.kt +41 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/InvalidSelectorException.kt +35 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/MoveTargetOutOfBoundsException.kt +39 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NoAlertOpenException.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NoSuchDriverException.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NoSuchElementException.kt +34 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NotYetImplementedException.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/ScreenCaptureException.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/SessionNotCreatedException.kt +34 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/StaleElementException.kt +30 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/XPathLookupException.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AccessibilityServiceState.kt +15 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ActivityHelpers.kt +125 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ActivityOptionsHelpers.kt +60 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AlertHelpers.kt +170 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AndroidLogger.kt +45 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AssertHelpers.kt +17 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AutofillHelpers.kt +44 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/BackdoorUtils.java +49 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ClipboardHelper.kt +51 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ComposeNodeFinder.kt +59 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/DeviceInfoHelper.kt +148 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/EspressoViewsCache.kt +57 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/GsonParserHelpers.kt +72 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/IMEHelpers.kt +88 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/IntentHelpers.kt +336 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/InteractionHelper.kt +40 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/InvocationOperation.java +80 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/LocaleHelpers.kt +46 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/Logger.kt +25 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/NotificationListener.kt +87 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/Rect.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ReflectionUtils.kt +64 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ScreenshotsHelper.kt +59 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/StringHelpers.kt +42 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ThreadHelpers.kt +15 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/UiAutomationWrapper.kt +48 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ViewFinder.kt +316 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/XMLHelpers.kt +56 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/extensions/Semaphore.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/ArrayUtils.java +110 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/ClassUtils.java +180 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/MethodUtils.java +155 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/Validate.java +34 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/BaseW3CActionAdapter.kt +71 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/DummyW3CActionAdapter.kt +133 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/W3CActionAdapter.kt +71 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/AndroidKeyEvent.kt +271 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/AndroidMotionEvent.kt +90 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/EspressoW3CActionAdapter.kt +147 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/Helpers.kt +71 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/MotionEventBuilder.kt +153 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/MultiTouchState.kt +132 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/TouchState.kt +7 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/caps/CapsUtils.kt +96 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/BaseDispatchResult.kt +14 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/DispatchPointerMoveResult.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/KeyDispatch.kt +151 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/PointerDispatch.kt +286 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/W3CKeyEvent.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/KeyCodeMapper.kt +169 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/KeyLocationMapper.kt +50 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/KeyNormalizer.kt +84 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/NormalizedKeys.kt +60 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/ActionObject.kt +138 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/ActionSequence.kt +112 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/Actions.kt +89 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/InputSource.kt +173 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/Origin.kt +24 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/OriginDeserializer.kt +25 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/Tick.kt +62 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/ActionsProcessor.kt +93 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/KeyProcessor.kt +57 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/PauseProcessor.kt +59 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/PointerProcessor.kt +115 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/ProcessorHelpers.kt +35 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/ActiveInputSources.kt +62 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/InputState.kt +6 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/InputStateTable.kt +95 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/KeyInputState.kt +82 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/PointerInputState.kt +45 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/RouteDefinition.kt +67 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/RouteMap.kt +51 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/Router.kt +250 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/Server.kt +109 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/response/AppiumResponse.kt +61 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/response/BaseResponse.kt +25 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/AlertParams.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/AppiumParams.kt +55 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/BackdoorMethodArg.kt +3 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ClipboardDataType.kt +18 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/DrawerActionParams.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/EditorActionParams.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Element.kt +169 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/GetClipboardParams.kt +27 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/GlobalSession.kt +64 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/HamcrestMatcher.kt +144 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/IdlingResourcesParams.kt +66 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/KeyEventParams.kt +23 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/LocaleParams.kt +34 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Location.kt +19 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Locator.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MatcherJson.kt +37 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileBackdoorMethod.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileBackdoorParams.kt +20 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileClickActionParams.kt +81 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileSwipeParams.kt +106 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MotionEventParams.kt +37 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MoveToParams.kt +26 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MultiTouchActionsParams.kt +5 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/NavigateToParams.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/OrientationParams.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/OrientationType.kt +6 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Rect.kt +24 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/RotationParams.kt +38 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ScrollToPageParams.kt +36 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SessionParams.kt +23 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetClipboardParams.kt +29 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetDateParams.kt +23 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetTimeParams.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SettingsParams.kt +19 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Size.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SourceDocument.kt +286 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/StartActivityParams.kt +9 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/StartServiceParams.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/StopServiceParams.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Strategy.kt +49 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/TextValueParams.kt +6 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ToastLookupParams.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/TouchAction.kt +178 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/TouchActionsParams.kt +5 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/UiautomatorParams.kt +123 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewAttributesEnum.kt +51 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewElement.kt +204 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewFlashParams.kt +9 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewText.kt +12 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/WindowRect.kt +24 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/WindowSize.kt +22 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/settings/AbstractSetting.kt +23 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/settings/DriverSetting.kt +40 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/settings/SettingType.kt +21 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtom.kt +26 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtomDeserializer.kt +99 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtomsMethods.kt +4 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtomsParams.kt +9 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/OrientationChange.kt +47 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/ScrollTo.kt +48 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/UiControllerPerformer.kt +67 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/UiControllerRunnable.kt +25 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/ViewGetter.kt +79 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/ViewTextGetter.kt +31 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewmatcher/RegexpTextMatcher.kt +38 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewmatcher/WithView.kt +33 -0
- package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewmatcher/WithXPath.kt +55 -0
- package/espresso-server/app/src/main/AndroidManifest.xml +7 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/Helpers.kt +20 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/backdoor-methods.json +51 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/key-actions.json +15 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/multi-touch-actions.json +28 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/GsonParserHelpersTest.kt +41 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/IntentCreationTests.kt +115 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/InvocationOperationTest.java +97 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/KReflectionUtilsTest.kt +108 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/XpathQueryParserTests.kt +42 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/ActionSequenceTest.kt +220 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/ActionsTest.kt +76 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/CapsUtilsTest.kt +76 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/Helpers.kt +7 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/InputSourceTest.kt +153 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/InputStateTableTest.kt +72 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/KeyDispatchTest.kt +133 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/KeyInputStateTest.kt +74 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/PointerDispatchTest.kt +370 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/ProcessorTest.kt +320 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/TickTest.kt +265 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/adapter/AndroidKeyEventTest.kt +114 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/adapter/HelpersTest.kt +31 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/http/RouteDefinitionTest.kt +74 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/HamcrestMatcherTest.kt +112 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MatcherJsonTest.kt +20 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MobileBackdoorMethodTest.java +110 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MobileClickTest.kt +46 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MobileSwipeTest.kt +68 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/TouchActionTest.kt +56 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/web/WebAtomTest.kt +68 -0
- package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/web/WebAtomsTest.kt +96 -0
- package/espresso-server/build.gradle.kts +33 -0
- package/espresso-server/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/espresso-server/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/espresso-server/gradle.properties +26 -0
- package/espresso-server/gradlew +185 -0
- package/espresso-server/gradlew.bat +89 -0
- package/espresso-server/lint.xml +4 -0
- package/espresso-server/settings.gradle.kts +1 -0
- package/index.js +29 -0
- package/lib/commands/execute.js +72 -0
- package/lib/commands/general.js +321 -0
- package/lib/commands/idling-resources.js +52 -0
- package/lib/commands/index.js +16 -0
- package/lib/commands/services.js +50 -0
- package/lib/desired-caps.js +55 -0
- package/lib/driver.js +566 -0
- package/lib/espresso-runner.js +340 -0
- package/lib/logger.js +6 -0
- package/lib/server-builder.js +194 -0
- package/lib/server.js +18 -0
- package/lib/utils.js +74 -0
- package/package.json +105 -0
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = exports.TEST_APK_PKG = exports.REQUIRED_PARAMS = exports.EspressoRunner = void 0;
|
|
9
|
+
|
|
10
|
+
require("source-map-support/register");
|
|
11
|
+
|
|
12
|
+
var _appiumBaseDriver = require("appium-base-driver");
|
|
13
|
+
|
|
14
|
+
var _asyncbox = require("asyncbox");
|
|
15
|
+
|
|
16
|
+
var _logger = _interopRequireDefault(require("./logger"));
|
|
17
|
+
|
|
18
|
+
var _serverBuilder = require("./server-builder");
|
|
19
|
+
|
|
20
|
+
var _path = _interopRequireDefault(require("path"));
|
|
21
|
+
|
|
22
|
+
var _appiumSupport = require("appium-support");
|
|
23
|
+
|
|
24
|
+
var _package = require("../../package.json");
|
|
25
|
+
|
|
26
|
+
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
27
|
+
|
|
28
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
29
|
+
|
|
30
|
+
var _utils = require("./utils");
|
|
31
|
+
|
|
32
|
+
var _axios = _interopRequireDefault(require("axios"));
|
|
33
|
+
|
|
34
|
+
const TEST_SERVER_ROOT = _path.default.resolve(__dirname, '..', '..', 'espresso-server');
|
|
35
|
+
|
|
36
|
+
const TEST_APK_PKG = 'io.appium.espressoserver.test';
|
|
37
|
+
exports.TEST_APK_PKG = TEST_APK_PKG;
|
|
38
|
+
const REQUIRED_PARAMS = ['adb', 'tmpDir', 'host', 'systemPort', 'devicePort', 'appPackage', 'forceEspressoRebuild'];
|
|
39
|
+
exports.REQUIRED_PARAMS = REQUIRED_PARAMS;
|
|
40
|
+
const ESPRESSO_SERVER_LAUNCH_TIMEOUT_MS = 45000;
|
|
41
|
+
const TARGET_PACKAGE_CONTAINER = '/data/local/tmp/espresso.apppackage';
|
|
42
|
+
|
|
43
|
+
class EspressoProxy extends _appiumBaseDriver.JWProxy {
|
|
44
|
+
async proxyCommand(url, method, body = null) {
|
|
45
|
+
const {
|
|
46
|
+
crashed,
|
|
47
|
+
exited
|
|
48
|
+
} = this.instrumentationState;
|
|
49
|
+
|
|
50
|
+
if (exited) {
|
|
51
|
+
throw new _appiumBaseDriver.errors.InvalidContextError(`'${method} ${url}' cannot be proxied to Espresso server because ` + `the instrumentation process has ${crashed ? 'crashed' : 'been unexpectedly terminated'}. ` + `Check the Appium server log and the logcat output for more details`);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return await super.proxyCommand(url, method, body);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
class EspressoRunner {
|
|
60
|
+
constructor(opts = {}) {
|
|
61
|
+
for (let req of REQUIRED_PARAMS) {
|
|
62
|
+
if (!opts || !_appiumSupport.util.hasValue(opts[req])) {
|
|
63
|
+
throw new Error(`Option '${req}' is required!`);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
this[req] = opts[req];
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
this.jwproxy = new EspressoProxy({
|
|
70
|
+
server: this.host,
|
|
71
|
+
port: this.systemPort,
|
|
72
|
+
base: '',
|
|
73
|
+
keepAlive: true
|
|
74
|
+
});
|
|
75
|
+
this.proxyReqRes = this.jwproxy.proxyReqRes.bind(this.jwproxy);
|
|
76
|
+
this.jwproxy.instrumentationState = {
|
|
77
|
+
exited: false,
|
|
78
|
+
crashed: false
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const modServerName = _appiumSupport.fs.sanitizeName(`${TEST_APK_PKG}_${_package.version}_${this.appPackage}_${this.adb.curDeviceId}.apk`, {
|
|
82
|
+
replacement: '-'
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
this.modServerPath = _path.default.resolve(this.tmpDir, modServerName);
|
|
86
|
+
this.showGradleLog = opts.showGradleLog;
|
|
87
|
+
this.espressoBuildConfig = opts.espressoBuildConfig;
|
|
88
|
+
this.serverLaunchTimeout = opts.serverLaunchTimeout || ESPRESSO_SERVER_LAUNCH_TIMEOUT_MS;
|
|
89
|
+
this.androidInstallTimeout = opts.androidInstallTimeout;
|
|
90
|
+
this.disableSuppressAccessibilityService = opts.disableSuppressAccessibilityService;
|
|
91
|
+
|
|
92
|
+
if (opts.useKeystore && opts.keystorePath && opts.keystorePassword && opts.keyAlias && opts.keyPassword) {
|
|
93
|
+
this.signingConfig = (0, _serverBuilder.buildServerSigningConfig)({
|
|
94
|
+
keystoreFile: opts.keystorePath,
|
|
95
|
+
keystorePassword: opts.keystorePassword,
|
|
96
|
+
keyAlias: opts.keyAlias,
|
|
97
|
+
keyPassword: opts.keyPassword
|
|
98
|
+
});
|
|
99
|
+
} else {
|
|
100
|
+
this.signingConfig = null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
async isAppPackageChanged() {
|
|
105
|
+
if (!(await this.adb.fileExists(TARGET_PACKAGE_CONTAINER))) {
|
|
106
|
+
_logger.default.debug('The previous target application package is unknown');
|
|
107
|
+
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const previousAppPackage = (await this.adb.shell(['cat', TARGET_PACKAGE_CONTAINER])).trim();
|
|
112
|
+
|
|
113
|
+
_logger.default.debug(`The previous target application package was '${previousAppPackage}'. ` + `The current package is '${this.appPackage}'`);
|
|
114
|
+
|
|
115
|
+
return previousAppPackage !== this.appPackage;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
async installServer() {
|
|
119
|
+
const appState = await this.adb.getApplicationInstallState(this.modServerPath, TEST_APK_PKG);
|
|
120
|
+
const shouldUninstallApp = [this.adb.APP_INSTALL_STATE.OLDER_VERSION_INSTALLED, this.adb.APP_INSTALL_STATE.NEWER_VERSION_INSTALLED].includes(appState);
|
|
121
|
+
const shouldInstallApp = shouldUninstallApp || [this.adb.APP_INSTALL_STATE.NOT_INSTALLED].includes(appState);
|
|
122
|
+
|
|
123
|
+
if (shouldUninstallApp) {
|
|
124
|
+
_logger.default.info(`Uninstalling Espresso Test Server apk from the target device (pkg: '${TEST_APK_PKG}')`);
|
|
125
|
+
|
|
126
|
+
try {
|
|
127
|
+
await this.adb.uninstallApk(TEST_APK_PKG);
|
|
128
|
+
} catch (err) {
|
|
129
|
+
_logger.default.warn(`Error uninstalling '${TEST_APK_PKG}': ${err.message}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (shouldInstallApp) {
|
|
134
|
+
_logger.default.info(`Installing Espresso Test Server apk from the target device (path: '${this.modServerPath}')`);
|
|
135
|
+
|
|
136
|
+
try {
|
|
137
|
+
await this.adb.install(this.modServerPath, {
|
|
138
|
+
replace: false,
|
|
139
|
+
timeout: this.androidInstallTimeout
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
_logger.default.info(`Installed Espresso Test Server apk '${this.modServerPath}' (pkg: '${TEST_APK_PKG}')`);
|
|
143
|
+
} catch (err) {
|
|
144
|
+
_logger.default.errorAndThrow(`Cannot install '${this.modServerPath}' because of '${err.message}'`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
async installTestApk() {
|
|
150
|
+
let rebuild = this.forceEspressoRebuild;
|
|
151
|
+
|
|
152
|
+
if (rebuild) {
|
|
153
|
+
_logger.default.debug(`'forceEspressoRebuild' capability is enabled`);
|
|
154
|
+
} else if (await this.isAppPackageChanged()) {
|
|
155
|
+
_logger.default.info(`Forcing Espresso server rebuild because of changed application package`);
|
|
156
|
+
|
|
157
|
+
rebuild = true;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (rebuild && (await _appiumSupport.fs.exists(this.modServerPath))) {
|
|
161
|
+
_logger.default.debug(`Deleting the obsolete Espresso server package '${this.modServerPath}'`);
|
|
162
|
+
|
|
163
|
+
await _appiumSupport.fs.unlink(this.modServerPath);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (!(await _appiumSupport.fs.exists(this.modServerPath))) {
|
|
167
|
+
await this.buildNewModServer();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const isSigned = await this.adb.checkApkCert(this.modServerPath, TEST_APK_PKG);
|
|
171
|
+
|
|
172
|
+
if (!isSigned) {
|
|
173
|
+
await this.adb.sign(this.modServerPath);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if ((rebuild || !isSigned) && (await this.adb.uninstallApk(TEST_APK_PKG))) {
|
|
177
|
+
_logger.default.info('Uninstalled the obsolete Espresso server package from the device under test');
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
await this.installServer();
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
async buildNewModServer() {
|
|
184
|
+
let buildConfiguration = {};
|
|
185
|
+
|
|
186
|
+
if (this.espressoBuildConfig) {
|
|
187
|
+
let buildConfigurationStr;
|
|
188
|
+
|
|
189
|
+
if (await _appiumSupport.fs.exists(this.espressoBuildConfig)) {
|
|
190
|
+
_logger.default.info(`Loading the build configuration from '${this.espressoBuildConfig}'`);
|
|
191
|
+
|
|
192
|
+
buildConfigurationStr = await _appiumSupport.fs.readFile(this.espressoBuildConfig, 'utf8');
|
|
193
|
+
} else {
|
|
194
|
+
_logger.default.info(`Loading the build configuration from 'espressoBuildConfig' capability`);
|
|
195
|
+
|
|
196
|
+
buildConfigurationStr = this.espressoBuildConfig;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
try {
|
|
200
|
+
buildConfiguration = JSON.parse(buildConfigurationStr);
|
|
201
|
+
} catch (e) {
|
|
202
|
+
_logger.default.error('Cannot parse the build configuration JSON', e);
|
|
203
|
+
|
|
204
|
+
throw e;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const dirName = _appiumSupport.fs.sanitizeName(`espresso-server-${this.adb.curDeviceId}`, {
|
|
209
|
+
replacement: '-'
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
const serverPath = _path.default.resolve(this.tmpDir, dirName);
|
|
213
|
+
|
|
214
|
+
_logger.default.info(`Building espresso server in '${serverPath}'`);
|
|
215
|
+
|
|
216
|
+
_logger.default.debug(`The build folder root could be customized by changing the 'tmpDir' capability`);
|
|
217
|
+
|
|
218
|
+
await _appiumSupport.fs.rimraf(serverPath);
|
|
219
|
+
await (0, _appiumSupport.mkdirp)(serverPath);
|
|
220
|
+
|
|
221
|
+
_logger.default.debug(`Copying espresso server template from ('${TEST_SERVER_ROOT}' to '${serverPath}')`);
|
|
222
|
+
|
|
223
|
+
await (0, _utils.copyGradleProjectRecursively)(TEST_SERVER_ROOT, serverPath);
|
|
224
|
+
|
|
225
|
+
_logger.default.debug('Bulding espresso server');
|
|
226
|
+
|
|
227
|
+
await new _serverBuilder.ServerBuilder({
|
|
228
|
+
serverPath,
|
|
229
|
+
buildConfiguration,
|
|
230
|
+
showGradleLog: this.showGradleLog,
|
|
231
|
+
testAppPackage: this.appPackage,
|
|
232
|
+
signingConfig: this.signingConfig
|
|
233
|
+
}).build();
|
|
234
|
+
|
|
235
|
+
const apkPath = _path.default.resolve(serverPath, 'app', 'build', 'outputs', 'apk', 'androidTest', 'debug', 'app-debug-androidTest.apk');
|
|
236
|
+
|
|
237
|
+
_logger.default.debug(`Copying built apk from '${apkPath}' to '${this.modServerPath}'`);
|
|
238
|
+
|
|
239
|
+
await _appiumSupport.fs.copyFile(apkPath, this.modServerPath);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
async cleanupSessionLeftovers() {
|
|
243
|
+
_logger.default.debug('Performing cleanup of automation leftovers');
|
|
244
|
+
|
|
245
|
+
try {
|
|
246
|
+
const {
|
|
247
|
+
value
|
|
248
|
+
} = (await (0, _axios.default)({
|
|
249
|
+
url: `http://${this.host}:${this.systemPort}/sessions`,
|
|
250
|
+
timeout: 500
|
|
251
|
+
})).data;
|
|
252
|
+
const activeSessionIds = value.map(sess => sess.id);
|
|
253
|
+
|
|
254
|
+
if (activeSessionIds.length) {
|
|
255
|
+
_logger.default.debug(`The following obsolete sessions are still running: ${JSON.stringify(activeSessionIds)}`);
|
|
256
|
+
|
|
257
|
+
_logger.default.debug('Cleaning up the obsolete sessions');
|
|
258
|
+
|
|
259
|
+
await _bluebird.default.all(activeSessionIds.map(id => (0, _axios.default)({
|
|
260
|
+
url: `http://${this.host}:${this.systemPort}/session/${id}`,
|
|
261
|
+
method: 'DELETE'
|
|
262
|
+
})));
|
|
263
|
+
await _bluebird.default.delay(1000);
|
|
264
|
+
} else {
|
|
265
|
+
_logger.default.debug('No obsolete sessions have been detected');
|
|
266
|
+
}
|
|
267
|
+
} catch (e) {
|
|
268
|
+
_logger.default.debug(`No obsolete sessions have been detected (${e.message})`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
async startSession(caps) {
|
|
273
|
+
await this.cleanupSessionLeftovers();
|
|
274
|
+
const cmd = ['shell', 'am', 'instrument', '-w', '-e', 'debug', process.env.ESPRESSO_JAVA_DEBUG === 'true', '-e', 'disableAnalytics', true];
|
|
275
|
+
|
|
276
|
+
if (_lodash.default.isBoolean(this.disableSuppressAccessibilityService)) {
|
|
277
|
+
cmd.push('-e', 'DISABLE_SUPPRESS_ACCESSIBILITY_SERVICES', this.disableSuppressAccessibilityService);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
cmd.push(`${TEST_APK_PKG}/androidx.test.runner.AndroidJUnitRunner`);
|
|
281
|
+
|
|
282
|
+
_logger.default.info(`Starting Espresso Server v${_package.version} with cmd: adb ${cmd.join(' ')}`);
|
|
283
|
+
|
|
284
|
+
let hasSocketError = false;
|
|
285
|
+
this.jwproxy.instrumentationState = {
|
|
286
|
+
exited: false,
|
|
287
|
+
crashed: false
|
|
288
|
+
};
|
|
289
|
+
this.instProcess = this.adb.createSubProcess(cmd);
|
|
290
|
+
this.instProcess.on('exit', (code, signal) => {
|
|
291
|
+
_logger.default.info(`Instrumentation process exited with code ${code} from signal ${signal}`);
|
|
292
|
+
|
|
293
|
+
this.jwproxy.instrumentationState.exited = true;
|
|
294
|
+
});
|
|
295
|
+
this.instProcess.on('output', (stdout, stderr) => {
|
|
296
|
+
const line = stdout || stderr;
|
|
297
|
+
|
|
298
|
+
if (_lodash.default.isEmpty(line.trim())) {
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
_logger.default.debug(`[Instrumentation] ${line.trim()}`);
|
|
303
|
+
|
|
304
|
+
if (line.toLowerCase().includes('java.net.socketexception')) {
|
|
305
|
+
hasSocketError = true;
|
|
306
|
+
} else if (line.includes('Process crashed')) {
|
|
307
|
+
this.jwproxy.instrumentationState.crashed = true;
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
const timer = new _appiumSupport.timing.Timer().start();
|
|
311
|
+
await this.instProcess.start(0);
|
|
312
|
+
|
|
313
|
+
_logger.default.info(`Waiting up to ${this.serverLaunchTimeout}ms for Espresso server to be online`);
|
|
314
|
+
|
|
315
|
+
try {
|
|
316
|
+
await (0, _asyncbox.waitForCondition)(async () => {
|
|
317
|
+
if (hasSocketError) {
|
|
318
|
+
_logger.default.errorAndThrow(`Espresso server has failed to start due to an unexpected exception. ` + `Make sure the 'INTERNET' permission is requested in the Android manifest of your ` + `application under test (<uses-permission android:name="android.permission.INTERNET" />)`);
|
|
319
|
+
} else if (this.jwproxy.instrumentationState.exited) {
|
|
320
|
+
_logger.default.errorAndThrow(`Espresso server process has been unexpectedly terminated. ` + `Check the Appium server log and the logcat output for more details`);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
try {
|
|
324
|
+
await this.jwproxy.command('/status', 'GET');
|
|
325
|
+
return true;
|
|
326
|
+
} catch (e) {
|
|
327
|
+
return false;
|
|
328
|
+
}
|
|
329
|
+
}, {
|
|
330
|
+
waitMs: this.serverLaunchTimeout,
|
|
331
|
+
intervalMs: 500
|
|
332
|
+
});
|
|
333
|
+
} catch (e) {
|
|
334
|
+
if (/Condition unmet/.test(e.message)) {
|
|
335
|
+
_logger.default.errorAndThrow(`Timed out waiting for Espresso server to be ` + `online within ${this.serverLaunchTimeout}ms. The timeout value could be ` + `customized using 'espressoServerLaunchTimeout' capability`);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
throw e;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
_logger.default.info(`Espresso server is online. ` + `The initialization process took ${timer.getDuration().asMilliSeconds.toFixed(0)}ms`);
|
|
342
|
+
|
|
343
|
+
_logger.default.info('Starting the session');
|
|
344
|
+
|
|
345
|
+
await this.jwproxy.command('/session', 'POST', {
|
|
346
|
+
capabilities: {
|
|
347
|
+
firstMatch: [caps],
|
|
348
|
+
alwaysMatch: {}
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
await this.recordTargetAppPackage();
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
async recordTargetAppPackage() {
|
|
355
|
+
await this.adb.shell([`echo "${this.appPackage}" > "${TARGET_PACKAGE_CONTAINER}"`]);
|
|
356
|
+
|
|
357
|
+
_logger.default.info(`Recorded the target application package '${this.appPackage}' to ${TARGET_PACKAGE_CONTAINER}`);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
async deleteSession() {
|
|
361
|
+
_logger.default.debug('Deleting Espresso server session');
|
|
362
|
+
|
|
363
|
+
try {
|
|
364
|
+
await this.jwproxy.command('/', 'DELETE');
|
|
365
|
+
} catch (err) {
|
|
366
|
+
_logger.default.warn(`Did not get confirmation Espresso deleteSession worked; ` + `Error was: ${err}`);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
if (this.instProcess && this.instProcess.isRunning) {
|
|
370
|
+
await this.instProcess.stop();
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
exports.EspressoRunner = EspressoRunner;
|
|
377
|
+
var _default = EspressoRunner;
|
|
378
|
+
exports.default = _default;require('source-map-support').install();
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9lc3ByZXNzby1ydW5uZXIuanMiXSwibmFtZXMiOlsiVEVTVF9TRVJWRVJfUk9PVCIsInBhdGgiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwiVEVTVF9BUEtfUEtHIiwiUkVRVUlSRURfUEFSQU1TIiwiRVNQUkVTU09fU0VSVkVSX0xBVU5DSF9USU1FT1VUX01TIiwiVEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSIiwiRXNwcmVzc29Qcm94eSIsIkpXUHJveHkiLCJwcm94eUNvbW1hbmQiLCJ1cmwiLCJtZXRob2QiLCJib2R5IiwiY3Jhc2hlZCIsImV4aXRlZCIsImluc3RydW1lbnRhdGlvblN0YXRlIiwiZXJyb3JzIiwiSW52YWxpZENvbnRleHRFcnJvciIsIkVzcHJlc3NvUnVubmVyIiwiY29uc3RydWN0b3IiLCJvcHRzIiwicmVxIiwidXRpbCIsImhhc1ZhbHVlIiwiRXJyb3IiLCJqd3Byb3h5Iiwic2VydmVyIiwiaG9zdCIsInBvcnQiLCJzeXN0ZW1Qb3J0IiwiYmFzZSIsImtlZXBBbGl2ZSIsInByb3h5UmVxUmVzIiwiYmluZCIsIm1vZFNlcnZlck5hbWUiLCJmcyIsInNhbml0aXplTmFtZSIsInZlcnNpb24iLCJhcHBQYWNrYWdlIiwiYWRiIiwiY3VyRGV2aWNlSWQiLCJyZXBsYWNlbWVudCIsIm1vZFNlcnZlclBhdGgiLCJ0bXBEaXIiLCJzaG93R3JhZGxlTG9nIiwiZXNwcmVzc29CdWlsZENvbmZpZyIsInNlcnZlckxhdW5jaFRpbWVvdXQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJkaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSIsInVzZUtleXN0b3JlIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJzaWduaW5nQ29uZmlnIiwia2V5c3RvcmVGaWxlIiwiaXNBcHBQYWNrYWdlQ2hhbmdlZCIsImZpbGVFeGlzdHMiLCJsb2dnZXIiLCJkZWJ1ZyIsInByZXZpb3VzQXBwUGFja2FnZSIsInNoZWxsIiwidHJpbSIsImluc3RhbGxTZXJ2ZXIiLCJhcHBTdGF0ZSIsImdldEFwcGxpY2F0aW9uSW5zdGFsbFN0YXRlIiwic2hvdWxkVW5pbnN0YWxsQXBwIiwiQVBQX0lOU1RBTExfU1RBVEUiLCJPTERFUl9WRVJTSU9OX0lOU1RBTExFRCIsIk5FV0VSX1ZFUlNJT05fSU5TVEFMTEVEIiwiaW5jbHVkZXMiLCJzaG91bGRJbnN0YWxsQXBwIiwiTk9UX0lOU1RBTExFRCIsImluZm8iLCJ1bmluc3RhbGxBcGsiLCJlcnIiLCJ3YXJuIiwibWVzc2FnZSIsImluc3RhbGwiLCJyZXBsYWNlIiwidGltZW91dCIsImVycm9yQW5kVGhyb3ciLCJpbnN0YWxsVGVzdEFwayIsInJlYnVpbGQiLCJmb3JjZUVzcHJlc3NvUmVidWlsZCIsImV4aXN0cyIsInVubGluayIsImJ1aWxkTmV3TW9kU2VydmVyIiwiaXNTaWduZWQiLCJjaGVja0Fwa0NlcnQiLCJzaWduIiwiYnVpbGRDb25maWd1cmF0aW9uIiwiYnVpbGRDb25maWd1cmF0aW9uU3RyIiwicmVhZEZpbGUiLCJKU09OIiwicGFyc2UiLCJlIiwiZXJyb3IiLCJkaXJOYW1lIiwic2VydmVyUGF0aCIsInJpbXJhZiIsIlNlcnZlckJ1aWxkZXIiLCJ0ZXN0QXBwUGFja2FnZSIsImJ1aWxkIiwiYXBrUGF0aCIsImNvcHlGaWxlIiwiY2xlYW51cFNlc3Npb25MZWZ0b3ZlcnMiLCJ2YWx1ZSIsImRhdGEiLCJhY3RpdmVTZXNzaW9uSWRzIiwibWFwIiwic2VzcyIsImlkIiwibGVuZ3RoIiwic3RyaW5naWZ5IiwiQiIsImFsbCIsImRlbGF5Iiwic3RhcnRTZXNzaW9uIiwiY2FwcyIsImNtZCIsInByb2Nlc3MiLCJlbnYiLCJFU1BSRVNTT19KQVZBX0RFQlVHIiwiXyIsImlzQm9vbGVhbiIsInB1c2giLCJqb2luIiwiaGFzU29ja2V0RXJyb3IiLCJpbnN0UHJvY2VzcyIsImNyZWF0ZVN1YlByb2Nlc3MiLCJvbiIsImNvZGUiLCJzaWduYWwiLCJzdGRvdXQiLCJzdGRlcnIiLCJsaW5lIiwiaXNFbXB0eSIsInRvTG93ZXJDYXNlIiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsInN0YXJ0IiwiY29tbWFuZCIsIndhaXRNcyIsImludGVydmFsTXMiLCJ0ZXN0IiwiZ2V0RHVyYXRpb24iLCJhc01pbGxpU2Vjb25kcyIsInRvRml4ZWQiLCJjYXBhYmlsaXRpZXMiLCJmaXJzdE1hdGNoIiwiYWx3YXlzTWF0Y2giLCJyZWNvcmRUYXJnZXRBcHBQYWNrYWdlIiwiZGVsZXRlU2Vzc2lvbiIsImlzUnVubmluZyIsInN0b3AiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsZ0JBQWdCLEdBQUdDLGNBQUtDLE9BQUwsQ0FBYUMsU0FBYixFQUF3QixJQUF4QixFQUE4QixJQUE5QixFQUFvQyxpQkFBcEMsQ0FBekI7O0FBQ0EsTUFBTUMsWUFBWSxHQUFHLCtCQUFyQjs7QUFDQSxNQUFNQyxlQUFlLEdBQUcsQ0FDdEIsS0FEc0IsRUFFdEIsUUFGc0IsRUFHdEIsTUFIc0IsRUFJdEIsWUFKc0IsRUFLdEIsWUFMc0IsRUFNdEIsWUFOc0IsRUFPdEIsc0JBUHNCLENBQXhCOztBQVNBLE1BQU1DLGlDQUFpQyxHQUFHLEtBQTFDO0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUcscUNBQWpDOztBQUVBLE1BQU1DLGFBQU4sU0FBNEJDLHlCQUE1QixDQUFvQztBQUNoQixRQUFaQyxZQUFZLENBQUVDLEdBQUYsRUFBT0MsTUFBUCxFQUFlQyxJQUFJLEdBQUcsSUFBdEIsRUFBNEI7QUFDNUMsVUFBTTtBQUFDQyxNQUFBQSxPQUFEO0FBQVVDLE1BQUFBO0FBQVYsUUFBb0IsS0FBS0Msb0JBQS9COztBQUNBLFFBQUlELE1BQUosRUFBWTtBQUNWLFlBQU0sSUFBSUUseUJBQU9DLG1CQUFYLENBQWdDLElBQUdOLE1BQU8sSUFBR0QsR0FBSSxpREFBbEIsR0FDbEMs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RUFBeEc7QUFDRDs7QUFFa0IsUUFBYm9KLGFBQWEsR0FBSTtBQUNyQmhHLG9CQUFPQyxLQUFQLENBQWEsa0NBQWI7O0FBR0EsUUFBSTtBQUNGLFlBQU0sS0FBS2xDLE9BQUwsQ0FBYXNILE9BQWIsQ0FBcUIsR0FBckIsRUFBMEIsUUFBMUIsQ0FBTjtBQUNELEtBRkQsQ0FFRSxPQUFPcEUsR0FBUCxFQUFZO0FBQ1pqQixzQkFBT2tCLElBQVAsQ0FBYSwwREFBRCxHQUNQLGNBQWFELEdBQUksRUFEdEI7QUFFRDs7QUFFRCxRQUFJLEtBQUtzRCxXQUFMLElBQW9CLEtBQUtBLFdBQUwsQ0FBaUIwQixTQUF6QyxFQUFvRDtBQUNsRCxZQUFNLEtBQUsxQixXQUFMLENBQWlCMkIsSUFBakIsRUFBTjtBQUNEO0FBQ0Y7O0FBeFNrQjs7O2VBNFNOMUksYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEpXUHJveHksIGVycm9ycyB9IGZyb20gJ2FwcGl1bS1iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBTZXJ2ZXJCdWlsZGVyLCBidWlsZFNlcnZlclNpZ25pbmdDb25maWcgfSBmcm9tICcuL3NlcnZlci1idWlsZGVyJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZnMsIHV0aWwsIG1rZGlycCwgdGltaW5nIH0gZnJvbSAnYXBwaXVtLXN1cHBvcnQnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLXVucmVzb2x2ZWRcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBjb3B5R3JhZGxlUHJvamVjdFJlY3Vyc2l2ZWx5IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuXG5cbmNvbnN0IFRFU1RfU0VSVkVSX1JPT1QgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nLCAnZXNwcmVzc28tc2VydmVyJyk7XG5jb25zdCBURVNUX0FQS19QS0cgPSAnaW8uYXBwaXVtLmVzcHJlc3Nvc2VydmVyLnRlc3QnO1xuY29uc3QgUkVRVUlSRURfUEFSQU1TID0gW1xuICAnYWRiJyxcbiAgJ3RtcERpcicsXG4gICdob3N0JyxcbiAgJ3N5c3RlbVBvcnQnLFxuICAnZGV2aWNlUG9ydCcsXG4gICdhcHBQYWNrYWdlJyxcbiAgJ2ZvcmNlRXNwcmVzc29SZWJ1aWxkJyxcbl07XG5jb25zdCBFU1BSRVNTT19TRVJWRVJfTEFVTkNIX1RJTUVPVVRfTVMgPSA0NTAwMDtcbmNvbnN0IFRBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUiA9ICcvZGF0YS9sb2NhbC90bXAvZXNwcmVzc28uYXBwcGFja2FnZSc7XG5cbmNsYXNzIEVzcHJlc3NvUHJveHkgZXh0ZW5kcyBKV1Byb3h5IHtcbiAgYXN5bmMgcHJveHlDb21tYW5kICh1cmwsIG1ldGhvZCwgYm9keSA9IG51bGwpIHtcbiAgICBjb25zdCB7Y3Jhc2hlZCwgZXhpdGVkfSA9IHRoaXMuaW5zdHJ1bWVudGF0aW9uU3RhdGU7XG4gICAgaWYgKGV4aXRlZCkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQ29udGV4dEVycm9yKGAnJHttZXRob2R9ICR7dXJsfScgY2Fubm90IGJlIHByb3hpZWQgdG8gRXNwcmVzc28gc2VydmVyIGJlY2F1c2UgYCArXG4gICAgICAgIGB0aGUgaW5zdHJ1bWVudGF0aW9uIHByb2Nlc3MgaGFzICR7Y3Jhc2hlZCA/ICdjcmFzaGVkJyA6ICdiZWVuIHVuZXhwZWN0ZWRseSB0ZXJtaW5hdGVkJ30uIGAgK1xuICAgICAgICBgQ2hlY2sgdGhlIEFwcGl1bSBzZXJ2ZXIgbG9nIGFuZCB0aGUgbG9nY2F0IG91dHB1dCBmb3IgbW9yZSBkZXRhaWxzYCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBzdXBlci5wcm94eUNvbW1hbmQodXJsLCBtZXRob2QsIGJvZHkpO1xuICB9XG59XG5cbmNsYXNzIEVzcHJlc3NvUnVubmVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMgPSB7fSkge1xuICAgIGZvciAobGV0IHJlcSBvZiBSRVFVSVJFRF9QQVJBTVMpIHtcbiAgICAgIGlmICghb3B0cyB8fCAhdXRpbC5oYXNWYWx1ZShvcHRzW3JlcV0pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgT3B0aW9uICcke3JlcX0nIGlzIHJlcXVpcmVkIWApO1xuICAgICAgfVxuICAgICAgdGhpc1tyZXFdID0gb3B0c1tyZXFdO1xuICAgIH1cbiAgICB0aGlzLmp3cHJveHkgPSBuZXcgRXNwcmVzc29Qcm94eSh7XG4gICAgICBzZXJ2ZXI6IHRoaXMuaG9zdCxcbiAgICAgIHBvcnQ6IHRoaXMuc3lzdGVtUG9ydCxcbiAgICAgIGJhc2U6ICcnLFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMucHJveHlSZXFSZXMgPSB0aGlzLmp3cHJveHkucHJveHlSZXFSZXMuYmluZCh0aGlzLmp3cHJveHkpO1xuICAgIHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZSA9IHtcbiAgICAgIGV4aXRlZDogZmFsc2UsXG4gICAgICBjcmFzaGVkOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgY29uc3QgbW9kU2VydmVyTmFtZSA9IGZzLnNhbml0aXplTmFtZShgJHtURVNUX0FQS19QS0d9XyR7dmVyc2lvbn1fJHt0aGlzLmFwcFBhY2thZ2V9XyR7dGhpcy5hZGIuY3VyRGV2aWNlSWR9LmFwa2AsIHtcbiAgICAgIHJlcGxhY2VtZW50OiAnLScsXG4gICAgfSk7XG4gICAgdGhpcy5tb2RTZXJ2ZXJQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMudG1wRGlyLCBtb2RTZXJ2ZXJOYW1lKTtcbiAgICB0aGlzLnNob3dHcmFkbGVMb2cgPSBvcHRzLnNob3dHcmFkbGVMb2c7XG4gICAgdGhpcy5lc3ByZXNzb0J1aWxkQ29uZmlnID0gb3B0cy5lc3ByZXNzb0J1aWxkQ29uZmlnO1xuXG4gICAgdGhpcy5zZXJ2ZXJMYXVuY2hUaW1lb3V0ID0gb3B0cy5zZXJ2ZXJMYXVuY2hUaW1lb3V0IHx8IEVTUFJFU1NPX1NFUlZFUl9MQVVOQ0hfVElNRU9VVF9NUztcbiAgICB0aGlzLmFuZHJvaWRJbnN0YWxsVGltZW91dCA9IG9wdHMuYW5kcm9pZEluc3RhbGxUaW1lb3V0O1xuXG4gICAgdGhpcy5kaXNhYmxlU3VwcHJlc3NBY2Nlc3NpYmlsaXR5U2VydmljZSA9IG9wdHMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2U7XG5cbiAgICAvLyBFc3ByZXNzbyBTZXJ2ZXIgYXBwIG5lZWRzIHRvIGJlIHNpZ25lZCB3aXRoIHNhbWUga2V5U3RvcmUgYXMgYXBwUGFja2FnZVxuICAgIGlmIChvcHRzLnVzZUtleXN0b3JlICYmIG9wdHMua2V5c3RvcmVQYXRoICYmIG9wdHMua2V5c3RvcmVQYXNzd29yZCAmJiBvcHRzLmtleUFsaWFzICYmIG9wdHMua2V5UGFzc3dvcmQpIHtcbiAgICAgIHRoaXMuc2lnbmluZ0NvbmZpZyA9IGJ1aWxkU2VydmVyU2lnbmluZ0NvbmZpZyh7XG4gICAgICAgIGtleXN0b3JlRmlsZTogb3B0cy5rZXlzdG9yZVBhdGgsXG4gICAgICAgIGtleXN0b3JlUGFzc3dvcmQ6IG9wdHMua2V5c3RvcmVQYXNzd29yZCxcbiAgICAgICAga2V5QWxpYXM6IG9wdHMua2V5QWxpYXMsXG4gICAgICAgIGtleVBhc3N3b3JkOiBvcHRzLmtleVBhc3N3b3JkXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaWduaW5nQ29uZmlnID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc0FwcFBhY2thZ2VDaGFuZ2VkICgpIHtcbiAgICBpZiAoIWF3YWl0IHRoaXMuYWRiLmZpbGVFeGlzdHMoVEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdUaGUgcHJldmlvdXMgdGFyZ2V0IGFwcGxpY2F0aW9uIHBhY2thZ2UgaXMgdW5rbm93bicpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzQXBwUGFja2FnZSA9IChhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2NhdCcsIFRBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUl0pKS50cmltKCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBUaGUgcHJldmlvdXMgdGFyZ2V0IGFwcGxpY2F0aW9uIHBhY2thZ2Ugd2FzICcke3ByZXZpb3VzQXBwUGFja2FnZX0nLiBgICtcbiAgICAgIGBUaGUgY3VycmVudCBwYWNrYWdlIGlzICcke3RoaXMuYXBwUGFja2FnZX0nYCk7XG4gICAgcmV0dXJuIHByZXZpb3VzQXBwUGFja2FnZSAhPT0gdGhpcy5hcHBQYWNrYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbGxzIEVzcHJlc3NvIHNlcnZlciBhcGsgb24gdG8gdGhlIGRldmljZSBvciBlbXVsYXRvci5cbiAgICogRWFjaCBhZGIgY29tbWFuZCB1c2VzIGRlZmF1bHQgdGltZW91dCBieSB0aGVtLlxuICAgKi9cbiAgYXN5bmMgaW5zdGFsbFNlcnZlciAoKSB7XG4gICAgY29uc3QgYXBwU3RhdGUgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcHBsaWNhdGlvbkluc3RhbGxTdGF0ZSh0aGlzLm1vZFNlcnZlclBhdGgsIFRFU1RfQVBLX1BLRyk7XG5cbiAgICBjb25zdCBzaG91bGRVbmluc3RhbGxBcHAgPSBbXG4gICAgICB0aGlzLmFkYi5BUFBfSU5TVEFMTF9TVEFURS5PTERFUl9WRVJTSU9OX0lOU1RBTExFRCxcbiAgICAgIHRoaXMuYWRiLkFQUF9JTlNUQUxMX1NUQVRFLk5FV0VSX1ZFUlNJT05fSU5TVEFMTEVEXG4gICAgXS5pbmNsdWRlcyhhcHBTdGF0ZSk7XG4gICAgY29uc3Qgc2hvdWxkSW5zdGFsbEFwcCA9IHNob3VsZFVuaW5zdGFsbEFwcCB8fCBbXG4gICAgICB0aGlzLmFkYi5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVEXG4gICAgXS5pbmNsdWRlcyhhcHBTdGF0ZSk7XG5cbiAgICBpZiAoc2hvdWxkVW5pbnN0YWxsQXBwKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgVW5pbnN0YWxsaW5nIEVzcHJlc3NvIFRlc3QgU2VydmVyIGFwayBmcm9tIHRoZSB0YXJnZXQgZGV2aWNlIChwa2c6ICcke1RFU1RfQVBLX1BLR30nKWApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKFRFU1RfQVBLX1BLRyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYEVycm9yIHVuaW5zdGFsbGluZyAnJHtURVNUX0FQS19QS0d9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkSW5zdGFsbEFwcCkge1xuICAgICAgbG9nZ2VyLmluZm8oYEluc3RhbGxpbmcgRXNwcmVzc28gVGVzdCBTZXJ2ZXIgYXBrIGZyb20gdGhlIHRhcmdldCBkZXZpY2UgKHBhdGg6ICcke3RoaXMubW9kU2VydmVyUGF0aH0nKWApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuaW5zdGFsbCh0aGlzLm1vZFNlcnZlclBhdGgsIHsgcmVwbGFjZTogZmFsc2UsIHRpbWVvdXQ6IHRoaXMuYW5kcm9pZEluc3RhbGxUaW1lb3V0IH0pO1xuICAgICAgICBsb2dnZXIuaW5mbyhgSW5zdGFsbGVkIEVzcHJlc3NvIFRlc3QgU2VydmVyIGFwayAnJHt0aGlzLm1vZFNlcnZlclBhdGh9JyAocGtnOiAnJHtURVNUX0FQS19QS0d9JylgKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGluc3RhbGwgJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofScgYmVjYXVzZSBvZiAnJHtlcnIubWVzc2FnZX0nYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5zdGFsbFRlc3RBcGsgKCkge1xuICAgIGxldCByZWJ1aWxkID0gdGhpcy5mb3JjZUVzcHJlc3NvUmVidWlsZDtcbiAgICBpZiAocmVidWlsZCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGAnZm9yY2VFc3ByZXNzb1JlYnVpbGQnIGNhcGFiaWxpdHkgaXMgZW5hYmxlZGApO1xuICAgIH0gZWxzZSBpZiAoYXdhaXQgdGhpcy5pc0FwcFBhY2thZ2VDaGFuZ2VkKCkpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBGb3JjaW5nIEVzcHJlc3NvIHNlcnZlciByZWJ1aWxkIGJlY2F1c2Ugb2YgY2hhbmdlZCBhcHBsaWNhdGlvbiBwYWNrYWdlYCk7XG4gICAgICByZWJ1aWxkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVidWlsZCAmJiBhd2FpdCBmcy5leGlzdHModGhpcy5tb2RTZXJ2ZXJQYXRoKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBEZWxldGluZyB0aGUgb2Jzb2xldGUgRXNwcmVzc28gc2VydmVyIHBhY2thZ2UgJyR7dGhpcy5tb2RTZXJ2ZXJQYXRofSdgKTtcbiAgICAgIGF3YWl0IGZzLnVubGluayh0aGlzLm1vZFNlcnZlclBhdGgpO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBmcy5leGlzdHModGhpcy5tb2RTZXJ2ZXJQYXRoKSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuYnVpbGROZXdNb2RTZXJ2ZXIoKTtcbiAgICB9XG4gICAgY29uc3QgaXNTaWduZWQgPSBhd2FpdCB0aGlzLmFkYi5jaGVja0Fwa0NlcnQodGhpcy5tb2RTZXJ2ZXJQYXRoLCBURVNUX0FQS19QS0cpO1xuICAgIGlmICghaXNTaWduZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNpZ24odGhpcy5tb2RTZXJ2ZXJQYXRoKTtcbiAgICB9XG4gICAgaWYgKChyZWJ1aWxkIHx8ICFpc1NpZ25lZCkgJiYgYXdhaXQgdGhpcy5hZGIudW5pbnN0YWxsQXBrKFRFU1RfQVBLX1BLRykpIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdVbmluc3RhbGxlZCB0aGUgb2Jzb2xldGUgRXNwcmVzc28gc2VydmVyIHBhY2thZ2UgZnJvbSB0aGUgZGV2aWNlIHVuZGVyIHRlc3QnKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmluc3RhbGxTZXJ2ZXIoKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkTmV3TW9kU2VydmVyICgpIHtcbiAgICBsZXQgYnVpbGRDb25maWd1cmF0aW9uID0ge307XG4gICAgaWYgKHRoaXMuZXNwcmVzc29CdWlsZENvbmZpZykge1xuICAgICAgbGV0IGJ1aWxkQ29uZmlndXJhdGlvblN0cjtcbiAgICAgIGlmIChhd2FpdCBmcy5leGlzdHModGhpcy5lc3ByZXNzb0J1aWxkQ29uZmlnKSkge1xuICAgICAgICBsb2dnZXIuaW5mbyhgTG9hZGluZyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmcm9tICcke3RoaXMuZXNwcmVzc29CdWlsZENvbmZpZ30nYCk7XG4gICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvblN0ciA9IGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMuZXNwcmVzc29CdWlsZENvbmZpZywgJ3V0ZjgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBMb2FkaW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZyb20gJ2VzcHJlc3NvQnVpbGRDb25maWcnIGNhcGFiaWxpdHlgKTtcbiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uU3RyID0gdGhpcy5lc3ByZXNzb0J1aWxkQ29uZmlnO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uID0gSlNPTi5wYXJzZShidWlsZENvbmZpZ3VyYXRpb25TdHIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0Nhbm5vdCBwYXJzZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBKU09OJywgZSk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRpck5hbWUgPSBmcy5zYW5pdGl6ZU5hbWUoYGVzcHJlc3NvLXNlcnZlci0ke3RoaXMuYWRiLmN1ckRldmljZUlkfWAsIHtcbiAgICAgIHJlcGxhY2VtZW50OiAnLScsXG4gICAgfSk7XG4gICAgY29uc3Qgc2VydmVyUGF0aCA9IHBhdGgucmVzb2x2ZSh0aGlzLnRtcERpciwgZGlyTmFtZSk7XG4gICAgbG9nZ2VyLmluZm8oYEJ1aWxkaW5nIGVzcHJlc3NvIHNlcnZlciBpbiAnJHtzZXJ2ZXJQYXRofSdgKTtcbiAgICBsb2dnZXIuZGVidWcoYFRoZSBidWlsZCBmb2xkZXIgcm9vdCBjb3VsZCBiZSBjdXN0b21pemVkIGJ5IGNoYW5naW5nIHRoZSAndG1wRGlyJyBjYXBhYmlsaXR5YCk7XG4gICAgYXdhaXQgZnMucmltcmFmKHNlcnZlclBhdGgpO1xuICAgIGF3YWl0IG1rZGlycChzZXJ2ZXJQYXRoKTtcbiAgICBsb2dnZXIuZGVidWcoYENvcHlpbmcgZXNwcmVzc28gc2VydmVyIHRlbXBsYXRlIGZyb20gKCcke1RFU1RfU0VSVkVSX1JPT1R9JyB0byAnJHtzZXJ2ZXJQYXRofScpYCk7XG4gICAgYXdhaXQgY29weUdyYWRsZVByb2plY3RSZWN1cnNpdmVseShURVNUX1NFUlZFUl9ST09ULCBzZXJ2ZXJQYXRoKTtcbiAgICBsb2dnZXIuZGVidWcoJ0J1bGRpbmcgZXNwcmVzc28gc2VydmVyJyk7XG4gICAgYXdhaXQgbmV3IFNlcnZlckJ1aWxkZXIoe1xuICAgICAgc2VydmVyUGF0aCwgYnVpbGRDb25maWd1cmF0aW9uLFxuICAgICAgc2hvd0dyYWRsZUxvZzogdGhpcy5zaG93R3JhZGxlTG9nLFxuICAgICAgdGVzdEFwcFBhY2thZ2U6IHRoaXMuYXBwUGFja2FnZSxcbiAgICAgIHNpZ25pbmdDb25maWc6IHRoaXMuc2lnbmluZ0NvbmZpZ1xuICAgIH0pLmJ1aWxkKCk7XG4gICAgY29uc3QgYXBrUGF0aCA9IHBhdGgucmVzb2x2ZShzZXJ2ZXJQYXRoLCAnYXBwJywgJ2J1aWxkJywgJ291dHB1dHMnLCAnYXBrJywgJ2FuZHJvaWRUZXN0JywgJ2RlYnVnJywgJ2FwcC1kZWJ1Zy1hbmRyb2lkVGVzdC5hcGsnKTtcbiAgICBsb2dnZXIuZGVidWcoYENvcHlpbmcgYnVpbHQgYXBrIGZyb20gJyR7YXBrUGF0aH0nIHRvICcke3RoaXMubW9kU2VydmVyUGF0aH0nYCk7XG4gICAgYXdhaXQgZnMuY29weUZpbGUoYXBrUGF0aCwgdGhpcy5tb2RTZXJ2ZXJQYXRoKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFudXBTZXNzaW9uTGVmdG92ZXJzICgpIHtcbiAgICBsb2dnZXIuZGVidWcoJ1BlcmZvcm1pbmcgY2xlYW51cCBvZiBhdXRvbWF0aW9uIGxlZnRvdmVycycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHt2YWx1ZX0gPSAoYXdhaXQgYXhpb3Moe1xuICAgICAgICB1cmw6IGBodHRwOi8vJHt0aGlzLmhvc3R9OiR7dGhpcy5zeXN0ZW1Qb3J0fS9zZXNzaW9uc2AsXG4gICAgICAgIHRpbWVvdXQ6IDUwMCxcbiAgICAgIH0pKS5kYXRhO1xuICAgICAgY29uc3QgYWN0aXZlU2Vzc2lvbklkcyA9IHZhbHVlLm1hcCgoc2VzcykgPT4gc2Vzcy5pZCk7XG4gICAgICBpZiAoYWN0aXZlU2Vzc2lvbklkcy5sZW5ndGgpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBUaGUgZm9sbG93aW5nIG9ic29sZXRlIHNlc3Npb25zIGFyZSBzdGlsbCBydW5uaW5nOiAke0pTT04uc3RyaW5naWZ5KGFjdGl2ZVNlc3Npb25JZHMpfWApO1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0NsZWFuaW5nIHVwIHRoZSBvYnNvbGV0ZSBzZXNzaW9ucycpO1xuICAgICAgICBhd2FpdCBCLmFsbChhY3RpdmVTZXNzaW9uSWRzLm1hcCgoaWQpID0+XG4gICAgICAgICAgYXhpb3Moe1xuICAgICAgICAgICAgdXJsOiBgaHR0cDovLyR7dGhpcy5ob3N0fToke3RoaXMuc3lzdGVtUG9ydH0vc2Vzc2lvbi8ke2lkfWAsXG4gICAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgICAgIH0pXG4gICAgICAgICkpO1xuICAgICAgICAvLyBMZXQgYWxsIHNlc3Npb25zIHRvIGJlIHByb3Blcmx5IHRlcm1pbmF0ZWQgYmVmb3JlIGNvbnRpbnVpbmdcbiAgICAgICAgYXdhaXQgQi5kZWxheSgxMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnTm8gb2Jzb2xldGUgc2Vzc2lvbnMgaGF2ZSBiZWVuIGRldGVjdGVkJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBObyBvYnNvbGV0ZSBzZXNzaW9ucyBoYXZlIGJlZW4gZGV0ZWN0ZWQgKCR7ZS5tZXNzYWdlfSlgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFNlc3Npb24gKGNhcHMpIHtcbiAgICBhd2FpdCB0aGlzLmNsZWFudXBTZXNzaW9uTGVmdG92ZXJzKCk7XG5cbiAgICBjb25zdCBjbWQgPSBbXG4gICAgICAnc2hlbGwnLFxuICAgICAgJ2FtJywgJ2luc3RydW1lbnQnLFxuICAgICAgJy13JyxcbiAgICAgICctZScsICdkZWJ1ZycsIHByb2Nlc3MuZW52LkVTUFJFU1NPX0pBVkFfREVCVUcgPT09ICd0cnVlJyxcbiAgICAgICctZScsICdkaXNhYmxlQW5hbHl0aWNzJywgdHJ1ZSwgLy8gVG8gYXZvaWQgdW5leHBlY3RlZCBlcnJvciBieSBnb29nbGUgYW5hbHl0aWNzXG4gICAgXTtcblxuICAgIGlmIChfLmlzQm9vbGVhbih0aGlzLmRpc2FibGVTdXBwcmVzc0FjY2Vzc2liaWxpdHlTZXJ2aWNlKSkge1xuICAgICAgY21kLnB1c2goJy1lJywgJ0RJU0FCTEVfU1VQUFJFU1NfQUNDRVNTSUJJTElUWV9TRVJWSUNFUycsIHRoaXMuZGlzYWJsZVN1cHByZXNzQWNjZXNzaWJpbGl0eVNlcnZpY2UpO1xuICAgIH1cblxuICAgIGNtZC5wdXNoKGAke1RFU1RfQVBLX1BLR30vYW5kcm9pZHgudGVzdC5ydW5uZXIuQW5kcm9pZEpVbml0UnVubmVyYCk7XG5cbiAgICBsb2dnZXIuaW5mbyhgU3RhcnRpbmcgRXNwcmVzc28gU2VydmVyIHYke3ZlcnNpb259IHdpdGggY21kOiBhZGIgJHtjbWQuam9pbignICcpfWApO1xuXG4gICAgbGV0IGhhc1NvY2tldEVycm9yID0gZmFsc2U7XG4gICAgLy8gc3RhcnQgdGhlIGluc3RydW1lbnRhdGlvbiBwcm9jZXNzXG4gICAgdGhpcy5qd3Byb3h5Lmluc3RydW1lbnRhdGlvblN0YXRlID0ge1xuICAgICAgZXhpdGVkOiBmYWxzZSxcbiAgICAgIGNyYXNoZWQ6IGZhbHNlLFxuICAgIH07XG4gICAgdGhpcy5pbnN0UHJvY2VzcyA9IHRoaXMuYWRiLmNyZWF0ZVN1YlByb2Nlc3MoY21kKTtcbiAgICB0aGlzLmluc3RQcm9jZXNzLm9uKCdleGl0JywgKGNvZGUsIHNpZ25hbCkgPT4ge1xuICAgICAgbG9nZ2VyLmluZm8oYEluc3RydW1lbnRhdGlvbiBwcm9jZXNzIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfSBmcm9tIHNpZ25hbCAke3NpZ25hbH1gKTtcbiAgICAgIHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZS5leGl0ZWQgPSB0cnVlO1xuICAgIH0pO1xuICAgIHRoaXMuaW5zdFByb2Nlc3Mub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgY29uc3QgbGluZSA9IHN0ZG91dCB8fCBzdGRlcnI7XG4gICAgICBpZiAoXy5pc0VtcHR5KGxpbmUudHJpbSgpKSkge1xuICAgICAgICAvLyBEbyBub3QgcHJpbnQgZW1wdHkgbGluZXMgaW50byB0aGUgc3lzdGVtIGxvZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgW0luc3RydW1lbnRhdGlvbl0gJHtsaW5lLnRyaW0oKX1gKTtcbiAgICAgIC8vIEEgJ1NvY2tldEV4Y2VwdGlvbicgaW5kaWNhdGVzIHRoYXQgd2UgY291bGRuJ3QgY29ubmVjdCB0byB0aGUgRXNwcmVzc28gc2VydmVyLFxuICAgICAgLy8gYmVjYXVzZSB0aGUgSU5URVJORVQgcGVybWlzc2lvbiBpcyBub3Qgc2V0XG4gICAgICBpZiAobGluZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdqYXZhLm5ldC5zb2NrZXRleGNlcHRpb24nKSkge1xuICAgICAgICBoYXNTb2NrZXRFcnJvciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGxpbmUuaW5jbHVkZXMoJ1Byb2Nlc3MgY3Jhc2hlZCcpKSB7XG4gICAgICAgIHRoaXMuandwcm94eS5pbnN0cnVtZW50YXRpb25TdGF0ZS5jcmFzaGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgYXdhaXQgdGhpcy5pbnN0UHJvY2Vzcy5zdGFydCgwKTtcbiAgICBsb2dnZXIuaW5mbyhgV2FpdGluZyB1cCB0byAke3RoaXMuc2VydmVyTGF1bmNoVGltZW91dH1tcyBmb3IgRXNwcmVzc28gc2VydmVyIHRvIGJlIG9ubGluZWApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKGhhc1NvY2tldEVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYEVzcHJlc3NvIHNlcnZlciBoYXMgZmFpbGVkIHRvIHN0YXJ0IGR1ZSB0byBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4gYCArXG4gICAgICAgICAgICBgTWFrZSBzdXJlIHRoZSAnSU5URVJORVQnIHBlcm1pc3Npb24gaXMgcmVxdWVzdGVkIGluIHRoZSBBbmRyb2lkIG1hbmlmZXN0IG9mIHlvdXIgYCArXG4gICAgICAgICAgICBgYXBwbGljYXRpb24gdW5kZXIgdGVzdCAoPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9XCJhbmRyb2lkLnBlcm1pc3Npb24uSU5URVJORVRcIiAvPilgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmp3cHJveHkuaW5zdHJ1bWVudGF0aW9uU3RhdGUuZXhpdGVkKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYEVzcHJlc3NvIHNlcnZlciBwcm9jZXNzIGhhcyBiZWVuIHVuZXhwZWN0ZWRseSB0ZXJtaW5hdGVkLiBgICtcbiAgICAgICAgICAgIGBDaGVjayB0aGUgQXBwaXVtIHNlcnZlciBsb2cgYW5kIHRoZSBsb2djYXQgb3V0cHV0IGZvciBtb3JlIGRldGFpbHNgKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuandwcm94eS5jb21tYW5kKCcvc3RhdHVzJywgJ0dFVCcpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIHdhaXRNczogdGhpcy5zZXJ2ZXJMYXVuY2hUaW1lb3V0LFxuICAgICAgICBpbnRlcnZhbE1zOiA1MDAsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoL0NvbmRpdGlvbiB1bm1ldC8udGVzdChlLm1lc3NhZ2UpKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBUaW1lZCBvdXQgd2FpdGluZyBmb3IgRXNwcmVzc28gc2VydmVyIHRvIGJlIGAgK1xuICAgICAgICAgIGBvbmxpbmUgd2l0aGluICR7dGhpcy5zZXJ2ZXJMYXVuY2hUaW1lb3V0fW1zLiBUaGUgdGltZW91dCB2YWx1ZSBjb3VsZCBiZSBgICtcbiAgICAgICAgICBgY3VzdG9taXplZCB1c2luZyAnZXNwcmVzc29TZXJ2ZXJMYXVuY2hUaW1lb3V0JyBjYXBhYmlsaXR5YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICBsb2dnZXIuaW5mbyhgRXNwcmVzc28gc2VydmVyIGlzIG9ubGluZS4gYCArXG4gICAgICBgVGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgdG9vayAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIGxvZ2dlci5pbmZvKCdTdGFydGluZyB0aGUgc2Vzc2lvbicpO1xuXG4gICAgYXdhaXQgdGhpcy5qd3Byb3h5LmNvbW1hbmQoJy9zZXNzaW9uJywgJ1BPU1QnLCB7XG4gICAgICBjYXBhYmlsaXRpZXM6IHtcbiAgICAgICAgZmlyc3RNYXRjaDogW2NhcHNdLFxuICAgICAgICBhbHdheXNNYXRjaDoge31cbiAgICAgIH1cbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLnJlY29yZFRhcmdldEFwcFBhY2thZ2UoKTtcbiAgfVxuXG4gIGFzeW5jIHJlY29yZFRhcmdldEFwcFBhY2thZ2UgKCkge1xuICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFtgZWNobyBcIiR7dGhpcy5hcHBQYWNrYWdlfVwiID4gXCIke1RBUkdFVF9QQUNLQUdFX0NPTlRBSU5FUn1cImBdKTtcbiAgICBsb2dnZXIuaW5mbyhgUmVjb3JkZWQgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBwYWNrYWdlICcke3RoaXMuYXBwUGFja2FnZX0nIHRvICR7VEFSR0VUX1BBQ0tBR0VfQ09OVEFJTkVSfWApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdEZWxldGluZyBFc3ByZXNzbyBzZXJ2ZXIgc2Vzc2lvbicpO1xuICAgIC8vIHJlbHkgb24gandwcm94eSdzIGludGVsbGlnZW5jZSB0byBrbm93IHdoYXQgd2UncmUgdGFsa2luZyBhYm91dCBhbmRcbiAgICAvLyBkZWxldGUgdGhlIGN1cnJlbnQgc2Vzc2lvblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmp3cHJveHkuY29tbWFuZCgnLycsICdERUxFVEUnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBEaWQgbm90IGdldCBjb25maXJtYXRpb24gRXNwcmVzc28gZGVsZXRlU2Vzc2lvbiB3b3JrZWQ7IGAgK1xuICAgICAgICAgIGBFcnJvciB3YXM6ICR7ZXJyfWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluc3RQcm9jZXNzICYmIHRoaXMuaW5zdFByb2Nlc3MuaXNSdW5uaW5nKSB7XG4gICAgICBhd2FpdCB0aGlzLmluc3RQcm9jZXNzLnN0b3AoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgRXNwcmVzc29SdW5uZXIsIFJFUVVJUkVEX1BBUkFNUywgVEVTVF9BUEtfUEtHIH07XG5leHBvcnQgZGVmYXVsdCBFc3ByZXNzb1J1bm5lcjtcbiJdLCJmaWxlIjoibGliL2VzcHJlc3NvLXJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
require("source-map-support/register");
|
|
9
|
+
|
|
10
|
+
var _appiumSupport = require("appium-support");
|
|
11
|
+
|
|
12
|
+
const log = _appiumSupport.logger.getLogger('Espresso');
|
|
13
|
+
|
|
14
|
+
var _default = log;
|
|
15
|
+
exports.default = _default;require('source-map-support').install();
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9sb2dnZXIuanMiXSwibmFtZXMiOlsibG9nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFHQSxNQUFNQSxHQUFHLEdBQUdDLHNCQUFPQyxTQUFQLENBQWlCLFVBQWpCLENBQVo7O2VBRWVGLEciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5cblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignRXNwcmVzc28nKTtcblxuZXhwb3J0IGRlZmF1bHQgbG9nO1xuIl0sImZpbGUiOiJsaWIvbG9nZ2VyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
|