UNPKG

detox

Version:

E2E tests and automation for mobile

205 lines (175 loc) 5.49 kB
const invoke = require('../../invoke'); const { assertEnum, assertNormalized } = require('../../utils/assertArgument'); const DetoxActionApi = require('../espressoapi/DetoxAction'); const DetoxViewActionsApi = require('../espressoapi/DetoxViewActions'); const ViewActionsApi = require('../espressoapi/ViewActions'); const assertDirection = assertEnum(['left', 'right', 'up', 'down']); const assertSpeed = assertEnum(['fast', 'slow']); class Action { } class TapAction extends Action { constructor(value) { super(); this._call = invoke.callDirectly(value ? DetoxActionApi.tapAtLocation(value.x, value.y) : DetoxViewActionsApi.click()); } } class TapAtPointAction extends Action { constructor(value) { super(); this._call = invoke.callDirectly(DetoxActionApi.tapAtLocation(value.x, value.y)); } } class LongPressAction extends Action { constructor(point, duration) { super(); const filteredArgs = (point ? [point.x, point.y] : []).concat(duration ? [duration] : []); this._call = invoke.callDirectly(DetoxActionApi.longPress(...filteredArgs)); } } class MultiClickAction extends Action { constructor(times) { super(); this._call = invoke.callDirectly(DetoxActionApi.multiClick(times)); } } class PressKeyAction extends Action { constructor(value) { super(); this._call = invoke.callDirectly(ViewActionsApi.pressKey(value)); } } class LongPressAndDragAction extends Action { constructor(duration, normalizedPositionX, normalizedPositionY, targetElement, normalizedTargetPositionX, normalizedTargetPositionY, speed, holdDuration) { super(); assertNormalized({ normalizedPositionX }); assertNormalized({ normalizedPositionY }); assertNormalized({ normalizedTargetPositionX }); assertNormalized({ normalizedTargetPositionY }); assertSpeed({ speed }); this._call = invoke.callDirectly( DetoxActionApi.longPressAndDrag( duration, normalizedPositionX, normalizedPositionY, targetElement._call(), normalizedTargetPositionX, normalizedTargetPositionY, speed === 'fast', holdDuration ) ); } } class TypeTextAction extends Action { constructor(value) { super(); this._call = invoke.callDirectly(DetoxViewActionsApi.typeText(value)); } } class ReplaceTextAction extends Action { constructor(value) { super(); this._call = invoke.callDirectly(ViewActionsApi.replaceText(value)); } } class ClearTextAction extends Action { constructor() { super(); this._call = invoke.callDirectly(ViewActionsApi.clearText()); } } class ScrollAmountAction extends Action { constructor(direction, amount, startPositionX = -1, startPositionY = -1) { super(); this._call = invoke.callDirectly(DetoxActionApi.scrollInDirection(direction, amount, startPositionX, startPositionY)); } } class ScrollAmountStopAtEdgeAction extends Action { constructor(direction, amount, startPositionX = -1, startPositionY = -1) { super(); this._call = invoke.callDirectly(DetoxActionApi.scrollInDirectionStaleAtEdge(direction, amount, startPositionX, startPositionY)); } } class ScrollEdgeAction extends Action { constructor(edge, startPositionX = -1, startPositionY = -1) { super(); this._call = invoke.callDirectly(DetoxActionApi.scrollToEdge(edge, startPositionX, startPositionY)); } } class SwipeAction extends Action { constructor(direction, speed, normalizedSwipeOffset, normalizedStartingPointX, normalizedStartingPointY) { super(); assertDirection({ direction }); assertSpeed({ speed }); assertNormalized({ normalizedSwipeOffset }); assertNormalized({ normalizedStartingPointX }); assertNormalized({ normalizedStartingPointY }); this._call = invoke.callDirectly( DetoxActionApi.swipeInDirection( direction, speed === 'fast', normalizedSwipeOffset, normalizedStartingPointX, normalizedStartingPointY ) ); } } class GetAttributes extends Action { constructor() { super(); this._call = invoke.callDirectly(DetoxActionApi.getAttributes()); } } class ScrollToIndex extends Action { constructor(index) { super(); this._call = invoke.callDirectly(DetoxActionApi.scrollToIndex(index)); } } class SetDatePickerDateAction extends Action { constructor(dateString, formatString) { super(); this._call = invoke.callDirectly(DetoxActionApi.setDatePickerDate(dateString, formatString)); } } class AdjustSliderToPosition extends Action { constructor(newPosition) { super(); this._call = invoke.callDirectly(DetoxActionApi.adjustSliderToPosition(newPosition)); } } class TakeElementScreenshot extends Action { constructor() { super(); this._call = invoke.callDirectly(DetoxActionApi.takeViewScreenshot()); } } class AccessibilityActionAction extends Action { constructor(actionName) { super(); this._call = invoke.callDirectly(DetoxActionApi.accessibilityAction(actionName)); } } module.exports = { Action, TapAction, TapAtPointAction, LongPressAction, LongPressAndDragAction, MultiClickAction, PressKeyAction, TypeTextAction, ReplaceTextAction, ClearTextAction, GetAttributes, ScrollAmountAction, ScrollAmountStopAtEdgeAction, ScrollEdgeAction, SwipeAction, TakeElementScreenshot, ScrollToIndex, SetDatePickerDateAction, AdjustSliderToPosition, AccessibilityActionAction };