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.
Files changed (311) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/LICENSE +201 -0
  3. package/README.md +864 -0
  4. package/build/index.js +48 -0
  5. package/build/lib/commands/execute.js +67 -0
  6. package/build/lib/commands/general.js +337 -0
  7. package/build/lib/commands/idling-resources.js +31 -0
  8. package/build/lib/commands/index.js +26 -0
  9. package/build/lib/commands/services.js +27 -0
  10. package/build/lib/desired-caps.js +65 -0
  11. package/build/lib/driver.js +475 -0
  12. package/build/lib/espresso-runner.js +381 -0
  13. package/build/lib/logger.js +18 -0
  14. package/build/lib/server-builder.js +213 -0
  15. package/build/lib/server.js +39 -0
  16. package/build/lib/utils.js +85 -0
  17. package/espresso-server/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk +0 -0
  18. package/espresso-server/app/build/outputs/apk/androidTest/debug/output-metadata.json +18 -0
  19. package/espresso-server/app/build.gradle.kts +153 -0
  20. package/espresso-server/app/proguard-rules.pro +25 -0
  21. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/EspressoServerRunnerTest.kt +93 -0
  22. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/AppDriver.kt +29 -0
  23. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/ComposeDriver.kt +73 -0
  24. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/DriverContext.kt +35 -0
  25. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/drivers/EspressoDriver.kt +70 -0
  26. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/AcceptAlert.kt +32 -0
  27. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Back.kt +31 -0
  28. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Clear.kt +40 -0
  29. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Click.kt +27 -0
  30. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/CreateSession.kt +58 -0
  31. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/DeleteSession.kt +33 -0
  32. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/DismissAlert.kt +32 -0
  33. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/DrawerActionHandler.kt +45 -0
  34. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementEquals.kt +19 -0
  35. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementScreenshot.kt +31 -0
  36. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ElementValue.kt +85 -0
  37. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindActive.kt +32 -0
  38. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindElement.kt +29 -0
  39. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/FindElements.kt +43 -0
  40. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetAlertText.kt +31 -0
  41. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetAttribute.kt +101 -0
  42. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetClipboard.kt +65 -0
  43. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetDeviceInfo.kt +44 -0
  44. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetDisplayed.kt +28 -0
  45. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetEnabled.kt +30 -0
  46. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocation.kt +32 -0
  47. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetLocationInView.kt +33 -0
  48. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetName.kt +31 -0
  49. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetOrientation.kt +44 -0
  50. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetRect.kt +38 -0
  51. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetRotation.kt +33 -0
  52. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSelected.kt +30 -0
  53. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSession.kt +34 -0
  54. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSessions.kt +41 -0
  55. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSettings.kt +25 -0
  56. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetSize.kt +32 -0
  57. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetToastVisibility.kt +34 -0
  58. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetWindowRect.kt +43 -0
  59. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/GetWindowSize.kt +42 -0
  60. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/HideKeyboard.kt +29 -0
  61. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Keys.kt +82 -0
  62. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ListIdlingResources.kt +30 -0
  63. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileBackdoor.kt +42 -0
  64. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileClickAction.kt +49 -0
  65. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileSwipe.kt +71 -0
  66. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MobileViewFlash.kt +50 -0
  67. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MoveTo.kt +50 -0
  68. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/MultiTouchAction.kt +50 -0
  69. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/NavigateTo.kt +42 -0
  70. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/NoSessionCommandHandler.kt +4 -0
  71. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/NotYetImplemented.kt +28 -0
  72. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/OpenNotifications.kt +28 -0
  73. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PerformAction.kt +42 -0
  74. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PerformAutofillDismissal.kt +31 -0
  75. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PerformEditorAction.kt +30 -0
  76. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PointerEventHandler.kt +281 -0
  77. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/PressKeyCode.kt +90 -0
  78. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/RegisterIdlingResources.kt +33 -0
  79. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ReleaseActions.kt +41 -0
  80. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/RequestHandler.kt +43 -0
  81. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ScreenshotHandler.kt +29 -0
  82. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/ScrollToPage.kt +60 -0
  83. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetClipboard.kt +64 -0
  84. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetDate.kt +41 -0
  85. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetOrientation.kt +61 -0
  86. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetRotation.kt +46 -0
  87. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/SetTime.kt +41 -0
  88. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Source.kt +29 -0
  89. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/StartActivity.kt +30 -0
  90. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/StartService.kt +40 -0
  91. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Status.kt +26 -0
  92. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/StopService.kt +37 -0
  93. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Text.kt +28 -0
  94. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/TouchAction.kt +49 -0
  95. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/Uiautomator.kt +68 -0
  96. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/UiautomatorPageSource.kt +35 -0
  97. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/UnregisterIdlingResources.kt +33 -0
  98. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/UpdateSettings.kt +35 -0
  99. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/WebAtoms.kt +69 -0
  100. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/AppiumException.kt +40 -0
  101. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/DuplicateRouteException.kt +22 -0
  102. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/ElementNotVisibleException.kt +30 -0
  103. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/InvalidArgumentException.kt +35 -0
  104. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/InvalidElementStateException.kt +41 -0
  105. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/InvalidSelectorException.kt +35 -0
  106. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/MoveTargetOutOfBoundsException.kt +39 -0
  107. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NoAlertOpenException.kt +33 -0
  108. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NoSuchDriverException.kt +31 -0
  109. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NoSuchElementException.kt +34 -0
  110. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/NotYetImplementedException.kt +33 -0
  111. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/ScreenCaptureException.kt +30 -0
  112. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/SessionNotCreatedException.kt +34 -0
  113. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/StaleElementException.kt +30 -0
  114. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/handlers/exceptions/XPathLookupException.kt +31 -0
  115. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AccessibilityServiceState.kt +15 -0
  116. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ActivityHelpers.kt +125 -0
  117. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ActivityOptionsHelpers.kt +60 -0
  118. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AlertHelpers.kt +170 -0
  119. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AndroidLogger.kt +45 -0
  120. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AssertHelpers.kt +17 -0
  121. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/AutofillHelpers.kt +44 -0
  122. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/BackdoorUtils.java +49 -0
  123. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ClipboardHelper.kt +51 -0
  124. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ComposeNodeFinder.kt +59 -0
  125. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/DeviceInfoHelper.kt +148 -0
  126. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/EspressoViewsCache.kt +57 -0
  127. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/GsonParserHelpers.kt +72 -0
  128. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/IMEHelpers.kt +88 -0
  129. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/IntentHelpers.kt +336 -0
  130. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/InteractionHelper.kt +40 -0
  131. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/InvocationOperation.java +80 -0
  132. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/LocaleHelpers.kt +46 -0
  133. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/Logger.kt +25 -0
  134. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/NotificationListener.kt +87 -0
  135. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/Rect.kt +22 -0
  136. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ReflectionUtils.kt +64 -0
  137. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ScreenshotsHelper.kt +59 -0
  138. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/StringHelpers.kt +42 -0
  139. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ThreadHelpers.kt +15 -0
  140. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/UiAutomationWrapper.kt +48 -0
  141. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/ViewFinder.kt +316 -0
  142. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/XMLHelpers.kt +56 -0
  143. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/extensions/Semaphore.kt +22 -0
  144. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/ArrayUtils.java +110 -0
  145. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/ClassUtils.java +180 -0
  146. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/MethodUtils.java +155 -0
  147. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/reflection/Validate.java +34 -0
  148. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/BaseW3CActionAdapter.kt +71 -0
  149. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/DummyW3CActionAdapter.kt +133 -0
  150. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/W3CActionAdapter.kt +71 -0
  151. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/AndroidKeyEvent.kt +271 -0
  152. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/AndroidMotionEvent.kt +90 -0
  153. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/EspressoW3CActionAdapter.kt +147 -0
  154. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/Helpers.kt +71 -0
  155. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/MotionEventBuilder.kt +153 -0
  156. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/MultiTouchState.kt +132 -0
  157. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/adapter/espresso/TouchState.kt +7 -0
  158. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/caps/CapsUtils.kt +96 -0
  159. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/BaseDispatchResult.kt +14 -0
  160. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/DispatchPointerMoveResult.kt +22 -0
  161. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/KeyDispatch.kt +151 -0
  162. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/PointerDispatch.kt +286 -0
  163. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/W3CKeyEvent.kt +21 -0
  164. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/KeyCodeMapper.kt +169 -0
  165. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/KeyLocationMapper.kt +50 -0
  166. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/KeyNormalizer.kt +84 -0
  167. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/dispatcher/constants/NormalizedKeys.kt +60 -0
  168. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/ActionObject.kt +138 -0
  169. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/ActionSequence.kt +112 -0
  170. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/Actions.kt +89 -0
  171. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/InputSource.kt +173 -0
  172. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/Origin.kt +24 -0
  173. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/OriginDeserializer.kt +25 -0
  174. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/models/Tick.kt +62 -0
  175. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/ActionsProcessor.kt +93 -0
  176. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/KeyProcessor.kt +57 -0
  177. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/PauseProcessor.kt +59 -0
  178. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/PointerProcessor.kt +115 -0
  179. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/processor/ProcessorHelpers.kt +35 -0
  180. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/ActiveInputSources.kt +62 -0
  181. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/InputState.kt +6 -0
  182. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/InputStateTable.kt +95 -0
  183. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/KeyInputState.kt +82 -0
  184. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/helpers/w3c/state/PointerInputState.kt +45 -0
  185. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/RouteDefinition.kt +67 -0
  186. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/RouteMap.kt +51 -0
  187. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/Router.kt +250 -0
  188. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/Server.kt +109 -0
  189. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/response/AppiumResponse.kt +61 -0
  190. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/http/response/BaseResponse.kt +25 -0
  191. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/AlertParams.kt +21 -0
  192. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/AppiumParams.kt +55 -0
  193. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/BackdoorMethodArg.kt +3 -0
  194. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ClipboardDataType.kt +18 -0
  195. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/DrawerActionParams.kt +21 -0
  196. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/EditorActionParams.kt +21 -0
  197. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Element.kt +169 -0
  198. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/GetClipboardParams.kt +27 -0
  199. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/GlobalSession.kt +64 -0
  200. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/HamcrestMatcher.kt +144 -0
  201. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/IdlingResourcesParams.kt +66 -0
  202. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/KeyEventParams.kt +23 -0
  203. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/LocaleParams.kt +34 -0
  204. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Location.kt +19 -0
  205. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Locator.kt +22 -0
  206. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MatcherJson.kt +37 -0
  207. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileBackdoorMethod.kt +22 -0
  208. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileBackdoorParams.kt +20 -0
  209. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileClickActionParams.kt +81 -0
  210. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MobileSwipeParams.kt +106 -0
  211. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MotionEventParams.kt +37 -0
  212. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MoveToParams.kt +26 -0
  213. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/MultiTouchActionsParams.kt +5 -0
  214. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/NavigateToParams.kt +21 -0
  215. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/OrientationParams.kt +21 -0
  216. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/OrientationType.kt +6 -0
  217. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Rect.kt +24 -0
  218. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/RotationParams.kt +38 -0
  219. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ScrollToPageParams.kt +36 -0
  220. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SessionParams.kt +23 -0
  221. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetClipboardParams.kt +29 -0
  222. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetDateParams.kt +23 -0
  223. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SetTimeParams.kt +22 -0
  224. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SettingsParams.kt +19 -0
  225. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Size.kt +22 -0
  226. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/SourceDocument.kt +286 -0
  227. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/StartActivityParams.kt +9 -0
  228. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/StartServiceParams.kt +22 -0
  229. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/StopServiceParams.kt +21 -0
  230. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/Strategy.kt +49 -0
  231. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/TextValueParams.kt +6 -0
  232. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ToastLookupParams.kt +22 -0
  233. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/TouchAction.kt +178 -0
  234. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/TouchActionsParams.kt +5 -0
  235. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/UiautomatorParams.kt +123 -0
  236. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewAttributesEnum.kt +51 -0
  237. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewElement.kt +204 -0
  238. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewFlashParams.kt +9 -0
  239. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/ViewText.kt +12 -0
  240. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/WindowRect.kt +24 -0
  241. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/WindowSize.kt +22 -0
  242. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/settings/AbstractSetting.kt +23 -0
  243. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/settings/DriverSetting.kt +40 -0
  244. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/settings/SettingType.kt +21 -0
  245. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtom.kt +26 -0
  246. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtomDeserializer.kt +99 -0
  247. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtomsMethods.kt +4 -0
  248. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/model/web/WebAtomsParams.kt +9 -0
  249. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/OrientationChange.kt +47 -0
  250. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/ScrollTo.kt +48 -0
  251. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/UiControllerPerformer.kt +67 -0
  252. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/UiControllerRunnable.kt +25 -0
  253. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/ViewGetter.kt +79 -0
  254. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewaction/ViewTextGetter.kt +31 -0
  255. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewmatcher/RegexpTextMatcher.kt +38 -0
  256. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewmatcher/WithView.kt +33 -0
  257. package/espresso-server/app/src/androidTest/java/io/appium/espressoserver/lib/viewmatcher/WithXPath.kt +55 -0
  258. package/espresso-server/app/src/main/AndroidManifest.xml +7 -0
  259. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/Helpers.kt +20 -0
  260. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/backdoor-methods.json +51 -0
  261. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/key-actions.json +15 -0
  262. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/assets/multi-touch-actions.json +28 -0
  263. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/GsonParserHelpersTest.kt +41 -0
  264. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/IntentCreationTests.kt +115 -0
  265. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/InvocationOperationTest.java +97 -0
  266. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/KReflectionUtilsTest.kt +108 -0
  267. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/XpathQueryParserTests.kt +42 -0
  268. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/ActionSequenceTest.kt +220 -0
  269. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/ActionsTest.kt +76 -0
  270. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/CapsUtilsTest.kt +76 -0
  271. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/Helpers.kt +7 -0
  272. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/InputSourceTest.kt +153 -0
  273. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/InputStateTableTest.kt +72 -0
  274. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/KeyDispatchTest.kt +133 -0
  275. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/KeyInputStateTest.kt +74 -0
  276. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/PointerDispatchTest.kt +370 -0
  277. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/ProcessorTest.kt +320 -0
  278. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/TickTest.kt +265 -0
  279. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/adapter/AndroidKeyEventTest.kt +114 -0
  280. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/helpers/w3c/adapter/HelpersTest.kt +31 -0
  281. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/http/RouteDefinitionTest.kt +74 -0
  282. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/HamcrestMatcherTest.kt +112 -0
  283. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MatcherJsonTest.kt +20 -0
  284. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MobileBackdoorMethodTest.java +110 -0
  285. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MobileClickTest.kt +46 -0
  286. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/MobileSwipeTest.kt +68 -0
  287. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/TouchActionTest.kt +56 -0
  288. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/web/WebAtomTest.kt +68 -0
  289. package/espresso-server/app/src/test/java/io/appium/espressoserver/test/model/web/WebAtomsTest.kt +96 -0
  290. package/espresso-server/build.gradle.kts +33 -0
  291. package/espresso-server/gradle/wrapper/gradle-wrapper.jar +0 -0
  292. package/espresso-server/gradle/wrapper/gradle-wrapper.properties +5 -0
  293. package/espresso-server/gradle.properties +26 -0
  294. package/espresso-server/gradlew +185 -0
  295. package/espresso-server/gradlew.bat +89 -0
  296. package/espresso-server/lint.xml +4 -0
  297. package/espresso-server/settings.gradle.kts +1 -0
  298. package/index.js +29 -0
  299. package/lib/commands/execute.js +72 -0
  300. package/lib/commands/general.js +321 -0
  301. package/lib/commands/idling-resources.js +52 -0
  302. package/lib/commands/index.js +16 -0
  303. package/lib/commands/services.js +50 -0
  304. package/lib/desired-caps.js +55 -0
  305. package/lib/driver.js +566 -0
  306. package/lib/espresso-runner.js +340 -0
  307. package/lib/logger.js +6 -0
  308. package/lib/server-builder.js +194 -0
  309. package/lib/server.js +18 -0
  310. package/lib/utils.js +74 -0
  311. package/package.json +105 -0
