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,115 @@
1
+ /*
2
+ * Licensed under the Apache License, Version 2.0 (the "License");
3
+ * you may not use this file except in compliance with the License.
4
+ * See the NOTICE file distributed with this work for additional
5
+ * information regarding copyright ownership.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package io.appium.espressoserver.test.helpers
18
+
19
+ import android.content.Intent
20
+ import io.appium.espressoserver.lib.helpers.makeIntent
21
+ import org.junit.Test
22
+ import org.junit.runner.RunWith
23
+ import org.robolectric.RobolectricTestRunner
24
+ import java.lang.Exception
25
+ import kotlin.test.assertEquals
26
+ import kotlin.test.assertTrue
27
+
28
+ @RunWith(RobolectricTestRunner::class)
29
+ class `Intent Creation Tests` {
30
+
31
+ @Test(expected = Exception::class)
32
+ fun `should throw if none of the required options have been provided`(){
33
+ makeIntent(null, mapOf())
34
+ }
35
+
36
+ @Test(expected = Exception::class)
37
+ fun `should throw if an invalid option name as been provided`(){
38
+ makeIntent(null, mapOf(
39
+ "foo" to "bar"
40
+ ))
41
+ }
42
+
43
+ @Test
44
+ fun `should create intent if options were set properly`(){
45
+ assertEquals(makeIntent(null, mapOf(
46
+ "action" to "io.appium.espresso"
47
+ )).action, "io.appium.espresso")
48
+
49
+ assertEquals(makeIntent(null, mapOf(
50
+ "data" to "content://contacts/people/1"
51
+ )).data!!.toString(), "content://contacts/people/1")
52
+
53
+ assertEquals(makeIntent(null, mapOf(
54
+ "type" to "image/png"
55
+ )).type!!.toString(), "image/png")
56
+
57
+ assertEquals(makeIntent(null, mapOf(
58
+ "categories" to "android.intent.category.APP_CONTACTS, android.intent.category.DEFAULT"
59
+ )).categories.size, 2)
60
+ }
61
+
62
+ @Test
63
+ fun `should create intent with valid intFlags`(){
64
+ assertEquals(makeIntent(null, mapOf(
65
+ "action" to "io.appium.espresso",
66
+ "intFlags" to "0x0F"
67
+ )).flags, 0x0F)
68
+ }
69
+
70
+ @Test
71
+ fun `should create intent with valid flags`(){
72
+ assertEquals(makeIntent(null, mapOf(
73
+ "action" to "io.appium.espresso",
74
+ "flags" to "GRANT_READ_URI_PERMISSION, FLAG_EXCLUDE_STOPPED_PACKAGES"
75
+ )).flags, Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_EXCLUDE_STOPPED_PACKAGES)
76
+ }
77
+
78
+ @Test
79
+ fun `should create intent with valid single extra args`(){
80
+ val intent = makeIntent(null, mapOf(
81
+ "action" to "io.appium.espresso",
82
+ "e" to mapOf(
83
+ "bar" to "baz",
84
+ "bar5" to "baz5"
85
+ ),
86
+ "es" to mapOf("bar2" to "baz2"),
87
+ "ei" to mapOf("int1" to 2L),
88
+ "ez" to mapOf("bool1" to true),
89
+ "el" to mapOf("long1" to 1L),
90
+ "ef" to mapOf("float1" to 1.1)
91
+ ))
92
+ val extras = intent.extras!!
93
+ assertEquals(extras.get("bar"), "baz")
94
+ assertEquals(extras.get("bar5"), "baz5")
95
+ assertEquals(extras.get("bar2"), "baz2")
96
+ assertEquals(extras.getInt("int1"), 2)
97
+ assertEquals(extras.getBoolean("bool1"), true)
98
+ assertEquals(extras.getLong("long1"), 1L)
99
+ assertTrue(extras.getFloat("float1") > 1.0)
100
+ }
101
+
102
+ @Test
103
+ fun `should create intent with valid array extra args`(){
104
+ val intent = makeIntent(null, mapOf<String, Any>(
105
+ "action" to "io.appium.espresso",
106
+ "eia" to mapOf("intarr" to "1,2, 3"),
107
+ "ela" to mapOf("longarr" to "4, 5, 6"),
108
+ "efa" to mapOf("floatarr" to "1.1, 2.2")
109
+ ))
110
+ val extras = intent.extras!!
111
+ assertTrue(extras.getIntArray("intarr")!!.size == 3)
112
+ assertTrue(extras.getLongArray("longarr")!!.size == 3)
113
+ assertTrue(extras.getFloatArray("floatarr")!!.size == 2)
114
+ }
115
+ }
@@ -0,0 +1,97 @@
1
+ package io.appium.espressoserver.test.helpers;
2
+
3
+ import org.junit.Before;
4
+ import org.junit.Test;
5
+
6
+ import java.util.concurrent.Executor;
7
+
8
+ import androidx.annotation.NonNull;
9
+
10
+ import io.appium.espressoserver.lib.handlers.exceptions.AppiumException;
11
+ import io.appium.espressoserver.lib.helpers.InvocationOperation;
12
+
13
+ import static org.junit.Assert.assertEquals;
14
+
15
+ public class InvocationOperationTest {
16
+
17
+ private Executor mainThreadExecutor;
18
+ private DummyBackdoorSubject invokeOn;
19
+
20
+ @Before
21
+ public void setUp() {
22
+ mainThreadExecutor = new Executor() {
23
+ @Override
24
+ public void execute(@NonNull Runnable runnable) {
25
+ runnable.run();
26
+ }
27
+ };
28
+ invokeOn = new DummyBackdoorSubject();
29
+ }
30
+
31
+ @Test
32
+ public void shouldReturnValidResults() throws Exception {
33
+ InvocationOperation operation = new InvocationOperation("validMethod",
34
+ new Object[]{}, new Class[0], mainThreadExecutor);
35
+ Object result = operation.apply(invokeOn);
36
+ assertEquals(DummyBackdoorSubject.RETURN_VALUE, result);
37
+ }
38
+
39
+ @Test
40
+ public void shouldReturnVoidIfReturnTypeIsVoid() throws Exception {
41
+ InvocationOperation operation = new InvocationOperation("voidReturn",
42
+ new Object[0], new Class[0], mainThreadExecutor);
43
+ Object result = operation.apply(invokeOn);
44
+ assertEquals(InvocationOperation.VOID, result);
45
+ }
46
+
47
+ @Test(expected = AppiumException.class)
48
+ public void shouldThrowExceptionIfMethodNotFound() throws Exception {
49
+ String nonExistent = "nonExistent";
50
+ InvocationOperation operation = new InvocationOperation(nonExistent,
51
+ new Object[0], new Class[0], mainThreadExecutor);
52
+ operation.apply(invokeOn);
53
+ }
54
+
55
+ @Test
56
+ public void shouldBeAbleToChainMethods() throws Exception {
57
+ InvocationOperation operation1 = new InvocationOperation("geObjectWithValue",
58
+ new Object[]{45}, new Class[]{int.class}, mainThreadExecutor);
59
+
60
+ InvocationOperation operation2 = new InvocationOperation("getTestValue",
61
+ new Object[0], new Class[0], mainThreadExecutor);
62
+
63
+ Object result = operation2.apply(operation1.apply(invokeOn));
64
+
65
+ assertEquals(45, result);
66
+ }
67
+
68
+
69
+ public static class DummyBackdoorSubject {
70
+ public static final String RETURN_VALUE = "LOL";
71
+
72
+ private int testValue;
73
+
74
+ @SuppressWarnings("unused")
75
+ public void voidReturn() {
76
+ // to test void return type
77
+ }
78
+
79
+ @SuppressWarnings("unused")
80
+ public Object validMethod() {
81
+ return RETURN_VALUE;
82
+ }
83
+
84
+
85
+ @SuppressWarnings("unused")
86
+ public Object geObjectWithValue(int testValue) {
87
+ this.testValue = testValue;
88
+ return this;
89
+ }
90
+
91
+ @SuppressWarnings("unused")
92
+ public int getTestValue() {
93
+ return testValue;
94
+ }
95
+
96
+ }
97
+ }
@@ -0,0 +1,108 @@
1
+ package io.appium.espressoserver.test.helpers
2
+
3
+ import androidx.test.espresso.web.model.Atom
4
+ import androidx.test.espresso.web.webdriver.DriverAtoms
5
+ import androidx.test.espresso.web.webdriver.Locator
6
+ import io.appium.espressoserver.lib.helpers.ReflectionUtils
7
+ import io.appium.espressoserver.lib.helpers.ReflectionUtils.invokeStaticMethod
8
+ import org.hamcrest.Matcher
9
+ import org.hamcrest.Matchers
10
+ import org.junit.Test
11
+ import org.junit.runner.RunWith
12
+ import org.robolectric.RobolectricTestRunner
13
+ import kotlin.test.assertEquals
14
+ import kotlin.test.assertFalse
15
+ import kotlin.test.assertNotNull
16
+ import kotlin.test.assertTrue
17
+
18
+ @RunWith(RobolectricTestRunner::class)
19
+ class `KReflectionUtils Test` {
20
+
21
+ @Test
22
+ fun `"invokeMethod" should find methods specific to parameters provided and call it`(){
23
+ val obj = TestClass()
24
+
25
+ var methodResult = ReflectionUtils.invokeInstanceMethod(obj, "plus", null, 1)
26
+ assertTrue(methodResult is String)
27
+ assertEquals(methodResult, "1")
28
+
29
+ methodResult = ReflectionUtils.invokeInstanceMethod(obj, "plus", DumbEnum.A, 1)
30
+ assertTrue(methodResult is String)
31
+ assertEquals(methodResult, "A1")
32
+
33
+ methodResult = ReflectionUtils.invokeInstanceMethod(obj, "plus", 1, 2)
34
+ assertTrue(methodResult is Number)
35
+ assertEquals(methodResult, 3)
36
+ }
37
+
38
+ @Test
39
+ fun `"invokeInstanceMethod" should extract method of an object`() {
40
+ val methodResult = ReflectionUtils.extractMethod(TestClass::class.java, "plus", Int::class.java, Int::class.java)
41
+ assertNotNull(methodResult)
42
+ }
43
+
44
+ @Test
45
+ fun `"invokeInstanceMethod" should invoke method on instance of an object`() {
46
+ val obj = TestClass()
47
+ val methodResult = ReflectionUtils.invokeInstanceMethod(obj, "plus", 2, 2)
48
+ assertTrue(methodResult is Number)
49
+ assertEquals(methodResult, 4)
50
+ }
51
+
52
+ @Test(expected = Exception::class)
53
+ fun `should fail with AppiumException if wrong invocation`() {
54
+ val obj = TestClass()
55
+ invokeStaticMethod(TestClass::class.java, "plus", obj, "A", "B")
56
+ }
57
+
58
+ @Test
59
+ fun `should parse Driver Atoms "findElement"`() {
60
+ val findElementAtom = invokeStaticMethod(DriverAtoms::class.java,
61
+ "findElement", Locator.ID, "some Identifier")
62
+ assertTrue(findElementAtom is Atom<*>)
63
+ }
64
+
65
+ @Test
66
+ fun `should parse Hamcrest 'instanceOf' matcher with className`() {
67
+ arrayOf("java.lang.String")
68
+ .forEach {className ->
69
+ val hamcrestMatcher = invokeStaticMethod(Matchers::class.java,
70
+ "instanceOf", Class.forName(className))
71
+ assertTrue(hamcrestMatcher is Matcher<*>)
72
+ assertTrue(hamcrestMatcher.matches("Hello World"))
73
+ assertFalse(hamcrestMatcher.matches(123))
74
+ }
75
+ }
76
+
77
+ @Test
78
+ fun `should extract declared properties from an instance`() {
79
+ data class TestData(val appPackage:String, val appActivity:String)
80
+ val sessionParams = TestData("appPackage", "appActivity")
81
+ val extractedProps = ReflectionUtils.extractDeclaredProperties(sessionParams)
82
+ assertEquals(extractedProps["appPackage"], "appPackage")
83
+ assertEquals(extractedProps["appActivity"], "appActivity")
84
+ }
85
+
86
+ class TestClass {
87
+ fun plus (numOne: Int, numTwo: Int):Number {
88
+ return numOne + numTwo
89
+ }
90
+
91
+ fun plus (num: Int):Number {
92
+ return num
93
+ }
94
+
95
+ fun plus (dumbEnum: DumbEnum?, num: Int): String {
96
+ return when (dumbEnum) {
97
+ DumbEnum.A -> "A$num"
98
+ DumbEnum.B -> "B$num"
99
+ DumbEnum.C -> "C$num"
100
+ else -> num.toString()
101
+ }
102
+ }
103
+ }
104
+
105
+ enum class DumbEnum {
106
+ A, B, C
107
+ }
108
+ }
@@ -0,0 +1,42 @@
1
+ /*
2
+ * Licensed under the Apache License, Version 2.0 (the "License");
3
+ * you may not use this file except in compliance with the License.
4
+ * See the NOTICE file distributed with this work for additional
5
+ * information regarding copyright ownership.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package io.appium.espressoserver.test.helpers
18
+
19
+ import io.appium.espressoserver.lib.model.ViewAttributesEnum
20
+ import io.appium.espressoserver.lib.viewmatcher.fetchIncludedAttributes
21
+ import org.junit.Test
22
+ import kotlin.test.assertEquals
23
+ import kotlin.test.assertNull
24
+
25
+ class `Xpath Query Parser Tests` {
26
+
27
+ @Test
28
+ fun `should parse attributes from query`() {
29
+ assertEquals(fetchIncludedAttributes("//*[@text=\"yolo\" and @enabled=\"true\"]"),
30
+ setOf(ViewAttributesEnum.TEXT, ViewAttributesEnum.ENABLED))
31
+ }
32
+
33
+ @Test
34
+ fun `should include all attributes for a wildcard`() {
35
+ assertNull(fetchIncludedAttributes("//*[@*=\"yolo\"]"))
36
+ }
37
+
38
+ @Test
39
+ fun `should include no attributes if the query has none`() {
40
+ assertEquals(fetchIncludedAttributes("//*[@foo=\"yolo\"]"), setOf())
41
+ }
42
+ }
@@ -0,0 +1,220 @@
1
+ package io.appium.espressoserver.test.helpers.w3c
2
+
3
+ import com.google.gson.Gson
4
+
5
+ import org.junit.Test
6
+
7
+ import java.io.IOException
8
+ import java.util.concurrent.ExecutionException
9
+
10
+ import io.appium.espressoserver.lib.handlers.exceptions.AppiumException
11
+ import io.appium.espressoserver.lib.handlers.exceptions.InvalidArgumentException
12
+ import io.appium.espressoserver.lib.handlers.exceptions.NotYetImplementedException
13
+ import io.appium.espressoserver.lib.helpers.w3c.adapter.DummyW3CActionAdapter
14
+ import io.appium.espressoserver.lib.helpers.w3c.models.*
15
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType
16
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.PointerType
17
+ import io.appium.espressoserver.lib.helpers.w3c.state.ActiveInputSources
18
+ import io.appium.espressoserver.lib.helpers.w3c.state.InputStateTable
19
+ import io.appium.espressoserver.lib.helpers.w3c.state.PointerInputState
20
+
21
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType.KEY_DOWN
22
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType.KEY_UP
23
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType.PAUSE
24
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType.POINTER_DOWN
25
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.ActionType.POINTER_MOVE
26
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.InputSourceType.KEY
27
+ import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.InputSourceType.POINTER
28
+ import io.appium.espressoserver.test.assets.readAssetFile
29
+ import org.junit.Assert.*
30
+
31
+ class ActionSequenceTest {
32
+
33
+ @Test
34
+ @Throws(IOException::class, InvalidArgumentException::class, NotYetImplementedException::class)
35
+ fun shouldPullOutPointerActionsInW3CActions() {
36
+ val multiTouchJson = readAssetFile("multi-touch-actions.json")
37
+ val actions = Actions::class.java.cast(Gson().fromJson(multiTouchJson, Actions::class.java))
38
+ val actionSequence = ActionSequence(actions!!, ActiveInputSources(), InputStateTable())
39
+
40
+ // Tick #1 of 6
41
+ var tick = actionSequence.next()
42
+ var action = tick.next()
43
+ assertEquals(action.id, "finger1")
44
+ assertEquals(action.type, POINTER)
45
+ assertEquals(action.subType, POINTER_MOVE)
46
+ assertEquals(action.duration, 0f)
47
+ assertFloatEquals(action.x!!, 100f)
48
+ assertFloatEquals(action.y!!, 100f)
49
+
50
+ action = tick.next()
51
+ assertEquals(action.id, "finger2")
52
+ assertEquals(action.type, POINTER)
53
+ assertEquals(action.subType, POINTER_MOVE)
54
+ assertEquals(action.duration, 10f)
55
+ assertFloatEquals(action.x!!, 200f)
56
+ assertFloatEquals(action.y!!, 400f)
57
+
58
+ assertFalse(tick.hasNext())
59
+
60
+ // Tick #2 of 6
61
+ tick = actionSequence.next()
62
+ action = tick.next()
63
+ assertEquals(action.id, "finger1")
64
+ assertEquals(action.type, POINTER)
65
+ assertEquals(action.subType, POINTER_DOWN)
66
+ assertEquals(action.button.toLong(), 0)
67
+
68
+ action = tick.next()
69
+ assertEquals(action.id, "finger2")
70
+ assertEquals(action.type, POINTER)
71
+ assertEquals(action.subType, POINTER_DOWN)
72
+ assertEquals(action.button.toLong(), 0)
73
+
74
+ // Tick #3 of 6
75
+ tick = actionSequence.next()
76
+ action = tick.next()
77
+ assertEquals(action.id, "finger1")
78
+ assertEquals(action.type, POINTER)
79
+ assertEquals(action.subType, PAUSE)
80
+ assertEquals(action.button.toLong(), 0)
81
+
82
+ action = tick.next()
83
+ assertEquals(action.id, "finger2")
84
+ assertEquals(action.type, POINTER)
85
+ assertEquals(action.subType, PAUSE)
86
+ assertEquals(action.button.toLong(), 0)
87
+
88
+ assertFalse(tick.hasNext())
89
+
90
+ // Tick #4 of 6
91
+ tick = actionSequence.next()
92
+ action = tick.next()
93
+ assertEquals(action.id, "finger1")
94
+ assertEquals(action.type, POINTER)
95
+ assertEquals(action.subType, POINTER_MOVE)
96
+ assertEquals(action.duration, 1000f)
97
+ assertTrue(action.pointer == PointerType.TOUCH)
98
+ assertFloatEquals(action.x!!, 20f)
99
+ assertFloatEquals(action.y!!, 0f)
100
+
101
+ action = tick.next()
102
+ assertEquals(action.id, "finger2")
103
+ assertEquals(action.type, POINTER)
104
+ assertEquals(action.subType, POINTER_MOVE)
105
+ assertEquals(action.duration, 1000f)
106
+ assertEquals(action.origin.type, Origin.POINTER)
107
+ assertFloatEquals(action.x!!, 50f)
108
+ assertFloatEquals(action.y!!, 0f)
109
+
110
+ assertFalse(tick.hasNext())
111
+
112
+ // Tick #5 of 6
113
+ tick = actionSequence.next()
114
+ action = tick.next()
115
+ assertEquals(action.id, "finger1")
116
+ assertEquals(action.type, POINTER)
117
+ assertEquals(action.subType, ActionType.POINTER_UP)
118
+ assertEquals(action.button.toLong(), 0)
119
+
120
+ action = tick.next()
121
+ assertEquals(action.id, "finger2")
122
+ assertEquals(action.type, POINTER)
123
+ assertEquals(action.subType, ActionType.POINTER_UP)
124
+ assertEquals(action.button.toLong(), 0)
125
+
126
+ assertFalse(tick.hasNext())
127
+
128
+ // Tick #6 of 6
129
+ tick = actionSequence.next()
130
+ action = tick.next()
131
+ assertEquals(action.id, "finger2")
132
+ assertEquals(action.type, POINTER)
133
+ assertEquals(action.subType, PAUSE)
134
+ assertEquals(action.duration, 0f)
135
+
136
+ assertFalse(tick.hasNext())
137
+ assertFalse(actionSequence.hasNext())
138
+ }
139
+
140
+
141
+ @Test
142
+ @Throws(IOException::class, InvalidArgumentException::class, NotYetImplementedException::class)
143
+ fun shouldPullOutKeyActionsInW3CActions() {
144
+ val keyJson = readAssetFile("key-actions.json")
145
+ val actions = Actions::class.java.cast(Gson().fromJson(keyJson, Actions::class.java))
146
+ val actionSequence = ActionSequence(actions!!, ActiveInputSources(), InputStateTable())
147
+
148
+ var action: ActionObject
149
+ var tick: Tick
150
+
151
+ val unicodeChar = '\uE009'.toString()
152
+
153
+ val expectedSubTypes = arrayOf(KEY_DOWN, PAUSE, KEY_DOWN, KEY_UP, KEY_UP)
154
+ val expectedValue = arrayOf(unicodeChar, null, "s", unicodeChar, "s")
155
+
156
+
157
+ for (i in expectedSubTypes.indices) {
158
+ tick = actionSequence.next()
159
+ action = tick.next()
160
+ assertEquals(action.type, KEY)
161
+ assertEquals(action.subType, expectedSubTypes[i])
162
+ assertEquals(action.value, expectedValue[i])
163
+ assertEquals(action.id, "keyboard")
164
+ assertFalse(tick.hasNext())
165
+ }
166
+
167
+ assertFalse(actionSequence.hasNext())
168
+ }
169
+
170
+ @Test
171
+ @Throws(IOException::class, AppiumException::class, InterruptedException::class, ExecutionException::class)
172
+ fun shouldDispatchW3CPointerActions() {
173
+ class AlteredDummyAdapter : DummyW3CActionAdapter() {
174
+ override// Bump up viewport width so we don't get out of bounds issues
175
+ val viewportWidth: Long
176
+ get() = 251
177
+
178
+ override val viewportHeight: Long
179
+ get() = 401
180
+ }
181
+
182
+ val inputStateTable = InputStateTable()
183
+ val multiTouchJson = readAssetFile("multi-touch-actions.json")
184
+ val actions = Actions::class.java.cast(Gson().fromJson(multiTouchJson, Actions::class.java))
185
+ val actionSequence = ActionSequence(actions!!, ActiveInputSources(), InputStateTable())
186
+
187
+ val timeBefore = System.currentTimeMillis()
188
+ actionSequence.dispatch(AlteredDummyAdapter(), inputStateTable)
189
+ val elapsedTime = System.currentTimeMillis() - timeBefore
190
+
191
+ // Must be greater than 2s because that's the total duration
192
+ assertTrue(elapsedTime >= 2000)
193
+
194
+ // Check that it's under 2.5s though to verify that it's not TOO long
195
+ assertTrue(elapsedTime < 2500)
196
+
197
+ val finger1State = inputStateTable.getInputState("finger1") as PointerInputState
198
+ val finger2State = inputStateTable.getInputState("finger2") as PointerInputState
199
+
200
+ assertFloatEquals(finger1State.x, 120f)
201
+ assertFloatEquals(finger1State.y, 100f)
202
+ assertFloatEquals(finger2State.x, 250f)
203
+ assertFloatEquals(finger2State.y, 400f)
204
+ }
205
+
206
+ @Test
207
+ @Throws(IOException::class, AppiumException::class, InterruptedException::class, ExecutionException::class)
208
+ fun shouldDispatchW3CKeyActions() {
209
+ val inputStateTable = InputStateTable()
210
+ val multiTouchJson = readAssetFile("key-actions.json")
211
+ val actions = Actions::class.java.cast(Gson().fromJson(multiTouchJson, Actions::class.java))
212
+ val actionSequence = ActionSequence(actions!!, ActiveInputSources(), InputStateTable())
213
+
214
+ val timeBefore = System.currentTimeMillis()
215
+ actionSequence.dispatch(DummyW3CActionAdapter(), inputStateTable)
216
+ val elapsedTime = System.currentTimeMillis() - timeBefore
217
+ assertTrue(elapsedTime >= 500)
218
+ assertTrue(elapsedTime <= 600)
219
+ }
220
+ }
@@ -0,0 +1,76 @@
1
+ package io.appium.espressoserver.test.helpers.w3c
2
+
3
+ import com.google.gson.Gson
4
+ import io.appium.espressoserver.lib.handlers.exceptions.AppiumException
5
+ import io.appium.espressoserver.lib.helpers.w3c.adapter.DummyW3CActionAdapter
6
+ import io.appium.espressoserver.lib.helpers.w3c.models.Actions
7
+ import io.appium.espressoserver.lib.helpers.w3c.state.InputStateTable
8
+ import io.appium.espressoserver.lib.helpers.w3c.state.KeyInputState
9
+ import io.appium.espressoserver.lib.helpers.w3c.state.PointerInputState
10
+ import io.appium.espressoserver.test.assets.readAssetFile
11
+ import junit.framework.TestCase
12
+ import org.junit.Assert
13
+ import org.junit.Test
14
+ import java.io.IOException
15
+
16
+ class ActionsTest {
17
+ internal class AlteredDummyAdapter : DummyW3CActionAdapter() {
18
+ // Bump up viewport width so we don't get out of bounds issues
19
+ override val viewportWidth: Long
20
+ get() =// Bump up viewport width so we don't get out of bounds issues
21
+ 300
22
+
23
+ // Bump up viewport width so we don't get out of bounds issues
24
+ override val viewportHeight: Long
25
+ get() =// Bump up viewport width so we don't get out of bounds issues
26
+ 500
27
+ }
28
+
29
+ @Test
30
+ @Throws(IOException::class)
31
+ fun shouldThrowIfAdapterNotSet() {
32
+ val multiTouchJson = readAssetFile("multi-touch-actions.json")
33
+ val actions = Gson().fromJson(multiTouchJson, Actions::class.java)
34
+ try {
35
+ actions.perform("123")
36
+ } catch (e: AppiumException) {
37
+ TestCase.assertTrue(e.message!!.contains("Failed to initialize /actions adapter"))
38
+ }
39
+ }
40
+
41
+ @Test
42
+ @Throws(IOException::class, AppiumException::class)
43
+ fun shouldPerformPointerActionsOnASetOfInputSources() {
44
+ val multiTouchJson = readAssetFile("multi-touch-actions.json")
45
+ val actions = Gson().fromJson(multiTouchJson, Actions::class.java)
46
+ actions.adapter = AlteredDummyAdapter()
47
+ val sessionId = "123"
48
+ actions.perform(sessionId)
49
+ val inputStateTable = InputStateTable.getInputStateTableOfSession(sessionId)
50
+ val finger1 = inputStateTable.getInputState("finger1") as PointerInputState
51
+ val finger2 = inputStateTable.getInputState("finger2") as PointerInputState
52
+
53
+ // Check the state
54
+ assertFloatEquals(finger1.x, 120f)
55
+ assertFloatEquals(finger1.y, 100f)
56
+ assertFloatEquals(finger2.x, 250f)
57
+ assertFloatEquals(finger2.y, 400f)
58
+
59
+ // Sanity check that it's recording pointer move events
60
+ val pointerMoveEvents = (actions.adapter as DummyW3CActionAdapter?)!!.getPointerMoveEvents()
61
+ TestCase.assertTrue(pointerMoveEvents.isNotEmpty())
62
+ }
63
+
64
+ @Test
65
+ @Throws(IOException::class, AppiumException::class)
66
+ fun shouldPerformKeyActionsOnASetOfInputSources() {
67
+ val keyJson = readAssetFile("key-actions.json")
68
+ val actions = Gson().fromJson(keyJson, Actions::class.java)
69
+ actions.adapter = AlteredDummyAdapter()
70
+ val sessionId = "123"
71
+ actions.perform(sessionId)
72
+ val inputStateTable = InputStateTable.getInputStateTableOfSession(sessionId)
73
+ val keyboard = inputStateTable.getInputState("keyboard") as KeyInputState
74
+ Assert.assertFalse(keyboard.isPressed("\\uE009"))
75
+ }
76
+ }