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,286 @@
1
+ package io.appium.espressoserver.lib.helpers.w3c.dispatcher
2
+
3
+ import io.appium.espressoserver.lib.handlers.exceptions.AppiumException
4
+ import io.appium.espressoserver.lib.handlers.exceptions.InvalidArgumentException
5
+ import io.appium.espressoserver.lib.handlers.exceptions.MoveTargetOutOfBoundsException
6
+ import io.appium.espressoserver.lib.helpers.Rect
7
+ import io.appium.espressoserver.lib.helpers.w3c.adapter.W3CActionAdapter
8
+ import io.appium.espressoserver.lib.helpers.w3c.models.*
9
+ import io.appium.espressoserver.lib.helpers.w3c.state.InputStateTable
10
+ import io.appium.espressoserver.lib.helpers.w3c.state.KeyInputState
11
+ import io.appium.espressoserver.lib.helpers.w3c.state.PointerInputState
12
+ import java.util.concurrent.Callable
13
+ import kotlin.math.roundToInt
14
+
15
+ object PointerDispatch {
16
+ @Throws(AppiumException::class)
17
+ private fun dispatchPointerEvent(dispatcherAdapter: W3CActionAdapter,
18
+ actionObject: ActionObject,
19
+ pointerInputState: PointerInputState,
20
+ inputStateTable: InputStateTable,
21
+ globalKeyInputState: KeyInputState?,
22
+ down: Boolean) {
23
+ val pointerType = actionObject.pointer
24
+ val button = actionObject.button
25
+ if (down) {
26
+ if (pointerInputState.isPressed(button)) {
27
+ return
28
+ }
29
+ } else {
30
+ if (!pointerInputState.isPressed(button)) {
31
+ return
32
+ }
33
+ }
34
+ val x = pointerInputState.x
35
+ val y = pointerInputState.y
36
+ if (down) {
37
+ pointerInputState.addPressed(button)
38
+ } else {
39
+ pointerInputState.removePressed(button)
40
+ }
41
+ dispatcherAdapter.logger.info(String.format(
42
+ "Dispatching pointer event '%s' on input source with id '%s' with coordinates [%s, %s] " +
43
+ "and button '%s'",
44
+ if (down) "pointerDown" else "pointerUp", actionObject.id, x, y, button
45
+ ))
46
+ dispatcherAdapter.lockAdapter()
47
+ try {
48
+ if (down) {
49
+ // Add cancel object to cancel list
50
+ val cancelObject = ActionObject(actionObject)
51
+ cancelObject.subType = InputSource.ActionType.POINTER_UP
52
+ inputStateTable.addActionToCancel(cancelObject)
53
+
54
+ // Dispatch implementation specific pointer down
55
+ dispatcherAdapter.pointerDown(button, actionObject.id!!, pointerType, x, y,
56
+ pointerInputState.buttons, globalKeyInputState)
57
+ } else {
58
+ // Dispatch implementation specific pointer up
59
+ dispatcherAdapter.pointerUp(button, actionObject.id!!, pointerType, x, y,
60
+ pointerInputState.buttons, globalKeyInputState)
61
+ }
62
+ } finally {
63
+ dispatcherAdapter.unlockAdapter()
64
+ }
65
+
66
+ // Log the new state of the pointer
67
+ dispatcherAdapter.logger.info(String.format(
68
+ "State of pointer input source with id %s is now: %s",
69
+ actionObject.id, pointerInputState.logMessage()
70
+ ))
71
+ }
72
+
73
+ /**
74
+ * Run the 'dispatch a pointer down' algorithm
75
+ * @param dispatcherAdapter W3C actions implementation
76
+ * @param actionObject Action object that defines the pointer action
77
+ * @param pointerInputState Current state of the input source
78
+ * @param globalKeyInputState Global key input state
79
+ * @throws AppiumException
80
+ */
81
+ @Throws(AppiumException::class)
82
+ fun dispatchPointerDown(dispatcherAdapter: W3CActionAdapter,
83
+ actionObject: ActionObject,
84
+ pointerInputState: PointerInputState,
85
+ inputStateTable: InputStateTable,
86
+ globalKeyInputState: KeyInputState?) {
87
+ dispatchPointerEvent(dispatcherAdapter, actionObject, pointerInputState,
88
+ inputStateTable, globalKeyInputState, true)
89
+ }
90
+
91
+ /**
92
+ * Perform the 'dispatch pointer up' algorithm
93
+ * @param dispatcherAdapter W3C actions implementation
94
+ * @param actionObject Action object that defines the pointer action
95
+ * @param pointerInputState Current state of the input source
96
+ * @param globalKeyInputState Global key input state
97
+ * @throws AppiumException
98
+ */
99
+ @Throws(AppiumException::class)
100
+ fun dispatchPointerUp(dispatcherAdapter: W3CActionAdapter,
101
+ actionObject: ActionObject,
102
+ pointerInputState: PointerInputState,
103
+ inputStateTable: InputStateTable,
104
+ globalKeyInputState: KeyInputState?) {
105
+ dispatchPointerEvent(dispatcherAdapter, actionObject, pointerInputState,
106
+ inputStateTable, globalKeyInputState, false)
107
+ }
108
+
109
+ /**
110
+ * Perform the 'dispatch a pointer cancel' event
111
+ * @param dispatcherAdapter ActionsPerformer adapter
112
+ * @param actionObject Action object
113
+ * @throws AppiumException
114
+ */
115
+ @Throws(AppiumException::class)
116
+ fun dispatchPointerCancel(dispatcherAdapter: W3CActionAdapter,
117
+ actionObject: ActionObject) {
118
+ dispatcherAdapter.pointerCancel(actionObject.id!!, actionObject.pointer!!)
119
+ }
120
+
121
+ /**
122
+ * Call the 'dispatch a pointerMove action' algorithm
123
+ * @param dispatcherAdapter W3C actions implementation
124
+ * @param sourceId ID of the input source
125
+ * @param actionObject Action object that defines the pointer action
126
+ * @param pointerInputState Current state of the input source
127
+ * @param tickDuration How long is this tick (in ms)
128
+ * @param timeAtBeginningOfTick Time when the current tick started (in ms)
129
+ * @param globalKeyInputState Global key input state
130
+ * @return Returns a callable that returns when the pointer move is complete
131
+ * @throws AppiumException
132
+ */
133
+ @Throws(AppiumException::class)
134
+ fun dispatchPointerMove(dispatcherAdapter: W3CActionAdapter,
135
+ sourceId: String?,
136
+ actionObject: ActionObject,
137
+ pointerInputState: PointerInputState,
138
+ tickDuration: Float,
139
+ timeAtBeginningOfTick: Long,
140
+ globalKeyInputState: KeyInputState?): Callable<BaseDispatchResult> {
141
+ // 1.5 Variable definitions
142
+ val xOffset = actionObject.x!!
143
+ val yOffset = actionObject.y!!
144
+ val startX = pointerInputState.x
145
+ val startY = pointerInputState.y
146
+ val origin = actionObject.origin
147
+ dispatcherAdapter.logger.info(String.format(
148
+ "Dispatching pointer move '%s' on input source with id '%s' with origin '%s' and coordinates [%s, %s]",
149
+ pointerInputState.type, sourceId, origin, xOffset, yOffset
150
+ ))
151
+ val x: Float
152
+ val y: Float
153
+
154
+ // 6. Run the substeps of the first matching value of origin
155
+ val originType = origin.type ?: Origin.VIEWPORT
156
+ dispatcherAdapter.logger.info("Origin type is: ", originType)
157
+ when (origin.type) {
158
+ Origin.POINTER -> {
159
+ x = startX + xOffset
160
+ y = startY + yOffset
161
+ }
162
+ Origin.ELEMENT -> {
163
+ requireNotNull(origin.elementId, { "Element identifier must be present for origin type 'ELEMENT'" })
164
+ dispatcherAdapter.logger.info("Getting element center point: ", origin.elementId!!)
165
+ val elementCoordinates = dispatcherAdapter.getElementCenterPoint(origin.elementId)
166
+ dispatcherAdapter.logger.info(String.format(
167
+ "Element center is: %s %s",
168
+ elementCoordinates.x, elementCoordinates.y
169
+ ))
170
+ x = elementCoordinates.x + xOffset
171
+ y = elementCoordinates.y + yOffset
172
+ }
173
+ Origin.VIEWPORT -> {
174
+ x = xOffset
175
+ y = yOffset
176
+ }
177
+ else -> throw InvalidArgumentException(String.format("'%s' is not a valid origin type", originType))
178
+ }
179
+
180
+ // 7-8. Bounds check
181
+ val boundingRect = Rect(0, 0, dispatcherAdapter.viewportWidth.toInt(), dispatcherAdapter.viewportHeight.toInt())
182
+ if (!boundingRect.contains(x.toInt(), y.toInt())) {
183
+ throw MoveTargetOutOfBoundsException(x, y, boundingRect)
184
+ }
185
+
186
+ // 9. Let duration be equal to action object's duration property if it is not undefined, or tick duration otherwise
187
+ val duration = actionObject.duration ?: tickDuration
188
+ val callable = performPointerMove(
189
+ dispatcherAdapter,
190
+ sourceId,
191
+ pointerInputState,
192
+ duration,
193
+ startX, startY,
194
+ x, y,
195
+ timeAtBeginningOfTick,
196
+ globalKeyInputState
197
+ )
198
+
199
+
200
+ // Log the new state of the pointer
201
+ dispatcherAdapter.logger.info(String.format(
202
+ "State of pointer input source with id %s is now: %s",
203
+ actionObject.id, pointerInputState.logMessage()
204
+ ))
205
+ return callable
206
+ }
207
+
208
+ /**
209
+ * Implements the 'perform a pointer move' algorithm in section 17.4.3
210
+ * @param dispatcherAdapter W3C actions implementation
211
+ * @param sourceId ID of the input source
212
+ * @param pointerInputState Current state of the input source
213
+ * @param duration How long is the pointer move
214
+ * @param startX Starting x coordinate
215
+ * @param startY Starting y coordinate
216
+ * @param targetX Target x coordinate
217
+ * @param targetY Target y coordinate
218
+ */
219
+ fun performPointerMove(dispatcherAdapter: W3CActionAdapter,
220
+ sourceId: String?,
221
+ pointerInputState: PointerInputState,
222
+ duration: Float,
223
+ startX: Float, startY: Float,
224
+ targetX: Float, targetY: Float,
225
+ timeAtBeginningOfTick: Long,
226
+ globalKeyInputState: KeyInputState?): Callable<BaseDispatchResult> {
227
+ return Callable {
228
+ val isLast: Boolean
229
+
230
+ // 2. Let time delta be the time since the beginning of the current tick, measured in milliseconds on a monotonic clock
231
+ val timeDelta = System.currentTimeMillis() - timeAtBeginningOfTick
232
+
233
+ // 3. Let duration ratio be the ratio of time delta and duration, if duration is greater than 0, or 1 otherwise
234
+ val durationRatio: Float = if (duration > 0f) timeDelta / duration else 1f
235
+
236
+ // 4. If duration ratio is 1, or close enough to 1 that the implementation will not further subdivide the move action,
237
+ // let last be true. Otherwise let last be false
238
+ isLast = 1 - durationRatio <= dispatcherAdapter.getPointerMoveDurationMargin(pointerInputState)
239
+
240
+ // 5. If last is true, let x equal target x and y equal target y
241
+ // 6. Otherwise let x equal an approximation to duration ratio × (target x - start x) + start x,, ...
242
+ val x = if (isLast) targetX else (durationRatio * (targetX - startX)).roundToInt() + startX
243
+ val y = if (isLast) targetY else (durationRatio * (targetY - startY)).roundToInt() + startY
244
+
245
+ // 7-8: Let currentX and currentY be pointer input state
246
+ val currentX = pointerInputState.x
247
+ val currentY = pointerInputState.y
248
+
249
+ // Prepare the result
250
+ val dispatchResult = DispatchPointerMoveResult(
251
+ dispatcherAdapter,
252
+ sourceId!!,
253
+ pointerInputState.type!!,
254
+ currentX, currentY,
255
+ x, y,
256
+ pointerInputState.buttons,
257
+ globalKeyInputState
258
+ )
259
+ if (currentX != x || currentY != y) {
260
+
261
+ // 8.3. Let input state's x property equal x and y property equal y
262
+ pointerInputState.x = x
263
+ pointerInputState.y = y
264
+ }
265
+
266
+ // Sleep for a fixed period of time
267
+ if (duration > 0) {
268
+ Thread.sleep(dispatcherAdapter.pointerMoveIntervalDuration().toLong())
269
+ }
270
+ if (!isLast) {
271
+ // 11. Perform a pointer move with arguments source id, input state, duration, start x, start y, target x, target y)
272
+ dispatchResult.next = performPointerMove(
273
+ dispatcherAdapter,
274
+ sourceId,
275
+ pointerInputState,
276
+ duration,
277
+ startX, startY,
278
+ targetX, targetY,
279
+ timeAtBeginningOfTick,
280
+ globalKeyInputState
281
+ )
282
+ }
283
+ dispatchResult
284
+ }
285
+ }
286
+ }
@@ -0,0 +1,21 @@
1
+ package io.appium.espressoserver.lib.helpers.w3c.dispatcher
2
+
3
+ class W3CKeyEvent {
4
+ var key: String? = null
5
+ var code: String? = null
6
+ var location = 0
7
+ var keyCode = 0
8
+ var charCode = 0
9
+ var which = 0
10
+ var isAltKey = false
11
+ var isShiftKey = false
12
+ var isCtrlKey = false
13
+ var isMetaKey = false
14
+ var isRepeat = false
15
+ var isComposing = false
16
+
17
+ fun logMessage(): String {
18
+ return "key=[$key] code=[$code] altKey=[$isAltKey] shiftKey=[$isShiftKey] ctrlKey=[$isCtrlKey] metaKey=[$isMetaKey]"
19
+ }
20
+
21
+ }
@@ -0,0 +1,169 @@
1
+ package io.appium.espressoserver.lib.helpers.w3c.dispatcher.constants
2
+
3
+ /**
4
+ * Implement table found in 17.4.2 that maps characters to keyCode
5
+ *
6
+ * Not using constants or enums because I don't think we'll actually need these in any
7
+ * specific implementation
8
+ * @param key Raw key
9
+ * @return The code of the raw key or null if not found
10
+ */
11
+ fun getCode(key: String?): String? {
12
+ return when (key) {
13
+ "`" -> "Backquote"
14
+ "\\" -> "Backslash"
15
+ "\uE003" -> "Backspace"
16
+ "[" -> "BracketLeft"
17
+ "}" -> "BracketRight"
18
+ "," -> "Comma"
19
+ "0" -> "Digit0"
20
+ "1" -> "Digit1"
21
+ "2" -> "Digit2"
22
+ "3" -> "Digit3"
23
+ "4" -> "Digit4"
24
+ "5" -> "Digit5"
25
+ "6" -> "Digit6"
26
+ "7" -> "Digit7"
27
+ "8" -> "Digit8"
28
+ "9" -> "Digit9"
29
+ "=" -> "Equal"
30
+ "<" -> "IntlBackslash"
31
+ "a" -> "KeyA"
32
+ "b" -> "KeyB"
33
+ "c" -> "KeyC"
34
+ "d" -> "KeyD"
35
+ "e" -> "KeyE"
36
+ "f" -> "KeyF"
37
+ "g" -> "KeyG"
38
+ "h" -> "KeyH"
39
+ "i" -> "KeyI"
40
+ "j" -> "KeyJ"
41
+ "k" -> "KeyK"
42
+ "l" -> "KeyL"
43
+ "m" -> "KeyM"
44
+ "n" -> "KeyN"
45
+ "o" -> "KeyO"
46
+ "p" -> "KeyP"
47
+ "q" -> "KeyQ"
48
+ "r" -> "KeyR"
49
+ "s" -> "KeyS"
50
+ "t" -> "KeyT"
51
+ "u" -> "KeyU"
52
+ "v" -> "KeyV"
53
+ "w" -> "KeyW"
54
+ "x" -> "KeyX"
55
+ "y" -> "KeyY"
56
+ "z" -> "KeyZ"
57
+ "-" -> "Minus"
58
+ "." -> "Period"
59
+ "'" -> "Quote"
60
+ ";" -> "Semicolon"
61
+ "/" -> "Slash"
62
+ "\uE00A" -> "AltLeft"
63
+ "\uE052" -> "AltRight"
64
+ "\uE009" -> "ControlLeft"
65
+ "\uE051" -> "ControlRight"
66
+ "\uE006" -> "Enter"
67
+ "\uE03D" -> "OSLeft"
68
+ "\uE053" -> "OSRight"
69
+ "\uE008" -> "ShiftLeft"
70
+ "\uE050" -> "ShiftRight"
71
+ " " -> "Space"
72
+ "\uE004" -> "Tab"
73
+ "\uE017" -> "Delete"
74
+ "\uE010" -> "End"
75
+ "\uE002" -> "Help"
76
+ "\uE011" -> "Home"
77
+ "\uE016" -> "Insert"
78
+ "\uE01E" -> "PageDown"
79
+ "\uE01F" -> "PageUp"
80
+ "\uE015" -> "ArrowDown"
81
+ "\uE012" -> "ArrowLeft"
82
+ "\uE014" -> "ArrowRight"
83
+ "\uE013" -> "ArrowUp"
84
+ "\uE00C" -> "Escape"
85
+ "\uE031" -> "F1"
86
+ "\uE032" -> "F2"
87
+ "\uE033" -> "F3"
88
+ "\uE034" -> "F4"
89
+ "\uE035" -> "F5"
90
+ "\uE036" -> "F6"
91
+ "\uE037" -> "F7"
92
+ "\uE038" -> "F8"
93
+ "\uE039" -> "F9"
94
+ "\uE03A" -> "F10"
95
+ "\uE03B" -> "F11"
96
+ "\uE03C" -> "F12"
97
+ "\uE01A" -> "Numpad0"
98
+ "\uE01B" -> "Numpad1"
99
+ "\uE01C" -> "Numpad2"
100
+ "\uE01D" -> "Numpad3"
101
+ "\uE020" -> "Numpad6"
102
+ "\uE021" -> "Numpad7"
103
+ "\uE022" -> "Numpad8"
104
+ "\uE023" -> "Numpad9"
105
+ "\uE028" -> "NumpadDecimal"
106
+ "\uE029" -> "NumpadDivide"
107
+ "\uE007" -> "NumpadEnter"
108
+ "\uE024" -> "NumpadMultiply"
109
+ "\uE026" -> "NumpadSubtract"
110
+ "~" -> "Backquote"
111
+ "|" -> "Backslash"
112
+ "{" -> "BracketLeft"
113
+ "]" -> "BracketRight"
114
+ ")" -> "Digit0"
115
+ "!" -> "Digit1"
116
+ "@" -> "Digit2"
117
+ "#" -> "Digit3"
118
+ "$" -> "Digit4"
119
+ "%" -> "Digit5"
120
+ "^" -> "Digit6"
121
+ "&" -> "Digit7"
122
+ "*" -> "Digit8"
123
+ "(" -> "Digit9"
124
+ "+" -> "Equal"
125
+ "A" -> "KeyA"
126
+ "B" -> "KeyB"
127
+ "C" -> "KeyC"
128
+ "D" -> "KeyD"
129
+ "E" -> "KeyE"
130
+ "F" -> "KeyF"
131
+ "G" -> "KeyG"
132
+ "H" -> "KeyH"
133
+ "I" -> "KeyI"
134
+ "J" -> "KeyJ"
135
+ "K" -> "KeyK"
136
+ "L" -> "KeyL"
137
+ "M" -> "KeyM"
138
+ "N" -> "KeyN"
139
+ "O" -> "KeyO"
140
+ "P" -> "KeyP"
141
+ "Q" -> "KeyQ"
142
+ "R" -> "KeyR"
143
+ "S" -> "KeyS"
144
+ "T" -> "KeyT"
145
+ "U" -> "KeyU"
146
+ "V" -> "KeyV"
147
+ "W" -> "KeyW"
148
+ "X" -> "KeyX"
149
+ "Y" -> "KeyY"
150
+ "Z" -> "KeyZ"
151
+ "_" -> "Minus"
152
+ ">" -> "Period"
153
+ "" -> "Quote"
154
+ ":" -> "Semicolon"
155
+ "?" -> "Slash"
156
+ "\uE00D" -> "Space"
157
+ "\uE05C" -> "Numpad0"
158
+ "\uE056" -> "Numpad1"
159
+ "\uE05B" -> "Numpad2"
160
+ "\uE055" -> "Numpad3"
161
+ "\uE058" -> "Numpad4"
162
+ "\uE05A" -> "Numpad6"
163
+ "\uE057" -> "Numpad7"
164
+ "\uE059" -> "Numpad8"
165
+ "\uE054" -> "Numpad9"
166
+ "\uE05D" -> "NumpadDecimal"
167
+ else -> null
168
+ }
169
+ }
@@ -0,0 +1,50 @@
1
+ package io.appium.espressoserver.lib.helpers.w3c.dispatcher.constants
2
+
3
+ /**
4
+ * Implement table found in 17.4.2 that maps characters to 'location'
5
+ *
6
+ * Not using constants or enums because I don't think we'll actually need these in any
7
+ * specific implementation
8
+ * @param key Raw key
9
+ * @return The location of the key or default 0
10
+ */
11
+ fun getLocation(key: String?): Int {
12
+ return when (key) {
13
+ "\uE007" -> 1
14
+ "\uE008" -> 1
15
+ "\uE009" -> 1
16
+ "\uE00A" -> 1
17
+ "\uE01A" -> 3
18
+ "\uE01B" -> 3
19
+ "\uE01C" -> 3
20
+ "\uE01D" -> 3
21
+ "\uE01E" -> 3
22
+ "\uE01F" -> 3
23
+ "\uE020" -> 3
24
+ "\uE021" -> 3
25
+ "\uE022" -> 3
26
+ "\uE023" -> 3
27
+ "\uE024" -> 3
28
+ "\uE025" -> 3
29
+ "\uE026" -> 3
30
+ "\uE027" -> 3
31
+ "\uE028" -> 3
32
+ "\uE029" -> 3
33
+ "\uE03D" -> 1
34
+ "\uE050" -> 2
35
+ "\uE051" -> 2
36
+ "\uE052" -> 2
37
+ "\uE053" -> 2
38
+ "\uE054" -> 3
39
+ "\uE055" -> 3
40
+ "\uE056" -> 3
41
+ "\uE057" -> 3
42
+ "\uE058" -> 3
43
+ "\uE059" -> 3
44
+ "\uE05A" -> 3
45
+ "\uE05B" -> 3
46
+ "\uE05C" -> 3
47
+ "\uE05D" -> 3
48
+ else -> 0
49
+ }
50
+ }
@@ -0,0 +1,84 @@
1
+ package io.appium.espressoserver.lib.helpers.w3c.dispatcher.constants
2
+
3
+ object KeyNormalizer {
4
+ private val normalizedKeyMap = mutableMapOf<String, String>()
5
+
6
+ fun toNormalizedKey(key: String): String {
7
+ return if (normalizedKeyMap.containsKey(key)) {
8
+ normalizedKeyMap[key]!!
9
+ } else key
10
+ }
11
+
12
+ init {
13
+ normalizedKeyMap["\uE000"] = NormalizedKeys.UNIDENTIFIED
14
+ normalizedKeyMap["\uE001"] = NormalizedKeys.CANCEL
15
+ normalizedKeyMap["\uE002"] = NormalizedKeys.HELP
16
+ normalizedKeyMap["\uE003"] = NormalizedKeys.BACKSPACE
17
+ normalizedKeyMap["\uE004"] = NormalizedKeys.TAB
18
+ normalizedKeyMap["\uE005"] = NormalizedKeys.CLEAR
19
+ normalizedKeyMap["\uE006"] = NormalizedKeys.RETURN
20
+ normalizedKeyMap["\uE007"] = NormalizedKeys.ENTER
21
+ normalizedKeyMap["\uE008"] = NormalizedKeys.SHIFT
22
+ normalizedKeyMap["\uE009"] = NormalizedKeys.CONTROL
23
+ normalizedKeyMap["\uE00A"] = NormalizedKeys.ALT
24
+ normalizedKeyMap["\uE00B"] = NormalizedKeys.PAUSE
25
+ normalizedKeyMap["\uE00C"] = NormalizedKeys.ESCAPE
26
+ normalizedKeyMap["\uE00D"] = NormalizedKeys.WHITESPACE
27
+ normalizedKeyMap["\uE00E"] = NormalizedKeys.PAGEUP
28
+ normalizedKeyMap["\uE00F"] = NormalizedKeys.PAGEDOWN
29
+ normalizedKeyMap["\uE010"] = NormalizedKeys.END
30
+ normalizedKeyMap["\uE011"] = NormalizedKeys.HOME
31
+ normalizedKeyMap["\uE012"] = NormalizedKeys.ARROW_LEFT
32
+ normalizedKeyMap["\uE013"] = NormalizedKeys.ARROW_UP
33
+ normalizedKeyMap["\uE014"] = NormalizedKeys.ARROW_RIGHT
34
+ normalizedKeyMap["\uE015"] = NormalizedKeys.ARROW_DOWN
35
+ normalizedKeyMap["\uE016"] = NormalizedKeys.INSERT
36
+ normalizedKeyMap["\uE017"] = NormalizedKeys.DELETE
37
+ normalizedKeyMap["\uE018"] = NormalizedKeys.SEMICOLON
38
+ normalizedKeyMap["\uE019"] = NormalizedKeys.EQUALS
39
+ normalizedKeyMap["\uE01A"] = NormalizedKeys.ZERO
40
+ normalizedKeyMap["\uE01B"] = NormalizedKeys.ONE
41
+ normalizedKeyMap["\uE01C"] = NormalizedKeys.TWO
42
+ normalizedKeyMap["\uE01D"] = NormalizedKeys.THREE
43
+ normalizedKeyMap["\uE01E"] = NormalizedKeys.FOUR
44
+ normalizedKeyMap["\uE01F"] = NormalizedKeys.FIVE
45
+ normalizedKeyMap["\uE020"] = NormalizedKeys.SIX
46
+ normalizedKeyMap["\uE021"] = NormalizedKeys.SEVEN
47
+ normalizedKeyMap["\uE022"] = NormalizedKeys.EIGHT
48
+ normalizedKeyMap["\uE023"] = NormalizedKeys.NINE
49
+ normalizedKeyMap["\uE024"] = NormalizedKeys.ASTERISK
50
+ normalizedKeyMap["\uE025"] = NormalizedKeys.PLUS
51
+ normalizedKeyMap["\uE026"] = NormalizedKeys.COMMA
52
+ normalizedKeyMap["\uE027"] = NormalizedKeys.HYPHEN
53
+ normalizedKeyMap["\uE028"] = NormalizedKeys.PERIOD
54
+ normalizedKeyMap["\uE029"] = NormalizedKeys.FORWARD_SLASH
55
+ normalizedKeyMap["\uE031"] = NormalizedKeys.F1
56
+ normalizedKeyMap["\uE032"] = NormalizedKeys.F2
57
+ normalizedKeyMap["\uE033"] = NormalizedKeys.F3
58
+ normalizedKeyMap["\uE034"] = NormalizedKeys.F4
59
+ normalizedKeyMap["\uE035"] = NormalizedKeys.F5
60
+ normalizedKeyMap["\uE036"] = NormalizedKeys.F6
61
+ normalizedKeyMap["\uE037"] = NormalizedKeys.F7
62
+ normalizedKeyMap["\uE038"] = NormalizedKeys.F8
63
+ normalizedKeyMap["\uE039"] = NormalizedKeys.F9
64
+ normalizedKeyMap["\uE03A"] = NormalizedKeys.F10
65
+ normalizedKeyMap["\uE03B"] = NormalizedKeys.F11
66
+ normalizedKeyMap["\uE03C"] = NormalizedKeys.F12
67
+ normalizedKeyMap["\uE03D"] = NormalizedKeys.META
68
+ normalizedKeyMap["\uE040"] = NormalizedKeys.ZENKAKU_HANKAKU
69
+ normalizedKeyMap["\uE050"] = NormalizedKeys.SHIFT
70
+ normalizedKeyMap["\uE051"] = NormalizedKeys.CONTROL
71
+ normalizedKeyMap["\uE052"] = NormalizedKeys.ALT
72
+ normalizedKeyMap["\uE053"] = NormalizedKeys.META
73
+ normalizedKeyMap["\uE054"] = NormalizedKeys.PAGEUP
74
+ normalizedKeyMap["\uE055"] = NormalizedKeys.PAGEDOWN
75
+ normalizedKeyMap["\uE056"] = NormalizedKeys.END
76
+ normalizedKeyMap["\uE057"] = NormalizedKeys.HOME
77
+ normalizedKeyMap["\uE058"] = NormalizedKeys.ARROW_LEFT
78
+ normalizedKeyMap["\uE059"] = NormalizedKeys.ARROW_UP
79
+ normalizedKeyMap["\uE05A"] = NormalizedKeys.ARROW_RIGHT
80
+ normalizedKeyMap["\uE05B"] = NormalizedKeys.ARROW_DOWN
81
+ normalizedKeyMap["\uE05C"] = NormalizedKeys.INSERT
82
+ normalizedKeyMap["\uE05D"] = NormalizedKeys.DELETE
83
+ }
84
+ }
@@ -0,0 +1,60 @@
1
+ package io.appium.espressoserver.lib.helpers.w3c.dispatcher.constants
2
+
3
+ object NormalizedKeys {
4
+ const val UNIDENTIFIED = "UNIDENTIFIED"
5
+ const val CANCEL = "CANCEL"
6
+ const val HELP = "HELP"
7
+ const val BACKSPACE = "BACKSPACE"
8
+ const val TAB = "TAB"
9
+ const val CLEAR = "CLEAR"
10
+ const val RETURN = "RETURN"
11
+ const val ENTER = "ENTER"
12
+ const val PAUSE = "PAUSE"
13
+ const val ESCAPE = "ESCAPE"
14
+ const val WHITESPACE = " "
15
+ const val SEMICOLON = ";"
16
+ const val EQUALS = "="
17
+ const val ZERO = "0"
18
+ const val ONE = "1"
19
+ const val TWO = "2"
20
+ const val THREE = "3"
21
+ const val FOUR = "4"
22
+ const val FIVE = "5"
23
+ const val SIX = "6"
24
+ const val SEVEN = "7"
25
+ const val EIGHT = "8"
26
+ const val NINE = "9"
27
+ const val ASTERISK = "*"
28
+ const val PLUS = "+"
29
+ const val COMMA = ","
30
+ const val HYPHEN = "-"
31
+ const val PERIOD = "."
32
+ const val FORWARD_SLASH = "/"
33
+ const val F1 = "F1"
34
+ const val F2 = "F2"
35
+ const val F3 = "F3"
36
+ const val F4 = "F4"
37
+ const val F5 = "F5"
38
+ const val F6 = "F6"
39
+ const val F7 = "F7"
40
+ const val F8 = "F8"
41
+ const val F9 = "F9"
42
+ const val F10 = "F10"
43
+ const val F11 = "F11"
44
+ const val F12 = "F12"
45
+ const val ZENKAKU_HANKAKU = "ZENKAKUHANKAKU"
46
+ const val SHIFT = "SHIFT"
47
+ const val CONTROL = "CONTROL"
48
+ const val ALT = "ALT"
49
+ const val META = "META"
50
+ const val PAGEUP = "PAGEUP"
51
+ const val PAGEDOWN = "PAGEDOWN"
52
+ const val END = "END"
53
+ const val HOME = "HOME"
54
+ const val ARROW_LEFT = "ARROWLEFT"
55
+ const val ARROW_UP = "ARROWUP"
56
+ const val ARROW_RIGHT = "ARROWRIGHT"
57
+ const val ARROW_DOWN = "ARROWDOWN"
58
+ const val INSERT = "INSERT"
59
+ const val DELETE = "DELETE"
60
+ }