@devicelab/maestro-runner-darwin-x64 1.1.25
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.
- package/LICENSE +191 -0
- package/README.md +166 -0
- package/THIRD_PARTY_LICENSES +186 -0
- package/bin/maestro-runner +0 -0
- package/drivers/android/appium-uiautomator2-server-debug-androidTest.apk +0 -0
- package/drivers/android/appium-uiautomator2-server-v9.11.1.apk +0 -0
- package/drivers/android/devicelab-android-driver-test.apk +0 -0
- package/drivers/android/devicelab-android-driver.apk +0 -0
- package/drivers/android/settings_apk-debug.apk +0 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunner/App.swift +11 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunner.xcodeproj/project.pbxproj +523 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/ATTRIBUTION.md +73 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/Bridging-Header.h +4 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PixelDiff.swift +72 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCPointerEventPath.h +43 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCSynthesizedEventRecord.h +32 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCUIApplication+ActiveApp.h +23 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/PrivateHeaders/XCTest/XCUIDevice.h +30 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerObjCExceptionCatcher.h +11 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerObjCExceptionCatcher.m +16 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Alert.swift +155 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+CommandExecution.swift +961 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Environment.swift +37 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Interaction.swift +1864 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Lifecycle.swift +351 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Media.swift +81 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Models.swift +258 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+ScreenRecorder.swift +279 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Snapshot.swift +703 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+SystemModal.swift +230 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+Transport.swift +137 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests+TvRemote.swift +185 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/RunnerTests.swift +197 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SnapshotParams.h +28 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SnapshotParams.m +49 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SyntheticTyping.h +17 -0
- package/drivers/ios/DevicelabIOSRunner/DevicelabIOSRunnerUITests/SyntheticTyping.m +86 -0
- package/drivers/ios/DevicelabIOSRunner/PROTOCOL.md +258 -0
- package/drivers/ios/DevicelabIOSRunner/README.md +38 -0
- package/drivers/ios/DevicelabIOSRunner/project.yml +49 -0
- package/drivers/ios/WebDriverAgent/.github/ISSUE_TEMPLATE.md +4 -0
- package/drivers/ios/WebDriverAgent/.github/actions/xcode-setup/action.yml +32 -0
- package/drivers/ios/WebDriverAgent/.github/dependabot.yml +22 -0
- package/drivers/ios/WebDriverAgent/.github/workflows/functional-test.yml +62 -0
- package/drivers/ios/WebDriverAgent/.github/workflows/pr-title.yml +10 -0
- package/drivers/ios/WebDriverAgent/.github/workflows/publish.js.yml +105 -0
- package/drivers/ios/WebDriverAgent/.github/workflows/unit-test.yml +30 -0
- package/drivers/ios/WebDriverAgent/.github/workflows/wda-package.yml +107 -0
- package/drivers/ios/WebDriverAgent/.github/workflows/wda-tests.yml +221 -0
- package/drivers/ios/WebDriverAgent/.mocharc.js +4 -0
- package/drivers/ios/WebDriverAgent/.releaserc +45 -0
- package/drivers/ios/WebDriverAgent/CHANGELOG.md +1547 -0
- package/drivers/ios/WebDriverAgent/CONTRIBUTING.md +35 -0
- package/drivers/ios/WebDriverAgent/Configurations/IOSSettings.xcconfig +31 -0
- package/drivers/ios/WebDriverAgent/Configurations/IOSTestSettings.xcconfig +1 -0
- package/drivers/ios/WebDriverAgent/Configurations/TVOSSettings.xcconfig +31 -0
- package/drivers/ios/WebDriverAgent/Configurations/TVOSTestSettings.xcconfig +1 -0
- package/drivers/ios/WebDriverAgent/Fastlane/Fastfile +13 -0
- package/drivers/ios/WebDriverAgent/Gemfile +3 -0
- package/drivers/ios/WebDriverAgent/LICENSE +30 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/AccessibilityUtilities/AXSettings.h +15 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/MobileCoreServices/LSApplicationWorkspace.h +127 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/TextInput/TIPreferencesController.h +45 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/UIKitCore/UIKeyboardImpl.h +27 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/CDStructures.h +28 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/NSString-XCTAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/NSValue-XCTestAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UIGestureRecognizer-RecordingAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UILongPressGestureRecognizer-RecordingAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UIPanGestureRecognizer-RecordingAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UIPinchGestureRecognizer-RecordingAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UISwipeGestureRecognizer-RecordingAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/UITapGestureRecognizer-RecordingAdditions.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCAXClient_iOS.h +55 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCActivityRecord.h +39 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCApplicationMonitor.h +44 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCApplicationMonitor_iOS.h +18 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCApplicationQuery.h +23 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCDebugLogDelegate-Protocol.h +11 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCDeviceEvent.h +27 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCEventGenerator.h +73 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyMappingPath.h +36 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyboardInputSolver.h +41 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyboardKeyMap.h +101 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCKeyboardLayout.h +35 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCPointerEvent.h +30 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCPointerEventPath.h +43 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSourceCodeRecording.h +42 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSourceCodeTreeNode.h +84 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSourceCodeTreeNodeEnumerator.h +18 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSymbolicationRecord.h +29 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSymbolicatorHolder.h +14 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCSynthesizedEventRecord.h +32 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAXClient-Protocol.h +14 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAsyncActivity-Protocol.h +16 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAsyncActivity.h +23 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTAutomationTarget-Protocol.h +12 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTDarwinNotificationExpectation.h +23 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTElementSetTransformer-Protocol.h +18 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTKVOExpectation.h +28 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTMetric.h +29 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTNSNotificationExpectation.h +27 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTNSPredicateExpectation.h +24 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTNSPredicateExpectationObject-Protocol.h +15 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTRunnerAutomationSession.h +21 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTRunnerDaemonSession.h +98 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTRunnerIDESession.h +65 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTTestRunSession.h +25 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTTestRunSessionDelegate-Protocol.h +17 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTUIApplicationMonitor-Protocol.h +17 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiter.h +55 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterDelegate-Protocol.h +16 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterDelegatePrivate-Protocol.h +12 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterManagement-Protocol.h +13 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTWaiterManager.h +28 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTest.h +34 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestCase.h +102 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestCaseRun.h +18 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestCaseSuite.h +19 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestConfiguration.h +66 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestContext.h +26 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestContextScope.h +19 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestDriver.h +38 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestDriverInterface-Protocol.h +14 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestExpectation.h +39 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestExpectationDelegate-Protocol.h +14 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestExpectationWaiter.h +17 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestLog.h +32 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestManager_IDEInterface-Protocol.h +36 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestManager_ManagerInterface-Protocol.h +54 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestManager_TestsInterface-Protocol.h +12 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestMisuseObserver.h +37 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestObservation-Protocol.h +20 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestObservationCenter.h +36 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestObserver.h +20 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestProbe.h +13 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestRun.h +39 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestSuite.h +48 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestSuiteRun.h +28 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCTestWaiter.h +14 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIApplication.h +60 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIApplicationImpl.h +38 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIApplicationProcess.h +85 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUICoordinate.h +44 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIDevice.h +30 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElement.h +74 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElementAsynchronousHandlerWrapper.h +19 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElementHitPointCoordinate.h +24 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIElementQuery.h +70 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIHitPointResult.h +20 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderNodeFinder.h +65 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderNodeFinderMatch.h +25 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderTimingMessage.h +20 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIRecorderUtilities.h +45 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIScreen.h +27 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/XCUIScreenDataSource-Protocol.h +19 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCInternalTestRun.h +43 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCKVOExpectationImplementation.h +32 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTDarwinNotificationExpectationImplementation.h +27 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTNSNotificationExpectationImplementation.h +30 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTNSPredicateExpectationImplementation.h +29 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTWaiterImpl.h +41 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestCaseImplementation.h +70 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestCaseInterruptionException.h +13 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestExpectationImplementation.h +40 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestImplementation.h +14 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestObservationCenterImplementation.h +19 -0
- package/drivers/ios/WebDriverAgent/PrivateHeaders/XCTest/_XCTestSuiteImplementation.h +23 -0
- package/drivers/ios/WebDriverAgent/README.md +56 -0
- package/drivers/ios/WebDriverAgent/Scripts/build-webdriveragent.mjs +85 -0
- package/drivers/ios/WebDriverAgent/Scripts/build.sh +124 -0
- package/drivers/ios/WebDriverAgent/Scripts/ci/build-real.sh +24 -0
- package/drivers/ios/WebDriverAgent/Scripts/ci/build-sim.sh +15 -0
- package/drivers/ios/WebDriverAgent/Scripts/fetch-prebuilt-wda.mjs +69 -0
- package/drivers/ios/WebDriverAgent/Scripts/update-wda-version.mjs +42 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/project.pbxproj +4547 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationApp.xcscheme +87 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationTests_1.xcscheme +86 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationTests_2.xcscheme +86 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/IntegrationTests_3.xcscheme +86 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentLib.xcscheme +125 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentLib_tvOS.xcscheme +95 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner-nodebug.xcscheme +87 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner.xcscheme +114 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgent.xcodeproj/xcshareddata/xcschemes/WebDriverAgentRunner_tvOS.xcscheme +123 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/FBXCElementSnapshotWrapper+Helpers.h +100 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/FBXCElementSnapshotWrapper+Helpers.m +192 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSDictionary+FBUtf8SafeDictionary.h +39 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSDictionary+FBUtf8SafeDictionary.m +87 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSExpression+FBFormat.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSExpression+FBFormat.m +34 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBVisualLength.h +18 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBVisualLength.m +18 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBXMLSafeString.h +27 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/NSString+FBXMLSafeString.m +30 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCAXClient_iOS+FBSnapshotReqParams.h +25 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCAXClient_iOS+FBSnapshotReqParams.m +82 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCTIssue+FBPatcher.h +17 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCTIssue+FBPatcher.m +35 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBAlert.h +23 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBAlert.m +109 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBFocused.h +23 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.h +171 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBHelpers.m +645 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBQuiescence.h +24 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBQuiescence.m +28 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBTouchAction.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBTouchAction.m +75 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBUIInterruptions.h +22 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplication+FBUIInterruptions.m +31 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplicationProcess+FBQuiescence.h +27 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIApplicationProcess+FBQuiescence.m +118 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHealthCheck.h +30 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHealthCheck.m +47 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.h +193 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBHelpers.m +388 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.h +38 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIDevice+FBRotation.m +68 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBAccessibility.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBAccessibility.m +50 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCaching.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCaching.m +36 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBClassChain.h +57 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBClassChain.m +98 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCustomActions.h +27 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBCustomActions.m +127 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBFind.h +75 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBFind.m +133 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBForceTouch.h +38 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBForceTouch.m +52 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.h +28 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBIsVisible.m +78 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBMinMax.h +33 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBMinMax.m +75 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.h +45 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBPickerWheel.m +58 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBResolve.h +37 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBResolve.m +51 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.h +98 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBScrolling.m +342 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBSwiping.h +38 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBSwiping.m +56 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.h +35 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTVFocuse.m +71 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTyping.h +64 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBTyping.m +199 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUID.h +42 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUID.m +85 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.h +106 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBUtilities.m +170 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBVisibleFrame.h +35 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBVisibleFrame.m +52 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.h +32 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElement+FBWebDriverAttributes.m +294 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElementQuery+FBHelpers.h +28 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Categories/XCUIElementQuery+FBHelpers.m +46 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBAlertViewCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBAlertViewCommands.m +130 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBCustomCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBCustomCommands.m +633 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBDebugCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBDebugCommands.m +81 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBElementCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBElementCommands.m +705 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBFindElementCommands.h +18 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBFindElementCommands.m +186 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBOrientationCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBOrientationCommands.m +185 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBScreenshotCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBScreenshotCommands.m +40 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBSessionCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBSessionCommands.m +594 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchActionCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchActionCommands.m +41 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchIDCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBTouchIDCommands.m +30 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBUnknownCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBUnknownCommands.m +39 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBVideoCommands.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Commands/FBVideoCommands.m +84 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/FBAlert.h +91 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/FBAlert.m +274 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Info.plist +26 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBCommandHandler.h +38 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBCommandStatus.h +80 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBCommandStatus.m +279 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElement.h +95 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementCache.h +61 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementCache.m +100 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementUtils.h +76 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBElementUtils.m +153 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptionHandler.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptionHandler.m +58 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptions.h +60 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBExceptions.m +24 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBHTTPStatusCodes.h +581 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponseJSONPayload.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponseJSONPayload.m +59 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponsePayload.h +74 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBResponsePayload.m +148 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRoute.h +77 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRoute.m +174 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRouteRequest-Private.h +20 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRouteRequest.h +39 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBRouteRequest.m +32 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingContainer.h +56 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingContainer.m +72 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingPromise.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingPromise.m +31 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingRequest.h +39 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBScreenRecordingRequest.m +94 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBSession-Private.h +26 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBSession.h +141 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBSession.m +295 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBTCPSocket.h +65 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBTCPSocket.m +85 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBWebServer.h +52 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBWebServer.m +248 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCAccessibilityElement.h +34 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCAccessibilityElement.m +17 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCDeviceEvent.h +34 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCDeviceEvent.m +42 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshot.h +82 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshot.m +9 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshotWrapper.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Routing/FBXCElementSnapshotWrapper.m +114 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAccessibilityTraits.h +20 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAccessibilityTraits.m +61 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBActiveAppDetectionPoint.h +56 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBActiveAppDetectionPoint.m +87 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAlertsMonitor.h +51 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBAlertsMonitor.m +94 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.h +131 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBBaseActionsSynthesizer.m +165 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBCapabilities.h +45 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBCapabilities.m +25 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBClassChainQueryParser.h +99 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBClassChainQueryParser.m +666 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBConfiguration.h +403 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBConfiguration.m +711 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBDebugLogDelegateDecorator.h +26 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBDebugLogDelegateDecorator.m +49 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementHelpers.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementHelpers.m +21 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementTypeTransformer.h +45 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBElementTypeTransformer.m +149 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBErrorBuilder.h +64 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBErrorBuilder.m +75 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBFailureProofTestCase.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBFailureProofTestCase.m +68 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageProcessor.h +55 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageProcessor.m +170 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageUtils.h +25 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBImageUtils.m +80 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBKeyboard.h +37 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBKeyboard.m +123 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBLogger.h +32 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBLogger.m +47 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMacros.h +57 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMathUtils.h +36 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMathUtils.m +63 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMjpegServer.h +24 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBMjpegServer.m +151 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBNotificationsHelper.h +37 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBNotificationsHelper.m +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBPasteboard.h +40 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBPasteboard.m +172 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBProtocolHelpers.h +46 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBProtocolHelpers.m +144 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBReflectionUtils.h +23 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBReflectionUtils.m +31 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRunLoopSpinner.h +77 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRunLoopSpinner.m +94 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRuntimeUtils.h +79 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBRuntimeUtils.m +112 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreen.h +22 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreen.m +21 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreenshot.h +44 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBScreenshot.m +227 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBSettings.h +48 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBSettings.m +42 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBTVNavigationTracker-Private.h +27 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBTVNavigationTracker.h +52 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBTVNavigationTracker.m +142 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBUnattachedAppLauncher.h +26 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBUnattachedAppLauncher.m +21 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsHelpers.h +42 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsHelpers.m +119 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.h +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBW3CActionsSynthesizer.m +885 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBWebServerParams.h +22 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBWebServerParams.m +23 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCAXClientProxy.h +49 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCAXClientProxy.m +119 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.h +45 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCTestDaemonsProxy.m +359 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCodeCompatibility.h +80 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXCodeCompatibility.m +99 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXMLGenerationOptions.h +45 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXMLGenerationOptions.m +25 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXPath-Private.h +56 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXPath.h +59 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/FBXPath.m +979 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCache.h +66 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCache.m +146 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCacheNode.h +43 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/LRUCache/LRUCacheNode.m +51 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/NSPredicate+FBFormat.h +42 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/NSPredicate+FBFormat.m +69 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCTestPrivateSymbols.h +78 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCTestPrivateSymbols.m +107 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCUIApplicationProcessDelay.h +37 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Utilities/XCUIApplicationProcessDelay.m +83 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncSocket.h +1220 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncSocket.m +8812 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncUdpSocket.h +1036 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncUdpSocket.m +5868 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDNumber.h +12 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDNumber.m +88 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDRange.h +56 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Categories/DDRange.m +106 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPConnection.h +107 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPConnection.m +2238 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPLogging.h +122 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPMessage.h +53 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPMessage.m +357 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPResponse.h +149 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPServer.h +126 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/HTTPServer.m +372 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/LICENSE +18 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPDataResponse.h +13 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPDataResponse.m +83 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPErrorResponse.h +9 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/CocoaHTTPServer/Responses/HTTPErrorResponse.m +40 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/HTTPResponseProxy.h +13 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/HTTPResponseProxy.m +84 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/LICENSE +19 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/Route.h +18 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/Route.m +11 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteRequest.h +16 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteRequest.m +50 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteResponse.h +20 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RouteResponse.m +66 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingConnection.h +5 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingConnection.m +142 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingHTTPServer.h +55 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingHTTPServer.m +303 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentLib/WebDriverAgentLib.h +59 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentRunner/Info.plist +30 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentRunner/UITestingUITests.m +58 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/AppDelegate.h +14 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/AppDelegate.m +38 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBAlertViewController.h +14 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBAlertViewController.m +82 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBNavigationController.h +12 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBNavigationController.m +25 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBScrollViewController.h +13 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBScrollViewController.m +39 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBTableDataSource.h +16 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/FBTableDataSource.m +35 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/SceneDelegate.h +20 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/SceneDelegate.m +48 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchSpotView.h +17 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchSpotView.m +28 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchViewController.h +23 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchViewController.m +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchableView.h +29 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/TouchableView.m +108 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/ViewController.h +12 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Classes/ViewController.m +88 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Info.plist +71 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/Resources/Base.lproj/Main.storyboard +620 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationApp/main.m +15 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBAlertTests.m +194 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBAutoAlertsHandlerTests.m +73 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBConfigurationTests.m +38 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBElementAttributeTests.m +264 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBElementSwipingTests.m +127 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBElementVisibilityTests.m +73 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBFailureProofTestCaseTests.m +41 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBForceTouchTests.m +85 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBImageProcessorTests.m +82 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBIntegrationTestCase.h +76 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBIntegrationTestCase.m +140 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBKeyboardTests.m +61 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBPasteboardTests.m +91 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBPickerWheelSelectTests.m +55 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBSafariAlertTests.m +73 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBScreenTests.m +31 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBScrollingTests.m +126 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBSessionIntegrationTests.m +131 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBTapTest.m +103 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBTestMacros.h +33 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBTypingTest.m +68 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBVideoRecordingTests.m +64 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBW3CMultiTouchActionsIntegrationTests.m +124 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBW3CTouchActionsIntegrationTests.m +491 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBW3CTypeActionsTests.m +184 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/FBXPathIntegrationTests.m +157 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/Info.plist +24 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCElementSnapshotHelperTests.m +211 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCElementSnapshotHitPointTests.m +30 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIApplicationHelperTests.m +162 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIDeviceHealthCheckTests.m +27 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIDeviceHelperTests.m +220 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIDeviceRotationTests.m +84 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIElementAttributesTests.m +248 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIElementFBFindTests.m +472 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/IntegrationTests/XCUIElementHelperIntegrationTests.m +51 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCElementSnapshotDouble.h +16 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCElementSnapshotDouble.m +110 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIApplicationDouble.h +17 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIApplicationDouble.m +66 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIElementDouble.h +51 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Doubles/XCUIElementDouble.m +104 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBClassChainTests.m +313 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBConfigurationTests.m +60 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBElementCacheTests.m +124 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBElementTypeTransformerTests.m +45 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBElementUtilitiesTests.m +36 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBErrorBuilderTests.m +61 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBExceptionHandlerTests.m +59 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBLRUCacheTests.m +127 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBMathUtilsTests.m +113 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBProtocolHelpersTests.m +81 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBRouteTests.m +129 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBRunLoopSpinnerTests.m +98 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBRuntimeUtilsTests.m +45 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBSDKVersionTests.m +66 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBSessionTests.m +67 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBXMLSafeStringTests.m +35 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/FBXPathTests.m +155 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/Info.plist +24 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/NSDictionaryFBUtf8SafeTests.m +34 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/NSExpressionFBFormatTests.m +60 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/NSPredicateFBFormatTests.m +72 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests/XCUIElementHelpersTests.m +50 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/Doubles/XCUIElementDouble.h +46 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/Doubles/XCUIElementDouble.m +80 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/FBTVNavigationTrackerTests.m +86 -0
- package/drivers/ios/WebDriverAgent/WebDriverAgentTests/UnitTests_tvOS/Info.plist +24 -0
- package/drivers/ios/WebDriverAgent/eslint.config.mjs +13 -0
- package/drivers/ios/WebDriverAgent/index.ts +7 -0
- package/drivers/ios/WebDriverAgent/lib/check-dependencies.ts +34 -0
- package/drivers/ios/WebDriverAgent/lib/constants.ts +18 -0
- package/drivers/ios/WebDriverAgent/lib/logger.ts +3 -0
- package/drivers/ios/WebDriverAgent/lib/no-session-proxy.ts +25 -0
- package/drivers/ios/WebDriverAgent/lib/types.ts +139 -0
- package/drivers/ios/WebDriverAgent/lib/utils.ts +342 -0
- package/drivers/ios/WebDriverAgent/lib/webdriveragent.ts +715 -0
- package/drivers/ios/WebDriverAgent/lib/xcodebuild.ts +488 -0
- package/drivers/ios/WebDriverAgent/package.json +102 -0
- package/drivers/ios/WebDriverAgent/test/functional/desired.ts +7 -0
- package/drivers/ios/WebDriverAgent/test/functional/helpers/simulator.ts +34 -0
- package/drivers/ios/WebDriverAgent/test/functional/webdriveragent-e2e-specs.ts +119 -0
- package/drivers/ios/WebDriverAgent/test/unit/utils-specs.ts +157 -0
- package/drivers/ios/WebDriverAgent/test/unit/webdriveragent-specs.ts +446 -0
- package/drivers/ios/WebDriverAgent/tsconfig.json +16 -0
- package/package.json +16 -0
|
@@ -0,0 +1,885 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2015-present, Facebook, Inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#import "FBW3CActionsSynthesizer.h"
|
|
10
|
+
|
|
11
|
+
#import "FBErrorBuilder.h"
|
|
12
|
+
#import "FBElementCache.h"
|
|
13
|
+
#import "FBConfiguration.h"
|
|
14
|
+
#import "FBLogger.h"
|
|
15
|
+
#import "FBMacros.h"
|
|
16
|
+
#import "FBMathUtils.h"
|
|
17
|
+
#import "FBProtocolHelpers.h"
|
|
18
|
+
#import "FBW3CActionsHelpers.h"
|
|
19
|
+
#import "FBXCodeCompatibility.h"
|
|
20
|
+
#import "FBXCTestDaemonsProxy.h"
|
|
21
|
+
#import "FBXCElementSnapshotWrapper+Helpers.h"
|
|
22
|
+
#import "XCUIApplication+FBHelpers.h"
|
|
23
|
+
#import "XCUIDevice.h"
|
|
24
|
+
#import "XCUIElement+FBCaching.h"
|
|
25
|
+
#import "XCUIElement+FBIsVisible.h"
|
|
26
|
+
#import "XCUIElement+FBUtilities.h"
|
|
27
|
+
#import "XCUIElement.h"
|
|
28
|
+
#import "XCSynthesizedEventRecord.h"
|
|
29
|
+
#import "XCPointerEventPath.h"
|
|
30
|
+
#import "XCPointerEvent.h"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
static NSString *const FB_KEY_TYPE = @"type";
|
|
34
|
+
static NSString *const FB_ACTION_TYPE_POINTER = @"pointer";
|
|
35
|
+
static NSString *const FB_ACTION_TYPE_KEY = @"key";
|
|
36
|
+
static NSString *const FB_ACTION_TYPE_NONE = @"none";
|
|
37
|
+
|
|
38
|
+
static NSString *const FB_PARAMETERS_KEY_POINTER_TYPE = @"pointerType";
|
|
39
|
+
static NSString *const FB_POINTER_TYPE_MOUSE = @"mouse";
|
|
40
|
+
static NSString *const FB_POINTER_TYPE_PEN = @"pen";
|
|
41
|
+
static NSString *const FB_POINTER_TYPE_TOUCH = @"touch";
|
|
42
|
+
|
|
43
|
+
static NSString *const FB_ACTION_ITEM_KEY_ORIGIN = @"origin";
|
|
44
|
+
static NSString *const FB_ORIGIN_TYPE_VIEWPORT = @"viewport";
|
|
45
|
+
static NSString *const FB_ORIGIN_TYPE_POINTER = @"pointer";
|
|
46
|
+
|
|
47
|
+
static NSString *const FB_ACTION_ITEM_KEY_TYPE = @"type";
|
|
48
|
+
static NSString *const FB_ACTION_ITEM_TYPE_POINTER_MOVE = @"pointerMove";
|
|
49
|
+
static NSString *const FB_ACTION_ITEM_TYPE_POINTER_DOWN = @"pointerDown";
|
|
50
|
+
static NSString *const FB_ACTION_ITEM_TYPE_POINTER_UP = @"pointerUp";
|
|
51
|
+
static NSString *const FB_ACTION_ITEM_TYPE_POINTER_CANCEL = @"pointerCancel";
|
|
52
|
+
static NSString *const FB_ACTION_ITEM_TYPE_PAUSE = @"pause";
|
|
53
|
+
static NSString *const FB_ACTION_ITEM_TYPE_KEY_UP = @"keyUp";
|
|
54
|
+
static NSString *const FB_ACTION_ITEM_TYPE_KEY_DOWN = @"keyDown";
|
|
55
|
+
|
|
56
|
+
static NSString *const FB_ACTION_ITEM_KEY_X = @"x";
|
|
57
|
+
static NSString *const FB_ACTION_ITEM_KEY_Y = @"y";
|
|
58
|
+
static NSString *const FB_ACTION_ITEM_KEY_BUTTON = @"button";
|
|
59
|
+
static NSString *const FB_ACTION_ITEM_KEY_PRESSURE = @"pressure";
|
|
60
|
+
|
|
61
|
+
static NSString *const FB_KEY_ID = @"id";
|
|
62
|
+
static NSString *const FB_KEY_PARAMETERS = @"parameters";
|
|
63
|
+
static NSString *const FB_KEY_ACTIONS = @"actions";
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
#if !TARGET_OS_TV
|
|
67
|
+
@interface FBW3CGestureItem : FBBaseGestureItem
|
|
68
|
+
|
|
69
|
+
@property (nullable, readonly, nonatomic) FBBaseGestureItem *previousItem;
|
|
70
|
+
|
|
71
|
+
@end
|
|
72
|
+
|
|
73
|
+
@interface FBPointerDownItem : FBW3CGestureItem
|
|
74
|
+
@property (nullable, readonly, nonatomic) NSNumber *pressure;
|
|
75
|
+
@end
|
|
76
|
+
|
|
77
|
+
@interface FBPointerMoveItem : FBW3CGestureItem
|
|
78
|
+
|
|
79
|
+
@end
|
|
80
|
+
|
|
81
|
+
@interface FBPointerUpItem : FBW3CGestureItem
|
|
82
|
+
|
|
83
|
+
@end
|
|
84
|
+
|
|
85
|
+
@interface FBPointerPauseItem : FBW3CGestureItem
|
|
86
|
+
|
|
87
|
+
@end
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
@interface FBW3CKeyItem : FBBaseActionItem
|
|
91
|
+
|
|
92
|
+
@property (nullable, readonly, nonatomic) FBW3CKeyItem *previousItem;
|
|
93
|
+
|
|
94
|
+
@end
|
|
95
|
+
|
|
96
|
+
@interface FBKeyUpItem : FBW3CKeyItem
|
|
97
|
+
|
|
98
|
+
@property (readonly, nonatomic) NSString *value;
|
|
99
|
+
|
|
100
|
+
@end
|
|
101
|
+
|
|
102
|
+
@interface FBKeyDownItem : FBW3CKeyItem
|
|
103
|
+
|
|
104
|
+
@property (readonly, nonatomic) NSString *value;
|
|
105
|
+
|
|
106
|
+
@end
|
|
107
|
+
|
|
108
|
+
@interface FBKeyPauseItem : FBW3CKeyItem
|
|
109
|
+
|
|
110
|
+
@property (readonly, nonatomic) double duration;
|
|
111
|
+
|
|
112
|
+
@end
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
@implementation FBW3CGestureItem
|
|
117
|
+
|
|
118
|
+
- (nullable instancetype)initWithActionItem:(NSDictionary<NSString *, id> *)actionItem
|
|
119
|
+
application:(XCUIApplication *)application
|
|
120
|
+
previousItem:(nullable FBBaseGestureItem *)previousItem
|
|
121
|
+
offset:(double)offset
|
|
122
|
+
error:(NSError **)error
|
|
123
|
+
{
|
|
124
|
+
self = [super init];
|
|
125
|
+
if (self) {
|
|
126
|
+
self.actionItem = actionItem;
|
|
127
|
+
self.application = application;
|
|
128
|
+
self.offset = offset;
|
|
129
|
+
_previousItem = previousItem;
|
|
130
|
+
NSNumber *durationObj = FBOptDuration(actionItem, @0, error);
|
|
131
|
+
if (nil == durationObj) {
|
|
132
|
+
return nil;
|
|
133
|
+
}
|
|
134
|
+
self.duration = durationObj.doubleValue;
|
|
135
|
+
XCUICoordinate *position = [self positionWithError:error];
|
|
136
|
+
if (nil == position) {
|
|
137
|
+
return nil;
|
|
138
|
+
}
|
|
139
|
+
self.atPosition = position;
|
|
140
|
+
}
|
|
141
|
+
return self;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
- (nullable XCUICoordinate *)positionWithError:(NSError **)error
|
|
145
|
+
{
|
|
146
|
+
if (nil == self.previousItem) {
|
|
147
|
+
NSString *errorDescription = [NSString stringWithFormat:@"The '%@' action item must be preceded by %@ item", self.actionItem, FB_ACTION_ITEM_TYPE_POINTER_MOVE];
|
|
148
|
+
if (error) {
|
|
149
|
+
*error = [[FBErrorBuilder.builder withDescription:errorDescription] build];
|
|
150
|
+
}
|
|
151
|
+
return nil;
|
|
152
|
+
}
|
|
153
|
+
return self.previousItem.atPosition;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
- (nullable XCUICoordinate *)hitpointWithElement:(nullable XCUIElement *)element
|
|
157
|
+
positionOffset:(nullable NSValue *)positionOffset
|
|
158
|
+
error:(NSError **)error
|
|
159
|
+
{
|
|
160
|
+
if (nil == element || nil == positionOffset) {
|
|
161
|
+
return [super hitpointWithElement:element positionOffset:positionOffset error:error];
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// An offset relative to the element is defined
|
|
165
|
+
if (CGRectIsEmpty(element.frame)) {
|
|
166
|
+
[FBLogger log:self.application.fb_descriptionRepresentation];
|
|
167
|
+
NSString *description = [NSString stringWithFormat:@"The element '%@' is not visible on the screen and thus is not interactable",
|
|
168
|
+
element.description];
|
|
169
|
+
if (error) {
|
|
170
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
171
|
+
}
|
|
172
|
+
return nil;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// W3C standard requires that relative element coordinates start at the center of the element's rectangle
|
|
176
|
+
CGVector offset = CGVectorMake(positionOffset.CGPointValue.x, positionOffset.CGPointValue.y);
|
|
177
|
+
// TODO: Shall we throw an exception if hitPoint is out of the element frame?
|
|
178
|
+
return [[element coordinateWithNormalizedOffset:CGVectorMake(0.5, 0.5)] coordinateWithOffset:offset];
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
@end
|
|
182
|
+
|
|
183
|
+
@implementation FBPointerDownItem
|
|
184
|
+
|
|
185
|
+
- (nullable instancetype)initWithActionItem:(NSDictionary<NSString *, id> *)actionItem
|
|
186
|
+
application:(XCUIApplication *)application
|
|
187
|
+
previousItem:(nullable FBW3CGestureItem *)previousItem
|
|
188
|
+
offset:(double)offset
|
|
189
|
+
error:(NSError **)error
|
|
190
|
+
{
|
|
191
|
+
self = [super initWithActionItem:actionItem application:application previousItem:previousItem offset:offset error:error];
|
|
192
|
+
if (self) {
|
|
193
|
+
_pressure = [actionItem objectForKey:FB_ACTION_ITEM_KEY_PRESSURE];
|
|
194
|
+
}
|
|
195
|
+
return self;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
+ (NSString *)actionName
|
|
199
|
+
{
|
|
200
|
+
return FB_ACTION_ITEM_TYPE_POINTER_DOWN;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
- (NSArray<XCPointerEventPath *> *)addToEventPath:(XCPointerEventPath *)eventPath
|
|
204
|
+
allItems:(NSArray *)allItems
|
|
205
|
+
currentItemIndex:(NSUInteger)currentItemIndex
|
|
206
|
+
error:(NSError **)error
|
|
207
|
+
{
|
|
208
|
+
if (nil != eventPath && currentItemIndex == 1) {
|
|
209
|
+
FBW3CGestureItem *preceedingItem = [allItems objectAtIndex:currentItemIndex - 1];
|
|
210
|
+
if ([preceedingItem isKindOfClass:FBPointerMoveItem.class]) {
|
|
211
|
+
return @[];
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (nil == self.pressure) {
|
|
215
|
+
XCPointerEventPath *result = [[XCPointerEventPath alloc] initForTouchAtPoint:self.atPosition.screenPoint
|
|
216
|
+
offset:FBMillisToSeconds(self.offset)];
|
|
217
|
+
return @[result];
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
if (nil == eventPath) {
|
|
221
|
+
NSString *description = [NSString stringWithFormat:@"'%@' action with pressure must be preceeded with at least one '%@' action without this option", self.class.actionName, self.class.actionName];
|
|
222
|
+
if (error) {
|
|
223
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
224
|
+
}
|
|
225
|
+
return nil;
|
|
226
|
+
}
|
|
227
|
+
if (![XCUIDevice sharedDevice].supportsPressureInteraction) {
|
|
228
|
+
if (error) {
|
|
229
|
+
*error = [[FBErrorBuilder.builder withDescription:@"This device does not support force press interactions"] build];
|
|
230
|
+
}
|
|
231
|
+
return nil;
|
|
232
|
+
}
|
|
233
|
+
[eventPath pressDownWithPressure:self.pressure.doubleValue
|
|
234
|
+
atOffset:FBMillisToSeconds(self.offset)];
|
|
235
|
+
return @[];
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
@end
|
|
239
|
+
|
|
240
|
+
@implementation FBPointerMoveItem
|
|
241
|
+
|
|
242
|
+
- (nullable XCUICoordinate *)positionWithError:(NSError **)error
|
|
243
|
+
{
|
|
244
|
+
static NSArray<NSString *> *supportedOriginTypes;
|
|
245
|
+
static dispatch_once_t onceToken;
|
|
246
|
+
dispatch_once(&onceToken, ^{
|
|
247
|
+
supportedOriginTypes = @[FB_ORIGIN_TYPE_POINTER, FB_ORIGIN_TYPE_VIEWPORT];
|
|
248
|
+
});
|
|
249
|
+
id origin = [self.actionItem objectForKey:FB_ACTION_ITEM_KEY_ORIGIN] ?: FB_ORIGIN_TYPE_VIEWPORT;
|
|
250
|
+
BOOL isOriginAnElement = [origin isKindOfClass:XCUIElement.class] && [(XCUIElement *)origin exists];
|
|
251
|
+
if (!isOriginAnElement && ![supportedOriginTypes containsObject:origin]) {
|
|
252
|
+
NSString *description = [NSString stringWithFormat:@"Unsupported %@ type '%@' is set for '%@' action item. Supported origin types: %@ or an element instance", FB_ACTION_ITEM_KEY_ORIGIN, origin, self.actionItem, supportedOriginTypes];
|
|
253
|
+
if (error) {
|
|
254
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
255
|
+
}
|
|
256
|
+
return nil;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
XCUIElement *element = isOriginAnElement ? (XCUIElement *)origin : nil;
|
|
260
|
+
NSNumber *x = [self.actionItem objectForKey:FB_ACTION_ITEM_KEY_X];
|
|
261
|
+
NSNumber *y = [self.actionItem objectForKey:FB_ACTION_ITEM_KEY_Y];
|
|
262
|
+
if ((nil != x && nil == y) || (nil != y && nil == x) ||
|
|
263
|
+
([origin isKindOfClass:NSString.class] && [origin isEqualToString:FB_ORIGIN_TYPE_VIEWPORT] && (nil == x || nil == y))) {
|
|
264
|
+
NSString *errorDescription = [NSString stringWithFormat:@"Both 'x' and 'y' options should be set for '%@' action item", self.actionItem];
|
|
265
|
+
if (error) {
|
|
266
|
+
*error = [[FBErrorBuilder.builder withDescription:errorDescription] build];
|
|
267
|
+
}
|
|
268
|
+
return nil;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
if (nil != element) {
|
|
272
|
+
if (nil == x && nil == y) {
|
|
273
|
+
return [self hitpointWithElement:element positionOffset:nil error:error];
|
|
274
|
+
}
|
|
275
|
+
return [self hitpointWithElement:element positionOffset:[NSValue valueWithCGPoint:CGPointMake(x.floatValue, y.floatValue)] error:error];
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
if ([origin isKindOfClass:NSString.class] && [origin isEqualToString:FB_ORIGIN_TYPE_VIEWPORT]) {
|
|
279
|
+
return [self hitpointWithElement:nil positionOffset:[NSValue valueWithCGPoint:CGPointMake(x.floatValue, y.floatValue)] error:error];
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// origin == FB_ORIGIN_TYPE_POINTER
|
|
283
|
+
if (nil == self.previousItem) {
|
|
284
|
+
NSString *errorDescription = [NSString stringWithFormat:@"There is no previous item for '%@' action item, however %@ is set to '%@'", self.actionItem, FB_ACTION_ITEM_KEY_ORIGIN, FB_ORIGIN_TYPE_POINTER];
|
|
285
|
+
if (error) {
|
|
286
|
+
*error = [[FBErrorBuilder.builder withDescription:errorDescription] build];
|
|
287
|
+
}
|
|
288
|
+
return nil;
|
|
289
|
+
}
|
|
290
|
+
XCUICoordinate *recentPosition = self.previousItem.atPosition;
|
|
291
|
+
CGVector offsetRelativeToRecentPosition = (nil == x && nil == y) ? CGVectorMake(0, 0) : CGVectorMake(x.floatValue, y.floatValue);
|
|
292
|
+
return [recentPosition coordinateWithOffset:offsetRelativeToRecentPosition];
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
+ (NSString *)actionName
|
|
296
|
+
{
|
|
297
|
+
return FB_ACTION_ITEM_TYPE_POINTER_MOVE;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
- (NSArray<XCPointerEventPath *> *)addToEventPath:(XCPointerEventPath *)eventPath
|
|
301
|
+
allItems:(NSArray *)allItems
|
|
302
|
+
currentItemIndex:(NSUInteger)currentItemIndex
|
|
303
|
+
error:(NSError **)error
|
|
304
|
+
{
|
|
305
|
+
if (nil == eventPath) {
|
|
306
|
+
return @[[[XCPointerEventPath alloc] initForTouchAtPoint:self.atPosition.screenPoint
|
|
307
|
+
offset:FBMillisToSeconds(self.offset + self.duration)]];
|
|
308
|
+
}
|
|
309
|
+
[eventPath moveToPoint:self.atPosition.screenPoint
|
|
310
|
+
atOffset:FBMillisToSeconds(self.offset + self.duration)];
|
|
311
|
+
return @[];
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
@end
|
|
315
|
+
|
|
316
|
+
@implementation FBPointerPauseItem
|
|
317
|
+
|
|
318
|
+
+ (NSString *)actionName
|
|
319
|
+
{
|
|
320
|
+
return FB_ACTION_ITEM_TYPE_PAUSE;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
- (NSArray<XCPointerEventPath *> *)addToEventPath:(XCPointerEventPath *)eventPath
|
|
324
|
+
allItems:(NSArray *)allItems
|
|
325
|
+
currentItemIndex:(NSUInteger)currentItemIndex
|
|
326
|
+
error:(NSError **)error
|
|
327
|
+
{
|
|
328
|
+
return @[];
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
@end
|
|
332
|
+
|
|
333
|
+
@implementation FBPointerUpItem
|
|
334
|
+
|
|
335
|
+
+ (NSString *)actionName
|
|
336
|
+
{
|
|
337
|
+
return FB_ACTION_ITEM_TYPE_POINTER_UP;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
- (NSArray<XCPointerEventPath *> *)addToEventPath:(XCPointerEventPath *)eventPath
|
|
341
|
+
allItems:(NSArray *)allItems
|
|
342
|
+
currentItemIndex:(NSUInteger)currentItemIndex
|
|
343
|
+
error:(NSError **)error
|
|
344
|
+
{
|
|
345
|
+
if (nil == eventPath) {
|
|
346
|
+
NSString *description = [NSString stringWithFormat:@"Pointer Up must not be the first action in '%@'", self.actionItem];
|
|
347
|
+
if (error) {
|
|
348
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
349
|
+
}
|
|
350
|
+
return nil;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
[eventPath liftUpAtOffset:FBMillisToSeconds(self.offset)];
|
|
354
|
+
return @[];
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
@end
|
|
358
|
+
|
|
359
|
+
@implementation FBW3CKeyItem
|
|
360
|
+
|
|
361
|
+
- (nullable instancetype)initWithActionItem:(NSDictionary<NSString *, id> *)actionItem
|
|
362
|
+
application:(XCUIApplication *)application
|
|
363
|
+
previousItem:(nullable FBW3CKeyItem *)previousItem
|
|
364
|
+
offset:(double)offset
|
|
365
|
+
error:(NSError **)error
|
|
366
|
+
{
|
|
367
|
+
self = [super init];
|
|
368
|
+
if (self) {
|
|
369
|
+
self.actionItem = actionItem;
|
|
370
|
+
self.application = application;
|
|
371
|
+
self.offset = offset;
|
|
372
|
+
_previousItem = previousItem;
|
|
373
|
+
}
|
|
374
|
+
return self;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
@end
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
@implementation FBKeyUpItem : FBW3CKeyItem
|
|
381
|
+
|
|
382
|
+
- (nullable instancetype)initWithActionItem:(NSDictionary<NSString *, id> *)actionItem
|
|
383
|
+
application:(XCUIApplication *)application
|
|
384
|
+
previousItem:(nullable FBW3CKeyItem *)previousItem
|
|
385
|
+
offset:(double)offset
|
|
386
|
+
error:(NSError **)error
|
|
387
|
+
{
|
|
388
|
+
self = [super initWithActionItem:actionItem
|
|
389
|
+
application:application
|
|
390
|
+
previousItem:previousItem
|
|
391
|
+
offset:offset
|
|
392
|
+
error:error];
|
|
393
|
+
if (self) {
|
|
394
|
+
NSString *value = FBRequireValue(actionItem, error);
|
|
395
|
+
if (nil == value) {
|
|
396
|
+
return nil;
|
|
397
|
+
}
|
|
398
|
+
_value = value;
|
|
399
|
+
}
|
|
400
|
+
return self;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
+ (NSString *)actionName
|
|
404
|
+
{
|
|
405
|
+
return FB_ACTION_ITEM_TYPE_KEY_UP;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
- (BOOL)hasDownPairInItems:(NSArray *)allItems
|
|
409
|
+
currentItemIndex:(NSUInteger)currentItemIndex
|
|
410
|
+
{
|
|
411
|
+
NSInteger balance = 1;
|
|
412
|
+
for (NSInteger index = currentItemIndex - 1; index >= 0; index--) {
|
|
413
|
+
FBW3CKeyItem *item = [allItems objectAtIndex:index];
|
|
414
|
+
BOOL isKeyDown = [item isKindOfClass:FBKeyDownItem.class];
|
|
415
|
+
BOOL isKeyUp = !isKeyDown && [item isKindOfClass:FBKeyUpItem.class];
|
|
416
|
+
if (!isKeyUp && !isKeyDown) {
|
|
417
|
+
break;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
NSString *value = [item performSelector:@selector(value)];
|
|
421
|
+
if (isKeyDown && [value isEqualToString:self.value]) {
|
|
422
|
+
balance--;
|
|
423
|
+
}
|
|
424
|
+
if (isKeyUp && [value isEqualToString:self.value]) {
|
|
425
|
+
balance++;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
return 0 == balance;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
- (NSString *)collectTextWithItems:(NSArray *)allItems
|
|
432
|
+
currentItemIndex:(NSUInteger)currentItemIndex
|
|
433
|
+
{
|
|
434
|
+
NSMutableArray *result = [NSMutableArray array];
|
|
435
|
+
for (NSInteger index = currentItemIndex; index >= 0; index--) {
|
|
436
|
+
FBW3CKeyItem *item = [allItems objectAtIndex:index];
|
|
437
|
+
BOOL isKeyDown = [item isKindOfClass:FBKeyDownItem.class];
|
|
438
|
+
BOOL isKeyUp = !isKeyDown && [item isKindOfClass:FBKeyUpItem.class];
|
|
439
|
+
if (!isKeyUp && !isKeyDown) {
|
|
440
|
+
break;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
NSString *value = [item performSelector:@selector(value)];
|
|
444
|
+
if (isKeyUp) {
|
|
445
|
+
[result addObject:FBMapIfSpecialCharacter(value)];
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
return [result.reverseObjectEnumerator.allObjects componentsJoinedByString:@""];
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
- (NSArray<XCPointerEventPath *> *)addToEventPath:(XCPointerEventPath *)eventPath
|
|
452
|
+
allItems:(NSArray *)allItems
|
|
453
|
+
currentItemIndex:(NSUInteger)currentItemIndex
|
|
454
|
+
error:(NSError **)error
|
|
455
|
+
{
|
|
456
|
+
if (![self hasDownPairInItems:allItems currentItemIndex:currentItemIndex]) {
|
|
457
|
+
NSString *description = [NSString stringWithFormat:@"Key Up action '%@' is not balanced with a preceding Key Down one in '%@'", self.value, self.actionItem];
|
|
458
|
+
if (error) {
|
|
459
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
460
|
+
}
|
|
461
|
+
return nil;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
BOOL isLastKeyUpInGroup = currentItemIndex == allItems.count - 1
|
|
465
|
+
|| [[allItems objectAtIndex:currentItemIndex + 1] isKindOfClass:FBKeyPauseItem.class];
|
|
466
|
+
if (!isLastKeyUpInGroup) {
|
|
467
|
+
return @[];
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
NSString *text = [self collectTextWithItems:allItems currentItemIndex:currentItemIndex];
|
|
471
|
+
NSTimeInterval offset = FBMillisToSeconds(self.offset);
|
|
472
|
+
XCPointerEventPath *resultPath = [[XCPointerEventPath alloc] initForTextInput];
|
|
473
|
+
[resultPath typeText:text
|
|
474
|
+
atOffset:offset
|
|
475
|
+
typingSpeed:FBConfiguration.maxTypingFrequency
|
|
476
|
+
shouldRedact:YES];
|
|
477
|
+
return @[resultPath];
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
@end
|
|
481
|
+
|
|
482
|
+
@implementation FBKeyDownItem : FBW3CKeyItem
|
|
483
|
+
|
|
484
|
+
- (nullable instancetype)initWithActionItem:(NSDictionary<NSString *, id> *)actionItem
|
|
485
|
+
application:(XCUIApplication *)application
|
|
486
|
+
previousItem:(nullable FBW3CKeyItem *)previousItem
|
|
487
|
+
offset:(double)offset
|
|
488
|
+
error:(NSError **)error
|
|
489
|
+
{
|
|
490
|
+
self = [super initWithActionItem:actionItem
|
|
491
|
+
application:application
|
|
492
|
+
previousItem:previousItem
|
|
493
|
+
offset:offset
|
|
494
|
+
error:error];
|
|
495
|
+
if (self) {
|
|
496
|
+
NSString *value = FBRequireValue(actionItem, error);
|
|
497
|
+
if (nil == value) {
|
|
498
|
+
return nil;
|
|
499
|
+
}
|
|
500
|
+
_value = value;
|
|
501
|
+
}
|
|
502
|
+
return self;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
+ (NSString *)actionName
|
|
506
|
+
{
|
|
507
|
+
return FB_ACTION_ITEM_TYPE_KEY_DOWN;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
- (BOOL)hasUpPairInItems:(NSArray *)allItems
|
|
511
|
+
currentItemIndex:(NSUInteger)currentItemIndex
|
|
512
|
+
{
|
|
513
|
+
NSInteger balance = 1;
|
|
514
|
+
for (NSUInteger index = currentItemIndex + 1; index < allItems.count; index++) {
|
|
515
|
+
FBW3CKeyItem *item = [allItems objectAtIndex:index];
|
|
516
|
+
BOOL isKeyDown = [item isKindOfClass:FBKeyDownItem.class];
|
|
517
|
+
BOOL isKeyUp = !isKeyDown && [item isKindOfClass:FBKeyUpItem.class];
|
|
518
|
+
if (!isKeyUp && !isKeyDown) {
|
|
519
|
+
break;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
NSString *value = [item performSelector:@selector(value)];
|
|
523
|
+
if (isKeyUp && [value isEqualToString:self.value]) {
|
|
524
|
+
balance--;
|
|
525
|
+
}
|
|
526
|
+
if (isKeyDown && [value isEqualToString:self.value]) {
|
|
527
|
+
balance++;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
return 0 == balance;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
- (NSArray<XCPointerEventPath *> *)addToEventPath:(XCPointerEventPath *)eventPath
|
|
534
|
+
allItems:(NSArray *)allItems
|
|
535
|
+
currentItemIndex:(NSUInteger)currentItemIndex
|
|
536
|
+
error:(NSError **)error
|
|
537
|
+
{
|
|
538
|
+
if (![self hasUpPairInItems:allItems currentItemIndex:currentItemIndex]) {
|
|
539
|
+
NSString *description = [NSString stringWithFormat:@"Key Down action '%@' must have a closing Key Up successor in '%@'", self.value, self.actionItem];
|
|
540
|
+
if (error) {
|
|
541
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
542
|
+
}
|
|
543
|
+
return nil;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
return @[];
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
@end
|
|
550
|
+
|
|
551
|
+
@implementation FBKeyPauseItem
|
|
552
|
+
|
|
553
|
+
- (nullable instancetype)initWithActionItem:(NSDictionary<NSString *, id> *)actionItem
|
|
554
|
+
application:(XCUIApplication *)application
|
|
555
|
+
previousItem:(nullable FBW3CKeyItem *)previousItem
|
|
556
|
+
offset:(double)offset
|
|
557
|
+
error:(NSError **)error
|
|
558
|
+
{
|
|
559
|
+
self = [super initWithActionItem:actionItem
|
|
560
|
+
application:application
|
|
561
|
+
previousItem:previousItem
|
|
562
|
+
offset:offset
|
|
563
|
+
error:error];
|
|
564
|
+
if (self) {
|
|
565
|
+
NSNumber *duration = FBOptDuration(actionItem, nil, error);
|
|
566
|
+
if (nil == duration) {
|
|
567
|
+
return nil;
|
|
568
|
+
}
|
|
569
|
+
_duration = [duration doubleValue];
|
|
570
|
+
}
|
|
571
|
+
return self;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
+ (NSString *)actionName
|
|
575
|
+
{
|
|
576
|
+
return FB_ACTION_ITEM_TYPE_PAUSE;
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
- (NSArray<XCPointerEventPath *> *)addToEventPath:(XCPointerEventPath *)eventPath
|
|
580
|
+
allItems:(NSArray *)allItems
|
|
581
|
+
currentItemIndex:(NSUInteger)currentItemIndex
|
|
582
|
+
error:(NSError **)error
|
|
583
|
+
{
|
|
584
|
+
return @[];
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
@end
|
|
588
|
+
|
|
589
|
+
|
|
590
|
+
@interface FBW3CGestureItemsChain : FBBaseActionItemsChain
|
|
591
|
+
|
|
592
|
+
@end
|
|
593
|
+
|
|
594
|
+
@implementation FBW3CGestureItemsChain
|
|
595
|
+
|
|
596
|
+
- (void)addItem:(FBBaseActionItem *)item
|
|
597
|
+
{
|
|
598
|
+
self.durationOffset += ((FBBaseGestureItem *)item).duration;
|
|
599
|
+
[self.items addObject:item];
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
@end
|
|
603
|
+
|
|
604
|
+
|
|
605
|
+
@interface FBW3CKeyItemsChain : FBBaseActionItemsChain
|
|
606
|
+
|
|
607
|
+
@end
|
|
608
|
+
|
|
609
|
+
@implementation FBW3CKeyItemsChain
|
|
610
|
+
|
|
611
|
+
- (void)addItem:(FBBaseActionItem *)item
|
|
612
|
+
{
|
|
613
|
+
if ([item isKindOfClass:FBKeyPauseItem.class]) {
|
|
614
|
+
self.durationOffset += ((FBKeyPauseItem *)item).duration;
|
|
615
|
+
}
|
|
616
|
+
[self.items addObject:item];
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
@end
|
|
620
|
+
|
|
621
|
+
|
|
622
|
+
@implementation FBW3CActionsSynthesizer
|
|
623
|
+
|
|
624
|
+
- (NSArray<NSDictionary<NSString *, id> *> *)preprocessedActionItemsWith:(NSArray<NSDictionary<NSString *, id> *> *)actionItems
|
|
625
|
+
{
|
|
626
|
+
NSMutableArray<NSDictionary<NSString *, id> *> *result = [NSMutableArray array];
|
|
627
|
+
BOOL shouldCancelNextItem = NO;
|
|
628
|
+
for (NSDictionary<NSString *, id> *actionItem in [actionItems reverseObjectEnumerator]) {
|
|
629
|
+
if (shouldCancelNextItem) {
|
|
630
|
+
shouldCancelNextItem = NO;
|
|
631
|
+
continue;
|
|
632
|
+
}
|
|
633
|
+
NSString *actionItemType = [actionItem objectForKey:FB_ACTION_ITEM_KEY_TYPE];
|
|
634
|
+
if (actionItemType != nil && [actionItemType isEqualToString:FB_ACTION_ITEM_TYPE_POINTER_CANCEL]) {
|
|
635
|
+
shouldCancelNextItem = YES;
|
|
636
|
+
continue;
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
if (nil == self.elementCache) {
|
|
640
|
+
[result addObject:actionItem];
|
|
641
|
+
continue;
|
|
642
|
+
}
|
|
643
|
+
id origin = [actionItem objectForKey:FB_ACTION_ITEM_KEY_ORIGIN];
|
|
644
|
+
if (nil == origin || [@[FB_ORIGIN_TYPE_POINTER, FB_ORIGIN_TYPE_VIEWPORT] containsObject:origin]) {
|
|
645
|
+
[result addObject:actionItem];
|
|
646
|
+
continue;
|
|
647
|
+
}
|
|
648
|
+
// Selenium Python client passes 'origin' element in the following format:
|
|
649
|
+
//
|
|
650
|
+
// if isinstance(origin, WebElement):
|
|
651
|
+
// action["origin"] = {"element-6066-11e4-a52e-4f735466cecf": origin.id}
|
|
652
|
+
if ([origin isKindOfClass:NSDictionary.class]) {
|
|
653
|
+
id element = FBExtractElement(origin);
|
|
654
|
+
if (nil != element) {
|
|
655
|
+
origin = element;
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
XCUIElement *instance;
|
|
660
|
+
if ([origin isKindOfClass:XCUIElement.class]) {
|
|
661
|
+
instance = origin;
|
|
662
|
+
} else if ([origin isKindOfClass:NSString.class]) {
|
|
663
|
+
instance = [self.elementCache elementForUUID:(NSString *)origin checkStaleness:YES];
|
|
664
|
+
} else {
|
|
665
|
+
[result addObject:actionItem];
|
|
666
|
+
continue;
|
|
667
|
+
}
|
|
668
|
+
NSMutableDictionary<NSString *, id> *processedItem = actionItem.mutableCopy;
|
|
669
|
+
[processedItem setObject:instance forKey:FB_ACTION_ITEM_KEY_ORIGIN];
|
|
670
|
+
[result addObject:processedItem.copy];
|
|
671
|
+
}
|
|
672
|
+
return [[result reverseObjectEnumerator] allObjects];
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
- (nullable NSArray<XCPointerEventPath *> *)eventPathsWithKeyAction:(NSDictionary<NSString *, id> *)actionDescription forActionId:(NSString *)actionId error:(NSError **)error
|
|
676
|
+
{
|
|
677
|
+
static NSDictionary<NSString *, Class> *keyItemsMapping;
|
|
678
|
+
static NSArray<NSString *> *supportedActionItemTypes;
|
|
679
|
+
static dispatch_once_t onceToken;
|
|
680
|
+
dispatch_once(&onceToken, ^{
|
|
681
|
+
NSMutableDictionary<NSString *, Class> *itemsMapping = [NSMutableDictionary dictionary];
|
|
682
|
+
for (Class cls in @[FBKeyDownItem.class,
|
|
683
|
+
FBKeyPauseItem.class,
|
|
684
|
+
FBKeyUpItem.class]) {
|
|
685
|
+
[itemsMapping setObject:cls forKey:[cls actionName]];
|
|
686
|
+
}
|
|
687
|
+
keyItemsMapping = itemsMapping.copy;
|
|
688
|
+
supportedActionItemTypes = @[FB_ACTION_ITEM_TYPE_PAUSE,
|
|
689
|
+
FB_ACTION_ITEM_TYPE_KEY_UP,
|
|
690
|
+
FB_ACTION_ITEM_TYPE_KEY_DOWN];
|
|
691
|
+
});
|
|
692
|
+
|
|
693
|
+
NSArray<NSDictionary<NSString *, id> *> *actionItems = [actionDescription objectForKey:FB_KEY_ACTIONS];
|
|
694
|
+
if (nil == actionItems || 0 == actionItems.count) {
|
|
695
|
+
NSString *description = [NSString stringWithFormat:@"It is mandatory to have at least one item defined for each action. Action with id '%@' contains none", actionId];
|
|
696
|
+
if (error) {
|
|
697
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
698
|
+
}
|
|
699
|
+
return nil;
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
FBW3CKeyItemsChain *chain = [[FBW3CKeyItemsChain alloc] init];
|
|
703
|
+
NSArray<NSDictionary<NSString *, id> *> *processedItems = [self preprocessedActionItemsWith:actionItems];
|
|
704
|
+
for (NSDictionary<NSString *, id> *actionItem in processedItems) {
|
|
705
|
+
id actionItemType = [actionItem objectForKey:FB_ACTION_ITEM_KEY_TYPE];
|
|
706
|
+
if (![actionItemType isKindOfClass:NSString.class]) {
|
|
707
|
+
NSString *description = [NSString stringWithFormat:@"The %@ property is mandatory to set for '%@' action item", FB_ACTION_ITEM_KEY_TYPE, actionItem];
|
|
708
|
+
if (error) {
|
|
709
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
710
|
+
}
|
|
711
|
+
return nil;
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
Class keyItemClass = [keyItemsMapping objectForKey:actionItemType];
|
|
715
|
+
if (nil == keyItemClass) {
|
|
716
|
+
NSString *description = [NSString stringWithFormat:@"'%@' action item type '%@' is not supported. Only the following action item types are supported: %@", actionId, actionItemType, supportedActionItemTypes];
|
|
717
|
+
if (error) {
|
|
718
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
719
|
+
}
|
|
720
|
+
return nil;
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
FBW3CKeyItem *keyItem = [[keyItemClass alloc] initWithActionItem:actionItem
|
|
724
|
+
application:self.application
|
|
725
|
+
previousItem:[chain.items lastObject]
|
|
726
|
+
offset:chain.durationOffset
|
|
727
|
+
error:error];
|
|
728
|
+
if (nil == keyItem) {
|
|
729
|
+
return nil;
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
[chain addItem:keyItem];
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
return [chain asEventPathsWithError:error];
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
- (nullable NSArray<XCPointerEventPath *> *)eventPathsWithGestureAction:(NSDictionary<NSString *, id> *)actionDescription forActionId:(NSString *)actionId error:(NSError **)error
|
|
739
|
+
{
|
|
740
|
+
static NSDictionary<NSString *, Class> *gestureItemsMapping;
|
|
741
|
+
static NSArray<NSString *> *supportedActionItemTypes;
|
|
742
|
+
static dispatch_once_t onceToken;
|
|
743
|
+
dispatch_once(&onceToken, ^{
|
|
744
|
+
NSMutableDictionary<NSString *, Class> *itemsMapping = [NSMutableDictionary dictionary];
|
|
745
|
+
for (Class cls in @[FBPointerDownItem.class,
|
|
746
|
+
FBPointerMoveItem.class,
|
|
747
|
+
FBPointerPauseItem.class,
|
|
748
|
+
FBPointerUpItem.class]) {
|
|
749
|
+
[itemsMapping setObject:cls forKey:[cls actionName]];
|
|
750
|
+
}
|
|
751
|
+
gestureItemsMapping = itemsMapping.copy;
|
|
752
|
+
supportedActionItemTypes = @[FB_ACTION_ITEM_TYPE_PAUSE,
|
|
753
|
+
FB_ACTION_ITEM_TYPE_POINTER_UP,
|
|
754
|
+
FB_ACTION_ITEM_TYPE_POINTER_DOWN,
|
|
755
|
+
FB_ACTION_ITEM_TYPE_POINTER_MOVE];
|
|
756
|
+
});
|
|
757
|
+
|
|
758
|
+
id parameters = [actionDescription objectForKey:FB_KEY_PARAMETERS];
|
|
759
|
+
id pointerType = FB_POINTER_TYPE_MOUSE;
|
|
760
|
+
if ([parameters isKindOfClass:NSDictionary.class]) {
|
|
761
|
+
pointerType = [parameters objectForKey:FB_PARAMETERS_KEY_POINTER_TYPE] ?: FB_POINTER_TYPE_MOUSE;
|
|
762
|
+
}
|
|
763
|
+
if (![pointerType isKindOfClass:NSString.class] || ![pointerType isEqualToString:FB_POINTER_TYPE_TOUCH]) {
|
|
764
|
+
NSString *description = [NSString stringWithFormat:@"Only pointer type '%@' is supported. '%@' is given instead for action with id '%@'", FB_POINTER_TYPE_TOUCH, pointerType, actionId];
|
|
765
|
+
if (error) {
|
|
766
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
767
|
+
}
|
|
768
|
+
return nil;
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
NSArray<NSDictionary<NSString *, id> *> *actionItems = [actionDescription objectForKey:FB_KEY_ACTIONS];
|
|
772
|
+
if (nil == actionItems || 0 == actionItems.count) {
|
|
773
|
+
NSString *description = [NSString stringWithFormat:@"It is mandatory to have at least one gesture item defined for each action. Action with id '%@' contains none", actionId];
|
|
774
|
+
if (error) {
|
|
775
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
776
|
+
}
|
|
777
|
+
return nil;
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
FBW3CGestureItemsChain *chain = [[FBW3CGestureItemsChain alloc] init];
|
|
781
|
+
NSArray<NSDictionary<NSString *, id> *> *processedItems = [self preprocessedActionItemsWith:actionItems];
|
|
782
|
+
for (NSDictionary<NSString *, id> *actionItem in processedItems) {
|
|
783
|
+
id actionItemType = [actionItem objectForKey:FB_ACTION_ITEM_KEY_TYPE];
|
|
784
|
+
if (![actionItemType isKindOfClass:NSString.class]) {
|
|
785
|
+
NSString *description = [NSString stringWithFormat:@"The %@ property is mandatory to set for '%@' action item", FB_ACTION_ITEM_KEY_TYPE, actionItem];
|
|
786
|
+
if (error) {
|
|
787
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
788
|
+
}
|
|
789
|
+
return nil;
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
Class gestureItemClass = [gestureItemsMapping objectForKey:actionItemType];
|
|
793
|
+
if (nil == gestureItemClass) {
|
|
794
|
+
NSString *description = [NSString stringWithFormat:@"'%@' action item type '%@' is not supported. Only the following action item types are supported: %@", actionId, actionItemType, supportedActionItemTypes];
|
|
795
|
+
if (error) {
|
|
796
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
797
|
+
}
|
|
798
|
+
return nil;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
FBW3CGestureItem *gestureItem = [[gestureItemClass alloc] initWithActionItem:actionItem application:self.application previousItem:[chain.items lastObject] offset:chain.durationOffset error:error];
|
|
802
|
+
if (nil == gestureItem) {
|
|
803
|
+
return nil;
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
[chain addItem:gestureItem];
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
return [chain asEventPathsWithError:error];
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
- (nullable NSArray<XCPointerEventPath *> *)eventPathsWithActionDescription:(NSDictionary<NSString *, id> *)actionDescription forActionId:(NSString *)actionId error:(NSError **)error
|
|
813
|
+
{
|
|
814
|
+
id actionType = [actionDescription objectForKey:FB_KEY_TYPE];
|
|
815
|
+
if (![actionType isKindOfClass:NSString.class] ||
|
|
816
|
+
!([actionType isEqualToString:FB_ACTION_TYPE_POINTER]
|
|
817
|
+
|| ([XCPointerEvent.class fb_areKeyEventsSupported] && [actionType isEqualToString:FB_ACTION_TYPE_KEY]))) {
|
|
818
|
+
NSString *description = [NSString stringWithFormat:@"Only actions of '%@' types are supported. '%@' is given instead for action with id '%@'", @[FB_ACTION_TYPE_POINTER, FB_ACTION_TYPE_KEY], actionType, actionId];
|
|
819
|
+
if (error) {
|
|
820
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
821
|
+
}
|
|
822
|
+
return nil;
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
if ([actionType isEqualToString:FB_ACTION_TYPE_POINTER]) {
|
|
826
|
+
return [self eventPathsWithGestureAction:actionDescription forActionId:actionId error:error];
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
return [self eventPathsWithKeyAction:actionDescription forActionId:actionId error:error];
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
- (nullable XCSynthesizedEventRecord *)synthesizeWithError:(NSError **)error
|
|
833
|
+
{
|
|
834
|
+
XCSynthesizedEventRecord *eventRecord = [[XCSynthesizedEventRecord alloc]
|
|
835
|
+
initWithName:@"W3C Touch Action"
|
|
836
|
+
interfaceOrientation:self.application.interfaceOrientation];
|
|
837
|
+
NSMutableDictionary<NSString *, NSDictionary<NSString *, id> *> *actionsMapping = [NSMutableDictionary new];
|
|
838
|
+
NSMutableArray<NSString *> *actionIds = [NSMutableArray new];
|
|
839
|
+
for (NSDictionary<NSString *, id> *action in self.actions) {
|
|
840
|
+
id actionId = [action objectForKey:FB_KEY_ID];
|
|
841
|
+
if (![actionId isKindOfClass:NSString.class] || 0 == [actionId length]) {
|
|
842
|
+
if (error) {
|
|
843
|
+
NSString *description = [NSString stringWithFormat:@"The mandatory action %@ field is missing or empty for '%@'", FB_KEY_ID, action];
|
|
844
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
845
|
+
}
|
|
846
|
+
return nil;
|
|
847
|
+
}
|
|
848
|
+
if (nil != [actionsMapping objectForKey:actionId]) {
|
|
849
|
+
if (error) {
|
|
850
|
+
NSString *description = [NSString stringWithFormat:@"Action %@ '%@' is not unique for '%@'", FB_KEY_ID, actionId, action];
|
|
851
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
852
|
+
}
|
|
853
|
+
return nil;
|
|
854
|
+
}
|
|
855
|
+
NSArray<NSDictionary<NSString *, id> *> *actionItems = [action objectForKey:FB_KEY_ACTIONS];
|
|
856
|
+
if (nil == actionItems) {
|
|
857
|
+
NSString *description = [NSString stringWithFormat:@"It is mandatory to have at least one item defined for each action. Action with id '%@' contains none", actionId];
|
|
858
|
+
if (error) {
|
|
859
|
+
*error = [[FBErrorBuilder.builder withDescription:description] build];
|
|
860
|
+
}
|
|
861
|
+
return nil;
|
|
862
|
+
}
|
|
863
|
+
if (0 == actionItems.count) {
|
|
864
|
+
[FBLogger logFmt:@"Action items in the action id '%@' had an empty array. Skipping the action.", actionId];
|
|
865
|
+
continue;
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
[actionIds addObject:actionId];
|
|
869
|
+
[actionsMapping setObject:action forKey:actionId];
|
|
870
|
+
}
|
|
871
|
+
for (NSString *actionId in actionIds.copy) {
|
|
872
|
+
NSDictionary<NSString *, id> *actionDescription = [actionsMapping objectForKey:actionId];
|
|
873
|
+
NSArray<XCPointerEventPath *> *eventPaths = [self eventPathsWithActionDescription:actionDescription forActionId:actionId error:error];
|
|
874
|
+
if (nil == eventPaths) {
|
|
875
|
+
return nil;
|
|
876
|
+
}
|
|
877
|
+
for (XCPointerEventPath *eventPath in eventPaths) {
|
|
878
|
+
[eventRecord addPointerEventPath:eventPath];
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
return eventRecord;
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
@end
|
|
885
|
+
#endif
|