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,265 @@
1
+ package io.appium.espressoserver.test.helpers.w3c
2
+
3
+ import org.junit.Test
4
+ import java.util.concurrent.ExecutionException
5
+ import java.util.concurrent.ExecutorCompletionService
6
+ import java.util.concurrent.Executors
7
+
8
+ import io.appium.espressoserver.lib.handlers.exceptions.AppiumException
9
+ import io.appium.espressoserver.lib.handlers.exceptions.InvalidArgumentException
10
+ import io.appium.espressoserver.lib.helpers.w3c.adapter.DummyW3CActionAdapter
11
+ import io.appium.espressoserver.lib.helpers.w3c.dispatcher.BaseDispatchResult
12
+ import io.appium.espressoserver.lib.helpers.w3c.models.ActionObject
13
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.PointerType
14
+ import io.appium.espressoserver.lib.helpers.w3c.models.Origin
15
+ import io.appium.espressoserver.lib.helpers.w3c.models.Tick
16
+ import io.appium.espressoserver.lib.helpers.w3c.state.InputStateTable
17
+ import io.appium.espressoserver.lib.helpers.w3c.state.KeyInputState
18
+ import io.appium.espressoserver.lib.helpers.w3c.state.PointerInputState
19
+
20
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType.KEY_DOWN
21
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType.KEY_UP
22
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType.PAUSE
23
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType.POINTER_DOWN
24
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType.POINTER_MOVE
25
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.InputSourceType.KEY
26
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.InputSourceType.NONE
27
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.InputSourceType.POINTER
28
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.PointerType.TOUCH
29
+ import org.junit.Assert.assertEquals
30
+ import org.junit.Assert.assertFalse
31
+ import org.junit.Assert.assertTrue
32
+ import org.junit.Assert.fail
33
+
34
+ class TickTest {
35
+
36
+ @Test
37
+ fun `should calculate max duration as zero if no durations`() {
38
+ val tick = Tick()
39
+ tick.addAction(ActionObject())
40
+ assertFloatEquals(tick.calculateTickDuration(), 0f)
41
+ }
42
+
43
+ @Test
44
+ fun `should calculate the max duration`() {
45
+
46
+ val valueOne = arrayOf(10F, 30F, 0F)
47
+ val valueTwo = arrayOf(20F, 10F, 1F)
48
+ val expectedMax = arrayOf(20F, 30F, 1F)
49
+
50
+ for (i in valueOne.indices) {
51
+ val tick = Tick()
52
+ val actionObjectOne = ActionObject()
53
+ actionObjectOne.type = NONE
54
+ actionObjectOne.subType = PAUSE
55
+ actionObjectOne.duration = valueOne[i]
56
+
57
+ val actionObjectTwo = ActionObject()
58
+ actionObjectTwo.type = POINTER
59
+ actionObjectTwo.subType = POINTER_MOVE
60
+ actionObjectTwo.duration = valueTwo[i]
61
+
62
+ val actionObjectThree = ActionObject()
63
+ actionObjectTwo.type = POINTER
64
+ actionObjectTwo.subType = POINTER_MOVE
65
+
66
+ tick.addAction(actionObjectOne)
67
+ tick.addAction(actionObjectTwo)
68
+ tick.addAction(actionObjectThree)
69
+
70
+ assertFloatEquals(tick.calculateTickDuration(), expectedMax[i])
71
+ }
72
+ }
73
+
74
+ @Test
75
+ @Throws(AppiumException::class)
76
+ fun `should add key to key input state when running key actions`() {
77
+ val inputStateTable = InputStateTable()
78
+ val tick = Tick()
79
+ val sourceId = "something1"
80
+ val actionObject = ActionObject(sourceId, KEY, null, 0)
81
+ actionObject.subType = KEY_DOWN
82
+ actionObject.value = "F"
83
+ tick.addAction(actionObject)
84
+ assertFalse(inputStateTable.hasInputState(sourceId))
85
+ tick.dispatchAll(DummyW3CActionAdapter(), inputStateTable, tick.calculateTickDuration())
86
+ assertTrue(inputStateTable.getInputState(sourceId) is KeyInputState)
87
+ }
88
+
89
+ @Test
90
+ @Throws(AppiumException::class)
91
+ fun `should add pointer input state when running pointer actions`() {
92
+ val inputStateTable = InputStateTable()
93
+ val tick = Tick()
94
+ val sourceId = "something2"
95
+ val actionObject = ActionObject(sourceId, POINTER, null, 0)
96
+ actionObject.subType = POINTER_DOWN
97
+ actionObject.button = 0
98
+ tick.addAction(actionObject)
99
+ assertFalse(inputStateTable.hasInputState(sourceId))
100
+ tick.dispatchAll(DummyW3CActionAdapter(), inputStateTable, tick.calculateTickDuration())
101
+ assertTrue(inputStateTable.getInputState(sourceId) is PointerInputState)
102
+ }
103
+
104
+ @Test
105
+ @Throws(AppiumException::class)
106
+ fun `should not affect input state when NONE event is dispatched`() {
107
+ val inputStateTable = InputStateTable()
108
+ val tick = Tick()
109
+ val sourceId = "something3"
110
+ val actionObject = ActionObject(sourceId, NONE, null, 0)
111
+ tick.addAction(actionObject)
112
+ assertFalse(inputStateTable.hasInputState(sourceId))
113
+ tick.dispatchAll(DummyW3CActionAdapter(), inputStateTable, tick.calculateTickDuration())
114
+ assertFalse(inputStateTable.hasInputState(sourceId))
115
+ }
116
+
117
+ @Test
118
+ @Throws(AppiumException::class)
119
+ fun `should dispatch a sequence of key events`() {
120
+ val inputStateTable = InputStateTable()
121
+ val tick = Tick()
122
+ val sourceId = "something4"
123
+ var keyInputState = KeyInputState()
124
+ keyInputState.addPressed("g")
125
+ inputStateTable.addInputState(sourceId, keyInputState)
126
+ val actionObjectOne = ActionObject(sourceId, KEY, null, 0)
127
+ actionObjectOne.subType = KEY_DOWN
128
+ actionObjectOne.value = "e"
129
+
130
+ val actionObjectTwo = ActionObject(sourceId, KEY, null, 0)
131
+ actionObjectTwo.subType = KEY_DOWN
132
+ actionObjectTwo.value = "f"
133
+
134
+ val actionObjectThree = ActionObject(sourceId, KEY, null, 0)
135
+ actionObjectThree.subType = KEY_UP
136
+ actionObjectThree.value = "g"
137
+
138
+ val actionObjectFour = ActionObject(sourceId, KEY, null, 0)
139
+ actionObjectFour.subType = KEY_DOWN
140
+ actionObjectFour.value = "\uE008"
141
+
142
+ tick.addAction(actionObjectOne)
143
+ tick.addAction(actionObjectTwo)
144
+ tick.addAction(actionObjectThree)
145
+ tick.addAction(actionObjectFour)
146
+
147
+ keyInputState = inputStateTable.getInputState(sourceId) as KeyInputState
148
+ assertFalse(keyInputState.isPressed("e"))
149
+ assertFalse(keyInputState.isPressed("f"))
150
+ assertTrue(keyInputState.isPressed("g"))
151
+ assertFalse(keyInputState.isShift)
152
+
153
+ tick.dispatchAll(DummyW3CActionAdapter(), inputStateTable, tick.calculateTickDuration())
154
+ assertTrue(keyInputState.isPressed("e"))
155
+ assertTrue(keyInputState.isPressed("f"))
156
+ assertFalse(keyInputState.isPressed("g"))
157
+ assertTrue(keyInputState.isShift)
158
+ }
159
+
160
+ @Test
161
+ @Throws(AppiumException::class, InterruptedException::class, ExecutionException::class)
162
+ fun `should dispatch a series of pointer move events`() {
163
+ val inputStateTable = InputStateTable()
164
+ val keyInputState = KeyInputState()
165
+ keyInputState.isShift = true
166
+ inputStateTable.addInputState("keyInputs", keyInputState)
167
+ val tick = Tick()
168
+
169
+ val sourceId = "something4"
170
+ val sourceId2 = "something5"
171
+ val pointerInputState = PointerInputState(TOUCH)
172
+ pointerInputState.type = TOUCH
173
+ pointerInputState.x = 5f
174
+ pointerInputState.y = 6f
175
+ pointerInputState.addPressed(0)
176
+ pointerInputState.addPressed(1)
177
+ inputStateTable.addInputState(sourceId, pointerInputState)
178
+ inputStateTable.addInputState(sourceId2, pointerInputState)
179
+
180
+ // Construct pointer move event
181
+ val actionObjectOne = ActionObject(sourceId, POINTER, null, 0)
182
+ actionObjectOne.subType = POINTER_MOVE
183
+ actionObjectOne.pointer = TOUCH
184
+ actionObjectOne.x = 10.0f
185
+ actionObjectOne.y = 20.0f
186
+ actionObjectOne.origin = Origin(Origin.VIEWPORT)
187
+
188
+ // Construct another pointer move event
189
+ val actionObjectTwo = ActionObject(sourceId2, POINTER, null, 0)
190
+ actionObjectTwo.subType = POINTER_MOVE
191
+ actionObjectTwo.pointer = TOUCH
192
+ actionObjectTwo.x = 10.0f
193
+ actionObjectTwo.y = 20.0f
194
+ actionObjectTwo.origin = Origin(Origin.VIEWPORT)
195
+
196
+ // Add two pointer move actions to verify that they can run on multiple threads separately
197
+ tick.addAction(actionObjectOne)
198
+ tick.addAction(actionObjectTwo)
199
+
200
+ class ExtendedDummyW3CActionAdapter : DummyW3CActionAdapter() {
201
+ @Suppress("UNUSED_PARAMETER", "unused")
202
+ fun pointerMove(sourceId: String,
203
+ pointerType: PointerType,
204
+ currentX: Float?, currentY: Float?,
205
+ x: Float?, y: Float?,
206
+ buttons: Set<Int>,
207
+ globalKeyInputState: KeyInputState) {
208
+ assertEquals(pointerType, TOUCH)
209
+ assertFloatEquals(currentX!!, 5f)
210
+ assertFloatEquals(currentY!!, 6f)
211
+ assertFloatEquals(x!!, 10f)
212
+ assertFloatEquals(y!!, 20f)
213
+ assertTrue(buttons.contains(0))
214
+ assertTrue(buttons.contains(1))
215
+ assertTrue(globalKeyInputState.isShift)
216
+ }
217
+ }
218
+
219
+ val dummyAdapter = ExtendedDummyW3CActionAdapter()
220
+
221
+ val callables = tick.dispatchAll(dummyAdapter, inputStateTable, tick.calculateTickDuration())
222
+ val executor = Executors.newFixedThreadPool(callables.size)
223
+ val completionService = ExecutorCompletionService<BaseDispatchResult>(executor)
224
+ for (callable in callables) {
225
+ completionService.submit(callable)
226
+ }
227
+
228
+ var received = 0
229
+ while (received < callables.size) {
230
+ val resultFuture = completionService.take() //blocks if none available
231
+ resultFuture.get()
232
+ received++
233
+ }
234
+ }
235
+
236
+ @Test
237
+ @Throws(AppiumException::class)
238
+ fun `should throw invalid cast if using same source ID but different type`() {
239
+ val inputStateTable = InputStateTable()
240
+ val tick = Tick()
241
+ val sourceId = "something4"
242
+ val pointerInputState = PointerInputState(TOUCH)
243
+ inputStateTable.addInputState(sourceId, pointerInputState)
244
+
245
+ // Depress the shift key
246
+ val actionObjectTwo = ActionObject(sourceId, KEY, null, 0)
247
+ actionObjectTwo.subType = KEY_DOWN
248
+
249
+ // Construct pointer move event
250
+ val actionObjectOne = ActionObject(sourceId, POINTER, null, 0)
251
+ actionObjectOne.subType = POINTER_DOWN
252
+
253
+ tick.addAction(actionObjectOne)
254
+ tick.addAction(actionObjectTwo)
255
+
256
+ try {
257
+ tick.dispatchAll(DummyW3CActionAdapter(), inputStateTable, tick.calculateTickDuration())
258
+ } catch (e: InvalidArgumentException) {
259
+ assertTrue(e.message!!.contains("Attempted to apply action of type"))
260
+ return
261
+ }
262
+
263
+ fail("Should have called 'InvalidArgumentException'")
264
+ }
265
+ }
@@ -0,0 +1,114 @@
1
+ package io.appium.espressoserver.test.helpers.w3c.adapter
2
+
3
+ import android.os.SystemClock
4
+ import android.view.KeyEvent
5
+ import android.view.MotionEvent
6
+ import androidx.test.espresso.UiController
7
+ import io.appium.espressoserver.lib.handlers.exceptions.AppiumException
8
+ import io.appium.espressoserver.lib.helpers.w3c.adapter.espresso.AndroidKeyEvent
9
+ import io.appium.espressoserver.lib.helpers.w3c.adapter.espresso.EspressoW3CActionAdapter
10
+ import io.appium.espressoserver.lib.helpers.w3c.adapter.espresso.keyCodeToEvent
11
+ import io.appium.espressoserver.lib.helpers.w3c.dispatcher.W3CKeyEvent
12
+ import io.appium.espressoserver.lib.helpers.w3c.dispatcher.constants.NormalizedKeys.BACKSPACE
13
+ import io.appium.espressoserver.lib.helpers.w3c.dispatcher.getKeyEvent
14
+ import org.junit.Assert
15
+ import org.junit.Test
16
+ import org.junit.runner.RunWith
17
+ import org.robolectric.RobolectricTestRunner
18
+ import java.util.*
19
+
20
+ @RunWith(RobolectricTestRunner::class)
21
+ class AndroidKeyEventTest {
22
+ class MockUiController : UiController {
23
+ var keyEvents: MutableList<KeyEvent> = LinkedList()
24
+ override fun injectMotionEvent(event: MotionEvent): Boolean {
25
+ return false
26
+ }
27
+
28
+ override fun injectMotionEventSequence(events: Iterable<MotionEvent>): Boolean {
29
+ return false
30
+ }
31
+
32
+ override fun injectKeyEvent(event: KeyEvent): Boolean {
33
+ keyEvents.add(event)
34
+ return true
35
+ }
36
+
37
+ override fun injectString(str: String): Boolean {
38
+ return false
39
+ }
40
+
41
+ override fun loopMainThreadUntilIdle() {
42
+ SystemClock.sleep(100)
43
+ }
44
+
45
+ override fun loopMainThreadForAtLeast(millisDelay: Long) {
46
+ SystemClock.sleep(millisDelay)
47
+ }
48
+ }
49
+
50
+ @Test
51
+ @Throws(AppiumException::class)
52
+ fun keyUpNoop() {
53
+ // Dispatch an up event that has no corresponding down event and check that the state was unchanged
54
+ val w3CKeyEvent = W3CKeyEvent()
55
+ w3CKeyEvent.key = "A"
56
+ val mockUiController = MockUiController()
57
+ Assert.assertEquals(mockUiController.keyEvents.size.toLong(), 0)
58
+ AndroidKeyEvent(mockUiController).keyUp(w3CKeyEvent)
59
+ Assert.assertEquals(mockUiController.keyEvents.size.toLong(), 0)
60
+ }
61
+
62
+ @Test
63
+ @Throws(AppiumException::class)
64
+ fun keyDown() {
65
+ val mockUiController = MockUiController()
66
+
67
+ // Dispatch a key event
68
+ val w3CKeyEvent = getKeyEvent(EspressoW3CActionAdapter(mockUiController), "B")
69
+ w3CKeyEvent.isAltKey = true
70
+ w3CKeyEvent.isShiftKey = true
71
+ w3CKeyEvent.isCtrlKey = false
72
+ AndroidKeyEvent(mockUiController).keyDown(w3CKeyEvent)
73
+
74
+ // Check that one was dispatched
75
+ Assert.assertEquals(mockUiController.keyEvents.size.toLong(), 1)
76
+
77
+ // Check the right key event was dispatched
78
+ val keyEvent = mockUiController.keyEvents[mockUiController.keyEvents.size - 1]
79
+ keyEvent.keyCode
80
+ Assert.assertEquals(keyEvent.keyCode.toLong(), KeyEvent.KEYCODE_B.toLong())
81
+ Assert.assertEquals(keyEvent.action.toLong(), KeyEvent.ACTION_DOWN.toLong())
82
+ Assert.assertEquals(keyEvent.metaState, KeyEvent.META_SHIFT_MASK or KeyEvent.META_ALT_MASK)
83
+ }
84
+
85
+ @Test
86
+ @Throws(AppiumException::class)
87
+ fun keyDownAndUp() {
88
+ val mockUiController = MockUiController()
89
+ val androidKeyEvent = AndroidKeyEvent(mockUiController)
90
+
91
+ // Key Down C
92
+ val w3CKeyEvent = getKeyEvent(EspressoW3CActionAdapter(mockUiController), "C")
93
+ androidKeyEvent.keyDown(w3CKeyEvent)
94
+
95
+ // Check that KEYCODE_C went down
96
+ var keyEvent = mockUiController.keyEvents[mockUiController.keyEvents.size - 1]
97
+ keyEvent.keyCode
98
+ Assert.assertEquals(keyEvent.keyCode.toLong(), KeyEvent.KEYCODE_C.toLong())
99
+ Assert.assertEquals(keyEvent.action.toLong(), KeyEvent.ACTION_DOWN.toLong())
100
+
101
+ // Release Key Code C and check that there's no keys down
102
+ androidKeyEvent.keyUp(w3CKeyEvent)
103
+ keyEvent = mockUiController.keyEvents[mockUiController.keyEvents.size - 1]
104
+ keyEvent.keyCode
105
+ Assert.assertEquals(keyEvent.keyCode.toLong(), KeyEvent.KEYCODE_C.toLong())
106
+ Assert.assertEquals(keyEvent.action.toLong(), KeyEvent.ACTION_UP.toLong())
107
+ }
108
+
109
+ @Test
110
+ fun keyCode() {
111
+ Assert.assertEquals(keyCodeToEvent(BACKSPACE, 0).toLong(), KeyEvent.KEYCODE_DEL.toLong())
112
+ Assert.assertEquals(keyCodeToEvent("A", 0).toLong(), -1)
113
+ }
114
+ }
@@ -0,0 +1,31 @@
1
+ package io.appium.espressoserver.test.helpers.w3c.adapter
2
+
3
+ import android.graphics.Point
4
+ import android.view.MotionEvent
5
+ import io.appium.espressoserver.lib.helpers.w3c.adapter.espresso.getToolType
6
+ import io.appium.espressoserver.lib.helpers.w3c.adapter.espresso.toCoordinates
7
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource
8
+ import org.junit.Assert
9
+ import org.junit.Test
10
+ import org.junit.runner.RunWith
11
+ import org.robolectric.RobolectricTestRunner
12
+
13
+ @RunWith(RobolectricTestRunner::class)
14
+ class HelpersTest {
15
+ @Test
16
+ fun toolTypeDefaultIsFinger() {
17
+ Assert.assertEquals(getToolType(null).toLong(), MotionEvent.TOOL_TYPE_FINGER.toLong())
18
+ }
19
+
20
+ @Test
21
+ fun toolTypeTest() {
22
+ Assert.assertEquals(getToolType(InputSource.PointerType.MOUSE).toLong(), MotionEvent.TOOL_TYPE_MOUSE.toLong())
23
+ Assert.assertEquals(getToolType(InputSource.PointerType.PEN).toLong(), MotionEvent.TOOL_TYPE_STYLUS.toLong())
24
+ Assert.assertEquals(getToolType(InputSource.PointerType.TOUCH).toLong(), MotionEvent.TOOL_TYPE_FINGER.toLong())
25
+ }
26
+
27
+ @Test
28
+ fun toCoordinatesTest() {
29
+ Assert.assertEquals(toCoordinates(123.0f, 456.0f), Point(123, 456))
30
+ }
31
+ }
@@ -0,0 +1,74 @@
1
+ package io.appium.espressoserver.test.http
2
+
3
+ import fi.iki.elonen.NanoHTTPD
4
+ import io.appium.espressoserver.lib.handlers.RequestHandler
5
+ import io.appium.espressoserver.lib.http.RouteDefinition
6
+ import io.appium.espressoserver.lib.model.AppiumParams
7
+ import org.junit.Assert
8
+ import org.junit.Before
9
+ import org.junit.Test
10
+
11
+ class DummyHandler: RequestHandler<AppiumParams, Void?> {
12
+ override fun handle(params: AppiumParams): Void? {
13
+ return null
14
+ }
15
+
16
+ override fun handleInternal(params: AppiumParams): Void? {
17
+ return null
18
+ }
19
+ }
20
+
21
+ class RouteDefinitionTest {
22
+ private val dummyHandler = DummyHandler()
23
+ private var routeDefinitionWithOneParam: RouteDefinition? = null
24
+ private var routeDefinitionWithZeroParams: RouteDefinition? = null
25
+ private var routeDefinitionWithTwoParams: RouteDefinition? = null
26
+
27
+ @Before
28
+ fun before() {
29
+ routeDefinitionWithZeroParams = RouteDefinition(
30
+ NanoHTTPD.Method.GET,
31
+ "/hello",
32
+ dummyHandler,
33
+ AppiumParams::class.java
34
+ )
35
+ routeDefinitionWithOneParam = RouteDefinition(
36
+ NanoHTTPD.Method.GET,
37
+ "/hello/:param/world",
38
+ dummyHandler,
39
+ AppiumParams::class.java
40
+ )
41
+ routeDefinitionWithTwoParams = RouteDefinition(
42
+ NanoHTTPD.Method.GET,
43
+ "/hello/:paramOne/something/:paramTwo/world",
44
+ dummyHandler,
45
+ AppiumParams::class.java
46
+ )
47
+ }
48
+
49
+ @Test
50
+ fun shouldProperlyParamsRoutesToUri() {
51
+ Assert.assertTrue(routeDefinitionWithZeroParams!!.isMatch("/hello"))
52
+ Assert.assertTrue(routeDefinitionWithZeroParams!!.isMatch("/hello/"))
53
+ Assert.assertFalse(routeDefinitionWithZeroParams!!.isMatch("/hello/world"))
54
+ Assert.assertFalse(routeDefinitionWithZeroParams!!.isMatch("/hellooooooooo"))
55
+ Assert.assertTrue(routeDefinitionWithOneParam!!.isMatch("/hello/something/world"))
56
+ Assert.assertTrue(routeDefinitionWithOneParam!!.isMatch("/hello/something/world/"))
57
+ Assert.assertFalse(routeDefinitionWithOneParam!!.isMatch("/hello/something/something/world"))
58
+ Assert.assertFalse(routeDefinitionWithOneParam!!.isMatch("/hello/world"))
59
+ Assert.assertFalse(routeDefinitionWithOneParam!!.isMatch("/something/hello/something/world"))
60
+ Assert.assertTrue(routeDefinitionWithTwoParams!!.isMatch("/hello/paramOne/something/paramTwo/world"))
61
+ Assert.assertTrue(routeDefinitionWithTwoParams!!.isMatch("/hello/paramOne/something/paramTwo/world/"))
62
+ Assert.assertFalse(routeDefinitionWithTwoParams!!.isMatch("/hello/paramOne/world"))
63
+ Assert.assertFalse(routeDefinitionWithTwoParams!!.isMatch("/hello/paramOne/paramTwo/world"))
64
+ Assert.assertFalse(routeDefinitionWithTwoParams!!.isMatch("/hello/paramOne/something/world"))
65
+ }
66
+
67
+ @Test
68
+ fun shouldProperlyParseUriParameters() {
69
+ Assert.assertEquals("something", routeDefinitionWithOneParam!!.getUriParams("/hello/something/world")["param"])
70
+ Assert.assertTrue("something", routeDefinitionWithZeroParams!!.getUriParams("/hello").isEmpty())
71
+ Assert.assertEquals("p1", routeDefinitionWithTwoParams!!.getUriParams("/hello/p1/something/p2/world/")["paramOne"])
72
+ Assert.assertEquals("p2", routeDefinitionWithTwoParams!!.getUriParams("/hello/p1/something/p2/world/")["paramTwo"])
73
+ }
74
+ }
@@ -0,0 +1,112 @@
1
+ package io.appium.espressoserver.test.model
2
+
3
+ import androidx.test.espresso.matcher.CursorMatchers
4
+ import androidx.test.espresso.matcher.CursorMatchers.CursorMatcher
5
+ import com.google.gson.Gson
6
+ import com.google.gson.JsonParseException
7
+ import io.appium.espressoserver.lib.model.HamcrestMatcher
8
+ import kotlin.test.Test
9
+ import kotlin.test.assertEquals
10
+ import kotlin.test.assertFalse
11
+ import kotlin.test.assertTrue
12
+
13
+ class HamcrestMatcherTest {
14
+ val g = Gson()
15
+
16
+ @Test
17
+ fun `should parse Hamcrest matcher with single string arg`() {
18
+ val matcher = g.fromJson("""
19
+ {"name": "containsString", "args": "Hello World!"}
20
+ """.trimIndent(), HamcrestMatcher::class.java)
21
+ assertEquals(matcher.name, "containsString")
22
+ assertTrue(matcher.args contentEquals arrayOf<Any?>("Hello World!"))
23
+ }
24
+
25
+ @Test
26
+ fun `should parse Hamcrest matcher with array of primitive args` () {
27
+ val matcher = g.fromJson("""
28
+ {"name": "fakeMatcher", "args": [1, true, "Hello World!", null]}
29
+ """.trimIndent(), HamcrestMatcher::class.java)
30
+ assertEquals(matcher.name, "fakeMatcher")
31
+ val numberArg = matcher.args[0]
32
+ assertTrue(numberArg is Number)
33
+ assertEquals(numberArg.toInt(), 1)
34
+ assertEquals(matcher.args[1], true)
35
+ assertEquals(matcher.args[2], "Hello World!")
36
+ assertEquals(matcher.args[3], null)
37
+ }
38
+
39
+ @Test
40
+ fun `should parse empty args` () {
41
+ val matcher = g.fromJson("""
42
+ {"name": "isAThing"}
43
+ """.trimIndent(), HamcrestMatcher::class.java)
44
+ assertEquals(matcher.name, "isAThing")
45
+ assertTrue(matcher.args contentEquals emptyArray())
46
+ }
47
+
48
+ @Test
49
+ fun `should parse string as matcher with no args` () {
50
+ val matcher = g.fromJson("arglessMethod", HamcrestMatcher::class.java)
51
+ assertEquals(matcher.name, "arglessMethod")
52
+ assertTrue(matcher.args contentEquals emptyArray())
53
+ }
54
+
55
+ @Test
56
+ fun `should default the matcher class type to 'org_hamcrest_Matchers'` () {
57
+ val matcher = g.fromJson("""
58
+ {"name": "containsString", "args": "Hello"}
59
+ """.trimIndent(), HamcrestMatcher::class.java)
60
+ assertEquals(matcher.matcherClass, org.hamcrest.Matchers::class)
61
+ val containsStringMatcher = matcher.invoke()
62
+ assertTrue(containsStringMatcher.matches("Hello World"))
63
+ assertFalse(containsStringMatcher.matches("Goodbye World"))
64
+ }
65
+
66
+ @Test
67
+ fun `should parse the matcher class type` () {
68
+ val matcher = g.fromJson("""
69
+ {"name": "withRowBlob", "class": "androidx.test.espresso.matcher.CursorMatchers"}
70
+ """.trimIndent(), HamcrestMatcher::class.java)
71
+ assertEquals(matcher.matcherClass, CursorMatchers::class)
72
+ }
73
+
74
+ @Test
75
+ fun `should use 'androidx_test_espresso_matcher' when class provided but package not provided` () {
76
+ val matcher = g.fromJson("""
77
+ {"name": "withRowDouble", "args": ["Hello", 2.0], "class": "CursorMatchers"}
78
+ """.trimIndent(), HamcrestMatcher::class.java)
79
+ assertEquals(matcher.matcherClass, CursorMatchers::class)
80
+ assertTrue(matcher.invoke() is CursorMatcher)
81
+ }
82
+
83
+ @Test
84
+ fun `should parse matchers that have Class as an arg` () {
85
+ val matcher = g.fromJson("""
86
+ {"name": "instanceOf", "args": "String.class"}
87
+ """.trimIndent(), HamcrestMatcher::class.java)
88
+ assertTrue(matcher.invoke().matches("Hello World"))
89
+ assertFalse(matcher.invoke().matches(123))
90
+ }
91
+
92
+ @Test
93
+ fun `should parse nested Hamcrest matchers` () {
94
+ val matcher = g.fromJson("""
95
+ {"name": "anyOf", "args": [
96
+ {"name": "containsString", "args": "Hello"},
97
+ {"name": "instanceOf", "args": "Integer"}
98
+ ]}""".trimIndent(), HamcrestMatcher::class.java)
99
+ val nestedMatcher = matcher.invoke()
100
+ assertTrue(nestedMatcher.matches("Hello"))
101
+ assertTrue(nestedMatcher.matches(100))
102
+ assertFalse(nestedMatcher.matches("World"))
103
+ assertFalse(nestedMatcher.matches(100.1))
104
+ }
105
+
106
+ @Test(expected = JsonParseException::class)
107
+ fun `should fail if name not provided` () {
108
+ g.fromJson("""
109
+ {"args": "Hello World!"}
110
+ """.trimIndent(), HamcrestMatcher::class.java)
111
+ }
112
+ }
@@ -0,0 +1,20 @@
1
+ package io.appium.espressoserver.test.model
2
+
3
+ import com.google.gson.Gson
4
+ import io.appium.espressoserver.lib.model.MatcherJson
5
+ import org.junit.Test
6
+ import kotlin.test.assertFalse
7
+ import kotlin.test.assertTrue
8
+
9
+ class `MatcherJson Tests` {
10
+ val g = Gson()
11
+
12
+ @Test
13
+ fun `should parse matchers`() {
14
+ val dataMatcher = g.fromJson("""{
15
+ "name": "instanceOf", "args": "String.class"
16
+ }""".trimIndent(), MatcherJson::class.java)
17
+ assertTrue(dataMatcher.matcher.matches("A STRING"))
18
+ assertFalse(dataMatcher.matcher.matches(100))
19
+ }
20
+ }