@@ -0,0 +1,110 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one or more
3
+ * contributor license agreements. See the NOTICE file distributed with
4
+ * this work for additional information regarding copyright ownership.
5
+ * The ASF licenses this file to You under the Apache License, Version 2.0
6
+ * (the "License"); you may not use this file except in compliance with
7
+ * the License. You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ package io.appium.espressoserver.lib.helpers.reflection;
19
+
20
+ import java.lang.reflect.Array;
21
+
22
+ public class ArrayUtils {
23
+ public static final Class<?>[] EMPTY_CLASS_ARRAY = new Class[0];
24
+ public static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
25
+
26
+ public static boolean isEmpty(final Object[] array) {
27
+ return getLength(array) == 0;
28
+ }
29
+
30
+ public static int getLength(final Object array) {
31
+ if (array == null) {
32
+ return 0;
33
+ }
34
+ return Array.getLength(array);
35
+ }
36
+
37
+ public static Object[] nullToEmpty(final Object[] array) {
38
+ if (isEmpty(array)) {
39
+ return EMPTY_OBJECT_ARRAY;
40
+ }
41
+ return array;
42
+ }
43
+
44
+ public static boolean isSameLength(final Object[] array1, final Object[] array2) {
45
+ return getLength(array1) == getLength(array2);
46
+ }
47
+
48
+ @SuppressWarnings("RedundantCast")
49
+ public static Object toPrimitive(final Object array) {
50
+ if (array == null) {
51
+ return null;
52
+ }
53
+ final Class<?> ct = array.getClass().getComponentType();
54
+ final Class<?> pt = ClassUtils.wrapperToPrimitive(ct);
55
+ if (Integer.TYPE.equals(pt)) {
56
+ return toPrimitive((Integer[]) array);
57
+ }
58
+ if (Long.TYPE.equals(pt)) {
59
+ return toPrimitive((Long[]) array);
60
+ }
61
+ if (Short.TYPE.equals(pt)) {
62
+ return toPrimitive((Short[]) array);
63
+ }
64
+ if (Double.TYPE.equals(pt)) {
65
+ return toPrimitive((Double[]) array);
66
+ }
67
+ if (Float.TYPE.equals(pt)) {
68
+ return toPrimitive((Float[]) array);
69
+ }
70
+ return array;
71
+ }
72
+
73
+ public static <T> T[] clone(final T[] array) {
74
+ if (array == null) {
75
+ return null;
76
+ }
77
+ return array.clone();
78
+ }
79
+
80
+ @SuppressWarnings("unchecked")
81
+ public static <T> T[] addAll(final T[] array1, final T... array2) {
82
+ if (array1 == null) {
83
+ return clone(array2);
84
+ } else if (array2 == null) {
85
+ return clone(array1);
86
+ }
87
+ final Class<?> type1 = array1.getClass().getComponentType();
88
+ @SuppressWarnings("unchecked") // OK, because array is of type T
89
+ final T[] joinedArray = (T[]) Array.newInstance(type1, array1.length + array2.length);
90
+ System.arraycopy(array1, 0, joinedArray, 0, array1.length);
91
+ try {
92
+ System.arraycopy(array2, 0, joinedArray, array1.length, array2.length);
93
+ } catch (final ArrayStoreException ase) {
94
+ // Check if problem was due to incompatible types
95
+ /*
96
+ * We do this here, rather than before the copy because:
97
+ * - it would be a wasted check most of the time
98
+ * - safer, in case check turns out to be too strict
99
+ */
100
+ final Class<?> type2 = array2.getClass().getComponentType();
101
+ //noinspection ConstantConditions
102
+ if (!type1.isAssignableFrom(type2)) {
103
+ throw new IllegalArgumentException("Cannot store " + type2.getName() + " in an array of "
104
+ + type1.getName(), ase);
105
+ }
106
+ throw ase; // No, so rethrow original
107
+ }
108
+ return joinedArray;
109
+ }
110
+ }
@@ -0,0 +1,180 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one or more
3
+ * contributor license agreements. See the NOTICE file distributed with
4
+ * this work for additional information regarding copyright ownership.
5
+ * The ASF licenses this file to You under the Apache License, Version 2.0
6
+ * (the "License"); you may not use this file except in compliance with
7
+ * the License. You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ package io.appium.espressoserver.lib.helpers.reflection;
19
+
20
+ import java.util.ArrayList;
21
+ import java.util.HashMap;
22
+ import java.util.List;
23
+ import java.util.Map;
24
+
25
+ public class ClassUtils {
26
+
27
+ private static final Map<Class<?>, Class<?>> primitiveWrapperMap = new HashMap<>();
28
+ static {
29
+ primitiveWrapperMap.put(Boolean.TYPE, Boolean.class);
30
+ primitiveWrapperMap.put(Byte.TYPE, Byte.class);
31
+ primitiveWrapperMap.put(Character.TYPE, Character.class);
32
+ primitiveWrapperMap.put(Short.TYPE, Short.class);
33
+ primitiveWrapperMap.put(Integer.TYPE, Integer.class);
34
+ primitiveWrapperMap.put(Long.TYPE, Long.class);
35
+ primitiveWrapperMap.put(Double.TYPE, Double.class);
36
+ primitiveWrapperMap.put(Float.TYPE, Float.class);
37
+ primitiveWrapperMap.put(Void.TYPE, Void.TYPE);
38
+ }
39
+
40
+ private static final Map<Class<?>, Class<?>> wrapperPrimitiveMap = new HashMap<>();
41
+ static {
42
+ for (final Map.Entry<Class<?>, Class<?>> entry : primitiveWrapperMap.entrySet()) {
43
+ final Class<?> primitiveClass = entry.getKey();
44
+ final Class<?> wrapperClass = entry.getValue();
45
+ if (!primitiveClass.equals(wrapperClass)) {
46
+ wrapperPrimitiveMap.put(wrapperClass, primitiveClass);
47
+ }
48
+ }
49
+ }
50
+
51
+ public static Class<?> primitiveToWrapper(final Class<?> cls) {
52
+ Class<?> convertedClass = cls;
53
+ if (cls != null && cls.isPrimitive()) {
54
+ convertedClass = primitiveWrapperMap.get(cls);
55
+ }
56
+ return convertedClass;
57
+ }
58
+
59
+ public static Class<?> wrapperToPrimitive(final Class<?> cls) {
60
+ return wrapperPrimitiveMap.get(cls);
61
+ }
62
+
63
+ public static boolean isAssignable(Class<?>[] classArray, Class<?>[] toClassArray, final boolean autoboxing) {
64
+ if (!ArrayUtils.isSameLength(classArray, toClassArray)) {
65
+ return false;
66
+ }
67
+ if (classArray == null) {
68
+ classArray = ArrayUtils.EMPTY_CLASS_ARRAY;
69
+ }
70
+ if (toClassArray == null) {
71
+ toClassArray = ArrayUtils.EMPTY_CLASS_ARRAY;
72
+ }
73
+ for (int i = 0; i < classArray.length; i++) {
74
+ if (!isAssignable(classArray[i], toClassArray[i], autoboxing)) {
75
+ return false;
76
+ }
77
+ }
78
+ return true;
79
+ }
80
+
81
+ @SuppressWarnings("DuplicateExpressions")
82
+ public static boolean isAssignable(Class<?> cls, final Class<?> toClass, final boolean autoboxing) {
83
+ if (toClass == null) {
84
+ return false;
85
+ }
86
+ // have to check for null, as isAssignableFrom doesn't
87
+ if (cls == null) {
88
+ return !toClass.isPrimitive();
89
+ }
90
+ //autoboxing:
91
+ if (autoboxing) {
92
+ if (cls.isPrimitive() && !toClass.isPrimitive()) {
93
+ cls = primitiveToWrapper(cls);
94
+ if (cls == null) {
95
+ return false;
96
+ }
97
+ }
98
+ if (toClass.isPrimitive() && !cls.isPrimitive()) {
99
+ cls = wrapperToPrimitive(cls);
100
+ if (cls == null) {
101
+ return false;
102
+ }
103
+ }
104
+ }
105
+ if (cls.equals(toClass)) {
106
+ return true;
107
+ }
108
+ if (cls.isPrimitive()) {
109
+ if (!toClass.isPrimitive()) {
110
+ return false;
111
+ }
112
+ if (Integer.TYPE.equals(cls)) {
113
+ return Long.TYPE.equals(toClass)
114
+ || Float.TYPE.equals(toClass)
115
+ || Double.TYPE.equals(toClass);
116
+ }
117
+ if (Long.TYPE.equals(cls)) {
118
+ return Float.TYPE.equals(toClass)
119
+ || Double.TYPE.equals(toClass);
120
+ }
121
+ if (Boolean.TYPE.equals(cls)) {
122
+ return false;
123
+ }
124
+ if (Double.TYPE.equals(cls)) {
125
+ return false;
126
+ }
127
+ if (Float.TYPE.equals(cls)) {
128
+ return Double.TYPE.equals(toClass);
129
+ }
130
+ if (Character.TYPE.equals(cls)) {
131
+ return Integer.TYPE.equals(toClass)
132
+ || Long.TYPE.equals(toClass)
133
+ || Float.TYPE.equals(toClass)
134
+ || Double.TYPE.equals(toClass);
135
+ }
136
+ if (Short.TYPE.equals(cls)) {
137
+ return Integer.TYPE.equals(toClass)
138
+ || Long.TYPE.equals(toClass)
139
+ || Float.TYPE.equals(toClass)
140
+ || Double.TYPE.equals(toClass);
141
+ }
142
+ if (Byte.TYPE.equals(cls)) {
143
+ return Short.TYPE.equals(toClass)
144
+ || Integer.TYPE.equals(toClass)
145
+ || Long.TYPE.equals(toClass)
146
+ || Float.TYPE.equals(toClass)
147
+ || Double.TYPE.equals(toClass);
148
+ }
149
+ // should never get here
150
+ return false;
151
+ }
152
+ return toClass.isAssignableFrom(cls);
153
+ }
154
+
155
+ public static List<Class<?>> getAllSuperclasses(final Class<?> cls) {
156
+ if (cls == null) {
157
+ return null;
158
+ }
159
+ final List<Class<?>> classes = new ArrayList<>();
160
+ Class<?> superclass = cls.getSuperclass();
161
+ while (superclass != null) {
162
+ classes.add(superclass);
163
+ superclass = superclass.getSuperclass();
164
+ }
165
+ return classes;
166
+ }
167
+
168
+ public static Class<?>[] toClass(final Object... array) {
169
+ if (array == null) {
170
+ return null;
171
+ } else if (array.length == 0) {
172
+ return ArrayUtils.EMPTY_CLASS_ARRAY;
173
+ }
174
+ final Class<?>[] classes = new Class[array.length];
175
+ for (int i = 0; i < array.length; i++) {
176
+ classes[i] = array[i] == null ? null : array[i].getClass();
177
+ }
178
+ return classes;
179
+ }
180
+ }
@@ -0,0 +1,155 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one or more
3
+ * contributor license agreements. See the NOTICE file distributed with
4
+ * this work for additional information regarding copyright ownership.
5
+ * The ASF licenses this file to You under the Apache License, Version 2.0
6
+ * (the "License"); you may not use this file except in compliance with
7
+ * the License. You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ package io.appium.espressoserver.lib.helpers.reflection;
19
+
20
+ import java.lang.reflect.Array;
21
+ import java.lang.reflect.InvocationTargetException;
22
+ import java.lang.reflect.Method;
23
+ import java.util.List;
24
+ import java.util.Objects;
25
+
26
+ /**
27
+ * Copied from org.apache.commons.lang3.reflect
28
+ */
29
+ public class MethodUtils {
30
+
31
+ public static Object invokeMethod(final Object object, final String methodName, Object... args)
32
+ throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
33
+ args = ArrayUtils.nullToEmpty(args);
34
+ final Class<?>[] parameterTypes = ClassUtils.toClass(args);
35
+ Method method = getMatchingMethod(object.getClass(), methodName, parameterTypes);
36
+ if (method != null && !method.isAccessible()) {
37
+ method.setAccessible(true);
38
+ }
39
+
40
+ if (method == null) {
41
+ throw new NoSuchMethodException("No such method: " + methodName + "() on object: " + object.getClass().getName());
42
+ }
43
+ args = toVarArgs(method, args);
44
+ return method.invoke(object, args);
45
+ }
46
+
47
+ public static Object invokeStaticMethod(final Class<?> cls, final String methodName, Object... args)
48
+ throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
49
+ args = ArrayUtils.nullToEmpty(args);
50
+ final Class<?>[] parameterTypes = ClassUtils.toClass(args);
51
+ final Method method = getMatchingMethod(cls, methodName, parameterTypes);
52
+ if (method != null && !method.isAccessible()) {
53
+ method.setAccessible(true);
54
+ }
55
+
56
+ if (method == null) {
57
+ throw new NoSuchMethodException("No such method: " + methodName + "() on class: " + cls.getName());
58
+ }
59
+ args = toVarArgs(method, args);
60
+ return method.invoke(null, args);
61
+ }
62
+
63
+
64
+ private static Object[] getVarArgs(final Object[] args, final Class<?>[] methodParameterTypes) {
65
+ if (args.length == methodParameterTypes.length && (args[args.length - 1] == null ||
66
+ args[args.length - 1].getClass().equals(methodParameterTypes[methodParameterTypes.length - 1]))) {
67
+ // The args array is already in the canonical form for the method.
68
+ return args;
69
+ }
70
+
71
+ // Construct a new array matching the method's declared parameter types.
72
+ final Object[] newArgs = new Object[methodParameterTypes.length];
73
+
74
+ // Copy the normal (non-varargs) parameters
75
+ System.arraycopy(args, 0, newArgs, 0, methodParameterTypes.length - 1);
76
+
77
+ // Construct a new array for the variadic parameters
78
+ final Class<?> varArgComponentType = methodParameterTypes[methodParameterTypes.length - 1].getComponentType();
79
+ final int varArgLength = args.length - methodParameterTypes.length + 1;
80
+
81
+ Object varArgsArray = Array.newInstance(ClassUtils.primitiveToWrapper(varArgComponentType), varArgLength);
82
+ // Copy the variadic arguments into the varargs array.
83
+ //noinspection SuspiciousSystemArraycopy
84
+ System.arraycopy(args, methodParameterTypes.length - 1, varArgsArray, 0, varArgLength);
85
+
86
+ //noinspection ConstantConditions
87
+ if (varArgComponentType.isPrimitive()) {
88
+ // unbox from wrapper type to primitive type
89
+ varArgsArray = ArrayUtils.toPrimitive(varArgsArray);
90
+ }
91
+
92
+ // Store the varargs array in the last position of the array to return
93
+ newArgs[methodParameterTypes.length - 1] = varArgsArray;
94
+
95
+ // Return the canonical varargs array.
96
+ return newArgs;
97
+ }
98
+
99
+ private static Object[] toVarArgs(final Method method, Object[] args) {
100
+ if (method.isVarArgs()) {
101
+ final Class<?>[] methodParameterTypes = method.getParameterTypes();
102
+ args = getVarArgs(args, methodParameterTypes);
103
+ }
104
+ return args;
105
+ }
106
+
107
+ private static Method getMatchingMethod(final Class<?> cls, final String methodName, final Class<?>... parameterTypes) {
108
+ Validate.notNull(cls, "Null class not allowed.");
109
+ Validate.notEmpty(methodName, "Null or blank methodName not allowed.");
110
+
111
+ // Address methods in superclasses
112
+ Method[] methodArray = cls.getDeclaredMethods();
113
+ final List<Class<?>> superclassList = ClassUtils.getAllSuperclasses(cls);
114
+ for (final Class<?> klass : superclassList) {
115
+ methodArray = ArrayUtils.addAll(methodArray, klass.getDeclaredMethods());
116
+ }
117
+
118
+ Method inexactMatch = null;
119
+ for (final Method method : methodArray) {
120
+ if (methodName.equals(method.getName()) &&
121
+ Objects.deepEquals(parameterTypes, method.getParameterTypes())) {
122
+ return method;
123
+ } else if (methodName.equals(method.getName()) &&
124
+ ClassUtils.isAssignable(parameterTypes, method.getParameterTypes(), true)) {
125
+ if ((inexactMatch == null) || (distance(parameterTypes, method.getParameterTypes())
126
+ < distance(parameterTypes, inexactMatch.getParameterTypes()))) {
127
+ inexactMatch = method;
128
+ }
129
+ }
130
+ }
131
+ return inexactMatch;
132
+ }
133
+
134
+ private static int distance(final Class<?>[] classArray, final Class<?>[] toClassArray) {
135
+ int answer = 0;
136
+
137
+ if (!ClassUtils.isAssignable(classArray, toClassArray, true)) {
138
+ return -1;
139
+ }
140
+ for (int offset = 0; offset < classArray.length; offset++) {
141
+ // Note InheritanceUtils.distance() uses different scoring system.
142
+ if (classArray[offset].equals(toClassArray[offset])) {
143
+ //noinspection UnnecessaryContinue
144
+ continue;
145
+ } else if (ClassUtils.isAssignable(classArray[offset], toClassArray[offset], true)
146
+ && !ClassUtils.isAssignable(classArray[offset], toClassArray[offset], false)) {
147
+ answer++;
148
+ } else {
149
+ answer = answer + 2;
150
+ }
151
+ }
152
+
153
+ return answer;
154
+ }
155
+ }
@@ -0,0 +1,34 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one or more
3
+ * contributor license agreements. See the NOTICE file distributed with
4
+ * this work for additional information regarding copyright ownership.
5
+ * The ASF licenses this file to You under the Apache License, Version 2.0
6
+ * (the "License"); you may not use this file except in compliance with
7
+ * the License. You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ package io.appium.espressoserver.lib.helpers.reflection;
19
+
20
+ public class Validate {
21
+ public static <T> T notNull(final T object, final String message, final Object... values) {
22
+ if (object == null) {
23
+ throw new NullPointerException(String.format(message, values));
24
+ }
25
+ return object;
26
+ }
27
+
28
+ public static <T extends CharSequence> T notEmpty(final T chars, final String message, final Object... values) {
29
+ if (notNull(chars, message, values).length() == 0) {
30
+ throw new IllegalArgumentException(String.format(message, values));
31
+ }
32
+ return chars;
33
+ }
34
+ }
@@ -0,0 +1,71 @@
1
+ package io.appium.espressoserver.lib.helpers.w3c.adapter
2
+
3
+ import java.util.concurrent.locks.ReentrantLock
4
+
5
+ import io.appium.espressoserver.lib.handlers.exceptions.AppiumException
6
+ import io.appium.espressoserver.lib.helpers.w3c.state.PointerInputState
7
+
8
+ abstract class BaseW3CActionAdapter : W3CActionAdapter {
9
+
10
+ override fun getKeyCode(keyValue: String?, location: Int): Int {
11
+ keyValue?.let {
12
+ return Character.getNumericValue(keyValue[0])
13
+ }
14
+ return -1
15
+ }
16
+
17
+ override fun getCharCode(keyValue: String?, location: Int): Int = -1
18
+
19
+ override fun getWhich(keyValue: String?, location: Int): Int = -1
20
+
21
+ override fun lockAdapter() {
22
+ reentrantLock.lock()
23
+ }
24
+
25
+ override fun unlockAdapter() {
26
+ reentrantLock.unlock()
27
+ }
28
+
29
+ /**
30
+ * Determines how close coordinates must be to the target coordinates before we
31
+ * decide to just skip ahead to the target coordinates. 0.01 is arbitrary.
32
+ *
33
+ * (see item 4 of 'perform a pointer move' algorithm in 17.4.3)
34
+ * @param pointerInputState What the state of the pointer is currently
35
+ * @return How close the coordinates need to be to just go to the final coordinate.
36
+ */
37
+ override fun getPointerMoveDurationMargin(pointerInputState: PointerInputState): Double = 0.01
38
+
39
+ /**
40
+ * How long (in ms) does the adapter need to perform a pointer move event
41
+ *
42
+ * (see 17.4.3)
43
+ * @return Time in MS to perform operations
44
+ */
45
+ override fun pointerMoveIntervalDuration(): Int = 5 // Default to 5 ms (120 moves per second)
46
+
47
+ @Throws(AppiumException::class)
48
+ override fun sleep(duration: Float) {
49
+ try {
50
+ Thread.sleep(Math.round(duration).toLong())
51
+ } catch (ie: InterruptedException) {
52
+ throw AppiumException("Could not run 'sleep' method: ${ie.cause}")
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Waits for the UI to complete before moving forward
58
+ */
59
+ override fun waitForUiThread() {
60
+ // No-op by default.
61
+ }
62
+
63
+ @Throws(AppiumException::class)
64
+ override fun sychronousTickActionsComplete() {
65
+ // No-op by default
66
+ }
67
+
68
+ companion object {
69
+ private val reentrantLock = ReentrantLock()
70
+ }
71
+ }
@@ -0,0 +1,133 @@
1
+ package io.appium.espressoserver.lib.helpers.w3c.adapter
2
+
3
+ import android.graphics.Point
4
+
5
+ import java.util.ArrayList
6
+
7
+ import io.appium.espressoserver.lib.handlers.exceptions.AppiumException
8
+ import io.appium.espressoserver.lib.handlers.exceptions.NoSuchElementException
9
+ import io.appium.espressoserver.lib.handlers.exceptions.StaleElementException
10
+ import io.appium.espressoserver.lib.helpers.Logger
11
+ import io.appium.espressoserver.lib.helpers.w3c.dispatcher.W3CKeyEvent
12
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.PointerType
13
+ import io.appium.espressoserver.lib.helpers.w3c.state.KeyInputState
14
+ import io.appium.espressoserver.lib.helpers.w3c.state.PointerInputState
15
+
16
+ open class DummyW3CActionAdapter : BaseW3CActionAdapter() {
17
+
18
+ // Keep a log of pointer move events so the values can be checked in the unit tests
19
+ private val pointerMoveEvents = ArrayList<PointerMoveEvent>()
20
+ override val logger: Logger = DummyLogger()
21
+
22
+ override val viewportHeight: Long
23
+ get() = 400
24
+
25
+ override val viewportWidth: Long
26
+ get() = 200
27
+
28
+ class PointerMoveEvent {
29
+ var sourceId: String? = null
30
+ var pointerType: PointerType? = null
31
+ var currentX: Float = 0.toFloat()
32
+ var currentY: Float = 0.toFloat()
33
+ var x: Float = 0.toFloat()
34
+ var y: Float = 0.toFloat()
35
+ var buttons: Set<Int>? = null
36
+ var globalKeyInputState: KeyInputState? = null
37
+ }
38
+
39
+ private inner class DummyLogger : Logger {
40
+ override fun error(vararg messages: Any) {
41
+ // No-op
42
+ }
43
+
44
+ override fun error(message: String, throwable: Throwable) {
45
+ // No-op
46
+ }
47
+
48
+ override fun info(vararg messages: Any) {
49
+ // No-op
50
+ }
51
+
52
+ override fun debug(vararg messages: Any) {
53
+ // No-op
54
+ }
55
+
56
+ override fun warn(vararg messages: Any) {
57
+ // No-op
58
+ }
59
+ }
60
+
61
+ override fun keyDown(keyDownEvent: W3CKeyEvent) {
62
+ // No-op
63
+ }
64
+
65
+ override fun keyUp(keyUpEvent: W3CKeyEvent) {
66
+ // No-op
67
+ }
68
+
69
+ @Throws(AppiumException::class)
70
+ override fun pointerUp(button: Int, sourceId: String, pointerType: PointerType?,
71
+ x: Float, y: Float, depressedButtons: Set<Int>,
72
+ globalKeyInputState: KeyInputState?) {
73
+ // No-op
74
+ }
75
+
76
+ @Throws(AppiumException::class)
77
+ override fun pointerDown(button: Int, sourceId: String, pointerType: PointerType?,
78
+ x: Float, y: Float, depressedButtons: Set<Int>,
79
+ globalKeyInputState: KeyInputState?) {
80
+ // No-op
81
+ }
82
+
83
+ override fun pointerCancel(sourceId: String, pointerType: PointerType) {
84
+ // No-op
85
+ }
86
+
87
+ override fun getPointerMoveDurationMargin(pointerInputState: PointerInputState): Double {
88
+ return if (pointerInputState.type == PointerType.TOUCH && !pointerInputState.hasPressedButtons()) {
89
+ // If no buttons are pushed nothing happens, so skip to the end
90
+ // of the pointer move
91
+ // e.g.: touch move without pressed buttons is like a finger moving without
92
+ // being pressed on the screen
93
+ 1.0
94
+ } else 0.01
95
+
96
+ // Give a margin of error of 1%
97
+ }
98
+
99
+ override fun pointerMove(sourceId: String, pointerType: PointerType?,
100
+ currentX: Float, currentY: Float, x: Float, y: Float,
101
+ buttons: Set<Int>?, globalKeyInputState: KeyInputState?) {
102
+ // Add the pointer move event to the logs
103
+ val pointerMoveEvent = PointerMoveEvent()
104
+ pointerMoveEvent.apply {
105
+ this.sourceId = sourceId
106
+ this.pointerType = pointerType
107
+ this.currentX = currentX
108
+ this.currentY = currentY
109
+ this.x = x
110
+ this.y = y
111
+ this.buttons = buttons
112
+ this.globalKeyInputState = globalKeyInputState
113
+ }
114
+ pointerMoveEvents.add(pointerMoveEvent)
115
+ }
116
+
117
+ fun getPointerMoveEvents(): List<PointerMoveEvent> {
118
+ return pointerMoveEvents
119
+ }
120
+
121
+ @Throws(AppiumException::class)
122
+ override fun getElementCenterPoint(elementId: String?): Point {
123
+ when(elementId) {
124
+ "none" -> throw NoSuchElementException("Could not find element with id: ${elementId}")
125
+ "stale" -> throw StaleElementException("Element with id ${elementId} no longer exists")
126
+ }
127
+
128
+ val point = Point()
129
+ point.x = 10
130
+ point.y = 10
131
+ return point
132
+ }
133
+ }