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,370 @@
1
+ package io.appium.espressoserver.test.helpers.w3c
2
+
3
+ import org.junit.Test
4
+ import java.util.concurrent.Callable
5
+ import java.util.concurrent.ExecutionException
6
+ import java.util.concurrent.ExecutorCompletionService
7
+ import java.util.concurrent.Executors
8
+
9
+ import io.appium.espressoserver.lib.handlers.exceptions.AppiumException
10
+ import io.appium.espressoserver.lib.handlers.exceptions.MoveTargetOutOfBoundsException
11
+ import io.appium.espressoserver.lib.helpers.w3c.adapter.DummyW3CActionAdapter
12
+ import io.appium.espressoserver.lib.helpers.w3c.dispatcher.BaseDispatchResult
13
+ import io.appium.espressoserver.lib.helpers.w3c.models.ActionObject
14
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.InputSourceType
15
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.PointerType
16
+ import io.appium.espressoserver.lib.helpers.w3c.models.Origin
17
+ import io.appium.espressoserver.lib.helpers.w3c.state.InputStateTable
18
+ import io.appium.espressoserver.lib.helpers.w3c.state.KeyInputState
19
+ import io.appium.espressoserver.lib.helpers.w3c.state.PointerInputState
20
+
21
+ import io.appium.espressoserver.lib.helpers.w3c.dispatcher.PointerDispatch.dispatchPointerDown
22
+ import io.appium.espressoserver.lib.helpers.w3c.dispatcher.PointerDispatch.dispatchPointerMove
23
+ import io.appium.espressoserver.lib.helpers.w3c.dispatcher.PointerDispatch.dispatchPointerUp
24
+ import io.appium.espressoserver.lib.helpers.w3c.dispatcher.PointerDispatch.performPointerMove
25
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType.POINTER_MOVE
26
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType.POINTER_UP
27
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.PointerType.TOUCH
28
+ import org.junit.Assert.assertEquals
29
+ import org.junit.Assert.assertFalse
30
+ import org.junit.Assert.assertTrue
31
+ import org.junit.Assert.fail
32
+ import kotlin.math.abs
33
+
34
+ class PointerDispatchTest {
35
+
36
+ private var pointerInputSource: PointerInputState? = null
37
+
38
+ @Test
39
+ @Throws(ExecutionException::class, InterruptedException::class, AppiumException::class)
40
+ fun `should no-op pointer move if no buttons`() {
41
+ val dummyW3CActionAdapter = DummyW3CActionAdapter()
42
+ pointerInputSource = PointerInputState(TOUCH)
43
+ pointerInputSource!!.type = TOUCH
44
+
45
+ val executorService = Executors.newSingleThreadExecutor()
46
+ val callable = performPointerMove(
47
+ dummyW3CActionAdapter, "any", pointerInputSource!!,
48
+ 100f, 10f, 20f, 30f, 40f, System.currentTimeMillis(),
49
+ KeyInputState()
50
+ )
51
+ val dispatchResult = executorService.submit(callable).get()
52
+ dispatchResult.perform()
53
+ executorService.shutdown()
54
+ assertEquals(dummyW3CActionAdapter.getPointerMoveEvents().size.toLong(), 1)
55
+ }
56
+
57
+ @Test
58
+ @Throws(ExecutionException::class, InterruptedException::class, AppiumException::class)
59
+ fun `should do one move if duration zero`() {
60
+ val dummyW3CActionAdapter = DummyW3CActionAdapter()
61
+ pointerInputSource = PointerInputState(TOUCH)
62
+ pointerInputSource!!.type = TOUCH
63
+ pointerInputSource!!.x = 10f
64
+ pointerInputSource!!.y = 20f
65
+ pointerInputSource!!.addPressed(0)
66
+
67
+ val executorService = Executors.newSingleThreadExecutor()
68
+ val callable = performPointerMove(
69
+ dummyW3CActionAdapter, "any", pointerInputSource!!,
70
+ 0f, 10f, 20f, 30f, 40f, System.currentTimeMillis(),
71
+ KeyInputState()
72
+ )
73
+ val dispatchResult = executorService.submit(callable).get()
74
+ dispatchResult.perform()
75
+ executorService.shutdown()
76
+
77
+ val pointerMoveEvents = dummyW3CActionAdapter.getPointerMoveEvents()
78
+ assertEquals(dummyW3CActionAdapter.getPointerMoveEvents().size.toLong(), 1)
79
+ assertFloatEquals(pointerMoveEvents[pointerMoveEvents.size - 1].x, 30f)
80
+ assertFloatEquals(pointerMoveEvents[pointerMoveEvents.size - 1].y, 40f)
81
+ }
82
+
83
+ @Test
84
+ @Throws(ExecutionException::class, InterruptedException::class, AppiumException::class)
85
+ fun `should move pointer in intervals`() {
86
+ val dummyW3CActionAdapter = DummyW3CActionAdapter()
87
+ pointerInputSource = PointerInputState(TOUCH)
88
+ pointerInputSource!!.type = TOUCH
89
+ pointerInputSource!!.x = 10f
90
+ pointerInputSource!!.y = 20f
91
+ pointerInputSource!!.addPressed(0)
92
+
93
+ var callable: Callable<BaseDispatchResult>? = performPointerMove(
94
+ dummyW3CActionAdapter, "any", pointerInputSource!!,
95
+ 1000f, 10f, 20f, 30f, 40f, System.currentTimeMillis(),
96
+ KeyInputState()
97
+ )
98
+
99
+ var dispatchResult: BaseDispatchResult
100
+ do {
101
+ val executorService = Executors.newSingleThreadExecutor()
102
+ dispatchResult = executorService.submit(callable).get()
103
+ dispatchResult.perform()
104
+ callable = dispatchResult.next
105
+ executorService.shutdown()
106
+ } while (dispatchResult.hasNext())
107
+
108
+ val pointerMoveEvents = dummyW3CActionAdapter.getPointerMoveEvents()
109
+ assertTrue(abs(pointerMoveEvents.size - 20) <= 2) // Should be 20 moves per the 1 second (give or take 1)
110
+ assertFloatEquals(pointerMoveEvents[0].currentX, 10f)
111
+ assertFloatEquals(pointerMoveEvents[0].currentY, 20f)
112
+ assertFloatEquals(pointerMoveEvents[pointerMoveEvents.size - 1].x, 30f)
113
+ assertFloatEquals(pointerMoveEvents[pointerMoveEvents.size - 1].y, 40f)
114
+
115
+ var prevX = 10f
116
+ var prevY = 10f
117
+ var currX: Float
118
+ var currY: Float
119
+ for (pointerMoveEvent in pointerMoveEvents) {
120
+ currX = pointerMoveEvent.x
121
+ currY = pointerMoveEvent.y
122
+ assertTrue(currX > prevX)
123
+ assertTrue(currY > prevY)
124
+ prevX = currX
125
+ prevY = currY
126
+ }
127
+
128
+ assertFloatEquals(pointerInputSource!!.x, 30f)
129
+ assertFloatEquals(pointerInputSource!!.y, 40f)
130
+ }
131
+
132
+ @Test
133
+ @Throws(InterruptedException::class, ExecutionException::class, AppiumException::class)
134
+ fun `should run multiple pointer moves`() {
135
+ val dummyW3CActionAdapter = DummyW3CActionAdapter()
136
+ pointerInputSource = PointerInputState(TOUCH)
137
+ pointerInputSource!!.type = TOUCH
138
+ pointerInputSource!!.x = 10f
139
+ pointerInputSource!!.y = 20f
140
+ pointerInputSource!!.addPressed(0)
141
+
142
+ val pointerInputSourceTwo = PointerInputState(TOUCH)
143
+ pointerInputSourceTwo.type = TOUCH
144
+ pointerInputSourceTwo.x = 10f
145
+ pointerInputSourceTwo.y = 20f
146
+ pointerInputSourceTwo.addPressed(0)
147
+
148
+ val pointerMoveOne = performPointerMove(
149
+ dummyW3CActionAdapter, "any", pointerInputSource!!,
150
+ 500f, 10f, 20f, 30f, 40f, System.currentTimeMillis(),
151
+ KeyInputState()
152
+ )
153
+
154
+ val pointerMoveTwo = performPointerMove(
155
+ dummyW3CActionAdapter, "any2", pointerInputSourceTwo,
156
+ 500f, 20f, 30f, 40f, 50f, System.currentTimeMillis(),
157
+ KeyInputState()
158
+ )
159
+
160
+ val executor = Executors.newCachedThreadPool()
161
+ var completedPointerMoves: Long = 0
162
+
163
+ do {
164
+ val completionService = ExecutorCompletionService<BaseDispatchResult>(executor)
165
+ completionService.submit(pointerMoveOne)
166
+ completionService.submit(pointerMoveTwo)
167
+
168
+ val resultFuture = completionService.take() //blocks if none available
169
+ val dispatchResult = resultFuture.get()
170
+ dispatchResult.perform()
171
+ if (dispatchResult.hasNext()) {
172
+ completionService.submit(dispatchResult.next)
173
+ } else {
174
+ completedPointerMoves++
175
+ }
176
+ } while (completedPointerMoves < 2)
177
+ val pointerMoveEvents = dummyW3CActionAdapter.getPointerMoveEvents()
178
+
179
+ var hasAny = false
180
+ var hasAny2 = false
181
+ for (pointerMoveEvent in pointerMoveEvents) {
182
+ if ("any" == pointerMoveEvent.sourceId) {
183
+ hasAny = true
184
+ assertTrue(pointerMoveEvent.x in 10.0..30.0)
185
+ assertTrue(pointerMoveEvent.y in 20.0..40.0)
186
+ } else if ("any2" == pointerMoveEvent.sourceId) {
187
+ hasAny2 = true
188
+ assertTrue(pointerMoveEvent.x in 20.0..40.0)
189
+ assertTrue(pointerMoveEvent.y in 30.0..50.0)
190
+ }
191
+ }
192
+ assertTrue(hasAny)
193
+ assertTrue(hasAny2)
194
+ }
195
+
196
+ @Test
197
+ @Throws(AppiumException::class)
198
+ fun shouldThrowBoundsExceptions() {
199
+
200
+ val V = Origin.VIEWPORT
201
+ val P = Origin.POINTER
202
+ val E = Origin.ELEMENT
203
+
204
+ // Make a matrix of pointers that are out-of-bounds
205
+ val badX = longArrayOf(-1, 0, 201, 200, 191, 190, 191, 190)
206
+ val badY = longArrayOf(0, -1, 400, 401, 410, 411, 410, 411)
207
+ val badOrigin = arrayOf(V, V, V, V, E, E, P, P)
208
+
209
+ for (i in badX.indices) {
210
+ val dummyW3CActionAdapter = DummyW3CActionAdapter()
211
+ val pointerInputState = PointerInputState(TOUCH)
212
+
213
+ pointerInputState.x = 10f
214
+ pointerInputState.y = 10f
215
+ val actionObject = ActionObject(
216
+ "id", InputSourceType.POINTER, POINTER_MOVE, 0
217
+ )
218
+ actionObject.x = badX[i].toFloat()
219
+ actionObject.y = badY[i].toFloat()
220
+ actionObject.origin = Origin(badOrigin[i], "fake")
221
+
222
+ try {
223
+ dispatchPointerMove(dummyW3CActionAdapter, "any", actionObject,
224
+ pointerInputState, 10f, 0, null)
225
+ } catch (me: MoveTargetOutOfBoundsException) {
226
+ assertTrue(me.message!!.contains("not in the viewport"))
227
+ continue
228
+ }
229
+
230
+ fail("Should have thrown 'MoveTargetOutOfBoundsException'")
231
+ }
232
+ }
233
+
234
+ @Test
235
+ @Throws(AppiumException::class, ExecutionException::class, InterruptedException::class)
236
+ fun `should dispatch pointer moves and update state`() {
237
+
238
+ val V = Origin.VIEWPORT
239
+ val P = Origin.POINTER
240
+ val E = Origin.ELEMENT
241
+
242
+ // Make a matrix of pointers and the expected state changes
243
+ val xCoords = longArrayOf(10, -5, 15, -5, 15)
244
+ val yCoords = longArrayOf(15, -5, 25, -5, 25)
245
+ val origins = arrayOf(V, E, E, P, P)
246
+ val expectedX = longArrayOf(10, 5, 25, 45, 65)
247
+ val expectedY = longArrayOf(15, 5, 35, 65, 95)
248
+
249
+ for (i in xCoords.indices) {
250
+ val dummyW3CActionAdapter = DummyW3CActionAdapter()
251
+ val pointerInputState = PointerInputState(TOUCH)
252
+
253
+ pointerInputState.x = 50f
254
+ pointerInputState.y = 70f
255
+ val actionObject = ActionObject(
256
+ "id", InputSourceType.POINTER, POINTER_MOVE, 0
257
+ )
258
+ actionObject.x = xCoords[i].toFloat()
259
+ actionObject.y = yCoords[i].toFloat()
260
+ actionObject.origin = Origin(origins[i], "fake")
261
+
262
+ val executorService = Executors.newSingleThreadExecutor()
263
+ val callable = dispatchPointerMove(dummyW3CActionAdapter, "any", actionObject,
264
+ pointerInputState, 10f, 0, null)
265
+ executorService.submit(callable).get()
266
+ executorService.shutdown()
267
+
268
+ assertFloatEquals(pointerInputState.x, expectedX[i].toFloat())
269
+ assertFloatEquals(pointerInputState.y, expectedY[i].toFloat())
270
+ }
271
+ }
272
+
273
+ @Test
274
+ @Throws(AppiumException::class)
275
+ fun `should add button to depressed on dispatched down event`() {
276
+ val dummyW3CActionAdapter = DummyW3CActionAdapter()
277
+ val inputStateTable = InputStateTable()
278
+ val pointerInputState = PointerInputState(TOUCH)
279
+
280
+ val actionObject = ActionObject(
281
+ "id", InputSourceType.POINTER, POINTER_MOVE, 0
282
+ )
283
+ actionObject.button = 1
284
+
285
+ assertFalse(pointerInputState.isPressed(1))
286
+ assertTrue(inputStateTable.cancelList.isEmpty())
287
+ dispatchPointerDown(dummyW3CActionAdapter, actionObject, pointerInputState,
288
+ inputStateTable, KeyInputState())
289
+ assertEquals(inputStateTable.cancelList.size.toLong(), 1)
290
+ val cancelObject = inputStateTable.cancelList[0]
291
+ assertEquals(cancelObject.button.toLong(), 1)
292
+ assertEquals(cancelObject.subType, POINTER_UP)
293
+ assertTrue(pointerInputState.isPressed(1))
294
+ }
295
+
296
+ @Test
297
+ @Throws(AppiumException::class)
298
+ fun `should call dispatch down immediately if button already pressed`() {
299
+ class TempDummyAdapter : DummyW3CActionAdapter() {
300
+ @Throws(AppiumException::class)
301
+ override fun pointerDown(button: Int, sourceId: String, pointerType: PointerType?,
302
+ x: Float, y: Float, depressedButtons: Set<Int>,
303
+ globalKeyInputState: KeyInputState?) {
304
+ throw AppiumException("Should not reach this point. Button already pressed.")
305
+ }
306
+
307
+ }
308
+
309
+ val dummyW3CActionAdapter = TempDummyAdapter()
310
+ val pointerInputState = PointerInputState(TOUCH)
311
+ pointerInputState.addPressed(1)
312
+ val actionObject = ActionObject(
313
+ "id", InputSourceType.POINTER, POINTER_MOVE, 0
314
+ )
315
+ actionObject.button = 1
316
+
317
+ assertTrue(pointerInputState.isPressed(1))
318
+ dispatchPointerDown(dummyW3CActionAdapter, actionObject, pointerInputState,
319
+ InputStateTable(), null)
320
+
321
+ assertTrue(pointerInputState.isPressed(1))
322
+ }
323
+
324
+ @Test
325
+ @Throws(AppiumException::class)
326
+ fun `should remove button from depressed button set on dispatch up`() {
327
+ val dummyW3CActionAdapter = DummyW3CActionAdapter()
328
+ val pointerInputState = PointerInputState(TOUCH)
329
+ pointerInputState.addPressed(1)
330
+
331
+ val actionObject = ActionObject(
332
+ "id", InputSourceType.POINTER, POINTER_MOVE, 0
333
+ )
334
+ actionObject.button = 1
335
+
336
+ assertTrue(pointerInputState.isPressed(1))
337
+ dispatchPointerUp(dummyW3CActionAdapter, actionObject, pointerInputState,
338
+ InputStateTable(), KeyInputState())
339
+
340
+ assertFalse(pointerInputState.isPressed(1))
341
+ }
342
+
343
+ @Test
344
+ @Throws(AppiumException::class)
345
+ fun `should return dispatch up immediately if button is not pressed`() {
346
+ class TempDummyAdapter : DummyW3CActionAdapter() {
347
+ @Throws(AppiumException::class)
348
+ @Suppress("UNUSED_PARAMETER", "unused")
349
+ fun pointerUp(button: Int, sourceId: String, pointerType: PointerType,
350
+ x: Float?, y: Float?, depressedButtons: Set<Int>,
351
+ globalKeyInputState: KeyInputState?) {
352
+ throw AppiumException("Should not reach this point. Button already pressed.")
353
+ }
354
+
355
+ }
356
+
357
+ val dummyW3CActionAdapter = TempDummyAdapter()
358
+ val pointerInputState = PointerInputState(TOUCH)
359
+ val actionObject = ActionObject(
360
+ "id", InputSourceType.POINTER, POINTER_MOVE, 0
361
+ )
362
+ actionObject.button = 1
363
+
364
+ assertFalse(pointerInputState.isPressed(1))
365
+ dispatchPointerUp(dummyW3CActionAdapter, actionObject, pointerInputState,
366
+ InputStateTable(), null)
367
+
368
+ assertFalse(pointerInputState.isPressed(1))
369
+ }
370
+ }
@@ -0,0 +1,320 @@
1
+ package io.appium.espressoserver.test.helpers.w3c
2
+
3
+
4
+ import org.junit.Before
5
+ import org.junit.Test
6
+
7
+ import java.util.ArrayList
8
+
9
+ import io.appium.espressoserver.lib.handlers.exceptions.InvalidArgumentException
10
+ import io.appium.espressoserver.lib.handlers.exceptions.NotYetImplementedException
11
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource
12
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.Action
13
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType
14
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.InputSourceType
15
+ import io.appium.espressoserver.lib.helpers.w3c.state.ActiveInputSources
16
+ import io.appium.espressoserver.lib.helpers.w3c.state.InputStateTable
17
+ import io.appium.espressoserver.lib.helpers.w3c.state.KeyInputState
18
+
19
+ import io.appium.espressoserver.lib.helpers.w3c.processor.ActionsProcessor.processSourceActionSequence
20
+ import io.appium.espressoserver.lib.helpers.w3c.processor.KeyProcessor.processKeyAction
21
+ import io.appium.espressoserver.lib.helpers.w3c.processor.PauseProcessor.processNullAction
22
+ import io.appium.espressoserver.lib.helpers.w3c.processor.PauseProcessor.processPauseAction
23
+ import io.appium.espressoserver.lib.helpers.w3c.processor.PointerProcessor.processPointerAction
24
+ import io.appium.espressoserver.lib.helpers.w3c.processor.PointerProcessor.processPointerMoveAction
25
+ import io.appium.espressoserver.lib.helpers.w3c.processor.PointerProcessor.processPointerUpOrDownAction
26
+ import org.junit.Assert.*
27
+
28
+ class ProcessorTest {
29
+
30
+ private var pointerInputSource: InputSource? = null
31
+
32
+ @Before
33
+ fun before() {
34
+ pointerInputSource = InputSource()
35
+ pointerInputSource!!.type = InputSourceType.POINTER
36
+ }
37
+
38
+
39
+ @Test
40
+ fun shouldRejectNullIfNotPause() {
41
+ val action = Action()
42
+ action.type = ActionType.POINTER_DOWN
43
+ try {
44
+ processNullAction(action, InputSourceType.NONE, "any1", 0)
45
+ fail("expected exception was not occured.")
46
+ } catch (ie: InvalidArgumentException) {
47
+ assertTrue(ie.message!!.contains("must be type 'pause'"))
48
+ }
49
+
50
+ }
51
+
52
+ @Test
53
+ @Throws(InvalidArgumentException::class)
54
+ fun shouldPassNullIfPause() {
55
+ val action = Action()
56
+ action.type = ActionType.PAUSE
57
+ val actionObject = processNullAction(action, InputSourceType.NONE, "any1", 0)
58
+ assertEquals(actionObject.type, InputSourceType.NONE)
59
+ assertEquals(actionObject.subType, ActionType.PAUSE)
60
+ }
61
+
62
+ @Test
63
+ fun shouldRejectPauseIfNegativeDuration() {
64
+ val action = Action()
65
+ action.duration = -1f
66
+ try {
67
+ processPauseAction(action, InputSourceType.NONE, "any3", 0)
68
+ fail("expected exception was not occured.")
69
+ } catch (ie: InvalidArgumentException) {
70
+ assertTrue(ie.message!!.contains("'duration' be greater than or equal to 0"))
71
+ }
72
+
73
+ }
74
+
75
+ @Test
76
+ @Throws(InvalidArgumentException::class)
77
+ fun shouldPassPauseWithNullDuration() {
78
+ val action = Action()
79
+ assertNull(action.duration)
80
+ val actionObject = processPauseAction(action, InputSourceType.NONE, "any", 0)
81
+ assertNull(actionObject.duration)
82
+ }
83
+
84
+ @Test
85
+ @Throws(InvalidArgumentException::class)
86
+ fun shouldPassPauseWithDurationSet() {
87
+ val action = Action()
88
+ action.duration = 10f
89
+ val actionObject = processPauseAction(action, InputSourceType.NONE, "any", 0)
90
+ assertEquals(actionObject.duration, 10f)
91
+ }
92
+
93
+ @Test
94
+ fun shouldRejectNullIfTypeNotPause() {
95
+ val action = Action()
96
+ try {
97
+ processPauseAction(action, InputSourceType.NONE, "any", 0)
98
+ } catch (ie: InvalidArgumentException) {
99
+ assertTrue(ie.message!!.contains("type 'pause'"))
100
+ }
101
+
102
+ }
103
+
104
+ @Test
105
+ @Throws(InvalidArgumentException::class)
106
+ fun shouldProcessNullAsPauseAction() {
107
+ val action = Action()
108
+ action.duration = 100f
109
+ action.type = ActionType.PAUSE
110
+ processPauseAction(action, InputSourceType.NONE, "any", 0)
111
+ assertEquals(action.duration, 100f)
112
+ }
113
+
114
+ @Test
115
+ fun shouldRejectPointerMoveIfNegativeDuration() {
116
+ val action = Action()
117
+ action.duration = -1f
118
+ try {
119
+ processPointerMoveAction(action, InputSourceType.POINTER, "any", 0)
120
+ fail("expected exception was not occured.")
121
+ } catch (ie: InvalidArgumentException) {
122
+ assertTrue(ie.message!!.contains("'duration' be greater than or equal to 0"))
123
+ }
124
+
125
+ }
126
+
127
+ @Test
128
+ @Throws(InvalidArgumentException::class)
129
+ fun shouldPassValidPointerMove() {
130
+ val action = Action()
131
+ action.x = 100f
132
+ action.y = 200f
133
+ action.duration = 300f
134
+ val actionObject = processPointerMoveAction(action, InputSourceType.POINTER, "any", 0)
135
+ assertFloatEquals(actionObject.x!!, 100f)
136
+ assertFloatEquals(actionObject.y!!, 200f)
137
+ assertEquals(actionObject.duration, 300f)
138
+ }
139
+
140
+ @Test
141
+ fun shouldRejectPointerUpOrDownIfButtonNegative() {
142
+ val action = Action()
143
+ action.button = -100
144
+ try {
145
+ processPointerUpOrDownAction(action, InputSourceType.POINTER, "any", 0)
146
+ fail("expected exception was not occured.")
147
+ } catch (ie: InvalidArgumentException) {
148
+ assertTrue(ie.message!!.contains("property 'button' must be greater than or equal to 0"))
149
+ }
150
+
151
+ }
152
+
153
+ @Test
154
+ fun shouldRejectKeyIfNotValidType() {
155
+ val action = Action()
156
+ action.type = ActionType.POINTER_DOWN
157
+ try {
158
+ processKeyAction(action, InputSourceType.KEY, "any", 0)
159
+ fail("expected exception was not occured.")
160
+ } catch (ie: InvalidArgumentException) {
161
+ assertTrue(ie.message!!.contains("has an invalid type"))
162
+ }
163
+
164
+ }
165
+
166
+ @Test
167
+ @Throws(InvalidArgumentException::class)
168
+ fun shouldProcessKeyAsPauseIfPause() {
169
+ val action = Action()
170
+ action.type = ActionType.PAUSE
171
+ action.duration = 300f
172
+ val actionObject = processKeyAction(action, InputSourceType.KEY, "any", 0)
173
+ assertEquals(actionObject.duration, 300f)
174
+ assertEquals(actionObject.subType, ActionType.PAUSE)
175
+ assertEquals(actionObject.type, InputSourceType.KEY)
176
+ }
177
+
178
+ @Test
179
+ fun shouldRejectKeyIfNotUnicode() {
180
+ val action = Action()
181
+ action.type = ActionType.KEY_DOWN
182
+ action.value = "asdfafsd"
183
+ try {
184
+ processKeyAction(action, InputSourceType.KEY, "any", 0)
185
+ fail("expected exception was not occured.")
186
+ } catch (ie: InvalidArgumentException) {
187
+ assertTrue(ie.message!!.contains("Must be a unicode point"))
188
+ }
189
+
190
+ }
191
+
192
+ @Test
193
+ @Throws(InvalidArgumentException::class)
194
+ fun shouldPassKeyIfUnicode() {
195
+ val action = Action()
196
+ action.type = ActionType.KEY_DOWN
197
+ val value = '\uE9F0'.toString()
198
+ action.value = value
199
+ val actionObject = processKeyAction(action, InputSourceType.POINTER, "any", 0)
200
+ assertEquals(actionObject.value, value)
201
+ assertEquals(actionObject.subType, ActionType.KEY_DOWN)
202
+ }
203
+
204
+ @Test
205
+ @Throws(NotYetImplementedException::class)
206
+ fun shouldRejectInvalidPointerType() {
207
+ val action = Action()
208
+ action.type = ActionType.KEY_DOWN
209
+ try {
210
+ processPointerAction(action, pointerInputSource!!, "any", 0)
211
+ fail("expected exception was not occured.")
212
+ } catch (ie: InvalidArgumentException) {
213
+ assertTrue(ie.message!!.contains("has an invalid type"))
214
+ }
215
+
216
+ }
217
+
218
+ @Test
219
+ @Throws(InvalidArgumentException::class, NotYetImplementedException::class)
220
+ fun shouldProcessPointerAsPauseIfPause() {
221
+ val action = Action()
222
+ action.type = ActionType.PAUSE
223
+ action.duration = 300f
224
+ val actionObject = processPointerAction(action, pointerInputSource!!, "any", 0)
225
+ assertEquals(actionObject.duration, 300f)
226
+ assertEquals(actionObject.subType, ActionType.PAUSE)
227
+ assertEquals(actionObject.type, InputSourceType.POINTER)
228
+ }
229
+
230
+ @Test
231
+ @Throws(InvalidArgumentException::class, NotYetImplementedException::class)
232
+ fun shouldProcessPointerAsPointerMove() {
233
+ val action = Action()
234
+ action.type = ActionType.POINTER_MOVE
235
+ val actionObject = processPointerAction(action, pointerInputSource!!, "any", 0)
236
+ assertEquals(actionObject.subType, ActionType.POINTER_MOVE)
237
+ assertEquals(actionObject.type, InputSourceType.POINTER)
238
+ }
239
+
240
+ @Test
241
+ @Throws(InvalidArgumentException::class, NotYetImplementedException::class)
242
+ fun shouldProcessPointerAsPointerUp() {
243
+ val action = Action()
244
+ action.type = ActionType.POINTER_UP
245
+ val actionObject = processPointerAction(action, pointerInputSource!!, "any", 0)
246
+ assertEquals(actionObject.subType, ActionType.POINTER_UP)
247
+ assertEquals(actionObject.type, InputSourceType.POINTER)
248
+ }
249
+
250
+ @Test
251
+ @Throws(InvalidArgumentException::class, NotYetImplementedException::class)
252
+ fun shouldProcessPointerAsPointerDown() {
253
+ val action = Action()
254
+ action.type = ActionType.POINTER_DOWN
255
+ val actionObject = processPointerAction(action, pointerInputSource!!, "any", 0)
256
+ assertEquals(actionObject.subType, ActionType.POINTER_DOWN)
257
+ assertEquals(actionObject.type, InputSourceType.POINTER)
258
+ }
259
+
260
+ @Test
261
+ @Throws(NotYetImplementedException::class)
262
+ fun shouldNotPassProcessorIfNoType() {
263
+ val inputSource = InputSource()
264
+ try {
265
+ processSourceActionSequence(inputSource, ActiveInputSources(), InputStateTable())
266
+ } catch (ie: InvalidArgumentException) {
267
+ assertTrue(ie.message!!.contains("'type' is required in input source"))
268
+ }
269
+
270
+ }
271
+
272
+ @Test
273
+ @Throws(NotYetImplementedException::class)
274
+ fun shouldNotPassProcessorIfNoId() {
275
+ val inputSource = InputSource()
276
+ inputSource.type = InputSourceType.KEY
277
+ try {
278
+ processSourceActionSequence(inputSource, ActiveInputSources(), InputStateTable())
279
+ } catch (ie: InvalidArgumentException) {
280
+ assertTrue(ie.message!!.contains("'id' in action cannot be null"))
281
+ }
282
+
283
+ }
284
+
285
+ @Test
286
+ @Throws(InvalidArgumentException::class, NotYetImplementedException::class)
287
+ fun shouldCreateNewEntryInActiveStateTables() {
288
+ val activeInputSources = ActiveInputSources()
289
+ val inputStateTable = InputStateTable()
290
+ val inputSource = InputSource()
291
+ inputSource.actions = ArrayList()
292
+ inputSource.type = InputSourceType.KEY
293
+ inputSource.id = "anything"
294
+ assertFalse(activeInputSources.hasInputSource("anything"))
295
+ processSourceActionSequence(inputSource, activeInputSources, inputStateTable)
296
+ assertEquals(activeInputSources.getInputSource("anything"), inputSource)
297
+ assertTrue(inputStateTable.getInputState("anything") is KeyInputState)
298
+ }
299
+
300
+ @Test
301
+ @Throws(InvalidArgumentException::class, NotYetImplementedException::class)
302
+ fun shouldReturnActionObjectsFromProcessor() {
303
+ val activeInputSources = ActiveInputSources()
304
+ val inputStateTable = InputStateTable()
305
+ val inputSource = InputSource()
306
+ val actions = ArrayList<Action>()
307
+ val action = Action()
308
+ action.type = ActionType.POINTER_DOWN
309
+ action.button = 0
310
+ actions.add(action)
311
+ inputSource.actions = actions
312
+ inputSource.type = InputSourceType.POINTER
313
+ inputSource.id = "anything"
314
+ val actionObjects = processSourceActionSequence(inputSource, activeInputSources, inputStateTable)
315
+ assertEquals(actionObjects.size.toLong(), 1)
316
+ val actionObject = actionObjects[0]
317
+ assertEquals(actionObject.subType, ActionType.POINTER_DOWN)
318
+ assertEquals(actionObject.type, InputSourceType.POINTER)
319
+ }
320
+ }