├── .gitignore ├── .swiftlint.yml ├── .travis.yml ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Demos ├── OsxIpcDemo │ ├── IpcDemo.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ ├── IpcDemo.xcworkspace │ │ └── contents.xcworkspacedata │ ├── IpcDemo │ │ ├── HelloIpcMethod.swift │ │ ├── HelloIpcMethodHandler.swift │ │ ├── Master.swift │ │ ├── Slave.swift │ │ ├── Support │ │ │ ├── PollingSynchronousIpcClient.swift │ │ │ └── PollingSynchronousIpcClientFactory.swift │ │ └── main.swift │ ├── Podfile │ └── Podfile.lock └── UiTestsDemo │ ├── App │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ └── ViewController.swift │ ├── BlackBoxTests │ ├── BlackBoxTests.swift │ ├── DI │ │ └── BlackBoxTestCaseDependencies.swift │ ├── Info.plist │ └── TestCase │ │ ├── LaunchableApplicationProvider.swift │ │ └── TestCase.swift │ ├── Frameworks │ └── UiTestsSharedCode │ │ ├── Sources │ │ ├── DI │ │ │ └── UiTestCaseDependencies.swift │ │ ├── PageObjects │ │ │ ├── PageObjects.swift │ │ │ └── PageObjects │ │ │ │ ├── FirstScreen.swift │ │ │ │ └── SecondScreen.swift │ │ └── TestCase │ │ │ └── BaseTestCase.swift │ │ └── UiTestsSharedCode.podspec │ ├── GrayBoxTests │ ├── DI │ │ └── GrayBoxTestCaseDependencies.swift │ ├── GrayBoxTests.swift │ ├── Info.plist │ └── TestCase │ │ └── TestCase.swift │ ├── Podfile │ ├── Podfile.lock │ ├── README.md │ ├── UiTestsDemo.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ ├── BlackBoxTests.xcscheme │ │ ├── Demo.xcscheme │ │ └── GrayBoxTests.xcscheme │ ├── UiTestsDemo.xcworkspace │ └── xcshareddata │ │ └── WorkspaceSettings.xcsettings │ └── cocoapods ├── Docs ├── EarlGreyLicense │ └── LICENSE ├── Frameworks.md ├── Ideas.md ├── Images │ └── Dependencies.png ├── PrivateApi.md ├── PrivateApi │ ├── ClassDump.md │ ├── Disassembling.md │ ├── DumpPy.md │ ├── Examples.md │ ├── ExploringSimulator.md │ ├── FixingInjectionOfEventsExample.md │ └── Runtime.md ├── SettingThingsUp.md └── TestingPyramid.md ├── Frameworks ├── AnyCodable │ ├── README.md │ └── Sources │ │ └── FlightSchoolAnyCodable │ │ ├── AnyCodable.swift │ │ ├── AnyDecodable.swift │ │ ├── AnyEncodable.swift │ │ └── LICENSE.md ├── Black │ └── Sources │ │ ├── Application │ │ └── Launching │ │ │ ├── FastLaunching │ │ │ ├── ApplicationInstallationVersionChecker.swift │ │ │ └── ApplicationInstallationVersionCheckerImpl.swift │ │ │ ├── LaunchableApplication │ │ │ ├── LaunchableApplication.swift │ │ │ └── Sbtui │ │ │ │ ├── Mocking │ │ │ │ ├── Recording │ │ │ │ │ └── SbtuiNetworkRecordsProvider.swift │ │ │ │ └── Stubbing │ │ │ │ │ ├── Builder │ │ │ │ │ ├── SbtuiStubRequestBuilder.swift │ │ │ │ │ └── SbtuiStubResponseBuilder.swift │ │ │ │ │ ├── Model │ │ │ │ │ ├── SbtuiStub.swift │ │ │ │ │ ├── SbtuiStubRequest.swift │ │ │ │ │ └── SbtuiStubResponse.swift │ │ │ │ │ └── SbtuiStubApplier │ │ │ │ │ ├── SbtuiStubApplier.swift │ │ │ │ │ └── SbtuiStubApplierImpl.swift │ │ │ │ └── SbtuiLaunchableApplication.swift │ │ │ └── LaunchedApplication │ │ │ ├── LaunchedApplication.swift │ │ │ └── LaunchedApplicationImpl.swift │ │ ├── Di │ │ ├── Parts │ │ │ ├── BaseBlackBoxDependencyCollectionRegisterer.swift │ │ │ ├── BlackBoxApplicationDependentDependencyCollectionRegisterer.swift │ │ │ └── BlackBoxApplicationIndependentDependencyCollectionRegisterer.swift │ │ └── TopLevel │ │ │ ├── MultipleMainAppsBlackBoxDependencies.swift │ │ │ ├── SingleAppBlackBoxDependencies.swift │ │ │ └── SingleMainAppBlackBoxDependencies.swift │ │ ├── Extensions │ │ ├── CGRect+Hashable.swift │ │ ├── ObjcVisibilityWorkaround.h │ │ └── XCUIElement+EnhancedValue.swift │ │ ├── Locator │ │ └── ElementFinder │ │ │ └── Impls │ │ │ ├── Failing │ │ │ ├── FailingElementFinder.swift │ │ │ └── FailingElementQuery.swift │ │ │ └── Xcui │ │ │ ├── XcuiElementFinder.swift │ │ │ └── XcuiElementQuery.swift │ │ ├── PrivateHeaders │ │ ├── PrivateHeaders.md │ │ └── SwiftWrapper │ │ │ └── XcuiElementSnapshot.swift │ │ ├── Utils │ │ ├── ActionDependencies │ │ │ ├── EventGenerator │ │ │ │ ├── XcuiEventGenerator.swift │ │ │ │ └── XcuiEventGeneratorObjC │ │ │ │ │ ├── EventGeneratorObjC.h │ │ │ │ │ ├── EventGeneratorObjCProvider.h │ │ │ │ │ ├── EventGeneratorObjCProvider.m │ │ │ │ │ ├── Xcode_10_1_Xcode_10_0_EventGeneratorObjC.h │ │ │ │ │ ├── Xcode_10_1_Xcode_10_0_EventGeneratorObjC.m │ │ │ │ │ ├── Xcode_10_2_Xcode_11_0EventGeneratorObjC.m │ │ │ │ │ └── Xcode_10_2_Xcode_11_0_EventGeneratorObjC.h │ │ │ ├── SimpleGestures │ │ │ │ ├── XcuiCoordinateElementSimpleGestures.swift │ │ │ │ ├── XcuiElementElementSimpleGestures.swift │ │ │ │ └── XcuiElementSimpleGesturesProvider.swift │ │ │ ├── TextTyper │ │ │ │ └── XcuiTextTyper.swift │ │ │ ├── XcuiApplicationStateProvider.swift │ │ │ ├── XcuiElementHierarchyDescriptionProvider.swift │ │ │ ├── XcuiElementInteractionDependenciesFactory.swift │ │ │ └── XcuiMenuItemProvider │ │ │ │ ├── XcuiElementMenuItem.swift │ │ │ │ └── XcuiMenuItemProvider.swift │ │ ├── AlwaysFailingIpcClient.swift │ │ ├── ApplicationCoordinatesProvider │ │ │ ├── ApplicationCoordinatesProvider.swift │ │ │ └── ApplicationCoordinatesProviderImpl.swift │ │ ├── ApplicationFrameProvider │ │ │ └── XcuiApplicationFrameProvider.swift │ │ ├── ApplicationLifecycleObservable │ │ │ ├── ApplicationLifecycleObservable.swift │ │ │ ├── ApplicationLifecycleObservableImpl.swift │ │ │ └── ApplicationLifecycleObserver.swift │ │ ├── ApplicationProvider │ │ │ ├── ApplicationProvider.swift │ │ │ └── ApplicationProviderImpl.swift │ │ ├── Permissions │ │ │ ├── FbxctestFriendlyTcc │ │ │ │ └── Fbxctest │ │ │ │ │ ├── AtApplicationLaunchTccDbApplicationPermissionSetter.swift │ │ │ │ │ └── AtApplicationLaunchTccDbApplicationPermissionSetterFactory.swift │ │ │ └── Notifications │ │ │ │ └── FakeSettingsApp │ │ │ │ ├── FakeSettingsAppNotificationsApplicationPermissionSetter.swift │ │ │ │ └── FakeSettingsAppNotificationsApplicationPermissionSetterFactory.swift │ │ ├── Screenshots │ │ │ ├── XcuiApplicationScreenshotTaker.swift │ │ │ └── XcuiDeviceScreenshotTaker.swift │ │ └── WaitingForQuescence │ │ │ └── XcuiApplicationQuiescenceWaiter.swift │ │ └── XcuiPageObjectDependenciesFactory.swift ├── BuiltinDi │ └── Sources │ │ ├── DependencyInjection │ │ ├── BuiltinDependencyInjection.swift │ │ ├── BuiltinDependencyInjectionFactory.swift │ │ └── RegisteredDependency.swift │ │ └── Support │ │ └── HashableType.swift ├── BuiltinIpc │ ├── README.md │ └── Sources │ │ ├── Client │ │ └── IpcClientImpl.swift │ │ ├── Common │ │ ├── BonjourServiceSettings.swift │ │ ├── Callback │ │ │ ├── Callbacks.md │ │ │ ├── Client │ │ │ │ └── IpcClientHolder.swift │ │ │ ├── IpcCallback.swift │ │ │ ├── Methods │ │ │ │ ├── CallIpcCallbackIpcMethod.swift │ │ │ │ └── CallIpcCallbackIpcMethodHandler.swift │ │ │ └── Storage │ │ │ │ ├── IpcCallbackStorage.swift │ │ │ │ ├── IpcCallbackStorageHolder.swift │ │ │ │ └── IpcCallbackStorageImpl.swift │ │ ├── Coding │ │ │ ├── DecoderFactory.swift │ │ │ ├── DecoderFactoryImpl.swift │ │ │ ├── EncoderFactory.swift │ │ │ └── EncoderFactoryImpl.swift │ │ ├── Constants.swift │ │ ├── Handshaking │ │ │ ├── Bonjour │ │ │ │ ├── BonjourHandshake.md │ │ │ │ ├── BonjourHandshakeSender.swift │ │ │ │ ├── BonjourHandshakeWaiter.swift │ │ │ │ ├── BonjourIpcService.swift │ │ │ │ ├── BonjourIpcServiceDiscoverer.swift │ │ │ │ └── Discovery │ │ │ │ │ └── LowLevel │ │ │ │ │ ├── BonjourBrowser.swift │ │ │ │ │ └── NetServiceAddressResolver.swift │ │ │ ├── Common │ │ │ │ ├── HandshakeIpcMethod.swift │ │ │ │ ├── HandshakeIpcMethodHandler.swift │ │ │ │ └── HandshakeTools.swift │ │ │ ├── Handshaking.md │ │ │ └── KnownPort │ │ │ │ ├── KnownPortHandshake.md │ │ │ │ ├── KnownPortHandshakeSender.swift │ │ │ │ └── KnownPortHandshakeWaiter.swift │ │ ├── MethodNameContainer.swift │ │ ├── RequestContainer.swift │ │ ├── ResponseContainer.swift │ │ └── Routes.swift │ │ └── Server │ │ ├── GCDWebServerErrorResponse+Swift.h │ │ ├── GCDWebServerErrorResponse+Swift.m │ │ └── IpcRouterImpl.swift ├── CocoaImageHashing │ ├── README.md │ └── Sources │ │ ├── CocoaImageHashing.h │ │ ├── OSAHash.h │ │ ├── OSAHash.m │ │ ├── OSAbstractHash.h │ │ ├── OSAbstractHash.m │ │ ├── OSCategories.h │ │ ├── OSCategories.m │ │ ├── OSDHash.h │ │ ├── OSDHash.m │ │ ├── OSFastGraphics.h │ │ ├── OSFastGraphics.m │ │ ├── OSImageHashing.h │ │ ├── OSImageHashing.m │ │ ├── OSPHash.h │ │ ├── OSPHash.m │ │ ├── OSSimilaritySearch.h │ │ ├── OSSimilaritySearch.m │ │ ├── OSTypes+Internal.h │ │ ├── OSTypes.h │ │ ├── OSTypes.m │ │ ├── include │ │ └── module.modulemap │ │ └── shim.h ├── Di │ └── Sources │ │ ├── DependencyCollectionRegisterer │ │ ├── CompoundDependencyCollectionRegisterer.swift │ │ └── DependencyCollectionRegisterer.swift │ │ ├── DependencyInjection │ │ ├── DelegatingDependencyInjection.swift │ │ └── DependencyInjection.swift │ │ ├── DependencyInjectionFactory │ │ └── DependencyInjectionFactory.swift │ │ ├── DependencyRegisterer │ │ ├── DependencyRegisterer+RegisterMultiple.swift │ │ ├── DependencyRegisterer.swift │ │ └── MultipleDependenciesRegistrationContinuation.swift │ │ ├── DependencyResolver │ │ ├── CompoundDependencyResolver.swift │ │ ├── DependencyResolver.swift │ │ └── WeakDependencyResolver.swift │ │ └── Models │ │ ├── DiError.swift │ │ └── Scope.swift ├── FakeSettingsAppMain │ ├── README.md │ └── Sources │ │ ├── Application │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── MixboxFakeSettingsAppMain.h │ │ └── MixboxFakeSettingsAppMain.m │ │ ├── Docs │ │ └── Images │ │ │ ├── step_0_add_target.png │ │ │ ├── step_1_select_target_type.png │ │ │ ├── step_2_fill_parameters.png │ │ │ ├── step_3_see_reslts.png │ │ │ ├── step_4_replace_files.png │ │ │ ├── step_5_set_target_entitlements.png │ │ │ ├── step_6_change_project_settings.png │ │ │ ├── step_7_1_add_target_dependency.png │ │ │ ├── step_7_2_add_target_dependency.png │ │ │ └── step_7_3_review_target_dependencies.png │ │ ├── Example │ │ └── Entitlements.entitlements │ │ └── Permissions │ │ ├── NotificationPermissionsManager.h │ │ ├── NotificationPermissionsManager.m │ │ └── PrivateApi │ │ ├── Entitlements.h │ │ └── Entitlements.m ├── Foundation │ ├── README.md │ └── Sources │ │ ├── Assertions │ │ └── AssertionFailureRecorder.swift │ │ ├── Casting │ │ └── mb_cast.swift │ │ ├── Collections │ │ ├── CachingLazyMappingSequence.swift │ │ ├── IteratorOf.swift │ │ └── RandomAccessCollectionOf.swift │ │ ├── Concurrency │ │ ├── OnceToken │ │ │ ├── OnceToken.swift │ │ │ ├── ThreadSafeOnceToken.swift │ │ │ └── ThreadUnsafeOnceToken.swift │ │ └── ReadWriteLock │ │ │ └── ReadWriteLock.swift │ │ ├── CurrentAbsoluteTimeProvider │ │ ├── AbsoluteTime │ │ │ ├── AbsoluteTime.h │ │ │ └── AbsoluteTime.swift │ │ ├── CurrentAbsoluteTimeProvider.swift │ │ └── MachCurrentAbsoluteTimeProvider.swift │ │ ├── Date │ │ ├── DateProvider.swift │ │ └── SystemClockDateProvider.swift │ │ ├── DescriptionBuilding │ │ └── DebugDescriptionBuilder.swift │ │ ├── DeviceArchitectureProvider │ │ ├── DeviceArchitecture.swift │ │ ├── DeviceArchitectureProvider.swift │ │ └── DeviceArchitectureProviderImpl.swift │ │ ├── EnvironmentProvider │ │ ├── EnvironmentProvider.swift │ │ └── ProcessInfoEnvironmentProvider.swift │ │ ├── Errors │ │ ├── ErrorString+Map.swift │ │ ├── ErrorString.swift │ │ └── UnsupportedEnumCaseError.swift │ │ ├── Extensions │ │ ├── Collection+Extension.swift │ │ ├── NSLock+LockWhile.swift │ │ ├── Optional+Map.swift │ │ ├── Optional+Unwrap.swift │ │ ├── String+Conversion.swift │ │ ├── String+Indentation.swift │ │ ├── String+Path.swift │ │ └── Zip │ │ │ ├── Sequence+Zip.swift │ │ │ ├── ZippedSequences.swift │ │ │ └── ZippedSequencesElement.swift │ │ ├── MemoryManagement │ │ ├── Box.swift │ │ ├── MutableBox.swift │ │ └── WeakBox.swift │ │ ├── ObjectiveC │ │ ├── AssociatedObjects │ │ │ ├── AssociatedObject.swift │ │ │ └── AssociatedValue.swift │ │ └── Exceptions │ │ │ ├── ObjectiveCExceptionCatcher.swift │ │ │ └── ObjectiveCExceptionCatcherHelper.h │ │ ├── PerformanceLogging │ │ ├── MeasureableTimedActivityLogger │ │ │ ├── Graphite │ │ │ │ ├── API │ │ │ │ │ ├── AtomicModels │ │ │ │ │ │ ├── AtomicCollection.swift │ │ │ │ │ │ ├── AtomicValue.swift │ │ │ │ │ │ └── ConditionLock.swift │ │ │ │ │ ├── GraphiteClient │ │ │ │ │ │ ├── GraphiteClient.swift │ │ │ │ │ │ ├── GraphiteClientError.swift │ │ │ │ │ │ └── GraphiteMetric.swift │ │ │ │ │ └── IO │ │ │ │ │ │ ├── EasyOutputStream.swift │ │ │ │ │ │ ├── EasyOutputStreamError.swift │ │ │ │ │ │ ├── NetworkSocketOutputStreamProvider.swift │ │ │ │ │ │ └── OutputStreamProvider.swift │ │ │ │ ├── GraphiteMeasureableTimedActivity.swift │ │ │ │ ├── GraphiteMeasureableTimedActivityLogger.swift │ │ │ │ └── GraphiteMeasureableTimedActivityMetricSender │ │ │ │ │ ├── GraphiteMeasureableTimedActivityMetricSender.swift │ │ │ │ │ └── GraphiteMeasureableTimedActivityMetricSenderImpl.swift │ │ │ ├── MeasureableTimedActivity.swift │ │ │ ├── MeasureableTimedActivityLogger.swift │ │ │ ├── MeasureableTimedActivityMetricSenderWaiter │ │ │ │ ├── MeasureableTimedActivityMetricSenderWaiter.swift │ │ │ │ └── NoopGraphiteMeasureableTimedActivityMetricSenderWaiter.swift │ │ │ ├── Noop │ │ │ │ ├── NoopMeasureableTimedActivity.swift │ │ │ │ └── NoopMeasureableTimedActivityLogger.swift │ │ │ └── Signpost │ │ │ │ ├── SignpostLogger │ │ │ │ ├── SignpostLogger.swift │ │ │ │ ├── SignpostLoggerFactory.swift │ │ │ │ ├── SignpostLoggerFactoryImpl.swift │ │ │ │ └── SignpostLoggerImpl.swift │ │ │ │ ├── SignpostMeasureableTimedActivity.swift │ │ │ │ └── SignpostMeasureableTimedActivityLogger.swift │ │ └── PerformanceLogger │ │ │ ├── CompoundMeasureableTimedActivity.swift │ │ │ ├── NoopPerformanceLogger.swift │ │ │ ├── PerformanceLogger.swift │ │ │ ├── PerformanceLoggerDestination.swift │ │ │ └── PerformanceLoggerImpl.swift │ │ ├── Serialization │ │ └── GenericSerialization.swift │ │ ├── Swizzling │ │ ├── AssertingSwizzler │ │ │ ├── AssertingSwizzler.swift │ │ │ └── AssertingSwizzlerImpl.swift │ │ ├── Models │ │ │ ├── MethodType.swift │ │ │ └── SwizzlingResult.swift │ │ ├── Swizzler │ │ │ ├── Swizzler.swift │ │ │ └── SwizzlerImpl.swift │ │ └── SwizzlingSynchronization │ │ │ ├── SwizzlingSynchronization.swift │ │ │ └── SwizzlingSynchronizationImpl.swift │ │ ├── Types │ │ ├── AnyEquatable │ │ │ └── AnyEquatable.swift │ │ ├── Customization │ │ │ ├── CustomizableArray.swift │ │ │ └── CustomizableScalar.swift │ │ ├── FileLine │ │ │ ├── FileLine.swift │ │ │ ├── RuntimeFileLine.swift │ │ │ └── SourceCodeLineTypeConverter.swift │ │ ├── OptionalAvailability.swift │ │ └── Result │ │ │ └── DataResult.swift │ │ └── Waiter │ │ ├── RunLoop │ │ ├── RunLoopModesStackProvider │ │ │ ├── RunLoopModesStackProvider.swift │ │ │ └── RunLoopModesStackProviderImpl.swift │ │ ├── RunLoopSpinner │ │ │ ├── RunLoopSpinner.swift │ │ │ ├── RunLoopSpinnerImpl.swift │ │ │ ├── SpinUntilResult.swift │ │ │ └── SpinWhileResult.swift │ │ ├── RunLoopSpinnerFactory │ │ │ ├── RunLoopSpinnerFactory.swift │ │ │ └── RunLoopSpinnerFactoryImpl.swift │ │ ├── RunLoopSpinnerLock │ │ │ ├── RunLoopSpinnerLock.swift │ │ │ ├── RunLoopSpinnerLockImpl.swift │ │ │ └── RunLoopSpinnerLockWaitResult.swift │ │ └── RunLoopSpinnerLockFactory │ │ │ ├── RunLoopSpinnerLockFactory.swift │ │ │ └── RunLoopSpinnerLockFactoryImpl.swift │ │ ├── RunLoopSpinningWaiter.swift │ │ ├── RunLoopSpinningWaiterImpl.swift │ │ ├── Waiter+While.swift │ │ └── Waiter.swift ├── Generators │ └── Sources │ │ ├── AnyGenerator │ │ ├── AnyGenerator.swift │ │ ├── AnyGeneratorImpl.swift │ │ └── TypeErased │ │ │ ├── HashableType │ │ │ └── HashableType.swift │ │ │ ├── Specializations │ │ │ ├── TypeErasedAnyGeneratorSpecialization.swift │ │ │ └── TypeErasedAnyGeneratorSpecializationImpl.swift │ │ │ ├── TypeErasedAnyGenerator.swift │ │ │ └── TypeErasedAnyGeneratorImpl.swift │ │ ├── DefaultGeneratorProvider │ │ ├── DefaultGeneratorProvider.swift │ │ ├── DefaultGeneratorResolvingStrategy.swift │ │ ├── Extensions │ │ │ ├── Collections │ │ │ │ ├── Array+DefaultGeneratorProvider.swift │ │ │ │ ├── Dictionary+DefaultGeneratorProvider.swift │ │ │ │ ├── Optional+DefaultGeneratorProvider.swift │ │ │ │ ├── Set+DefaultGeneratorProvider.swift │ │ │ │ └── Support │ │ │ │ │ └── DependencyResolver+Extensions.swift │ │ │ └── Enums │ │ │ │ ├── CaseGeneratable │ │ │ │ ├── AllCasesGenerators.swift │ │ │ │ ├── CaseGeneratable+DefaultGeneratorProvider.swift │ │ │ │ └── CaseGeneratable.swift │ │ │ │ └── CaseIterable │ │ │ │ └── CaseIterable+DefaultGeneratorProvider.swift │ │ └── TypeErasedDefaultGeneratorProvider.swift │ │ ├── DynamicLookup │ │ ├── Dependencies │ │ │ ├── DynamicLookupGeneratorFactory │ │ │ │ ├── DynamicLookupGeneratorFactory.swift │ │ │ │ └── DynamicLookupGeneratorFactoryImpl.swift │ │ │ ├── GeneratorByKeyPath.swift │ │ │ └── NestedDynamicLookupGeneratorStubber │ │ │ │ └── NestedDynamicLookupGeneratorStubber.swift │ │ ├── DynamicLookupGenerator.swift │ │ └── Fields │ │ │ └── DynamicLookupGeneratorFields.swift │ │ ├── Fields │ │ ├── FailableProperty.swift │ │ └── Fields.swift │ │ ├── GeneratableByFields │ │ ├── ByFieldsGenerator │ │ │ └── ByFieldsGenerator.swift │ │ ├── ByFieldsGeneratorResolver │ │ │ ├── ByFieldsGeneratorResolver.swift │ │ │ └── ByFieldsGeneratorResolverImpl.swift │ │ ├── GeneratableByFields.swift │ │ ├── InitializableWithFields.swift │ │ ├── RepresentableByFields.swift │ │ └── TypeErasedGeneratableByFields.swift │ │ └── Generator │ │ ├── Generator.swift │ │ ├── Generators │ │ ├── Foundation │ │ │ └── RandomUrlGenerator.swift │ │ └── Swift │ │ │ ├── ConstantGenerator.swift │ │ │ ├── Empty │ │ │ ├── EmptyArrayGenerator.swift │ │ │ ├── EmptyDictionaryGenerator.swift │ │ │ ├── EmptyOptionalGenerator.swift │ │ │ └── EmptySetGenerator.swift │ │ │ └── Random │ │ │ ├── RandomArrayGenerator.swift │ │ │ ├── RandomBoolGenerator.swift │ │ │ ├── RandomDictionaryGenerator.swift │ │ │ ├── RandomFloatGenerator.swift │ │ │ ├── RandomIntegerGenerator.swift │ │ │ ├── RandomOptionalGenerator.swift │ │ │ ├── RandomSetGenerator.swift │ │ │ └── RandomStringGenerator.swift │ │ ├── Random │ │ ├── MersenneTwisterRandomNumberProvider.swift │ │ ├── OverflowingUInt64.swift │ │ └── RandomNumberProvider.swift │ │ └── Support │ │ └── GeneratorError.swift ├── Gray │ └── Sources │ │ ├── Di │ │ ├── Interaction │ │ │ └── GrayElementInteractionDependenciesFactory.swift │ │ ├── PageObjects │ │ │ └── GrayPageObjectDependenciesFactory.swift │ │ └── Registerers │ │ │ └── GrayBoxDependencies.swift │ │ └── Utils │ │ ├── CodeStubs │ │ └── CodeStubs.swift │ │ ├── Gestures │ │ ├── Facades │ │ │ ├── ElementSimpleGestures │ │ │ │ ├── GrayElementSimpleGestures.swift │ │ │ │ └── GrayElementSimpleGesturesProvider.swift │ │ │ └── EventGenerator │ │ │ │ └── GrayEventGenerator.swift │ │ ├── Support │ │ │ └── PathGestureUtils │ │ │ │ ├── PathGestureUtils.swift │ │ │ │ ├── PathGestureUtilsFactory.swift │ │ │ │ ├── PathGestureUtilsFactoryImpl.swift │ │ │ │ └── PathGestureUtilsImpl.swift │ │ └── Touches │ │ │ ├── MultiTouchCommandExecutor │ │ │ ├── MultiTouchCommand.swift │ │ │ ├── MultiTouchCommandExecutor.swift │ │ │ └── MultiTouchCommandExecutorImpl.swift │ │ │ ├── MultiTouchInfo │ │ │ ├── DequeuedMultiTouchInfo.swift │ │ │ └── EnqueuedMultiTouchInfo.swift │ │ │ ├── TouchEventFactory │ │ │ ├── AggregatingTouchEventFactory │ │ │ │ ├── AggregatingTouchEventFactory.swift │ │ │ │ └── AggregatingTouchEventFactoryImpl.swift │ │ │ ├── FingerTouchEventFactory │ │ │ │ ├── FingerTouchEventFactory.swift │ │ │ │ └── FingerTouchEventFactoryImpl.swift │ │ │ └── MultiTouchEventFactory │ │ │ │ ├── MultiTouchEventFactory.swift │ │ │ │ └── MultiTouchEventFactoryImpl.swift │ │ │ ├── TouchInjector │ │ │ ├── TouchInjector.swift │ │ │ └── TouchInjectorImpl.swift │ │ │ ├── TouchInjectorFactory │ │ │ ├── TouchInjectorFactory.swift │ │ │ └── TouchInjectorFactoryImpl.swift │ │ │ └── TouchPerformer │ │ │ ├── TouchPerformer.swift │ │ │ └── TouchPerformerImpl.swift │ │ ├── GrayApplicationFrameProvider.swift │ │ ├── GrayApplicationStateProvider.swift │ │ ├── GrayElementHierarchyDescriptionProvider.swift │ │ ├── MenuItem │ │ ├── GrayMenuItem.swift │ │ └── GrayMenuItemProvider.swift │ │ ├── Networking │ │ ├── GrayBoxLegacyNetworking.swift │ │ └── Stubbing │ │ │ ├── GrayBoxLegacyNetworkStubbing.swift │ │ │ ├── GrayBoxLegacyNetworkStubbingStubResponseBuilder.swift │ │ │ ├── Stubs │ │ │ ├── GrayBoxLegacyNetworkStubbingNetworkStub.swift │ │ │ └── GrayBoxLegacyNetworkStubbingNetworkStubRepository.swift │ │ │ └── UrlProtocol │ │ │ ├── GrayBoxLegacyNetworkStubbingBridgedUrlProtocolClass.swift │ │ │ └── GrayBoxLegacyNetworkStubbingBridgedUrlProtocolInstance.swift │ │ ├── PrivateHeaders │ │ └── AppleInternals.h │ │ ├── Screenshots │ │ └── GrayScreenshotTaker.swift │ │ ├── TextTyper │ │ └── GrayTextTyper.swift │ │ ├── Waiting │ │ └── ApplicationQuiescenceWaiter │ │ │ └── GrayApplicationQuiescenceWaiter.swift │ │ └── ZeroToleranceTimer │ │ ├── New Group │ │ └── ZeroToleranceTimerTarget.swift │ │ ├── Sheduler │ │ ├── ZeroToleranceTimerScheduler.swift │ │ └── ZeroToleranceTimerSchedulerImpl.swift │ │ └── Started │ │ ├── ScheduledZeroToleranceTimer.swift │ │ └── ScheduledZeroToleranceTimerImpl.swift ├── InAppServices │ ├── README.md │ └── Sources │ │ ├── Features │ │ ├── AccessibilityEnchancement │ │ │ ├── CheckVisibilityIpcMethodHandler.swift │ │ │ └── Support │ │ │ │ ├── Accessibility │ │ │ │ ├── AccessibilityEnhancer │ │ │ │ │ ├── AccessibilityEnhancer.swift │ │ │ │ │ └── AccessibilityEnhancerImpl.swift │ │ │ │ ├── AccessibilityLabelFunctionReplacement │ │ │ │ │ ├── AccessibilityLabelFunctionReplacement.swift │ │ │ │ │ └── AccessibilityLabelFunctionReplacementImpl.swift │ │ │ │ ├── AccessibilityLabelSwizzler │ │ │ │ │ ├── AccessibilityLabelSwizzler.swift │ │ │ │ │ └── AllMethodsWithUniqueImplementationAccessibilityLabelSwizzler.swift │ │ │ │ ├── AccessibilityLabelSwizzlerFactory │ │ │ │ │ ├── AccessibilityLabelSwizzlerFactory.swift │ │ │ │ │ ├── AccessibilityLabelSwizzlerFactoryImpl.swift │ │ │ │ │ └── AllMethodsWithUniqueImplementationAccessibilityLabelSwizzlerFactory │ │ │ │ │ │ ├── AllMethodsWithUniqueImplementationAccessibilityLabelSwizzlerFactory.swift │ │ │ │ │ │ └── AllMethodsWithUniqueImplementationAccessibilityLabelSwizzlerFactoryImpl.swift │ │ │ │ ├── AccessibilityUniqueObjectMap │ │ │ │ │ ├── AccessibilityUniqueObjectMap.swift │ │ │ │ │ └── AccessibilityUniqueObjectMapImpl.swift │ │ │ │ ├── EnhancedAccessibilityLabelMethodSwizzler │ │ │ │ │ ├── EnhancedAccessibilityLabelMethodSwizzler.swift │ │ │ │ │ └── EnhancedAccessibilityLabelMethodSwizzlerImpl.swift │ │ │ │ ├── ObjcMethodsWithUniqueImplementationProvider │ │ │ │ │ ├── ObjcMethodWithUniqueImplementation.swift │ │ │ │ │ ├── ObjcMethodsWithUniqueImplementationProvider.swift │ │ │ │ │ ├── ObjcRuntimeObjcMethodsWithUniqueImplementationProvider │ │ │ │ │ │ └── ObjcRuntimeObjcMethodsWithUniqueImplementationProvider.swift │ │ │ │ │ └── PredefinedObjcMethodsWithUniqueImplementationProvider │ │ │ │ │ │ ├── PredefinedObjcMethodsWithUniqueImplementationBatch.swift │ │ │ │ │ │ └── PredefinedObjcMethodsWithUniqueImplementationProvider.swift │ │ │ │ ├── PredefinedObjcMethodsWithUniqueImplementationBatchesFactory │ │ │ │ │ ├── PredefinedObjcMethodsWithUniqueImplementationBatchesFactory.swift │ │ │ │ │ └── PredefinedObjcMethodsWithUniqueImplementationBatchesFactoryImpl.swift │ │ │ │ └── UIView+AccessibilityVisibility.swift │ │ │ │ ├── FakeCells │ │ │ │ └── Swizzling │ │ │ │ │ ├── FakeCellsSwizzling │ │ │ │ │ ├── FakeCellsSwizzling.swift │ │ │ │ │ └── FakeCellsSwizzlingImpl.swift │ │ │ │ │ ├── TargetClasses │ │ │ │ │ ├── CollectionViewCellSwizzler │ │ │ │ │ │ ├── CollectionViewCellSwizzler.swift │ │ │ │ │ │ └── CollectionViewCellSwizzlerImpl.swift │ │ │ │ │ └── CollectionViewSwizzler │ │ │ │ │ │ ├── CollectionViewSwizzler.swift │ │ │ │ │ │ └── CollectionViewSwizzlerImpl.swift │ │ │ │ │ └── Utils │ │ │ │ │ ├── FakeCellManagerCollectionViewUpdatesActivityImpl.swift │ │ │ │ │ ├── FakeCellManagerImpl.swift │ │ │ │ │ └── ThreadLocalObject.swift │ │ │ │ ├── Scrolling │ │ │ │ ├── CopiedFromAvitoCollectionView │ │ │ │ │ ├── KeyboardFrameChange.swift │ │ │ │ │ ├── KeyboardFrameProvider.swift │ │ │ │ │ └── KeyboardFrameProviderImpl.swift │ │ │ │ └── ScrollingHintsForViewProvider │ │ │ │ │ ├── ScrollingHintsForViewProvider.swift │ │ │ │ │ └── ScrollingHintsForViewProviderImpl.swift │ │ │ │ └── VisibilityChecker │ │ │ │ ├── Extensions │ │ │ │ ├── CGImage+Extensions.swift │ │ │ │ ├── CGPoint+Extensions.swift │ │ │ │ ├── CGRect+Extensions.swift │ │ │ │ └── CGSize+Extensions.swift │ │ │ │ ├── ImageFromImagePixelDataCreator │ │ │ │ ├── ImageFromImagePixelDataCreator.swift │ │ │ │ └── ImageFromImagePixelDataCreatorImpl.swift │ │ │ │ ├── ImagePixelDataCreator │ │ │ │ ├── ImagePixelData.swift │ │ │ │ ├── ImagePixelDataCreator.swift │ │ │ │ └── ImagePixelDataCreatorImpl.swift │ │ │ │ ├── Models │ │ │ │ ├── IntPoint.swift │ │ │ │ ├── IntRect.swift │ │ │ │ ├── IntSize.swift │ │ │ │ └── UnsafeArray.swift │ │ │ │ ├── OrderedWindowsProvider │ │ │ │ ├── OrderedWindowsProvider.swift │ │ │ │ └── OrderedWindowsProviderImpl.swift │ │ │ │ ├── Screenshots │ │ │ │ ├── InAppScreenshotTaker │ │ │ │ │ ├── InAppScreenshotTaker.swift │ │ │ │ │ └── InAppScreenshotTakerImpl.swift │ │ │ │ ├── ScreenInContextDrawer │ │ │ │ │ ├── ScreenInContextDrawer.swift │ │ │ │ │ └── ScreenInContextDrawerImpl.swift │ │ │ │ ├── ScreenInContextDrawerTopViewPatcher │ │ │ │ │ ├── ScreenInContextDrawerTopViewPatcher.swift │ │ │ │ │ └── ScreenInContextDrawerTopViewPatcherImpl.swift │ │ │ │ └── ViewInContextDrawer │ │ │ │ │ ├── ViewInContextDrawer.swift │ │ │ │ │ └── ViewInContextDrawerImpl.swift │ │ │ │ ├── VisibilityCheckForLoopOptimizer │ │ │ │ ├── VisibilityCheckForLoopOptimizer.swift │ │ │ │ ├── VisibilityCheckForLoopOptimizerFactory.swift │ │ │ │ ├── VisibilityCheckForLoopOptimizerFactoryImpl.swift │ │ │ │ └── VisibilityCheckForLoopOptimizerImpl.swift │ │ │ │ ├── VisibilityCheckImageColorShifter │ │ │ │ ├── VisibilityCheckImageColorShifter.swift │ │ │ │ └── VisibilityCheckImageColorShifterImpl.swift │ │ │ │ ├── VisibilityCheckImagesCapturer │ │ │ │ ├── VisibilityCheckImagesCaptureResult.swift │ │ │ │ ├── VisibilityCheckImagesCapturer.swift │ │ │ │ └── VisibilityCheckImagesCapturerImpl.swift │ │ │ │ ├── VisibilityChecker.md │ │ │ │ ├── VisibilityChecker │ │ │ │ ├── NonView │ │ │ │ │ ├── NonViewVisibilityChecker.swift │ │ │ │ │ ├── NonViewVisibilityCheckerImpl.swift │ │ │ │ │ └── NonViewVisibilityCheckerResult.swift │ │ │ │ └── View │ │ │ │ │ ├── ViewVisibilityChecker.swift │ │ │ │ │ ├── ViewVisibilityCheckerArguments.swift │ │ │ │ │ ├── ViewVisibilityCheckerImpl.swift │ │ │ │ │ └── ViewVisibilityCheckerResult.swift │ │ │ │ └── VisiblePixelDataCalculator │ │ │ │ ├── VisibilityCheckTargetCoordinates.swift │ │ │ │ ├── VisiblePixelData.swift │ │ │ │ ├── VisiblePixelDataCalculator.swift │ │ │ │ └── VisiblePixelDataCalculatorImpl.swift │ │ ├── AssertionFailures │ │ │ ├── GetRecordedAssertionFailuresIpcMethodHandler.swift │ │ │ ├── RecordedAssertionFailuresHolders │ │ │ │ ├── RecordedAssertionFailuresHolder.swift │ │ │ │ └── RecordedAssertionFailuresProvider.swift │ │ │ └── SwiftAssertionFailureRecorder.swift │ │ ├── Info │ │ │ ├── GetUiScreenMainBoundsIpcMethodHandler.swift │ │ │ └── GetUiScreenMainScaleIpcMethodHandler.swift │ │ ├── Keyboard │ │ │ ├── ExposingKeyboard │ │ │ │ ├── KeyboardWindowExposer.swift │ │ │ │ ├── KeyboardWindowExposerImpl.swift │ │ │ │ ├── Models │ │ │ │ │ ├── ExposedKeyboard.swift │ │ │ │ │ ├── ExposedKeyboardWindows.swift │ │ │ │ │ ├── KeyboardDrawingMode.swift │ │ │ │ │ └── KeyboardWindowExposerResult.swift │ │ │ │ └── Support │ │ │ │ │ ├── KeyboardWindowExposerPrecondition.swift │ │ │ │ │ ├── KeyboardWindowExposerPreconditionValidator.swift │ │ │ │ │ └── KeyboardWindowExposerPreconditionValidatorResult.swift │ │ │ ├── KeyboardEventsInjection │ │ │ │ ├── InjectKeyboardEventsIpcMethodHandler.swift │ │ │ │ └── KeyboardEventInjectorImpl.swift │ │ │ ├── PrivateApi │ │ │ │ ├── PrivateHeaders │ │ │ │ │ ├── UIKBShape.h │ │ │ │ │ ├── UIKBTree.h │ │ │ │ │ ├── UIKeyboardImpl.h │ │ │ │ │ └── UIKeyboardLayout.h │ │ │ │ └── SwiftWrappers │ │ │ │ │ ├── KeyboardLayout.swift │ │ │ │ │ ├── KeyboardPrivateApi.swift │ │ │ │ │ ├── KeyboardShape.swift │ │ │ │ │ ├── KeyboardTree.swift │ │ │ │ │ └── PrivateClassWrapper.swift │ │ │ └── Testability │ │ │ │ ├── UIKBTree+Testability.h │ │ │ │ ├── UIKBTree+Testability.m │ │ │ │ ├── UIKBTreeTestablity.swift │ │ │ │ ├── UIKeyboardLayout+Testability.h │ │ │ │ ├── UIKeyboardLayout+Testability.m │ │ │ │ ├── UIKeyboardLayoutTestability.swift │ │ │ │ └── handleErrorInTestabilityElementMethod.swift │ │ ├── LocationSimulation │ │ │ ├── CLSimulationManager.h │ │ │ ├── IpcMethods │ │ │ │ ├── SimulateLocationIpcMethodHandler.swift │ │ │ │ └── StopLocationSimulationIpcMethodHandler.swift │ │ │ └── LocationSimulationManager │ │ │ │ ├── LocationSimulationManager.swift │ │ │ │ └── LocationSimulationManagerImpl.swift │ │ ├── NetworkMocking │ │ │ ├── Bootstrapping │ │ │ │ ├── MixboxUrlProtocolBootstrapperFactory │ │ │ │ │ ├── MixboxUrlProtocolBootstrapperFactory.swift │ │ │ │ │ ├── MixboxUrlProtocolBootstrapperFactoryImpl.swift │ │ │ │ │ └── NetworkMockingBootstrappingType.swift │ │ │ │ └── NetworkMockingBootstrapper │ │ │ │ │ ├── MixboxUrlProtocolBootstrapper.swift │ │ │ │ │ └── MixboxUrlProtocolBootstrapperImpl.swift │ │ │ ├── BridgedUrlProtocolImplementations │ │ │ │ ├── BridgedUrlProtocolClient │ │ │ │ │ └── InProcessBridgedUrlProtocolClient.swift │ │ │ │ └── BridgedUrlProtocolInstance │ │ │ │ │ ├── IpcBridgedUrlProtocolClass.swift │ │ │ │ │ └── IpcBridgedUrlProtocolInstance.swift │ │ │ ├── Converters │ │ │ │ ├── CachedUrlResponseBridging.swift │ │ │ │ ├── Impls │ │ │ │ │ ├── CachedUrlResponseBridgingImpl.swift │ │ │ │ │ ├── UrlCacheStoragePolicyBridgingImpl.swift │ │ │ │ │ ├── UrlRequestBridgingImpl.swift │ │ │ │ │ ├── UrlRequestCachePolicyBridgingImpl.swift │ │ │ │ │ ├── UrlRequestNetworkServiceTypeBridgingImpl.swift │ │ │ │ │ └── UrlResponseBridgingImpl.swift │ │ │ │ ├── UrlCacheStoragePolicyBridging.swift │ │ │ │ ├── UrlRequestBridging.swift │ │ │ │ ├── UrlRequestCachePolicyBridging.swift │ │ │ │ ├── UrlRequestNetworkServiceTypeBridging.swift │ │ │ │ └── UrlResponseBridging.swift │ │ │ ├── MethodHandlers │ │ │ │ ├── UrlProtocolClient │ │ │ │ │ ├── UrlProtocolCachedResponseIsValidIpcMethodHandler.swift │ │ │ │ │ ├── UrlProtocolDidFailWithErrorIpcMethodHandler.swift │ │ │ │ │ ├── UrlProtocolDidFinishLoadingIpcMethodHandler.swift │ │ │ │ │ ├── UrlProtocolDidLoadIpcMethodHandler.swift │ │ │ │ │ ├── UrlProtocolDidReceiveIpcMethodHandler.swift │ │ │ │ │ └── UrlProtocolWasRedirectedToIpcMethodHandler.swift │ │ │ │ └── UrlProtocolRegistration │ │ │ │ │ ├── UrlProtocolRegisterBridgedUrlProtocolClassIpcMethodHandler.swift │ │ │ │ │ └── UrlProtocolUnregisterBridgedUrlProtocolClassIpcMethodHandler.swift │ │ │ └── MixboxUrlProtocol │ │ │ │ ├── BridgedUrlProtocolInstanceProvider │ │ │ │ └── BridgedUrlProtocolInstanceProvider.swift │ │ │ │ ├── Dependencies │ │ │ │ ├── FoundationNetworkModelsBridgingFactory │ │ │ │ │ ├── FoundationNetworkModelsBridgingFactory.swift │ │ │ │ │ └── FoundationNetworkModelsBridgingFactoryImpl.swift │ │ │ │ ├── MixboxUrlProtocolDependencies.swift │ │ │ │ └── MixboxUrlProtocolDependenciesFactory │ │ │ │ │ ├── IpcMixboxUrlProtocolDependenciesFactory.swift │ │ │ │ │ ├── IpcMixboxUrlProtocolIpcMethodHandlersRegisterer.swift │ │ │ │ │ └── MixboxUrlProtocolDependenciesFactory.swift │ │ │ │ └── MixboxUrlProtocol.swift │ │ ├── OpenUrl │ │ │ └── OpenUrlIpcMethodHandler.swift │ │ ├── PageObjectMakingHelper │ │ │ ├── AlertDisplayer │ │ │ │ ├── DisplayAlertIpcMethodHandler.swift │ │ │ │ └── InAppAlertDisplayer.swift │ │ │ └── PageObjectElementGenerationWizardRunner │ │ │ │ ├── IPC │ │ │ │ └── RunPageObjectElementGenerationWizardIpcMethodHandler.swift │ │ │ │ ├── Runner │ │ │ │ └── InAppPageObjectElementGenerationWizardRunner.swift │ │ │ │ └── Wizard │ │ │ │ ├── Presenter │ │ │ │ ├── PageObjectElementGenerationWizard.swift │ │ │ │ └── PageObjectElementGenerationWizardImpl.swift │ │ │ │ └── View │ │ │ │ └── PageObjectElementGenerationWizardView.swift │ │ ├── Pasteboard │ │ │ ├── GetPasteboardStringIpcMethodHandler.swift │ │ │ └── SetPasteboardStringIpcMethodHandler.swift │ │ ├── Scrolling │ │ │ └── ScrollingHintIpcMethodHandler.swift │ │ ├── UiEventObserving │ │ │ ├── Observable │ │ │ │ ├── Delegation │ │ │ │ │ └── UiEventObservableImpl.swift │ │ │ │ ├── Provider │ │ │ │ │ ├── UiEventObservableHolder.swift │ │ │ │ │ ├── UiEventObservableProvider.swift │ │ │ │ │ └── UiEventObservableSetter.swift │ │ │ │ ├── UiEventObservable.swift │ │ │ │ └── Window │ │ │ │ │ └── UiEventObservingWindow.swift │ │ │ └── Observers │ │ │ │ ├── Support │ │ │ │ ├── UiEventObserverFeatureToggleIpcMethodHandler.swift │ │ │ │ ├── UiEventObserverFeatureToggleValueGetter.swift │ │ │ │ ├── UiEventObserverFeatureToggleValueSetter.swift │ │ │ │ └── UiEventObserverFeatureToggler.swift │ │ │ │ ├── TouchDrawer │ │ │ │ ├── FadeOutView.swift │ │ │ │ └── TouchDrawer.swift │ │ │ │ ├── UiEventHistory │ │ │ │ ├── IpcMethodHandlers │ │ │ │ │ └── GetUiEventHistoryIpcMethodHandler.swift │ │ │ │ └── Support │ │ │ │ │ ├── UiEventHistoryProvider.swift │ │ │ │ │ └── UiEventHistoryTracker.swift │ │ │ │ ├── UiEventObserver.swift │ │ │ │ └── UiEventObserverResult.swift │ │ ├── ViewHierarchy │ │ │ ├── Support │ │ │ │ ├── TestabilityElementTypeConverter.swift │ │ │ │ ├── ViewHierarchyElementTypeConverter.swift │ │ │ │ └── ViewHierarchyProvider │ │ │ │ │ ├── InProcessViewHierarchyProvider.swift │ │ │ │ │ └── ViewHierarchy │ │ │ │ │ ├── DtoViewHierarchy.swift │ │ │ │ │ ├── SwiftUIViewHierarchyElementExtractor.swift │ │ │ │ │ └── TestabilityElementViewHierarchyElement.swift │ │ │ └── ViewHierarchyIpcMethodHandler.swift │ │ └── WaitingForQuiescence │ │ │ ├── CoreAnimation │ │ │ ├── CAAnimationIdlingSupport.swift │ │ │ ├── CAAnimationState.swift │ │ │ ├── CALayerIdlingSupport.swift │ │ │ ├── CoreAnimationIdlingResourceSwizzler.swift │ │ │ ├── CoreAnimationIdlingResourceSwizzlerImpl.swift │ │ │ └── SurrogateCAAnimationDelegate │ │ │ │ ├── SurrogateCAAnimationDelegateFactory.swift │ │ │ │ ├── SurrogateCAAnimationDelegateObjC.h │ │ │ │ ├── SurrogateCAAnimationDelegateObjC.m │ │ │ │ └── SurrogateCAAnimationDelegateSwift.swift │ │ │ ├── IdlingResourceObjectTracker │ │ │ ├── IdlingResourceObjectTracker.swift │ │ │ ├── TrackedIdlingResource.swift │ │ │ └── TrackedIdlingResourceDescription.swift │ │ │ ├── IdlingResources │ │ │ ├── IdlingResource.swift │ │ │ └── IdlingResource │ │ │ │ └── Impls │ │ │ │ ├── CompoundIdlingResource.swift │ │ │ │ └── KeyboardIdlingResource.swift │ │ │ ├── ScrollView │ │ │ ├── ScrollViewIdlingResourceSwizzler.swift │ │ │ └── ScrollViewIdlingResourceSwizzlerImpl.swift │ │ │ ├── UIAnimation │ │ │ ├── UiAnimationIdlingResourceSwizzler.swift │ │ │ └── UiAnimationIdlingResourceSwizzlerImpl.swift │ │ │ └── ViewController │ │ │ ├── ViewControllerIdlingResourceSwizzler.swift │ │ │ └── ViewControllerIdlingResourceSwizzlerImpl.swift │ │ ├── InAppServices │ │ ├── InAppServices.swift │ │ ├── InAppServicesImpl.swift │ │ ├── InAppServicesStarter │ │ │ ├── InAppServicesStarter.swift │ │ │ └── InAppServicesStarterImpl.swift │ │ └── StartedInAppServices.swift │ │ └── Support │ │ ├── AccessibilityForTestAutomation │ │ ├── AccessibilityForTestAutomationInitializer │ │ │ ├── AccessibilityForTestAutomationInitializer.swift │ │ │ └── Implementation │ │ │ │ ├── NoopAccessibilityForTestAutomationInitializer.swift │ │ │ │ ├── ObjectiveC │ │ │ │ ├── AccessibilityUtilitiesAccessibilityInitializer │ │ │ │ │ ├── AccessibilityUtilitiesAccessibilityInitializer.h │ │ │ │ │ └── AccessibilityUtilitiesAccessibilityInitializer.m │ │ │ │ ├── LibAccessibilityAccessibilityInitializer │ │ │ │ │ ├── LibAccessibilityAccessibilityInitializer.h │ │ │ │ │ └── LibAccessibilityAccessibilityInitializer.m │ │ │ │ ├── LoadSimulatorRuntimeLibrary.h │ │ │ │ └── UIAccessibilityAccessibilityInitializer │ │ │ │ │ ├── UIAccessibilityAccessibilityInitializer.h │ │ │ │ │ └── UIAccessibilityAccessibilityInitializer.m │ │ │ │ └── PrivateApiAccessibilityForTestAutomationInitializer.swift │ │ ├── AccessibilityInitializationStatusProvider │ │ │ ├── AccessibilityInitializationStatusProvider.swift │ │ │ └── AccessibilityInitializationStatusProviderImpl.swift │ │ └── Models │ │ │ └── AccessibilityInitializationStatus.swift │ │ ├── DI │ │ ├── InAppServicesAndGrayBoxSharedDependencyCollectionRegisterer.swift │ │ └── InAppServicesDefaultDependencyCollectionRegisterer.swift │ │ ├── Extensions │ │ └── Selector+PrivateName.swift │ │ ├── FloatValuesForSr5346Patcher │ │ ├── FloatValuesForSr5346Patcher.swift │ │ ├── FloatValuesForSr5346PatcherImpl.swift │ │ └── NoopFloatValuesForSr5346Patcher.swift │ │ ├── IPC │ │ ├── IpcMethodRegistration │ │ │ ├── IpcMethodHandlerRegistrationClosure.swift │ │ │ ├── IpcMethodHandlerRegistrationDependencies.swift │ │ │ ├── IpcMethodHandlerRegistrationTypeErasedClosure.swift │ │ │ └── IpcMethodHandlerWithDependenciesRegisterer.swift │ │ └── IpcStarter │ │ │ ├── Blackbox │ │ │ └── BuiltinIpcStarter.swift │ │ │ ├── Graybox │ │ │ ├── GrayBoxIpcStarter.swift │ │ │ └── SameProcessIpcClientServer.swift │ │ │ ├── IpcStarter.swift │ │ │ ├── IpcStarterProvider │ │ │ ├── FromEnvironmentIpcStarterProvider.swift │ │ │ └── IpcStarterProvider.swift │ │ │ ├── IpcStarterTypeProvider │ │ │ ├── FromEnvironmentIpcStarterTypeProvider.swift │ │ │ └── IpcStarterTypeProvider.swift │ │ │ ├── Sbtui │ │ │ └── SbtuiIpcStarter.swift │ │ │ └── StartedIpc.swift │ │ ├── SelfCheck │ │ └── EnsureReleaseAppIsNotAffected.swift │ │ ├── SimulatorStateInitializer │ │ ├── SimulatorStateInitializer.swift │ │ ├── SimulatorStateInitializerImpl.swift │ │ ├── TIPreferencesController.h │ │ ├── TIPreferencesControllerObjCWrapper │ │ │ ├── TIPreferencesControllerObjCWrapper.h │ │ │ └── TIPreferencesControllerObjCWrapper.m │ │ ├── TextInputFramework │ │ │ ├── TextInputFramework.swift │ │ │ └── TextInputFrameworkImpl.swift │ │ ├── TextInputFrameworkProvider │ │ │ ├── TextInputFrameworkProvider.swift │ │ │ └── TextInputFrameworkProviderImpl.swift │ │ └── TextInputPreferencesController │ │ │ ├── TextInputPreferencesController.swift │ │ │ └── TextInputPreferencesControllerImpl.swift │ │ └── Windows │ │ ├── ApplicationWindowsProvider.swift │ │ ├── UIApplication+StatusBarWindow.h │ │ └── UiApplicationWindowsProvider.swift ├── IoKit │ ├── README.md │ └── Sources │ │ ├── Events │ │ ├── ByType │ │ │ ├── BaseDigitizerEvent.swift │ │ │ ├── DigitizerEvent.swift │ │ │ ├── DigitizerFingerEvent.swift │ │ │ └── KeyboardEvent.swift │ │ ├── Event.swift │ │ └── Fields │ │ │ ├── EventFieldsByValueType.swift │ │ │ ├── EventFloatFields.swift │ │ │ ├── EventIntegerFields.swift │ │ │ └── EventPositionFields.swift │ │ ├── IOKitExtensions │ │ ├── EnumRawValues.h │ │ └── EnumRawValues.m │ │ ├── MBIohidEventSender │ │ ├── MBIohidEventSender.h │ │ └── MBIohidEventSender.mm │ │ ├── PrivateApi │ │ ├── CoreFoundation │ │ │ └── CFRuntime.h │ │ └── IOKit │ │ │ ├── IOCFPlugIn.h │ │ │ ├── IOKitKeys.h │ │ │ ├── IOKitLib.h │ │ │ ├── IOMessage.h │ │ │ ├── IOReturn.h │ │ │ ├── IOTypes.h │ │ │ ├── OSKext.h │ │ │ ├── OSMessageNotification.h │ │ │ ├── hid │ │ │ ├── IOHIDDisplay.h │ │ │ ├── IOHIDEvent.h │ │ │ ├── IOHIDEventData.h │ │ │ ├── IOHIDEventField.h │ │ │ ├── IOHIDEventQueue.h │ │ │ ├── IOHIDEventSystem.h │ │ │ ├── IOHIDEventSystemClient.h │ │ │ ├── IOHIDEventTypes.h │ │ │ ├── IOHIDNotification.h │ │ │ ├── IOHIDService.h │ │ │ ├── IOHIDSession.h │ │ │ └── IOHIDUserDevice.h │ │ │ ├── iokitmig.h │ │ │ ├── ps │ │ │ ├── IOPSKeys.h │ │ │ ├── IOPowerSources.h │ │ │ └── IOUPSPlugIn.h │ │ │ └── pwr_mgt │ │ │ ├── IOPM.h │ │ │ ├── IOPMKeys.h │ │ │ ├── IOPMLib.h │ │ │ └── IOPMLibDefs.h │ │ ├── SoftLinking │ │ └── SoftLinking.h │ │ ├── Syncronization │ │ ├── Observing │ │ │ ├── SingletonHandleHidEventObserver.swift │ │ │ ├── UiApplicationHandleIohidEventObservable.swift │ │ │ └── UiApplicationHandleIohidEventObserver.swift │ │ └── Swizzling │ │ │ ├── HandleHidEventSwizzler.swift │ │ │ └── HandleHidEventSwizzlerImpl.swift │ │ └── TypeWrappers │ │ ├── ButtonMask.swift │ │ ├── DigitizerEventMask.swift │ │ ├── DigitizerTransducerType.swift │ │ ├── EventOptionBits.swift │ │ └── EventType.swift ├── Ipc │ ├── README.md │ └── Sources │ │ ├── Client │ │ ├── IpcClient.swift │ │ ├── Logging │ │ │ └── PerformanceLoggingIpcClient.swift │ │ └── Synchronous │ │ │ ├── SynchronousIpcClient+CallOrThrow.swift │ │ │ ├── SynchronousIpcClient.swift │ │ │ └── SynchronousIpcClientFactory.swift │ │ ├── Model │ │ └── IpcVoid.swift │ │ └── Router │ │ ├── IpcMethod.swift │ │ ├── IpcMethodHandler.swift │ │ └── IpcRouter.swift ├── IpcCommon │ ├── README.md │ └── Sources │ │ ├── Features │ │ ├── AccessibilityEnchancement │ │ │ └── EnhancedAccessibilityLabel.swift │ │ ├── AssertionFailures │ │ │ ├── GetRecordedAssertionFailuresIpcMethod.swift │ │ │ └── RecordedAssertionFailure.swift │ │ ├── Info │ │ │ ├── GetUiScreenMainBoundsIpcMethod.swift │ │ │ └── GetUiScreenMainScaleIpcMethod.swift │ │ ├── Keyboard │ │ │ ├── Ipc │ │ │ │ └── InjectKeyboardEventsIpcMethod.swift │ │ │ ├── KeyboardEventInjector.swift │ │ │ └── Models │ │ │ │ └── KeyboardEvent.swift │ │ ├── LocationSimulation │ │ │ ├── SimulateLocationIpcMethod.swift │ │ │ └── StopLocationSimulationIpcMethod.swift │ │ ├── NetworkMocking │ │ │ ├── Methods │ │ │ │ ├── UrlProtocol │ │ │ │ │ ├── Class │ │ │ │ │ │ ├── UrlProtocolCanInitIpcMethod.swift │ │ │ │ │ │ ├── UrlProtocolCanonicalRequestIpcMethod.swift │ │ │ │ │ │ ├── UrlProtocolCreateInstanceIpcMethod.swift │ │ │ │ │ │ └── UrlProtocolRequestIsCacheEquivalentIpcMethod.swift │ │ │ │ │ ├── Instance │ │ │ │ │ │ ├── UrlProtocolStartLoadingIpcMethod.swift │ │ │ │ │ │ └── UrlProtocolStopLoadingIpcMethod.swift │ │ │ │ │ └── Registration │ │ │ │ │ │ ├── UrlProtocolRegisterBridgedUrlProtocolClassIpcMethod.swift │ │ │ │ │ │ └── UrlProtocolUnregisterBridgedUrlProtocolClassIpcMethod.swift │ │ │ │ └── UrlProtocolClient │ │ │ │ │ ├── UrlProtocolCachedResponseIsValidIpcMethod.swift │ │ │ │ │ ├── UrlProtocolDidFailWithErrorIpcMethod.swift │ │ │ │ │ ├── UrlProtocolDidFinishLoadingIpcMethod.swift │ │ │ │ │ ├── UrlProtocolDidLoadIpcMethod.swift │ │ │ │ │ ├── UrlProtocolDidReceiveIpcMethod.swift │ │ │ │ │ └── UrlProtocolWasRedirectedToIpcMethod.swift │ │ │ ├── Models │ │ │ │ ├── BridgedCachedUrlResponse.swift │ │ │ │ ├── BridgedUrlCacheStoragePolicy.swift │ │ │ │ ├── BridgedUrlRequest.swift │ │ │ │ ├── BridgedUrlRequestCachePolicy.swift │ │ │ │ ├── BridgedUrlRequestNetworkServiceType.swift │ │ │ │ ├── BridgedUrlResponse.swift │ │ │ │ └── URLResponseProtocolVariation.swift │ │ │ └── UrlProtocol │ │ │ │ ├── BridgedUrlProtocolClass.swift │ │ │ │ ├── BridgedUrlProtocolClassRepository │ │ │ │ ├── BridgedUrlProtocolClassForRequestProvider.swift │ │ │ │ ├── BridgedUrlProtocolClassRepository.swift │ │ │ │ └── CompoundBridgedUrlProtocolClass.swift │ │ │ │ ├── BridgedUrlProtocolClient.swift │ │ │ │ ├── BridgedUrlProtocolInstance.swift │ │ │ │ └── Registration │ │ │ │ ├── BridgedUrlProtocolRegisterer.swift │ │ │ │ └── RegisteredBridgedUrlProtocolClass.swift │ │ ├── OpenUrl │ │ │ └── OpenUrlIpcMethod.swift │ │ ├── PageObjectMakingHelper │ │ │ ├── AlertDisplayer │ │ │ │ ├── Alert.swift │ │ │ │ ├── AlertDisplayer.swift │ │ │ │ ├── DisplayAlertIpcMethod.swift │ │ │ │ └── SynchronousAlertDisplayer.swift │ │ │ └── PageObjectElementGenerationWizard │ │ │ │ ├── PageObjectElementGenerationWizardRunner.swift │ │ │ │ ├── RunPageObjectElementGenerationWizardIpcMethod.swift │ │ │ │ └── SynchronousPageObjectElementGenerationWizardRunner.swift │ │ ├── Pasteboard │ │ │ ├── GetPasteboardStringIpcMethod.swift │ │ │ └── SetPasteboardStringIpcMethod.swift │ │ ├── Scrolling │ │ │ ├── DraggingInstruction.swift │ │ │ ├── ScrollingHint.swift │ │ │ └── ScrollingHintIpcMethod.swift │ │ ├── UiEventObserving │ │ │ ├── Support │ │ │ │ └── BaseSetUiEventObserverEnabledIpcMethod.swift │ │ │ ├── TouchDrawer │ │ │ │ └── SetTouchDrawerEnabledIpcMethod.swift │ │ │ └── UiEventHistory │ │ │ │ ├── GetUiEventHistoryIpcMethod.swift │ │ │ │ ├── Models │ │ │ │ ├── UiEvent.swift │ │ │ │ ├── UiEventHistory.swift │ │ │ │ ├── UiEventHistoryRecord.swift │ │ │ │ └── UiTouch.swift │ │ │ │ └── SetUiEventHistoryTrackerEnabledIpcMethod.swift │ │ ├── ViewHierarchy │ │ │ ├── Codable │ │ │ │ ├── CodableViewHierarchy.swift │ │ │ │ └── CodableViewHierarchyElement.swift │ │ │ ├── Interface │ │ │ │ ├── ViewHierarchy.swift │ │ │ │ ├── ViewHierarchyElement.swift │ │ │ │ └── ViewHierarchyElementType.swift │ │ │ ├── ViewHierarchyIpcMethod.swift │ │ │ └── ViewHierarchyProvider.swift │ │ └── Visibility │ │ │ ├── CheckVisibilityIpcMethod.swift │ │ │ └── InteractionCoordinates.swift │ │ └── Support │ │ ├── IpcMethodsRegisterer │ │ └── IpcMethodHandlersRegisterer.swift │ │ ├── IpcObject │ │ ├── IpcObjectId.swift │ │ ├── IpcObjectIdentifiable.swift │ │ └── IpcObjectRepository │ │ │ ├── InsertedIpcObject │ │ │ ├── ClosureInsertedIpcObject.swift │ │ │ └── InsertedIpcObject.swift │ │ │ ├── IpcObjectRepository │ │ │ ├── IpcObjectRepository.swift │ │ │ └── IpcObjectRepositoryImpl.swift │ │ │ ├── ReadableIpcObjectRepository │ │ │ ├── ReadableIpcObjectRepository.swift │ │ │ └── ReadableIpcObjectRepositoryOf.swift │ │ │ └── WriteableIpcObjectRepository │ │ │ ├── WriteableIpcObjectRepository.swift │ │ │ └── WriteableIpcObjectRepositoryOf.swift │ │ ├── IpcStarter │ │ └── IpcStarterType.swift │ │ ├── IpcThrowingFunctionResult │ │ └── IpcThrowingFunctionResult.swift │ │ └── RunLoopSpinningSynchronousIpcClient │ │ ├── RunLoopSpinningSynchronousIpcClient.swift │ │ └── RunLoopSpinningSynchronousIpcClientFactory.swift ├── IpcSbtuiClient │ ├── README.md │ └── Sources │ │ └── SbtuiIpcClient.swift ├── IpcSbtuiHost │ ├── README.md │ └── Sources │ │ ├── SbtuiCustomCommand.swift │ │ └── SbtuiIpcRouter.swift ├── LinkXCTAutomationSupport │ └── Sources │ │ └── AutomationInfrastructureIntegrationTests.swift ├── MocksGeneration │ └── Sources │ │ ├── Sourcery │ │ └── Parsing │ │ │ ├── ModuleParser │ │ │ ├── Model │ │ │ │ ├── ParsedModule.swift │ │ │ │ └── ParsedModuleScope.swift │ │ │ ├── ModuleParser.swift │ │ │ └── ModuleParserImpl.swift │ │ │ └── SourceFileParser │ │ │ ├── Model │ │ │ └── ParsedSourceFile.swift │ │ │ ├── SourceFileParser.swift │ │ │ └── SourceFileParserImpl.swift │ │ ├── Templates │ │ ├── AllMocksTemplate.swift │ │ ├── BuilderTemplate │ │ │ ├── BuilderTemplate.swift │ │ │ └── NestedDeclarations │ │ │ │ ├── BuilderType.swift │ │ │ │ ├── CallClosureStubbingContinuation │ │ │ │ └── CallClosureStubbingContinuationTemplate.swift │ │ │ │ ├── FunctionBuilderTemplate.swift │ │ │ │ └── PropertyBuilderTemplate.swift │ │ ├── Implementation │ │ │ ├── NestedDeclarations │ │ │ │ ├── ProtocolImplementationFunctionTemplate.swift │ │ │ │ └── ProtocolImplementationPropertyTemplate.swift │ │ │ └── ProtocolImplementationTemplate.swift │ │ ├── MockTemplate.swift │ │ └── Utils │ │ │ └── Snippets.swift │ │ └── Utils │ │ ├── AttributeName.swift │ │ ├── Bool+ToOptional.swift │ │ ├── Collection+Render.swift │ │ ├── ErrorString.swift │ │ ├── Method+Generic.swift │ │ ├── MethodParameter+Escaping.swift │ │ ├── Models │ │ ├── GenericParameter.swift │ │ └── GenericParameterClause.swift │ │ ├── NameCollisionAvoidance.swift │ │ ├── Optional+ConvertEmpty.swift │ │ ├── Optional+Map.swift │ │ ├── String+Indent.swift │ │ ├── String+Regex.swift │ │ ├── Type+Extensions.swift │ │ └── TypeName │ │ ├── TypeName+Extensions.swift │ │ └── TypeName+TypeInstanceExpression.swift ├── MocksRuntime │ └── Sources │ │ ├── Builders │ │ ├── Stubbing │ │ │ ├── NestedDeclarations │ │ │ │ ├── Closures │ │ │ │ │ ├── CallClosureStubbingContinuation.swift │ │ │ │ │ └── StubbingFunctionWithClosureArgumentsBuilder.swift │ │ │ │ ├── StubbingFunctionBuilder.swift │ │ │ │ └── StubbingPropertyBuilder.swift │ │ │ └── StubbingBuilder.swift │ │ └── Verification │ │ │ ├── Matching │ │ │ ├── FunctionalMatcher.swift │ │ │ ├── MatcherArrayToRecordedCallArgumentsMatcher.swift │ │ │ ├── Matchers │ │ │ │ ├── MatcherToRecordedCallArgumentMatcher.swift │ │ │ │ └── NonEscapingClosureTypeToRecordedCallArgumentMatcher.swift │ │ │ ├── NonEscapingClosureMatcher.swift │ │ │ ├── RecordedCallArgumentsMatcherBuilder.swift │ │ │ └── TimesMethodWasCalled │ │ │ │ ├── TimesMethodWasCalledMatcher.swift │ │ │ │ └── TimesMethodWasCalledMatchingResult.swift │ │ │ ├── NestedDeclarations │ │ │ ├── VerificationFunctionBuilder.swift │ │ │ └── VerificationPropertyBuilder.swift │ │ │ ├── Result │ │ │ ├── VerificationFailureDescription.swift │ │ │ └── VerificationResult.swift │ │ │ └── VerifcationBuilder.swift │ │ ├── Manager │ │ ├── Configured │ │ │ └── ConfiguredMockManagerFactory.swift │ │ ├── Interfaces │ │ │ ├── MockManagerCalling.swift │ │ │ ├── MockManagerStateTransferring.swift │ │ │ ├── MockManagerStubbing.swift │ │ │ └── MockManagerVerification.swift │ │ ├── MockManager.swift │ │ ├── MockManagerFactory.swift │ │ ├── MockManagerImpl.swift │ │ ├── Shared │ │ │ ├── MockManagerCallingImpl.swift │ │ │ ├── MockManagerStateTransferringImpl.swift │ │ │ ├── MockManagerStubbingImpl.swift │ │ │ └── MockManagerVerificationImpl.swift │ │ ├── Support │ │ │ ├── DynamicCallable │ │ │ │ ├── DynamicCallable.swift │ │ │ │ ├── DynamicCallableResult.swift │ │ │ │ ├── Factory │ │ │ │ │ └── DynamicCallableFactory.swift │ │ │ │ └── Impls │ │ │ │ │ ├── AnyGeneratorDynamicCallable │ │ │ │ │ ├── AnyGeneratorDynamicCallable.swift │ │ │ │ │ ├── AnyGeneratorDynamicCallableFactory.swift │ │ │ │ │ └── Customization │ │ │ │ │ │ ├── DynamicCallableFunctionArgumentsHandler.swift │ │ │ │ │ │ ├── Impl │ │ │ │ │ │ └── CompletionHandlerCallingAnyGeneratorDynamicCallableBehavior.swift │ │ │ │ │ │ └── Model │ │ │ │ │ │ ├── AnyGeneratorDynamicCallableFunctionArgument.swift │ │ │ │ │ │ ├── Closure │ │ │ │ │ │ ├── AnyGeneratorDynamicCallableClosureArgument.swift │ │ │ │ │ │ └── AnyGeneratorDynamicCallableClosureArgumentImpl.swift │ │ │ │ │ │ └── NonClosure │ │ │ │ │ │ └── AnyGeneratorDynamicCallableNonClosureArgument.swift │ │ │ │ │ └── CanNotProvideResultDynamicCallable │ │ │ │ │ ├── CanNotProvideResultDynamicCallable.swift │ │ │ │ │ └── CanNotProvideResultDynamicCallableFactory.swift │ │ │ ├── RecordedCallsHolder │ │ │ │ ├── Models │ │ │ │ │ ├── Escaping │ │ │ │ │ │ ├── RecordedCall.swift │ │ │ │ │ │ ├── RecordedCallArgument.swift │ │ │ │ │ │ ├── RecordedCallArgumentValue.swift │ │ │ │ │ │ └── RecordedCallArguments.swift │ │ │ │ │ ├── Nonescaping │ │ │ │ │ │ ├── NonescapingCallArgument.swift │ │ │ │ │ │ ├── NonescapingCallArgumentValue.swift │ │ │ │ │ │ └── NonescapingCallArguments.swift │ │ │ │ │ └── Shared │ │ │ │ │ │ ├── Reflecting │ │ │ │ │ │ └── ClosureArgumentValueReflection.swift │ │ │ │ │ │ └── StoringValues │ │ │ │ │ │ ├── EscapingClosureArgumentValue.swift │ │ │ │ │ │ ├── NonEscapingClosureArgumentValue.swift │ │ │ │ │ │ ├── OptionalEscapingClosureArgumentValue.swift │ │ │ │ │ │ └── RegularArgumentValue.swift │ │ │ │ ├── RecordedCallsHolder.swift │ │ │ │ ├── RecordedCallsHolderImpl.swift │ │ │ │ ├── RecordedCallsProvider.swift │ │ │ │ └── TypeErasing │ │ │ │ │ ├── TypeErasedReturnValue.swift │ │ │ │ │ ├── TypeErasedTupledArguments.swift │ │ │ │ │ └── TypeErasedValue.swift │ │ │ ├── StubHolder │ │ │ │ ├── CallStub.swift │ │ │ │ ├── StubsHolder.swift │ │ │ │ ├── StubsHolderImpl.swift │ │ │ │ └── StubsProvider.swift │ │ │ └── TypeErasedAnyGeneratorSpecializationsBuilder.swift │ │ └── Unconfigured │ │ │ └── UnconfiguredMockManagerFactory.swift │ │ ├── Mock │ │ ├── BaseMock.swift │ │ ├── DefaultImplementationSettable.swift │ │ ├── Mock.swift │ │ ├── MockInfo.swift │ │ ├── MockInfoProvider.swift │ │ ├── MockManagerProvider.swift │ │ ├── MockManagerSettable.swift │ │ └── StorableMock.swift │ │ ├── Registration │ │ ├── MockRegisterer.swift │ │ ├── MockRegistererImpl.swift │ │ └── RegisterMocksSetUpAction.swift │ │ └── Utility │ │ ├── FunctionIdentifier.swift │ │ ├── MigrationFromCuckoo.swift │ │ ├── MixboxMocksRuntimeVoid.swift │ │ └── ThrowingFunctionResult.swift ├── Reflection │ └── Sources │ │ ├── CodeGeneration │ │ ├── ValueCodeGenerator.swift │ │ └── ValueCodeGeneratorImpl.swift │ │ ├── Utilities │ │ └── ValueIsObjectChecker.swift │ │ └── ValueReflection │ │ └── Immutable │ │ ├── ImmutableValueReflection.swift │ │ ├── ImmutableValueReflectionProvider │ │ ├── ImmutableValueReflectionProvider.swift │ │ └── ImmutableValueReflectionProviderImpl.swift │ │ ├── LabeledImmutableValueReflection.swift │ │ ├── ReflectableWithReflector.swift │ │ ├── Reflector │ │ ├── Reflector.swift │ │ └── ReflectorImpl.swift │ │ ├── Typed │ │ ├── Base │ │ │ ├── Collection │ │ │ │ └── BaseCollectionImmutableValueReflection.swift │ │ │ └── Fields │ │ │ │ ├── BaseImmutableValueReflectionWithFields.swift │ │ │ │ ├── ImmutableValueReflectionField.swift │ │ │ │ └── ImmutableValueReflectionWithFields.swift │ │ ├── Class │ │ │ └── ClassImmutableValueReflection.swift │ │ ├── Collection │ │ │ └── CollectionImmutableValueReflection.swift │ │ ├── Dictionary │ │ │ ├── DictionaryImmutableValueReflection.swift │ │ │ └── DictionaryImmutableValueReflectionPair.swift │ │ ├── Enum │ │ │ └── EnumImmutableValueReflection.swift │ │ ├── Optional │ │ │ └── OptionalImmutableValueReflection.swift │ │ ├── Primitive │ │ │ └── PrimitiveImmutableValueReflection.swift │ │ ├── Set │ │ │ └── SetImmutableValueReflection.swift │ │ ├── Struct │ │ │ └── StructImmutableValueReflection.swift │ │ └── Tuple │ │ │ ├── TupleImmutableValueReflection.swift │ │ │ └── TupleImmutableValueReflectionElement.swift │ │ └── TypedImmutableValueReflection.swift ├── SBTUITestTunnelClient │ ├── LICENSE │ ├── README.md │ └── Sources │ │ ├── SBTUITunneledApplication.h │ │ └── SBTUITunneledApplication.m ├── SBTUITestTunnelCommon │ ├── LICENSE │ ├── README.md │ └── Sources │ │ ├── NSString+SwiftDemangle.h │ │ ├── NSString+SwiftDemangle.m │ │ ├── NSURLRequest+HTTPBodyFix.h │ │ ├── NSURLRequest+HTTPBodyFix.m │ │ ├── NSURLRequest+SBTUITestTunnelMatch.h │ │ ├── NSURLRequest+SBTUITestTunnelMatch.m │ │ ├── SBTMonitoredNetworkRequest.h │ │ ├── SBTMonitoredNetworkRequest.m │ │ ├── SBTRequestMatch.h │ │ ├── SBTRequestMatch.m │ │ ├── SBTRewrite.h │ │ ├── SBTRewrite.m │ │ ├── SBTStubResponse.h │ │ ├── SBTStubResponse.m │ │ ├── SBTSwizzleHelpers.h │ │ ├── SBTUITestTunnel.h │ │ └── SBTUITestTunnel.m ├── SBTUITestTunnelServer │ ├── LICENSE │ ├── README.md │ └── Sources │ │ ├── NSData+SHA1.h │ │ ├── NSData+SHA1.m │ │ ├── NSURLSession+HTTPBodyFix.h │ │ ├── NSURLSession+HTTPBodyFix.m │ │ ├── NSURLSessionConfiguration+SBTUITestTunnel.h │ │ ├── NSURLSessionConfiguration+SBTUITestTunnel.m │ │ ├── SBTProxyURLProtocol.h │ │ ├── SBTProxyURLProtocol.m │ │ ├── SBTUITestTunnelServer.h │ │ ├── SBTUITestTunnelServer.m │ │ ├── UITextField+DisableAutocomplete.h │ │ └── UITextField+DisableAutocomplete.m ├── Stubbing │ ├── README.md │ └── Sources │ │ ├── DI │ │ └── MixboxStubbingDependencies.swift │ │ └── Facade │ │ ├── GeneratorFacade │ │ ├── GeneratorFacade.swift │ │ └── GeneratorFacadeImpl.swift │ │ ├── TestFailingDynamicLookupGenerator │ │ ├── ConfiguredDynamicLookupGeneratorProvider │ │ │ ├── ConfiguredDynamicLookupGeneratorProvider.swift │ │ │ └── ConfiguredDynamicLookupGeneratorProviderImpl.swift │ │ ├── TestFailingDynamicLookupConfigurator.swift │ │ ├── TestFailingDynamicLookupConfiguratorWithIndex.swift │ │ └── TestFailingDynamicLookupFields.swift │ │ └── TestFailingGenerator │ │ ├── Facade │ │ ├── BaseTestFailingGenerator.swift │ │ ├── BaseTestFailingGenerator │ │ │ ├── BaseTestFailingGeneratorDependencies.swift │ │ │ └── BaseTestFailingGeneratorDependenciesFactory │ │ │ │ ├── BaseTestFailingGeneratorDependenciesFactory.swift │ │ │ │ └── BaseTestFailingGeneratorDependenciesFactoryImpl.swift │ │ └── TestFailingGenerator.swift │ │ ├── Helpers │ │ ├── TestFailingObjectGeneratorWithConfiguratorModification.swift │ │ └── TestFailingObjectGeneratorWithConfiguratorModificationImpl.swift │ │ ├── Observer │ │ ├── NoopTestFailingGeneratorObserver.swift │ │ └── TestFailingGeneratorObserver.swift │ │ └── Parts │ │ ├── TestFailingAnyGenerator │ │ ├── TestFailingAnyGenerator.swift │ │ └── TestFailingAnyGeneratorImpl.swift │ │ ├── TestFailingArrayGenerator │ │ ├── TestFailingArrayGenerator.swift │ │ └── TestFailingArrayGeneratorImpl.swift │ │ ├── TestFailingDictionaryGenerator │ │ ├── TestFailingDictionaryGenerator.swift │ │ └── TestFailingDictionaryGeneratorImpl.swift │ │ ├── TestFailingObjectGenerator │ │ ├── TestFailingObjectGenerator.swift │ │ └── TestFailingObjectGeneratorImpl.swift │ │ └── TestFailingOptionalGenerator │ │ ├── TestFailingOptionalGenerator.swift │ │ └── TestFailingOptionalGeneratorImpl.swift ├── Testability │ ├── README.md │ └── Sources │ │ ├── CommonValues │ │ ├── Extensions │ │ │ ├── UIAccessibilityElementExtensions │ │ │ │ ├── UIAccessibilityElement+mb_testability_accessibilityLabel.swift │ │ │ │ ├── UIAccessibilityElement+mb_testability_accessibilityValue.swift │ │ │ │ ├── UIAccessibilityElement+mb_testability_frame.swift │ │ │ │ ├── UIAccessibilityElement+mb_testability_frameRelativeToScreen.swift │ │ │ │ └── UIAccessibilityElement+mb_testability_parent.swift │ │ │ └── UIViewExtensions │ │ │ │ ├── UIView+mb_testability_accessibilityIdentifier.swift │ │ │ │ ├── UIView+mb_testability_accessibilityPlaceholderValue.swift │ │ │ │ ├── UIView+mb_testability_children.swift │ │ │ │ ├── UIView+mb_testability_elementType.swift │ │ │ │ ├── UIView+mb_testability_frame.swift │ │ │ │ ├── UIView+mb_testability_frameRelativeToScreen.swift │ │ │ │ ├── UIView+mb_testability_hasKeyboardFocus.swift │ │ │ │ ├── UIView+mb_testability_isDefinitelyHidden.swift │ │ │ │ ├── UIView+mb_testability_isEnabled.swift │ │ │ │ ├── UIView+mb_testability_parent.swift │ │ │ │ ├── UIView+mb_testability_text.swift │ │ │ │ └── UIWebView │ │ │ │ ├── UIWebView+mb_testability_elementType.h │ │ │ │ └── UIWebView+mb_testability_elementType.m │ │ ├── Implementations │ │ │ ├── BaseMutableTestabilityElement.swift │ │ │ ├── BaseTestabilityElement.swift │ │ │ ├── DtoTestabilityElement.swift │ │ │ └── NonTestabilityElementFallbackTestabilityElement.swift │ │ ├── Interface │ │ │ ├── TestabilityElement.h │ │ │ └── TestabilityElementType.h │ │ └── Support │ │ │ ├── ObjectiveC │ │ │ ├── NSObject+AccessibilityPrivateApi.h │ │ │ ├── NSObject+TestabilityElement.h │ │ │ └── NSObject+TestabilityElement.m │ │ │ └── Swift │ │ │ ├── DefaultTestabilityElementValues.swift │ │ │ ├── NSObject+TestabilityElement.swift │ │ │ ├── NSObjectTestabilityElementSwiftImplementation.swift │ │ │ └── TestabilityElementFromAnyConverter.swift │ │ ├── CustomValues │ │ ├── GenericSerialization.swift │ │ ├── TestabilityCustomValues.swift │ │ ├── TestabilityElement+TestabilityCustomValues.swift │ │ └── View+CustomValues.swift │ │ ├── FakeCells │ │ ├── FakeCellInfo.swift │ │ ├── FakeCellManager │ │ │ ├── DisabledFakeCellManager.swift │ │ │ ├── FakeCellManager.swift │ │ │ ├── FakeCellManagerForCollectionView.swift │ │ │ ├── FakeCellManagerForCollectionViewCell.swift │ │ │ ├── FakeCellManagerProvider.swift │ │ │ └── MixboxCollectionViewUpdatesActivity.swift │ │ ├── ObjCInterfacesForFakeCells.h │ │ ├── UICollectionViewCell+Fakeness.swift │ │ └── UICollectionViewCell+Testability.swift │ │ └── Support │ │ ├── MixboxTestability.h │ │ └── WeakBox.swift ├── TestsFoundation │ ├── README.md │ └── Sources │ │ ├── Di │ │ ├── DependencyCollectionRegisterer │ │ │ └── ApplicationIndependentTestsDependencyCollectionRegisterer.swift │ │ ├── DependencyResolver │ │ │ └── PerformanceLoggingDependencyResolver.swift │ │ ├── Facade │ │ │ ├── TestCaseDi.swift │ │ │ └── TopLevelDependencyCollectionRegisterer.swift │ │ └── TestFailingDependencyResolver │ │ │ ├── MixboxDiTestFailingDependencyResolver.swift │ │ │ └── TestFailingDependencyResolver.swift │ │ ├── Interfaces │ │ ├── BundleResourcePathProvider.swift │ │ └── BundleResourcePathProviderImpl.swift │ │ ├── Lifecycle │ │ ├── Integration │ │ │ └── BaseTestObservationEntryPoint.swift │ │ ├── LifecycleManager │ │ │ └── TestLifecycleManager.swift │ │ ├── Observer │ │ │ ├── Observable │ │ │ │ ├── Support │ │ │ │ │ ├── TestLifecycleObservers │ │ │ │ │ │ ├── DtoTestLifecycleObservers.swift │ │ │ │ │ │ └── TestLifecycleObservers.swift │ │ │ │ │ └── TestObservation │ │ │ │ │ │ └── TestLifecycleObserverTestObservation.swift │ │ │ │ ├── TestLifecycleObservable.swift │ │ │ │ └── TestLifecycleObservableImpl.swift │ │ │ └── Observers │ │ │ │ ├── MutableClosures │ │ │ │ ├── MutableClosuresTestLifecycleTestBundleObserver.swift │ │ │ │ ├── MutableClosuresTestLifecycleTestCaseObserver.swift │ │ │ │ └── MutableClosuresTestLifecycleTestSuiteObserver.swift │ │ │ │ ├── MutableCompond │ │ │ │ ├── MutableCompoundTestLifecycleTestBundleObserver.swift │ │ │ │ ├── MutableCompoundTestLifecycleTestCaseObserver.swift │ │ │ │ └── MutableCompoundTestLifecycleTestSuiteObserver.swift │ │ │ │ ├── TestLifecycleTestBundleObserver.swift │ │ │ │ ├── TestLifecycleTestCaseObserver.swift │ │ │ │ └── TestLifecycleTestSuiteObserver.swift │ │ └── SetUpAndTearDown │ │ │ ├── Compound │ │ │ ├── CompoundSetUpAction.swift │ │ │ └── CompoundTearDownAction.swift │ │ │ ├── Noop │ │ │ └── NoopTearDownAction.swift │ │ │ ├── SetUpAction.swift │ │ │ └── TearDownAction.swift │ │ ├── Matching │ │ ├── MatcherBuilders │ │ │ ├── Array │ │ │ │ └── ArrayPropertyMatcherBuilder.swift │ │ │ ├── Dynamic │ │ │ │ ├── AllNamedKeyPathsProvider.swift │ │ │ │ ├── DynamicMatcherBuilder.swift │ │ │ │ ├── DynamicPropertyMatcherBuilder.swift │ │ │ │ └── NamedKeyPaths.swift │ │ │ └── Mapping │ │ │ │ ├── Extensions │ │ │ │ ├── MappingMatcherBuilder+Comparable.swift │ │ │ │ ├── MappingMatcherBuilder+ComparableAndAdditiveArithmetic.swift │ │ │ │ ├── MappingMatcherBuilder+Equatable.swift │ │ │ │ └── MappingMatcherBuilder+StringProtocol.swift │ │ │ │ ├── Impl │ │ │ │ └── MappingMatcherBuilderImpl.swift │ │ │ │ ├── MappingMatcherBuilder.swift │ │ │ │ └── Subclasses │ │ │ │ └── PropertyMatcherBuilder.swift │ │ └── Matchers │ │ │ ├── Impls │ │ │ ├── Array │ │ │ │ ├── ArrayContainsElementMatcher.swift │ │ │ │ └── ArrayEqualsMatcher.swift │ │ │ ├── Generic │ │ │ │ ├── Base │ │ │ │ │ ├── CompoundMatcher.swift │ │ │ │ │ └── HasPropertyMatcher.swift │ │ │ │ ├── Logic │ │ │ │ │ ├── AlwaysFalseMatcher.swift │ │ │ │ │ ├── AlwaysTrueMatcher.swift │ │ │ │ │ ├── AndMatcher.swift │ │ │ │ │ ├── NotMatcher.swift │ │ │ │ │ └── OrMatcher.swift │ │ │ │ ├── Structure │ │ │ │ │ ├── CastMatcher.swift │ │ │ │ │ └── OptionalMatcher.swift │ │ │ │ ├── Support │ │ │ │ │ ├── AbsoluteValueProvider.swift │ │ │ │ │ ├── Divisible.swift │ │ │ │ │ ├── DoubleValueProvider.swift │ │ │ │ │ └── Subtractable.swift │ │ │ │ └── Value │ │ │ │ │ ├── Comparable │ │ │ │ │ ├── Base │ │ │ │ │ │ ├── BaseComparableMatcher.swift │ │ │ │ │ │ ├── BaseComparableWithAccuracyMatcher.swift │ │ │ │ │ │ └── ComparisonOperatorInfo.swift │ │ │ │ │ ├── Exact │ │ │ │ │ │ ├── IsGreaterMatcher.swift │ │ │ │ │ │ ├── IsGreaterOrEqualsMatcher.swift │ │ │ │ │ │ ├── IsLessMatcher.swift │ │ │ │ │ │ └── IsLessOrEqualsMatcher.swift │ │ │ │ │ └── WithAccuracy │ │ │ │ │ │ ├── IsGreaterOrEqualsWithAccuracyMatcher.swift │ │ │ │ │ │ ├── IsGreaterWithAccuracyMatcher.swift │ │ │ │ │ │ ├── IsLessOrEqualsWithAccuracyMatcher.swift │ │ │ │ │ │ └── IsLessWithAccuracyMatcher.swift │ │ │ │ │ ├── EqualsMatcher.swift │ │ │ │ │ ├── IsCloseMatcher.swift │ │ │ │ │ ├── IsInstanceOfTypeMatcher.swift │ │ │ │ │ └── IsSameInstanceMatcher.swift │ │ │ └── String │ │ │ │ ├── ContainsMatcher.swift │ │ │ │ ├── RegularExpressionMatcher.swift │ │ │ │ └── StartsWithMatcher.swift │ │ │ ├── Matcher.swift │ │ │ ├── Models │ │ │ ├── LazyMismatchResult.swift │ │ │ ├── MatchingResult.swift │ │ │ └── MismatchResult.swift │ │ │ └── Operators │ │ │ └── Matcher+Operators.swift │ │ ├── Network │ │ ├── IpcBridgedUrlProtocolClient.swift │ │ ├── IpcRouterProvider.swift │ │ ├── MethodHandlers │ │ │ ├── IpcMethodHandlersRegisterer.swift │ │ │ ├── UrlProtocolClass │ │ │ │ ├── UrlProtocolCanInitIpcMethodHandler.swift │ │ │ │ ├── UrlProtocolCanonicalRequestIpcMethodHandler.swift │ │ │ │ ├── UrlProtocolCreateInstanceIpcMethodHandler.swift │ │ │ │ └── UrlProtocolRequestIsCacheEquivalentIpcMethodHandler.swift │ │ │ └── UrlProtocolInstance │ │ │ │ ├── UrlProtocolStartLoadingIpcMethodHandler.swift │ │ │ │ └── UrlProtocolStopLoadingIpcMethodHandler.swift │ │ ├── Mocking │ │ │ ├── AddedUrlProtocolStub │ │ │ │ ├── AddedUrlProtocolStub.swift │ │ │ │ └── ClosureAddedUrlProtocolStub.swift │ │ │ ├── Registration │ │ │ │ ├── IpcBridgedUrlProtocolRegisterer.swift │ │ │ │ └── IpcRegisteredBridgedUrlProtocolClass.swift │ │ │ ├── RequestMatcher.swift │ │ │ └── UrlProtocolStubAdder │ │ │ │ ├── UrlProtocolStubAdder.swift │ │ │ │ └── UrlProtocolStubAdderImpl.swift │ │ └── README.md │ │ ├── PrivateHeaders │ │ ├── Classdump │ │ │ ├── XCTAutomationSupport │ │ │ │ ├── Xcode_12_0 │ │ │ │ │ ├── Xcode_12_0_XCElementSnapshot.h │ │ │ │ │ └── Xcode_12_0_XCTAutomationSupport_CDStructures.h │ │ │ │ ├── Xcode_13_0 │ │ │ │ │ ├── Xcode_13_0_XCElementSnapshot.h │ │ │ │ │ └── Xcode_13_0_XCTAutomationSupport_CDStructures.h │ │ │ │ ├── Xcode_14_0 │ │ │ │ │ ├── Xcode_14_0_XCElementSnapshot.h │ │ │ │ │ └── Xcode_14_0_XCTAutomationSupport_CDStructures.h │ │ │ │ └── Xcode_15_0 │ │ │ │ │ ├── Xcode_15_0_NSArray-XCTElementQueryAdditions.h │ │ │ │ │ ├── Xcode_15_0_NSError-XCTAutomationSupportErrors.h │ │ │ │ │ ├── Xcode_15_0_NSIndexPath-XCTConvenience.h │ │ │ │ │ ├── Xcode_15_0_NSPredicate-XCTAutomationSupport.h │ │ │ │ │ ├── Xcode_15_0_NSString-XCTASAdditions.h │ │ │ │ │ ├── Xcode_15_0_NSValue-XCTestAdditions.h │ │ │ │ │ ├── Xcode_15_0_XCAXAuditConfiguration.h │ │ │ │ │ ├── Xcode_15_0_XCAXAuditResult.h │ │ │ │ │ ├── Xcode_15_0_XCAXAuditResultCollection.h │ │ │ │ │ ├── Xcode_15_0_XCAXCycleDetector.h │ │ │ │ │ ├── Xcode_15_0_XCAccessibilityElement.h │ │ │ │ │ ├── Xcode_15_0_XCDeviceEvent.h │ │ │ │ │ ├── Xcode_15_0_XCElementSnapshot.h │ │ │ │ │ ├── Xcode_15_0_XCTAccessibilityFramework.h │ │ │ │ │ ├── Xcode_15_0_XCTAccessibilitySnapshot_iOS.h │ │ │ │ │ ├── Xcode_15_0_XCTAnimationsIdleNotifier.h │ │ │ │ │ ├── Xcode_15_0_XCTApplicationStateSnapshot.h │ │ │ │ │ ├── Xcode_15_0_XCTAttachmentFutureMetadata.h │ │ │ │ │ ├── Xcode_15_0_XCTAutomationSession.h │ │ │ │ │ ├── Xcode_15_0_XCTAutomationSupport_CDStructures.h │ │ │ │ │ ├── Xcode_15_0_XCTAutomationTypeMismatchIssue.h │ │ │ │ │ ├── Xcode_15_0_XCTCapabilitiesProviding.h │ │ │ │ │ ├── Xcode_15_0_XCTConnectionAccepting.h │ │ │ │ │ ├── Xcode_15_0_XCTContainingTransformerIterator.h │ │ │ │ │ ├── Xcode_15_0_XCTElementBlockFilteringTransformer.h │ │ │ │ │ ├── Xcode_15_0_XCTElementBlockSortingTransformer.h │ │ │ │ │ ├── Xcode_15_0_XCTElementContainingTransformer.h │ │ │ │ │ ├── Xcode_15_0_XCTElementDisclosedChildRowsTransformer.h │ │ │ │ │ ├── Xcode_15_0_XCTElementFilteringTransformer.h │ │ │ │ │ ├── Xcode_15_0_XCTElementIndexingTransformer.h │ │ │ │ │ ├── Xcode_15_0_XCTElementQuery.h │ │ │ │ │ ├── Xcode_15_0_XCTElementQueryProcessor.h │ │ │ │ │ ├── Xcode_15_0_XCTElementQueryResults.h │ │ │ │ │ ├── Xcode_15_0_XCTElementQueryTransformerPredicateValidator.h │ │ │ │ │ ├── Xcode_15_0_XCTElementSetCodableTransformer.h │ │ │ │ │ ├── Xcode_15_0_XCTElementSetTransformer.h │ │ │ │ │ ├── Xcode_15_0_XCTElementSnapshotAttributeDataSource.h │ │ │ │ │ ├── Xcode_15_0_XCTElementSnapshotDescendantsEnumerator.h │ │ │ │ │ ├── Xcode_15_0_XCTElementSnapshotProvider.h │ │ │ │ │ ├── Xcode_15_0_XCTElementSnapshotRequest.h │ │ │ │ │ ├── Xcode_15_0_XCTElementSortingTransformer.h │ │ │ │ │ ├── Xcode_15_0_XCTFilteringTransformerIterator.h │ │ │ │ │ ├── Xcode_15_0_XCTImage.h │ │ │ │ │ ├── Xcode_15_0_XCTImageConverter.h │ │ │ │ │ ├── Xcode_15_0_XCTImageEncoding.h │ │ │ │ │ ├── Xcode_15_0_XCTImageMetadata.h │ │ │ │ │ ├── Xcode_15_0_XCTIndexingTransformerIterator.h │ │ │ │ │ ├── Xcode_15_0_XCTLocalizableStringInfo.h │ │ │ │ │ ├── Xcode_15_0_XCTLogArchiveCollecting.h │ │ │ │ │ ├── Xcode_15_0_XCTLogArchiveRequest.h │ │ │ │ │ ├── Xcode_15_0_XCTLogArchiveRequesting.h │ │ │ │ │ ├── Xcode_15_0_XCTMacCatalystStatusProviding.h │ │ │ │ │ ├── Xcode_15_0_XCTMainRunLoopIdleNotifier.h │ │ │ │ │ ├── Xcode_15_0_XCTMatchingElementIterator.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingChannel_RunnerToUIProcess.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingChannel_UIProcessToRunner.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_UIAutomationProcess.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_UIAutomationProcessObserving.h │ │ │ │ │ ├── Xcode_15_0_XCTProcessInfoUtilities.h │ │ │ │ │ ├── Xcode_15_0_XCTProcessSpecifier.h │ │ │ │ │ ├── Xcode_15_0_XCTRemoteApplicationAutomationClient.h │ │ │ │ │ ├── Xcode_15_0_XCTRemoteApplicationAutomationTarget.h │ │ │ │ │ ├── Xcode_15_0_XCTRuntimeIssue.h │ │ │ │ │ ├── Xcode_15_0_XCTRuntimeIssueContext.h │ │ │ │ │ ├── Xcode_15_0_XCTRuntimeIssueContextReportingDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCTScreenRecordingRequest.h │ │ │ │ │ ├── Xcode_15_0_XCTScreenshotRequest.h │ │ │ │ │ ├── Xcode_15_0_XCTSerializedTransportWrapper2.h │ │ │ │ │ ├── Xcode_15_0_XCTSignpostEvent.h │ │ │ │ │ ├── Xcode_15_0_XCTSignpostInterval.h │ │ │ │ │ ├── Xcode_15_0_XCTSpindumpRequestSpecification.h │ │ │ │ │ ├── Xcode_15_0_XCTTailspinRequest.h │ │ │ │ │ ├── Xcode_15_0_XCTTimeoutControls.h │ │ │ │ │ ├── Xcode_15_0_XCTVideoEncoding.h │ │ │ │ │ ├── Xcode_15_0_XCUIElementSnapshotCoordinateTransforms.h │ │ │ │ │ ├── Xcode_15_0_XCUIElementSnapshotRequestResult.h │ │ │ │ │ ├── Xcode_15_0_XCUIPoint.h │ │ │ │ │ ├── Xcode_15_0_XCUIRect.h │ │ │ │ │ └── Xcode_15_0__XCTMessaging_VoidProtocol.h │ │ │ ├── XCTest │ │ │ │ ├── Xcode_12_0 │ │ │ │ │ ├── Xcode_12_0_XCPointerEventPath.h │ │ │ │ │ ├── Xcode_12_0_XCSynthesizedEventRecord.h │ │ │ │ │ ├── Xcode_12_0_XCTInProcessSymbolicationService.h │ │ │ │ │ ├── Xcode_12_0_XCTIssueHandling.h │ │ │ │ │ ├── Xcode_12_0_XCTNSPredicateExpectationObject.h │ │ │ │ │ ├── Xcode_12_0_XCTSourceCodeSymbolInfo.h │ │ │ │ │ ├── Xcode_12_0_XCTSymbolInfoProviding.h │ │ │ │ │ ├── Xcode_12_0_XCTSymbolicationService.h │ │ │ │ │ ├── Xcode_12_0_XCTestCase.h │ │ │ │ │ ├── Xcode_12_0_XCTestMisuseObserver.h │ │ │ │ │ ├── Xcode_12_0_XCTestObservationCenter.h │ │ │ │ │ ├── Xcode_12_0_XCTest_CDStructures.h │ │ │ │ │ ├── Xcode_12_0_XCUIApplication.h │ │ │ │ │ ├── Xcode_12_0_XCUIElement.h │ │ │ │ │ ├── Xcode_12_0_XCUIElementAttributesPrivate.h │ │ │ │ │ └── Xcode_12_0_XCUIElementTypeQueryProvider_Private.h │ │ │ │ ├── Xcode_14_0 │ │ │ │ │ └── Xcode_14_0_XCTest_CDStructures.h │ │ │ │ └── Xcode_15_0 │ │ │ │ │ └── Xcode_15_0_XCTest_CDStructures.h │ │ │ ├── XCTestCore │ │ │ │ ├── Xcode_13_0 │ │ │ │ │ ├── Xcode_13_0_XCPointerEventPath.h │ │ │ │ │ ├── Xcode_13_0_XCSynthesizedEventRecord.h │ │ │ │ │ ├── Xcode_13_0_XCTInProcessSymbolicationService.h │ │ │ │ │ ├── Xcode_13_0_XCTNSPredicateExpectationObject.h │ │ │ │ │ ├── Xcode_13_0_XCTSourceCodeSymbolInfo.h │ │ │ │ │ ├── Xcode_13_0_XCTSymbolInfoProviding.h │ │ │ │ │ ├── Xcode_13_0_XCTSymbolicationService.h │ │ │ │ │ ├── Xcode_13_0_XCTestCase.h │ │ │ │ │ ├── Xcode_13_0_XCTestCore_CDStructures.h │ │ │ │ │ ├── Xcode_13_0_XCTestMisuseObserver.h │ │ │ │ │ ├── Xcode_13_0_XCTestObservationCenter.h │ │ │ │ │ ├── Xcode_13_0_XCUIApplication.h │ │ │ │ │ ├── Xcode_13_0_XCUIElement.h │ │ │ │ │ ├── Xcode_13_0_XCUIElementAttributesPrivate.h │ │ │ │ │ └── Xcode_13_0_XCUIElementTypeQueryProvider_Private.h │ │ │ │ ├── Xcode_14_0 │ │ │ │ │ ├── Xcode_14_0_XCTInProcessSymbolicationService.h │ │ │ │ │ ├── Xcode_14_0_XCTSourceCodeSymbolInfo.h │ │ │ │ │ ├── Xcode_14_0_XCTSymbolInfoProviding.h │ │ │ │ │ ├── Xcode_14_0_XCTSymbolicationService.h │ │ │ │ │ ├── Xcode_14_0_XCTestCase.h │ │ │ │ │ ├── Xcode_14_0_XCTestCaseDiscoveryUIAutomationDelegate.h │ │ │ │ │ ├── Xcode_14_0_XCTestCaseUIAutomationDelegate.h │ │ │ │ │ ├── Xcode_14_0_XCTestCastMethodNamesUIAutomationDelegate.h │ │ │ │ │ ├── Xcode_14_0_XCTestCore_CDStructures.h │ │ │ │ │ ├── Xcode_14_0_XCTestMisuseObserver.h │ │ │ │ │ └── Xcode_14_0_XCTestObservationCenter.h │ │ │ │ └── Xcode_15_0 │ │ │ │ │ ├── Xcode_15_0_DTXConnection-XCTestAdditions.h │ │ │ │ │ ├── Xcode_15_0_DTXProxyChannel-XCTestAdditions.h │ │ │ │ │ ├── Xcode_15_0_MXMInstrumental.h │ │ │ │ │ ├── Xcode_15_0_NSArray-XCTestAdditions.h │ │ │ │ │ ├── Xcode_15_0_NSBundle-XCTestAdditions.h │ │ │ │ │ ├── Xcode_15_0_NSDateFormatter-XCTDateFormatting.h │ │ │ │ │ ├── Xcode_15_0_NSError-XCTTestRunSession.h │ │ │ │ │ ├── Xcode_15_0_NSException-XCTestAdditions.h │ │ │ │ │ ├── Xcode_15_0_NSKeyedArchiver-XCTestAdditions.h │ │ │ │ │ ├── Xcode_15_0_NSKeyedUnarchiver-XCTestAdditions.h │ │ │ │ │ ├── Xcode_15_0_NSMutableArray-XCTestAdditions.h │ │ │ │ │ ├── Xcode_15_0_NSSet-XCTestAdditions.h │ │ │ │ │ ├── Xcode_15_0_NSThread-XCTestAdditions.h │ │ │ │ │ ├── Xcode_15_0_NSValue-XCTSymbolicationServiceAdditions.h │ │ │ │ │ ├── Xcode_15_0_XCActivityRecord.h │ │ │ │ │ ├── Xcode_15_0_XCDebugLogDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCTASDebugLogDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCTActivityAggregationRecord.h │ │ │ │ │ ├── Xcode_15_0_XCTActivityRecordContext.h │ │ │ │ │ ├── Xcode_15_0_XCTActivityRecordStack.h │ │ │ │ │ ├── Xcode_15_0_XCTAggregateSuiteRunStatistics.h │ │ │ │ │ ├── Xcode_15_0_XCTAggregateSuiteRunStatisticsRecord.h │ │ │ │ │ ├── Xcode_15_0_XCTApplicationBundleInfo.h │ │ │ │ │ ├── Xcode_15_0_XCTApplicationLaunchMetric.h │ │ │ │ │ ├── Xcode_15_0_XCTAttachment.h │ │ │ │ │ ├── Xcode_15_0_XCTAttachmentFuture.h │ │ │ │ │ ├── Xcode_15_0_XCTAttachmentManager.h │ │ │ │ │ ├── Xcode_15_0_XCTBlockingQueue.h │ │ │ │ │ ├── Xcode_15_0_XCTCPUMetric.h │ │ │ │ │ ├── Xcode_15_0_XCTClockMetric.h │ │ │ │ │ ├── Xcode_15_0_XCTCompoundExpectation.h │ │ │ │ │ ├── Xcode_15_0_XCTContext.h │ │ │ │ │ ├── Xcode_15_0_XCTDaemonTelemetryLogger.h │ │ │ │ │ ├── Xcode_15_0_XCTDarwinNotificationExpectation.h │ │ │ │ │ ├── Xcode_15_0_XCTDateDescriptionFormatter.h │ │ │ │ │ ├── Xcode_15_0_XCTDateFormatting.h │ │ │ │ │ ├── Xcode_15_0_XCTDefaultDebugLogHandler.h │ │ │ │ │ ├── Xcode_15_0_XCTExecutionExtension.h │ │ │ │ │ ├── Xcode_15_0_XCTExecutionWorker.h │ │ │ │ │ ├── Xcode_15_0_XCTExpectedFailure.h │ │ │ │ │ ├── Xcode_15_0_XCTExpectedFailureContext.h │ │ │ │ │ ├── Xcode_15_0_XCTExpectedFailureContextManager.h │ │ │ │ │ ├── Xcode_15_0_XCTExtensionProvider.h │ │ │ │ │ ├── Xcode_15_0_XCTFailableInvocation.h │ │ │ │ │ ├── Xcode_15_0_XCTFixedPriorityTestScheduler.h │ │ │ │ │ ├── Xcode_15_0_XCTFuture.h │ │ │ │ │ ├── Xcode_15_0_XCTHarnessEventReporting.h │ │ │ │ │ ├── Xcode_15_0_XCTImageEncoding-XCTImageQuality.h │ │ │ │ │ ├── Xcode_15_0_XCTInProcessSymbolicationService.h │ │ │ │ │ ├── Xcode_15_0_XCTIssue.h │ │ │ │ │ ├── Xcode_15_0_XCTIssueHandling.h │ │ │ │ │ ├── Xcode_15_0_XCTKVOExpectation.h │ │ │ │ │ ├── Xcode_15_0_XCTMeasureOptions.h │ │ │ │ │ ├── Xcode_15_0_XCTMeasurement.h │ │ │ │ │ ├── Xcode_15_0_XCTMemgraph.h │ │ │ │ │ ├── Xcode_15_0_XCTMemoryMetric.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingChannel_DaemonRecorderToIDE.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingChannel_DaemonToIDE.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingChannel_DaemonToIDE_All.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingChannel_DaemonToRunner.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingChannel_IDEToDaemon.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingChannel_IDEToRunner.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingChannel_RunnerToDaemon.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingChannel_RunnerToIDE.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_AccessibilityNotificationReporting.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_ActivityReporting.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_AttachmentFinalizing.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_AttachmentFutureResultStatusUpdating.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_AttachmentsDeleting.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_BundleRequesting.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_CapabilityExchange.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_ControlSessionInitiation.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_CrashReporting.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_DebugLogging.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_DiagnosticsCollection.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_EventSynthesis.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_ForcePressureSupportQuerying.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_HIDEventRecording.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_MemoryTesting.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_PerformanceMeasurementReporting.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_ProcessMonitoring.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_ProtectedResourceAuthorization.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_RunnerSessionInitiation.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_ScreenRecording.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_SelfDiagnosisIssueReporting.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_SignpostReceiving.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_SignpostRequesting.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_SiriAutomation.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_SystemConfiguration.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_TestExecution.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_TestReporting.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_UIApplicationStateUpdating.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_UIAutomation.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_UIAutomationEventReporting.h │ │ │ │ │ ├── Xcode_15_0_XCTMessagingRole_UIRecordingControl.h │ │ │ │ │ ├── Xcode_15_0_XCTMetricDiagnosticHelper.h │ │ │ │ │ ├── Xcode_15_0_XCTMetricHelper.h │ │ │ │ │ ├── Xcode_15_0_XCTMetricInstrumentalAdapter.h │ │ │ │ │ ├── Xcode_15_0_XCTMetric_Private.h │ │ │ │ │ ├── Xcode_15_0_XCTMutableIssue.h │ │ │ │ │ ├── Xcode_15_0_XCTNSNotificationExpectation.h │ │ │ │ │ ├── Xcode_15_0_XCTNSPredicateExpectation.h │ │ │ │ │ ├── Xcode_15_0_XCTOSSignpostMetric.h │ │ │ │ │ ├── Xcode_15_0_XCTOutOfProcessSymbolicationService.h │ │ │ │ │ ├── Xcode_15_0_XCTPerformanceMeasurementTimestamp.h │ │ │ │ │ ├── Xcode_15_0_XCTPromise.h │ │ │ │ │ ├── Xcode_15_0_XCTRemoteSignpostListenerProxy.h │ │ │ │ │ ├── Xcode_15_0_XCTRepetitionPolicy.h │ │ │ │ │ ├── Xcode_15_0_XCTReportingSession.h │ │ │ │ │ ├── Xcode_15_0_XCTReportingSessionActivityReporter.h │ │ │ │ │ ├── Xcode_15_0_XCTReportingSessionConfiguration.h │ │ │ │ │ ├── Xcode_15_0_XCTReportingSessionSuiteReporter.h │ │ │ │ │ ├── Xcode_15_0_XCTReportingSessionTestReporter.h │ │ │ │ │ ├── Xcode_15_0_XCTResult.h │ │ │ │ │ ├── Xcode_15_0_XCTRunnerDaemonSession.h │ │ │ │ │ ├── Xcode_15_0_XCTRunnerDaemonSessionUIAutomationDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCTRunnerIDESession.h │ │ │ │ │ ├── Xcode_15_0_XCTRunnerIDESessionDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCTRuntimeIssueDetectionManager.h │ │ │ │ │ ├── Xcode_15_0_XCTRuntimeIssueDetectionPolicy.h │ │ │ │ │ ├── Xcode_15_0_XCTScreenCapturePolicy.h │ │ │ │ │ ├── Xcode_15_0_XCTSerializedTransportWrapper.h │ │ │ │ │ ├── Xcode_15_0_XCTSignpostListener.h │ │ │ │ │ ├── Xcode_15_0_XCTSkippedTestContext.h │ │ │ │ │ ├── Xcode_15_0_XCTSourceCodeContext.h │ │ │ │ │ ├── Xcode_15_0_XCTSourceCodeFrame.h │ │ │ │ │ ├── Xcode_15_0_XCTSourceCodeLocation.h │ │ │ │ │ ├── Xcode_15_0_XCTSourceCodeSymbolInfo.h │ │ │ │ │ ├── Xcode_15_0_XCTStorageMetric.h │ │ │ │ │ ├── Xcode_15_0_XCTSwiftErrorObservation.h │ │ │ │ │ ├── Xcode_15_0_XCTSwiftErrorObservation_Overlay.h │ │ │ │ │ ├── Xcode_15_0_XCTSymbolInfoProviding.h │ │ │ │ │ ├── Xcode_15_0_XCTSymbolicationService.h │ │ │ │ │ ├── Xcode_15_0_XCTTelemetryLogger.h │ │ │ │ │ ├── Xcode_15_0_XCTTelemetryLogging.h │ │ │ │ │ ├── Xcode_15_0_XCTTelemetryObserver.h │ │ │ │ │ ├── Xcode_15_0_XCTTestIdentifier.h │ │ │ │ │ ├── Xcode_15_0_XCTTestIdentifierSet.h │ │ │ │ │ ├── Xcode_15_0_XCTTestIdentifierSetBuilder.h │ │ │ │ │ ├── Xcode_15_0_XCTTestInvocationDescriptor.h │ │ │ │ │ ├── Xcode_15_0_XCTTestRunSession.h │ │ │ │ │ ├── Xcode_15_0_XCTTestRunSessionProvider.h │ │ │ │ │ ├── Xcode_15_0_XCTTestScheduler.h │ │ │ │ │ ├── Xcode_15_0_XCTTestSchedulerWorker.h │ │ │ │ │ ├── Xcode_15_0_XCTTestWorker.h │ │ │ │ │ ├── Xcode_15_0_XCTUniformTypeIdentifier.h │ │ │ │ │ ├── Xcode_15_0_XCTUniformTypeIdentifier_Internal.h │ │ │ │ │ ├── Xcode_15_0_XCTVariationOptions.h │ │ │ │ │ ├── Xcode_15_0_XCTWaiter.h │ │ │ │ │ ├── Xcode_15_0_XCTWaiterManagement.h │ │ │ │ │ ├── Xcode_15_0_XCTWaiterManager.h │ │ │ │ │ ├── Xcode_15_0_XCTWaiterWait.h │ │ │ │ │ ├── Xcode_15_0_XCTest.h │ │ │ │ │ ├── Xcode_15_0_XCTestCase.h │ │ │ │ │ ├── Xcode_15_0_XCTestCaseDiscoveryUIAutomationDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCTestCasePlaceholder.h │ │ │ │ │ ├── Xcode_15_0_XCTestCasePlaceholderRun.h │ │ │ │ │ ├── Xcode_15_0_XCTestCaseRun.h │ │ │ │ │ ├── Xcode_15_0_XCTestCaseRunConfiguration.h │ │ │ │ │ ├── Xcode_15_0_XCTestCaseSuite.h │ │ │ │ │ ├── Xcode_15_0_XCTestCaseUIAutomationDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCTestCastMethodNamesUIAutomationDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCTestConfiguration.h │ │ │ │ │ ├── Xcode_15_0_XCTestConfigurationLoader.h │ │ │ │ │ ├── Xcode_15_0_XCTestCore_CDStructures.h │ │ │ │ │ ├── Xcode_15_0_XCTestDriver.h │ │ │ │ │ ├── Xcode_15_0_XCTestDriverUIAutomationDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCTestExpectation.h │ │ │ │ │ ├── Xcode_15_0_XCTestExpectationDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCTestLog.h │ │ │ │ │ ├── Xcode_15_0_XCTestManager_DaemonConnectionInterface.h │ │ │ │ │ ├── Xcode_15_0_XCTestManager_IDEInterface.h │ │ │ │ │ ├── Xcode_15_0_XCTestMisuseObserver.h │ │ │ │ │ ├── Xcode_15_0_XCTestObservationCenter.h │ │ │ │ │ ├── Xcode_15_0_XCTestObserver.h │ │ │ │ │ ├── Xcode_15_0_XCTestProbe.h │ │ │ │ │ ├── Xcode_15_0_XCTestRun.h │ │ │ │ │ ├── Xcode_15_0_XCTestSuite.h │ │ │ │ │ ├── Xcode_15_0_XCTestSuiteRun.h │ │ │ │ │ ├── Xcode_15_0__Dummy_ConformingToLegacyProtocolNames.h │ │ │ │ │ ├── Xcode_15_0__XCTExceptionPointer.h │ │ │ │ │ ├── Xcode_15_0__XCTRunnerDaemonSessionDummyExportedObject.h │ │ │ │ │ ├── Xcode_15_0__XCTSkipFailureException.h │ │ │ │ │ ├── Xcode_15_0__XCTTestIdentifierPlaceholder.h │ │ │ │ │ ├── Xcode_15_0__XCTTestIdentifierSet_Placeholder.h │ │ │ │ │ ├── Xcode_15_0__XCTTestIdentifierSet_Set.h │ │ │ │ │ ├── Xcode_15_0__XCTTestIdentifier_Array.h │ │ │ │ │ ├── Xcode_15_0__XCTTestIdentifier_Class.h │ │ │ │ │ ├── Xcode_15_0__XCTTestIdentifier_Class_LegacyEncoding.h │ │ │ │ │ ├── Xcode_15_0__XCTTestIdentifier_Double.h │ │ │ │ │ ├── Xcode_15_0__XCTTestIdentifier_Method_LegacyEncoding.h │ │ │ │ │ ├── Xcode_15_0__XCTTestIdentifier_SingleContainer.h │ │ │ │ │ ├── Xcode_15_0__XCTestCaseInterruptionException.h │ │ │ │ │ ├── Xcode_15_0__XCTestObservationInternal.h │ │ │ │ │ └── Xcode_15_0__XCTestObservationPrivate.h │ │ │ ├── XCUIAutomation │ │ │ │ ├── Xcode_14_0 │ │ │ │ │ ├── Xcode_14_0_NSError-XCUIApplicationProcess.h │ │ │ │ │ ├── Xcode_14_0_XCAXClient_iOS.h │ │ │ │ │ ├── Xcode_14_0_XCApplicationQuery.h │ │ │ │ │ ├── Xcode_14_0_XCElementSnapshot-XCUIElementAttributes.h │ │ │ │ │ ├── Xcode_14_0_XCPointerEvent.h │ │ │ │ │ ├── Xcode_14_0_XCPointerEventPath.h │ │ │ │ │ ├── Xcode_14_0_XCSourceCodeRecording.h │ │ │ │ │ ├── Xcode_14_0_XCSourceCodeTreeNode.h │ │ │ │ │ ├── Xcode_14_0_XCSourceCodeTreeNodeEnumerator.h │ │ │ │ │ ├── Xcode_14_0_XCSynthesizedEventRecord.h │ │ │ │ │ ├── Xcode_14_0_XCTAttachment-XCUIScreenshot_ConvenienceInitializers.h │ │ │ │ │ ├── Xcode_14_0_XCTCPUMetric-UIAutomation_Private.h │ │ │ │ │ ├── Xcode_14_0_XCTContext-XCUIInterruptionMonitor.h │ │ │ │ │ ├── Xcode_14_0_XCTElementSnapshotAttributeDataSource.h │ │ │ │ │ ├── Xcode_14_0_XCTElementSnapshotProvider.h │ │ │ │ │ ├── Xcode_14_0_XCTIssueHandling.h │ │ │ │ │ ├── Xcode_14_0_XCTMacCatalystStatusProviding.h │ │ │ │ │ ├── Xcode_14_0_XCTMemoryMetric-UIAutomation_Private.h │ │ │ │ │ ├── Xcode_14_0_XCTMessagingChannel_RunnerToUIProcess.h │ │ │ │ │ ├── Xcode_14_0_XCTMessagingRole_UIApplicationStateUpdating.h │ │ │ │ │ ├── Xcode_14_0_XCTMessagingRole_UIAutomationProcess.h │ │ │ │ │ ├── Xcode_14_0_XCTNSPredicateExpectationObject.h │ │ │ │ │ ├── Xcode_14_0_XCTRunnerAutomationSession.h │ │ │ │ │ ├── Xcode_14_0_XCTRunnerDaemonSessionEventRequest.h │ │ │ │ │ ├── Xcode_14_0_XCTRunnerIDESessionUIAutomationDelegate.h │ │ │ │ │ ├── Xcode_14_0_XCTStorageMetric-UIAutomation_Private.h │ │ │ │ │ ├── Xcode_14_0_XCTestCase-UIAutomationDelegate.h │ │ │ │ │ ├── Xcode_14_0_XCTestCaseIssueHandlingUIAutomationDelegate.h │ │ │ │ │ ├── Xcode_14_0_XCUIAXNotificationHandling.h │ │ │ │ │ ├── Xcode_14_0_XCUIAccessibilityAction.h │ │ │ │ │ ├── Xcode_14_0_XCUIAccessibilityAudit.h │ │ │ │ │ ├── Xcode_14_0_XCUIAccessibilityAuditIssue.h │ │ │ │ │ ├── Xcode_14_0_XCUIAccessibilityInterface.h │ │ │ │ │ ├── Xcode_14_0_XCUIApplication.h │ │ │ │ │ ├── Xcode_14_0_XCUIApplicationAutomationSessionProviding.h │ │ │ │ │ ├── Xcode_14_0_XCUIApplicationImpl.h │ │ │ │ │ ├── Xcode_14_0_XCUIApplicationImplDepot.h │ │ │ │ │ ├── Xcode_14_0_XCUIApplicationManaging.h │ │ │ │ │ ├── Xcode_14_0_XCUIApplicationMonitor.h │ │ │ │ │ ├── Xcode_14_0_XCUIApplicationOpenRequest.h │ │ │ │ │ ├── Xcode_14_0_XCUIApplicationPlatformServicesProviderDelegate.h │ │ │ │ │ ├── Xcode_14_0_XCUIApplicationProcess.h │ │ │ │ │ ├── Xcode_14_0_XCUIApplicationProcessDelegate.h │ │ │ │ │ ├── Xcode_14_0_XCUIApplicationProcessManaging.h │ │ │ │ │ ├── Xcode_14_0_XCUIApplicationProcessTracker.h │ │ │ │ │ ├── Xcode_14_0_XCUIApplicationRegistry.h │ │ │ │ │ ├── Xcode_14_0_XCUIApplicationRegistryRecord.h │ │ │ │ │ ├── Xcode_14_0_XCUIApplicationSpecifier.h │ │ │ │ │ ├── Xcode_14_0_XCUIAutomation_CDStructures.h │ │ │ │ │ ├── Xcode_14_0_XCUIButtonConsole.h │ │ │ │ │ ├── Xcode_14_0_XCUICoordinate.h │ │ │ │ │ ├── Xcode_14_0_XCUIDefaultIssueHandler.h │ │ │ │ │ ├── Xcode_14_0_XCUIDevice.h │ │ │ │ │ ├── Xcode_14_0_XCUIDeviceAutomationModeInterface.h │ │ │ │ │ ├── Xcode_14_0_XCUIDeviceEventAndStateInterface.h │ │ │ │ │ ├── Xcode_14_0_XCUIDeviceSetupManager.h │ │ │ │ │ ├── Xcode_14_0_XCUIElement.h │ │ │ │ │ ├── Xcode_14_0_XCUIElementAttributesPrivate.h │ │ │ │ │ ├── Xcode_14_0_XCUIElementBaseEventTarget.h │ │ │ │ │ ├── Xcode_14_0_XCUIElementEventTarget.h │ │ │ │ │ ├── Xcode_14_0_XCUIElementQuery.h │ │ │ │ │ ├── Xcode_14_0_XCUIElementSnapshotCoordinateTransforms.h │ │ │ │ │ ├── Xcode_14_0_XCUIElementTypeQueryProvider_Private.h │ │ │ │ │ ├── Xcode_14_0_XCUIEventSynthesisRequest.h │ │ │ │ │ ├── Xcode_14_0_XCUIHitPointResult.h │ │ │ │ │ ├── Xcode_14_0_XCUIInterruptionHandler.h │ │ │ │ │ ├── Xcode_14_0_XCUIInterruptionMonitor.h │ │ │ │ │ ├── Xcode_14_0_XCUIInterruptionMonitoring.h │ │ │ │ │ ├── Xcode_14_0_XCUIIssueDiagnosticsProviding.h │ │ │ │ │ ├── Xcode_14_0_XCUIKnobControl.h │ │ │ │ │ ├── Xcode_14_0_XCUILocalDeviceScreenDataSource.h │ │ │ │ │ ├── Xcode_14_0_XCUILocalDeviceScreenshotIPCInterface.h │ │ │ │ │ ├── Xcode_14_0_XCUIPlatformApplicationManager.h │ │ │ │ │ ├── Xcode_14_0_XCUIPlatformApplicationServicesProviding.h │ │ │ │ │ ├── Xcode_14_0_XCUIPointTransformationRequest.h │ │ │ │ │ ├── Xcode_14_0_XCUIRecorderNodeFinder.h │ │ │ │ │ ├── Xcode_14_0_XCUIRecorderNodeFinderMatch.h │ │ │ │ │ ├── Xcode_14_0_XCUIRecorderTimingMessage.h │ │ │ │ │ ├── Xcode_14_0_XCUIRecorderUtilities.h │ │ │ │ │ ├── Xcode_14_0_XCUIRectTransformationRequest.h │ │ │ │ │ ├── Xcode_14_0_XCUIRemoteAccessibilityInterface.h │ │ │ │ │ ├── Xcode_14_0_XCUIRemoteSiriInterface.h │ │ │ │ │ ├── Xcode_14_0_XCUIResetAuthorizationStatusOfProtectedResourcesInterface.h │ │ │ │ │ ├── Xcode_14_0_XCUIScreen.h │ │ │ │ │ ├── Xcode_14_0_XCUIScreenDataSource.h │ │ │ │ │ ├── Xcode_14_0_XCUIScreenshot.h │ │ │ │ │ ├── Xcode_14_0_XCUISiriService.h │ │ │ │ │ ├── Xcode_14_0_XCUISnapshotGenerationTracker.h │ │ │ │ │ ├── Xcode_14_0_XCUITransformParameters.h │ │ │ │ │ └── Xcode_14_0__XCTMessaging_VoidProtocol.h │ │ │ │ └── Xcode_15_0 │ │ │ │ │ ├── Xcode_15_0_NSError-XCUIApplicationProcess.h │ │ │ │ │ ├── Xcode_15_0_NSString-XCUIAdditions.h │ │ │ │ │ ├── Xcode_15_0_XCAXClient_iOS.h │ │ │ │ │ ├── Xcode_15_0_XCActivityRecord-UITesting.h │ │ │ │ │ ├── Xcode_15_0_XCApplicationQuery.h │ │ │ │ │ ├── Xcode_15_0_XCElementSnapshot-XCUIElementAttributes.h │ │ │ │ │ ├── Xcode_15_0_XCPointerEvent.h │ │ │ │ │ ├── Xcode_15_0_XCPointerEventPath.h │ │ │ │ │ ├── Xcode_15_0_XCSourceCodeRecording.h │ │ │ │ │ ├── Xcode_15_0_XCSourceCodeTreeNode.h │ │ │ │ │ ├── Xcode_15_0_XCSourceCodeTreeNodeEnumerator.h │ │ │ │ │ ├── Xcode_15_0_XCSynthesizedEventRecord.h │ │ │ │ │ ├── Xcode_15_0_XCTApplicationBundleInfo-AutomaticTestRunConfigurations.h │ │ │ │ │ ├── Xcode_15_0_XCTAttachment-XCUIScreenshot_ConvenienceInitializers.h │ │ │ │ │ ├── Xcode_15_0_XCTCPUMetric-UIAutomation_Private.h │ │ │ │ │ ├── Xcode_15_0_XCTContext-XCUIInterruptionMonitor.h │ │ │ │ │ ├── Xcode_15_0_XCTImageEncoding-XCTImageEncodingXCTImageQualityUIAutomationDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCTMemoryMetric-UIAutomation_Private.h │ │ │ │ │ ├── Xcode_15_0_XCTNSPredicateExpectationObject.h │ │ │ │ │ ├── Xcode_15_0_XCTRunnerAutomationSession.h │ │ │ │ │ ├── Xcode_15_0_XCTRunnerDaemonSession-XCUIPlatformApplicationServicesProviding.h │ │ │ │ │ ├── Xcode_15_0_XCTRunnerDaemonSessionEventRequest.h │ │ │ │ │ ├── Xcode_15_0_XCTRunnerIDESession-UIAutomation.h │ │ │ │ │ ├── Xcode_15_0_XCTRunnerIDESessionUIAutomationDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCTStorageMetric-UIAutomation_Private.h │ │ │ │ │ ├── Xcode_15_0_XCTestCase-UIAutomationDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCTestCaseIssueHandlingUIAutomationDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCTestDriver-XCTTestRunSessionUIAutomationDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCUIAXNotificationHandling.h │ │ │ │ │ ├── Xcode_15_0_XCUIAccessibilityAction.h │ │ │ │ │ ├── Xcode_15_0_XCUIAccessibilityAudit.h │ │ │ │ │ ├── Xcode_15_0_XCUIAccessibilityAuditIssue.h │ │ │ │ │ ├── Xcode_15_0_XCUIAccessibilityInterface.h │ │ │ │ │ ├── Xcode_15_0_XCUIApplication.h │ │ │ │ │ ├── Xcode_15_0_XCUIApplicationAutomationSessionProviding.h │ │ │ │ │ ├── Xcode_15_0_XCUIApplicationImpl.h │ │ │ │ │ ├── Xcode_15_0_XCUIApplicationImplDepot.h │ │ │ │ │ ├── Xcode_15_0_XCUIApplicationManaging.h │ │ │ │ │ ├── Xcode_15_0_XCUIApplicationMonitor.h │ │ │ │ │ ├── Xcode_15_0_XCUIApplicationOpenRequest.h │ │ │ │ │ ├── Xcode_15_0_XCUIApplicationPlatformServicesProviderDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCUIApplicationProcess.h │ │ │ │ │ ├── Xcode_15_0_XCUIApplicationProcessDelegate.h │ │ │ │ │ ├── Xcode_15_0_XCUIApplicationProcessManaging.h │ │ │ │ │ ├── Xcode_15_0_XCUIApplicationProcessTracker.h │ │ │ │ │ ├── Xcode_15_0_XCUIApplicationRegistry.h │ │ │ │ │ ├── Xcode_15_0_XCUIApplicationRegistryRecord.h │ │ │ │ │ ├── Xcode_15_0_XCUIApplicationSpecifier.h │ │ │ │ │ ├── Xcode_15_0_XCUIAutomation_CDStructures.h │ │ │ │ │ ├── Xcode_15_0_XCUIButtonConsole.h │ │ │ │ │ ├── Xcode_15_0_XCUICoordinate.h │ │ │ │ │ ├── Xcode_15_0_XCUIDefaultIssueHandler.h │ │ │ │ │ ├── Xcode_15_0_XCUIDevice.h │ │ │ │ │ ├── Xcode_15_0_XCUIDeviceAutomationModeInterface.h │ │ │ │ │ ├── Xcode_15_0_XCUIDeviceDelayedAttachmentTransferSupportInterface.h │ │ │ │ │ ├── Xcode_15_0_XCUIDeviceEventAndStateInterface.h │ │ │ │ │ ├── Xcode_15_0_XCUIDeviceSetupManager.h │ │ │ │ │ ├── Xcode_15_0_XCUIElement.h │ │ │ │ │ ├── Xcode_15_0_XCUIElementAttributesPrivate.h │ │ │ │ │ ├── Xcode_15_0_XCUIElementBaseEventTarget.h │ │ │ │ │ ├── Xcode_15_0_XCUIElementEmbeddedEventTarget.h │ │ │ │ │ ├── Xcode_15_0_XCUIElementEventTarget.h │ │ │ │ │ ├── Xcode_15_0_XCUIElementHitPointCoordinate.h │ │ │ │ │ ├── Xcode_15_0_XCUIElementQuery.h │ │ │ │ │ ├── Xcode_15_0_XCUIElementTypeQueryProvider_Private.h │ │ │ │ │ ├── Xcode_15_0_XCUIEventSynthesisRequest.h │ │ │ │ │ ├── Xcode_15_0_XCUIHitPointResult.h │ │ │ │ │ ├── Xcode_15_0_XCUIInterruptionHandler.h │ │ │ │ │ ├── Xcode_15_0_XCUIInterruptionMonitor.h │ │ │ │ │ ├── Xcode_15_0_XCUIInterruptionMonitoring.h │ │ │ │ │ ├── Xcode_15_0_XCUIIssueDiagnosticsProviding.h │ │ │ │ │ ├── Xcode_15_0_XCUIKnobControl.h │ │ │ │ │ ├── Xcode_15_0_XCUILocalDeviceScreenDataSource.h │ │ │ │ │ ├── Xcode_15_0_XCUILocalDeviceScreenshotIPCInterface.h │ │ │ │ │ ├── Xcode_15_0_XCUILocation.h │ │ │ │ │ ├── Xcode_15_0_XCUIPlatformApplicationManager.h │ │ │ │ │ ├── Xcode_15_0_XCUIPlatformApplicationServicesProviding.h │ │ │ │ │ ├── Xcode_15_0_XCUIPointTransformationRequest.h │ │ │ │ │ ├── Xcode_15_0_XCUIRecorderNodeFinder.h │ │ │ │ │ ├── Xcode_15_0_XCUIRecorderNodeFinderMatch.h │ │ │ │ │ ├── Xcode_15_0_XCUIRecorderTimingMessage.h │ │ │ │ │ ├── Xcode_15_0_XCUIRecorderUtilities.h │ │ │ │ │ ├── Xcode_15_0_XCUIRectTransformationRequest.h │ │ │ │ │ ├── Xcode_15_0_XCUIRemoteAccessibilityInterface.h │ │ │ │ │ ├── Xcode_15_0_XCUIRemoteSiriInterface.h │ │ │ │ │ ├── Xcode_15_0_XCUIResetAuthorizationStatusOfProtectedResourcesInterface.h │ │ │ │ │ ├── Xcode_15_0_XCUIScreen.h │ │ │ │ │ ├── Xcode_15_0_XCUIScreenDataSource.h │ │ │ │ │ ├── Xcode_15_0_XCUIScreenshot.h │ │ │ │ │ ├── Xcode_15_0_XCUISiriService.h │ │ │ │ │ ├── Xcode_15_0_XCUISnapshotGenerationTracker.h │ │ │ │ │ ├── Xcode_15_0_XCUISystem.h │ │ │ │ │ ├── Xcode_15_0_XCUITransformParameters.h │ │ │ │ │ └── Xcode_15_0_XCUIXcodeApplicationManaging.h │ │ │ └── dump.py │ │ └── Manual │ │ │ ├── CoreLocation │ │ │ └── CLLocationManager+Private.h │ │ │ ├── Disassembled │ │ │ └── _XCTCurrentTestCase.h │ │ │ ├── PublicHeadersExposure.h │ │ │ └── XCTest │ │ │ ├── DTXConnection │ │ │ └── Xcode_15_0_DTXConnection.h │ │ │ ├── DTXProxyChannel │ │ │ ├── Xcode_10_0_DTXProxyChannel.h │ │ │ ├── Xcode_10_1_DTXProxyChannel.h │ │ │ ├── Xcode_10_2_DTXProxyChannel.h │ │ │ ├── Xcode_10_3_DTXProxyChannel.h │ │ │ ├── Xcode_11_0_DTXProxyChannel.h │ │ │ ├── Xcode_12_0_DTXProxyChannel.h │ │ │ ├── Xcode_13_0_DTXProxyChannel.h │ │ │ └── Xcode_15_0_DTXProxyChannel.h │ │ │ ├── SharedHeader │ │ │ ├── Includes │ │ │ │ ├── DispatchEventEventBuilder.h │ │ │ │ └── Xcode_All_SharedHeader.h │ │ │ ├── Xcode_10_0_SharedHeader.h │ │ │ ├── Xcode_10_1_SharedHeader.h │ │ │ ├── Xcode_10_2_SharedHeader.h │ │ │ ├── Xcode_10_3_SharedHeader.h │ │ │ ├── Xcode_11_0_SharedHeader.h │ │ │ ├── Xcode_12_0_SharedHeader.h │ │ │ ├── Xcode_13_0_SharedHeader.h │ │ │ ├── Xcode_14_0_SharedHeader.h │ │ │ └── Xcode_15_0_SharedHeader.h │ │ │ └── Xcode_10_All_XCTTestSchedulerDelegate.h │ │ ├── Reporting │ │ ├── Attachments │ │ │ ├── Attachment.swift │ │ │ └── AttachmentContent.swift │ │ ├── CurrentTestCase │ │ │ ├── AutomaticCurrentTestCaseProvider.swift │ │ │ ├── CurrentTestCaseProvider.swift │ │ │ ├── CurrentTestCaseSettable.swift │ │ │ └── ManuallySetCurrentTestCaseProvider.swift │ │ ├── FileLineForFailureProvider │ │ │ ├── FileLineForFailureProvider.swift │ │ │ ├── Impls │ │ │ │ ├── FirstOfTargetFileFromCallStackFileLineForFailureProvider.swift │ │ │ │ ├── LastCallOfCurrentTestFileLineForFailureProvider.swift │ │ │ │ └── NoopFileLineForFailureProvider.swift │ │ │ └── StackTrace │ │ │ │ ├── ExtendedStackTraceEntry.swift │ │ │ │ ├── ExtendedStackTraceEntryFromStackTraceEntryConverter.swift │ │ │ │ ├── ExtendedStackTraceEntryFromStackTraceEntryConverterImpl.swift │ │ │ │ ├── ExtendedStackTraceProvider.swift │ │ │ │ ├── ExtendedStackTraceProviderImpl.swift │ │ │ │ └── Simple │ │ │ │ ├── StackTraceEntry.swift │ │ │ │ ├── StackTraceProvider.swift │ │ │ │ └── StackTraceProviderImpl.swift │ │ ├── Stepping │ │ │ ├── Models │ │ │ │ ├── StepLog.swift │ │ │ │ ├── StepLogAfter.swift │ │ │ │ ├── StepLogBefore.swift │ │ │ │ └── StepLoggerResultWrapper.swift │ │ │ ├── StepLogger.swift │ │ │ ├── StepLoggerImpl.swift │ │ │ ├── StepLogsCleaner.swift │ │ │ ├── StepLogsProvider.swift │ │ │ └── Stepper.swift │ │ ├── TestFailureRecorder.swift │ │ ├── WorkaroundForDeprecatonWarning │ │ │ ├── TestCaseSuppressingWarningAboutDeprecatedRecordFailure.h │ │ │ ├── TestCaseSuppressingWarningAboutDeprecatedRecordFailure.m │ │ │ ├── XCTestCase+SuppressingWarningAboutDeprecatedRecordFailure.h │ │ │ └── XCTestCase+SuppressingWarningAboutDeprecatedRecordFailure.m │ │ ├── XcTestFailureRecorder.swift │ │ ├── XctActivityStepLogger.swift │ │ └── XctAttachmentsAdder │ │ │ ├── XctAttachmentsAdder.swift │ │ │ └── XctAttachmentsAdderImpl.swift │ │ └── Utilities │ │ ├── Extensions │ │ ├── Collection+ElementOrFail.swift │ │ ├── Collection+OnlyOrFail.swift │ │ ├── Optional+DescriptionOrNil.swift │ │ └── Optional+UnwrapOrFail.swift │ │ ├── FileSystem │ │ ├── ApplicationPaths │ │ │ ├── ApplicationBundleProvider.swift │ │ │ └── Impls │ │ │ │ ├── BuiltApplicationPathsProvider.swift │ │ │ │ └── InstalledApplicationPathsProvider.swift │ │ ├── CurrentSimulatorFileSystemRootProvider │ │ │ ├── CurrentApplicationCurrentSimulatorFileSystemRootProvider.swift │ │ │ └── CurrentSimulatorFileSystemRootProvider.swift │ │ └── SimulatorFileSystemRoot │ │ │ └── SimulatorFileSystemRoot.swift │ │ ├── Media │ │ ├── ImageProvider │ │ │ ├── ImageProvider.swift │ │ │ ├── LazyBundledImageProvider.swift │ │ │ ├── LazyByPathImageProvider.swift │ │ │ └── StubbedImageProvider.swift │ │ ├── ImagesProvider │ │ │ ├── ImagesProvider.swift │ │ │ └── StubbedImagesProvider.swift │ │ ├── PhotoSaver │ │ │ ├── PhotoSaver.swift │ │ │ ├── PhotoSaverCompletion.swift │ │ │ └── PhotoSaverImpl.swift │ │ └── PhotoStubber │ │ │ ├── PhotoStubber.swift │ │ │ └── PhotoStubberImpl.swift │ │ ├── Permissions │ │ ├── Facade │ │ │ ├── ApplicationPermissionsSetter.swift │ │ │ └── ApplicationPermissionsSetterImpl.swift │ │ ├── Factory │ │ │ ├── ApplicationPermissionsSetterFactory.swift │ │ │ └── ApplicationPermissionsSetterFactoryImpl │ │ │ │ ├── ApplicationPermissionsSetterFactoryImpl.swift │ │ │ │ ├── Notifications │ │ │ │ ├── AlwaysFailing │ │ │ │ │ └── AlwaysFailingNotificationsApplicationPermissionSetterFactory.swift │ │ │ │ └── NotificationsApplicationPermissionSetterFactory.swift │ │ │ │ └── TccDb │ │ │ │ ├── TccDbApplicationPermissionSetterFactory.swift │ │ │ │ └── TccDbApplicationPermissionSetterFactoryImpl.swift │ │ ├── Implementation │ │ │ ├── AlwaysFailing │ │ │ │ └── AlwaysFailingApplicationPermissionWithoutNotDeterminedStateSetter.swift │ │ │ ├── Geolocation │ │ │ │ ├── Factory │ │ │ │ │ ├── GeolocationApplicationPermissionSetterFactory.swift │ │ │ │ │ └── GeolocationApplicationPermissionSetterFactoryImpl.swift │ │ │ │ └── IosVersionSpecific │ │ │ │ │ ├── AllowedDeniedNotDeterminedStateToClAuthorizationStatusConverter.swift │ │ │ │ │ ├── ClLocationManagerAuthorizationStatusWaiter.swift │ │ │ │ │ ├── Ios12GeolocationApplicationPermissionSetter.swift │ │ │ │ │ └── IosFrom9To11GeolocationApplicationPermissionSetter.swift │ │ │ └── TccDb │ │ │ │ ├── Facade │ │ │ │ └── TccDbApplicationPermissionSetter.swift │ │ │ │ └── Support │ │ │ │ └── TccPrivacySettingsManager │ │ │ │ ├── Models │ │ │ │ ├── TccService.swift │ │ │ │ └── TccServicePrivacyState.swift │ │ │ │ ├── TccDb │ │ │ │ ├── Impls │ │ │ │ │ ├── ErrorsWrappingTccDb.swift │ │ │ │ │ ├── TccDb_iOS_from_10_to_13.swift │ │ │ │ │ └── TccDb_iOS_from_14.swift │ │ │ │ ├── Model │ │ │ │ │ └── TccDbServiceId.swift │ │ │ │ ├── TccDb.swift │ │ │ │ ├── TccDbFactory.swift │ │ │ │ ├── TccDbFactoryImpl.swift │ │ │ │ └── TccDbFinder │ │ │ │ │ ├── TccDbFinder.swift │ │ │ │ │ └── TccDbFinderImpl.swift │ │ │ │ ├── TccPrivacySettingsManager.swift │ │ │ │ └── TccPrivacySettingsManagerImpl.swift │ │ └── Single │ │ │ ├── ApplicationPermissionSetter │ │ │ ├── AllowedDeniedNotDeterminedState.swift │ │ │ └── ApplicationPermissionSetter.swift │ │ │ └── ApplicationPermissionWithoutNotDeterminedStateSetter │ │ │ ├── AllowedDeniedState.swift │ │ │ └── ApplicationPermissionWithoutNotDeterminedStateSetter.swift │ │ ├── UnavoidableFailure │ │ ├── TestFailureRecorder+UnavoidableFailure.swift │ │ └── UnavoidableFailure.swift │ │ └── XcodeVersion │ │ ├── XcodeVersion.swift │ │ ├── XcodeVersionProvider.swift │ │ ├── XcodeVersionProviderObjC.h │ │ └── XcodeVersionProviderObjC.m ├── UiKit │ ├── README.md │ └── Sources │ │ ├── Extensions │ │ ├── CoreGraphics │ │ │ ├── CGFloat+Extensions.swift │ │ │ ├── CGPoint+Extensions.swift │ │ │ ├── CGRect │ │ │ │ ├── CGRect+Alignment.swift │ │ │ │ ├── CGRect+Area.swift │ │ │ │ ├── CGRect+Insets.swift │ │ │ │ ├── CGRect+Pixels.swift │ │ │ │ ├── CGRect+Rounding.swift │ │ │ │ └── CGRect+Transforming.swift │ │ │ ├── CGSize+Extensions.swift │ │ │ ├── CGVector+Extensions.swift │ │ │ └── Coordinates+Operators.swift │ │ └── UIKit │ │ │ ├── UIDevice+Extension.swift │ │ │ ├── UIEdgeInsets+Extensions.swift │ │ │ └── UIView+Extensions.swift │ │ ├── IosVersion │ │ ├── IosVersion.swift │ │ ├── IosVersionProvider │ │ │ ├── IosVersionProvider.swift │ │ │ └── UiDeviceIosVersionProvider.swift │ │ └── MixboxInternalStaticChecks │ │ │ └── MixboxIosVersions.swift │ │ └── UserInterfaceIdiomProvider │ │ ├── UiDeviceUserInterfaceIdiomProvider.swift │ │ └── UserInterfaceIdiomProvider.swift └── UiTestsFoundation │ └── Sources │ ├── Di │ ├── ApplicationIndependentUiTestsDependencyCollectionRegisterer.swift │ └── IpcClientsDependencyCollectionRegisterer.swift │ ├── Interaction │ └── Interaction │ │ └── Common │ │ ├── InteractionFailure.swift │ │ ├── InteractionResult.swift │ │ └── InteractionType.swift │ ├── IpcClients │ ├── IpcClients.md │ ├── Keyboard │ │ ├── Builder │ │ │ └── KeyboardEventBuilder.swift │ │ ├── IpcKeyboardEventInjector.swift │ │ └── SyncronousKeyboardEventInjector │ │ │ ├── SynchronousKeyboardEventInjector+Builder.swift │ │ │ ├── SynchronousKeyboardEventInjector.swift │ │ │ └── SynchronousKeyboardEventInjectorImpl.swift │ ├── LocationSimulation │ │ └── LocationSimulator.swift │ ├── OpenUrl │ │ ├── UrlOpener.swift │ │ └── UrlOpenerImpl.swift │ ├── PageObjectMakingHelper │ │ ├── AlertDisplayer │ │ │ └── IpcAlertDisplayer.swift │ │ └── PageObjectElementGenerationWizardRunner │ │ │ └── IpcPageObjectElementGenerationWizardRunner.swift │ ├── Pasteboard │ │ └── IpcPasteboard.swift │ └── ScrollingHintsProvider │ │ ├── ScrollingHintsProvider.swift │ │ └── ScrollingHintsProviderImpl.swift │ ├── LegacyNetworkMocking │ ├── Autorecording │ │ ├── Factory │ │ │ ├── AutomaticRecorderAndReplayerCreationSettingsProvider │ │ │ │ ├── AutomaticRecorderAndReplayerCreationSettings.swift │ │ │ │ ├── AutomaticRecorderAndReplayerCreationSettingsProvider.swift │ │ │ │ └── AutomaticRecorderAndReplayerCreationSettingsProviderImpl.swift │ │ │ ├── NetworkAutomaticRecorderAndReplayerProvider │ │ │ │ ├── NetworkAutomaticRecorderAndReplayerProvider.swift │ │ │ │ └── NetworkAutomaticRecorderAndReplayerProviderImpl.swift │ │ │ ├── RecordedNetworkSessionFileLoader │ │ │ │ ├── RecordedNetworkSessionFileLoader.swift │ │ │ │ └── RecordedNetworkSessionFileLoaderImpl.swift │ │ │ └── RecordedNetworkSessionPath │ │ │ │ ├── RecordedNetworkSessionDirectory.swift │ │ │ │ ├── RecordedNetworkSessionDirectoryWithDefaultName.swift │ │ │ │ └── RecordedNetworkSessionPath.swift │ │ ├── Model │ │ │ ├── RecordedNetworkSession.swift │ │ │ ├── RecordedStub.swift │ │ │ ├── RecordedStubBucket.swift │ │ │ ├── RecordedStubRequest.swift │ │ │ ├── RecordedStubResponse.swift │ │ │ └── RecordedStubResponseData.swift │ │ ├── Observing │ │ │ ├── DummyNetworkReplayingObserver.swift │ │ │ └── NetworkReplayingObserver.swift │ │ └── Player │ │ │ ├── NetworkPlayer.swift │ │ │ ├── RecordingNetworkPlayer │ │ │ ├── Parts │ │ │ │ ├── IdForCallOfCheckpointFunctionInserter.swift │ │ │ │ ├── MonitoredNetworkRequestForRecordingValidator.swift │ │ │ │ └── RecordedNetworkSessionWriter.swift │ │ │ └── RecordingNetworkPlayer.swift │ │ │ └── ReplayingNetworkPlayer │ │ │ ├── RecordedSessionStubber.swift │ │ │ ├── RecordedSessionStubberImpl.swift │ │ │ └── ReplayingNetworkPlayer.swift │ ├── Facade │ │ ├── Everything │ │ │ ├── LegacyNetworking.swift │ │ │ └── LegacyNetworkingImpl.swift │ │ ├── Recording │ │ │ ├── LegacyNetworkRecording.swift │ │ │ └── LegacyNetworkRecordingImpl.swift │ │ └── Stubbing │ │ │ └── LegacyNetworkStubbing.swift │ ├── Recording │ │ ├── MonitoredNetworkRequest.swift │ │ ├── NetworkRecorderLifecycle.swift │ │ └── NetworkRecordsProvider.swift │ └── Stubbing │ │ ├── Models │ │ └── HttpMethod.swift │ │ ├── Request │ │ └── StubRequestBuilder.swift │ │ └── Response │ │ ├── StubResponseBuilder.swift │ │ └── StubResponseBuilderResponseValue.swift │ ├── PageObject │ ├── BasePageObjectDependenciesFactory.swift │ ├── DefaultBaseClasses │ │ ├── BasePageObject.swift │ │ ├── BasePageObjectWithDefaultInitializer.swift │ │ └── BasePageObjects.swift │ ├── PageObject.swift │ ├── PageObjectDependenciesFactory.swift │ └── Registration │ │ ├── PageObjectRegistrar.swift │ │ └── PageObjectRegistrarImpl.swift │ ├── PageObjectElement │ ├── DI │ │ ├── Builders │ │ │ ├── FieldBuilder.swift │ │ │ ├── FieldBuilderCallImplementation.swift │ │ │ ├── FieldBuilderProperty+CustomizableScalar.swift │ │ │ ├── FieldBuilderProperty.swift │ │ │ └── Impls │ │ │ │ ├── StructureFieldBuilderCallImplementation.swift │ │ │ │ └── SubstructureFieldBuilderCallImplementation.swift │ │ ├── ElementFactory.swift │ │ ├── ElementFactoryElementSettings.swift │ │ ├── ElementFactoryImpl.swift │ │ ├── PageObjectElementCoreFactory.swift │ │ └── PageObjectElementCoreFactoryImpl.swift │ ├── Element.swift │ ├── Finder │ │ ├── CandidatesDescription.swift │ │ ├── ElementFinder.swift │ │ ├── ElementQuery.swift │ │ ├── ElementQueryResolvingState.swift │ │ ├── ResolvedElementQuery.swift │ │ └── UiKitHierarchy │ │ │ ├── UiKitHierarchyElementFinder.swift │ │ │ ├── UiKitHierarchyElementQuery.swift │ │ │ └── UiKitHierarchyElementSnaphot.swift │ ├── InteractionSettings │ │ ├── ElementSettings │ │ │ └── ElementSettings.swift │ │ ├── InteractionSettings │ │ │ └── InteractionSettings.swift │ │ ├── InteractionSettingsDefaults │ │ │ ├── InteractionSettingsDefaults.swift │ │ │ ├── InteractionSettingsDefaultsProvider.swift │ │ │ └── InteractionSettingsDefaultsProviderImpl.swift │ │ └── Models │ │ │ ├── FunctionDeclarationLocation.swift │ │ │ ├── InteractionMode.swift │ │ │ └── SearchMode.swift │ ├── Interactions │ │ ├── Actions │ │ │ ├── ElementAction │ │ │ │ ├── BaseElementInteractionDependenciesFactory.swift │ │ │ │ ├── ElementInteraction.swift │ │ │ │ ├── ElementInteractionDependencies │ │ │ │ │ ├── Dependencies │ │ │ │ │ │ ├── ApplicationFrameProvider │ │ │ │ │ │ │ └── ApplicationFrameProvider.swift │ │ │ │ │ │ ├── ElementHierarchyDescriptionProvider.swift │ │ │ │ │ │ ├── EventGenerator │ │ │ │ │ │ │ └── EventGenerator.swift │ │ │ │ │ │ ├── FailureFactory │ │ │ │ │ │ │ ├── ApplicationStateProvider │ │ │ │ │ │ │ │ ├── ApplicationState.swift │ │ │ │ │ │ │ │ └── ApplicationStateProvider.swift │ │ │ │ │ │ │ ├── InteractionFailureResultFactory.swift │ │ │ │ │ │ │ └── InteractionFailureResultFactoryImpl.swift │ │ │ │ │ │ ├── Gestures │ │ │ │ │ │ │ ├── ElementSimpleGestures.swift │ │ │ │ │ │ │ └── ElementSimpleGesturesProvider.swift │ │ │ │ │ │ ├── InteractionResultMaker │ │ │ │ │ │ │ ├── InteractionResultMaker.swift │ │ │ │ │ │ │ ├── InteractionResultMakerImpl.swift │ │ │ │ │ │ │ └── ScreenshotAttachmentsMaker.swift │ │ │ │ │ │ ├── InteractionRetrier │ │ │ │ │ │ │ ├── InteractionRetrier.swift │ │ │ │ │ │ │ └── InteractionRetrierImpl.swift │ │ │ │ │ │ ├── MenuItem │ │ │ │ │ │ │ ├── MenuItem.swift │ │ │ │ │ │ │ └── MenuItemProvider.swift │ │ │ │ │ │ ├── NestedInteractionPerformer │ │ │ │ │ │ │ ├── NestedInteractionPerformer.swift │ │ │ │ │ │ │ └── NestedInteractionPerformerImpl.swift │ │ │ │ │ │ ├── Pasteboard │ │ │ │ │ │ │ ├── Pasteboard.swift │ │ │ │ │ │ │ └── UikitPasteboard.swift │ │ │ │ │ │ ├── PerformerOfSpecificImplementationOfInteractionForVisibleElement │ │ │ │ │ │ │ ├── PerformerOfSpecificImplementationOfInteractionForVisibleElement.swift │ │ │ │ │ │ │ └── PerformerOfSpecificImplementationOfInteractionForVisibleElementImpl.swift │ │ │ │ │ │ ├── Resolving │ │ │ │ │ │ │ ├── ElementResolverWithScrollingAndRetries.swift │ │ │ │ │ │ │ └── ElementResolverWithScrollingAndRetriesImpl.swift │ │ │ │ │ │ ├── RetriableTimedInteractionState │ │ │ │ │ │ │ ├── IsPossibleToRetryProvider.swift │ │ │ │ │ │ │ ├── MarkableAsImpossibleToRetry.swift │ │ │ │ │ │ │ ├── RetriableTimedInteractionState.swift │ │ │ │ │ │ │ ├── RetriableTimedInteractionStateForNestedRetryOperationProvider.swift │ │ │ │ │ │ │ └── RetriableTimedInteractionStateImpl.swift │ │ │ │ │ │ ├── Retrying │ │ │ │ │ │ │ ├── Retrier.swift │ │ │ │ │ │ │ └── RetrierImpl.swift │ │ │ │ │ │ ├── Scrolling │ │ │ │ │ │ │ ├── Implementation │ │ │ │ │ │ │ │ ├── ScrollerImpl.swift │ │ │ │ │ │ │ │ └── ScrollingContext.swift │ │ │ │ │ │ │ ├── Scroller.swift │ │ │ │ │ │ │ └── ScrollingResult.swift │ │ │ │ │ │ ├── SnapshotForInteractionResolver │ │ │ │ │ │ │ ├── SnapshotForInteractionResolver.swift │ │ │ │ │ │ │ ├── SnapshotForInteractionResolverArguments.swift │ │ │ │ │ │ │ ├── SnapshotForInteractionResolverImpl.swift │ │ │ │ │ │ │ └── SnapshotForInteractionResolverResult.swift │ │ │ │ │ │ ├── TextTyper │ │ │ │ │ │ │ ├── TextTyper.swift │ │ │ │ │ │ │ ├── TextTyperInstruction.swift │ │ │ │ │ │ │ └── TextTyperKey.swift │ │ │ │ │ │ └── WaitingForQuiescence │ │ │ │ │ │ │ └── ApplicationQuiescenceWaiter.swift │ │ │ │ │ ├── ElementInteractionDependencies.swift │ │ │ │ │ └── ElementInteractionDependenciesImpl.swift │ │ │ │ ├── ElementInteractionDependenciesFactory.swift │ │ │ │ └── Impls │ │ │ │ │ ├── Text │ │ │ │ │ ├── Facade │ │ │ │ │ │ ├── AndElementAction.swift │ │ │ │ │ │ ├── SetTextAction.swift │ │ │ │ │ │ └── SetTextActionFactory.swift │ │ │ │ │ ├── Other │ │ │ │ │ │ ├── CutTextAction.swift │ │ │ │ │ │ ├── FocusKeyboardOnElementAction.swift │ │ │ │ │ │ └── OpenTextMenuAction.swift │ │ │ │ │ ├── SettingText │ │ │ │ │ │ ├── Actions │ │ │ │ │ │ │ ├── SetTextByPastingUsingKeyboard.swift │ │ │ │ │ │ │ ├── SetTextByPastingUsingPopupMenus.swift │ │ │ │ │ │ │ └── SetTextByTypingUsingKeyboard.swift │ │ │ │ │ │ └── Domain │ │ │ │ │ │ │ └── TextEditingActionMode.swift │ │ │ │ │ ├── Support │ │ │ │ │ │ ├── BaseElementActionWrapper.swift │ │ │ │ │ │ └── WrappedDescriptionElementInteraction.swift │ │ │ │ │ └── TextMenu │ │ │ │ │ │ ├── TextMenuAction.swift │ │ │ │ │ │ └── TextMenuActionFactory.swift │ │ │ │ │ └── Touches │ │ │ │ │ ├── Models │ │ │ │ │ └── TouchActionSpeed.swift │ │ │ │ │ ├── Press │ │ │ │ │ └── PressAction.swift │ │ │ │ │ ├── Swipe │ │ │ │ │ ├── Models │ │ │ │ │ │ ├── SwipeActionEndPoint.swift │ │ │ │ │ │ └── SwipeActionStartPoint.swift │ │ │ │ │ ├── Support │ │ │ │ │ │ ├── SwipeActionDescriptionProvider.swift │ │ │ │ │ │ ├── SwipeActionPath.swift │ │ │ │ │ │ ├── SwipeActionPathCalculator.swift │ │ │ │ │ │ └── SwipeActionPathSettings.swift │ │ │ │ │ └── SwipeAction.swift │ │ │ │ │ └── Tap │ │ │ │ │ └── TapAction.swift │ │ │ ├── InteractionCoordinates+Extension.swift │ │ │ └── InteractionPerformer │ │ │ │ ├── ElementInteractionWithDependenciesPerformer.swift │ │ │ │ ├── FailureHandlingElementInteractionWithDependenciesPerformer.swift │ │ │ │ ├── LoggingElementInteractionWithDependenciesPerformer.swift │ │ │ │ └── PerformingElementInteractionWithDependenciesPerformer.swift │ │ ├── Checks │ │ │ ├── IsDisplayedAndMatchesCheck.swift │ │ │ └── IsNotDisplayedCheck.swift │ │ ├── ElementResolver │ │ │ ├── ElementResolver.swift │ │ │ ├── ElementResolverImpl.swift │ │ │ └── WaitingForQuiescenceElementResolver.swift │ │ ├── HumanReadableInteractionDescriptionBuilder │ │ │ ├── HumanReadableInteractionDescriptionBuilder.swift │ │ │ ├── HumanReadableInteractionDescriptionBuilderImpl.swift │ │ │ └── HumanReadableInteractionDescriptionBuilderSource.swift │ │ ├── Interaction │ │ │ ├── ElementInteractionPerformer.swift │ │ │ └── InteractionPerformingSettings.swift │ │ ├── PollingConfiguration.swift │ │ └── Specific │ │ │ └── InteractionSpecificImplementation.swift │ ├── Kinds │ │ ├── AbstractionOfDriver │ │ │ ├── PageObjectElement │ │ │ │ ├── PageObjectElementCore+FacadeMakingHelpers.swift │ │ │ │ ├── PageObjectElementCore.swift │ │ │ │ └── PageObjectElementCoreImpl.swift │ │ │ └── PageObjectElementInteractionPerformer │ │ │ │ ├── PageObjectElementInteractionPerformer.swift │ │ │ │ └── PageObjectElementInteractionPerformerImpl.swift │ │ ├── Endpoints │ │ │ ├── Base │ │ │ │ ├── BaseElement.swift │ │ │ │ ├── BaseElementWithDefaultInitializer.swift │ │ │ │ └── ElementWithDefaultInitializer.swift │ │ │ ├── ButtonElement.swift │ │ │ ├── ImageElement.swift │ │ │ ├── InputElement.swift │ │ │ ├── LabelElement.swift │ │ │ ├── ScrollElement.swift │ │ │ └── ViewElement.swift │ │ └── Parts │ │ │ ├── ElementWithEnabledState │ │ │ ├── ElementWithEnabledState+Asserts.swift │ │ │ └── ElementWithEnabledState.swift │ │ │ ├── ElementWithText │ │ │ ├── ElementWithText+Actions.swift │ │ │ ├── ElementWithText+Asserts.swift │ │ │ ├── ElementWithText+Values.swift │ │ │ └── ElementWithText.swift │ │ │ ├── ElementWithUi │ │ │ ├── ElementWithUi+Asserts.swift │ │ │ ├── ElementWithUi+Press.swift │ │ │ ├── ElementWithUi+Swipe.swift │ │ │ ├── ElementWithUi+Tap.swift │ │ │ ├── ElementWithUi+Values.swift │ │ │ └── ElementWithUi.swift │ │ │ └── SwipeDirection.swift │ ├── Locator │ │ └── Domain │ │ │ └── ElementType.swift │ └── Snapshot │ │ ├── ElementMatcher.swift │ │ ├── ElementSnapshot.swift │ │ ├── MatcherBuilders │ │ ├── CGPointPropertyMatcherBuilder.swift │ │ ├── CGRectPropertyMatcherBuilder.swift │ │ ├── CGSizePropertyMatcherBuilder.swift │ │ ├── CustomValuesMatcherBuilder.swift │ │ └── ElementMatcherBuilder.swift │ │ └── Matchers │ │ ├── HasKeyboardFocusOrHasDescendantThatHasKeyboardFocusElementSnapshotMatcher.swift │ │ ├── HasNoSuperviewMatcher.swift │ │ ├── IsInstanceMatcher.swift │ │ ├── IsNotDefinitelyHiddenMatcher.swift │ │ ├── IsSubviewMatcher.swift │ │ ├── ReferenceImageMatcher.swift │ │ └── SnapshotHierarchyMatcher.swift │ ├── PageObjects │ └── PageObjectsMarkerProtocol.swift │ ├── Screenshots │ ├── ApplicationScreenshotTaker.swift │ ├── DeviceScreenshotTaker.swift │ ├── ElementImageProvider │ │ ├── ElementImageProvider.swift │ │ └── ElementImageProviderImpl.swift │ └── Hashing │ │ ├── CocoaImageHashing │ │ ├── AHashImageHashCalculator.swift │ │ ├── BaseCocoaImageHashingImageHashCalculator.swift │ │ ├── DHashImageHashCalculator.swift │ │ └── PHashImageHashCalculator.swift │ │ └── ImageHashCalculator.swift │ └── Utils │ ├── ElementVisibilityChecker │ ├── ElementVisibilityChecker.swift │ ├── ElementVisibilityCheckerImpl.swift │ └── ElementVisibilityCheckerResult.swift │ ├── Extensions │ ├── CustomizableScalar+FromOptional.swift │ ├── IpcThrowingFunctionResult+GetReturnValueOrFail.swift │ └── SynchronousIpcClient+CallOrFail.swift │ ├── LazilyInitializedIpcClient.swift │ ├── PageObjectMakingHelper │ └── InteractionFailureDebugger │ │ ├── InteractionFailureDebugger.swift │ │ ├── InteractionFailureDebuggerImpl.swift │ │ ├── InteractionFailureDebuggingResult.swift │ │ └── NoopInteractionFailureDebugger.swift │ ├── SnapshotComparison │ ├── DifferenceImageGenerator │ │ ├── DifferenceImageGenerator.swift │ │ └── DifferenceImageGeneratorImpl.swift │ ├── Factory │ │ ├── SnapshotsComparatorFactory.swift │ │ ├── SnapshotsComparatorFactoryImpl.swift │ │ └── SnapshotsComparators.swift │ ├── Impls │ │ ├── DHash │ │ │ ├── ImageHashCalculatorSnapshotsComparator+ComparisonContext.swift │ │ │ ├── ImageHashCalculatorSnapshotsComparator+ComparisonError.swift │ │ │ ├── ImageHashCalculatorSnapshotsComparator+HashDifference.swift │ │ │ ├── ImageHashCalculatorSnapshotsComparator+ImagesForHashing.swift │ │ │ ├── ImageHashCalculatorSnapshotsComparator+ImagesForHashingProvider.swift │ │ │ └── ImageHashCalculatorSnapshotsComparator.swift │ │ └── PerPixel │ │ │ ├── ByteOrder.swift │ │ │ └── PerPixelSnapshotsComparator.swift │ ├── Models │ │ ├── SnapshotsComparisonResult.swift │ │ └── SnapshotsDifferenceDescription │ │ │ ├── LazySnapshotsDifferenceDescription.swift │ │ │ └── SnapshotsDifferenceDescription.swift │ ├── SnapshotsComparator.swift │ └── SnapshotsDifferenceAttachmentGenerator │ │ ├── SnapshotsDifferenceAttachmentGenerator.swift │ │ └── SnapshotsDifferenceAttachmentGeneratorImpl.swift │ └── ViewHierarchyProvider │ └── IpcViewHierarchyProvider.swift ├── Helper ├── MixboxHelper.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── MixboxHelper.xcworkspace │ └── contents.xcworkspacedata ├── MixboxHelper │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── menu-icon-colored.imageset │ │ │ ├── Contents.json │ │ │ └── menu-icon-colored.png │ │ └── menu-icon-grayscale.imageset │ │ │ ├── Contents.json │ │ │ └── menu-icon-grayscale.png │ ├── Base.lproj │ │ └── Main.storyboard │ ├── Info.plist │ ├── MixboxHelper.entitlements │ └── ViewController.swift ├── MixboxHelperTests │ └── Info.plist ├── MixboxHelperUITests │ └── Info.plist ├── Podfile └── Podfile.lock ├── LICENSE ├── Makefile ├── Mixbox.podspec ├── MixboxAnyCodable.podspec ├── MixboxBlack.podspec ├── MixboxBuiltinDi.podspec ├── MixboxBuiltinIpc.podspec ├── MixboxCocoaImageHashing.podspec ├── MixboxDi.podspec ├── MixboxFakeSettingsAppMain.podspec ├── MixboxFoundation.podspec ├── MixboxGenerators.podspec ├── MixboxGray.podspec ├── MixboxInAppServices.podspec ├── MixboxIoKit.podspec ├── MixboxIpc.podspec ├── MixboxIpcCommon.podspec ├── MixboxIpcSbtuiClient.podspec ├── MixboxIpcSbtuiHost.podspec ├── MixboxLinkXCTAutomationSupport.podspec ├── MixboxMocksGeneration.podspec ├── MixboxMocksRuntime.podspec ├── MixboxReflection.podspec ├── MixboxSBTUITestTunnelClient.podspec ├── MixboxSBTUITestTunnelCommon.podspec ├── MixboxSBTUITestTunnelServer.podspec ├── MixboxStubbing.podspec ├── MixboxTestability.podspec ├── MixboxTestsFoundation.podspec ├── MixboxUiKit.podspec ├── MixboxUiTestsFoundation.podspec ├── MocksGenerator └── Sources │ └── MixboxMocksGenerator │ └── main.swift ├── Package.resolved ├── Package.swift ├── Package.template.swift ├── PackageGenerator.swift ├── README.md ├── Tests ├── AllTestsShared │ ├── AllTestsSharedBridgingHeader.h │ ├── CGImage+Stub.swift │ ├── Cuckoo │ │ └── CuckooMatchers.swift │ ├── TestCase+AssertThrows.swift │ ├── TestCase │ │ ├── BaseTestCase+AssertLogsAndFailures.swift │ │ ├── BaseTestCase+Logging.swift │ │ ├── BaseTestCase+ResolveFunctions.swift │ │ ├── BaseTestCase+ValuesByIosVersion.swift │ │ ├── BaseTestCase.swift │ │ ├── Lifecycle │ │ │ └── LogEnvironmentSetUpAction.swift │ │ ├── Singletons │ │ │ └── Singletons+StepLogger.swift │ │ ├── TestCaseDependencies.swift │ │ └── TestStateRecycling │ │ │ └── TestStateRecycling.swift │ ├── TestType.swift │ ├── TestingFails │ │ ├── Combined │ │ │ ├── LogsAndFailures.swift │ │ │ └── Matchers │ │ │ │ └── LogsAndFailuresMatcherBuilder.swift │ │ ├── Failures │ │ │ ├── FailsHereFunctionProvider.swift │ │ │ ├── FailureGatherer.swift │ │ │ ├── GatherFailuresResult.swift │ │ │ ├── TestCanNotBeContinuedException.swift │ │ │ └── XcTestFailure.swift │ │ ├── Logs │ │ │ ├── Matchers │ │ │ │ ├── AttachmentMatcherBuilder.swift │ │ │ │ ├── StepLogMatcherBuilder.swift │ │ │ │ └── XcTestFailureMatcherBuilder.swift │ │ │ ├── RecordableStepLogger.swift │ │ │ ├── RecordingStepLoggerImpl.swift │ │ │ ├── StartedStepLoggerRecording.swift │ │ │ └── StepLoggerRecordingStarter.swift │ │ └── UninterceptableErrorTracker │ │ │ ├── UninterceptableError.swift │ │ │ ├── UninterceptableErrorRecorder.swift │ │ │ ├── UninterceptableErrorTracker.swift │ │ │ └── UninterceptableErrorTrackerImpl.swift │ ├── UIColor+RGB.swift │ ├── UIImage+Stub.swift │ └── ValuesByIosVersion │ │ ├── ValueStartingFromGivenIosVersion.swift │ │ ├── ValuesByIosVersion.swift │ │ ├── ValuesByIosVersionInFinalState.swift │ │ ├── ValuesByIosVersionInInitialState.swift │ │ └── ValuesByIosVersionInIntermediateState.swift ├── AppAndTestsShared │ └── Media.xcassets │ │ ├── Contents.json │ │ ├── eva_icons │ │ ├── Contents.json │ │ ├── fill │ │ │ ├── Contents.json │ │ │ ├── activity.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── activity.svg │ │ │ ├── alert-circle.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── alert-circle.svg │ │ │ ├── alert-triangle.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── alert-triangle.svg │ │ │ ├── archive.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── archive.svg │ │ │ ├── arrow-back.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-back.svg │ │ │ ├── arrow-circle-down.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-circle-down.svg │ │ │ ├── arrow-circle-left.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-circle-left.svg │ │ │ ├── arrow-circle-right.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-circle-right.svg │ │ │ ├── arrow-circle-up.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-circle-up.svg │ │ │ ├── arrow-down.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-down.svg │ │ │ ├── arrow-downward.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-downward.svg │ │ │ ├── arrow-forward.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-forward.svg │ │ │ ├── arrow-ios-back.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-ios-back.svg │ │ │ ├── arrow-ios-downward.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-ios-downward.svg │ │ │ ├── arrow-ios-forward.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-ios-forward.svg │ │ │ ├── arrow-ios-upward.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-ios-upward.svg │ │ │ ├── arrow-left.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-left.svg │ │ │ ├── arrow-right.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-right.svg │ │ │ ├── arrow-up.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-up.svg │ │ │ ├── arrow-upward.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrow-upward.svg │ │ │ ├── arrowhead-down.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrowhead-down.svg │ │ │ ├── arrowhead-left.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrowhead-left.svg │ │ │ ├── arrowhead-right.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrowhead-right.svg │ │ │ ├── arrowhead-up.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── arrowhead-up.svg │ │ │ ├── at.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── at.svg │ │ │ ├── attach-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── attach-2.svg │ │ │ ├── attach.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── attach.svg │ │ │ ├── award.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── award.svg │ │ │ ├── backspace.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── backspace.svg │ │ │ ├── bar-chart-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── bar-chart-2.svg │ │ │ ├── bar-chart.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── bar-chart.svg │ │ │ ├── battery.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── battery.svg │ │ │ ├── behance.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── behance.svg │ │ │ ├── bell-off.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── bell-off.svg │ │ │ ├── bell.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── bell.svg │ │ │ ├── bluetooth.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── bluetooth.svg │ │ │ ├── book-open.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── book-open.svg │ │ │ ├── book.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── book.svg │ │ │ ├── bookmark.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── bookmark.svg │ │ │ ├── briefcase.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── briefcase.svg │ │ │ ├── browser.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── browser.svg │ │ │ ├── brush.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── brush.svg │ │ │ ├── bulb.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── bulb.svg │ │ │ ├── calendar.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── calendar.svg │ │ │ ├── camera.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── camera.svg │ │ │ ├── car.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── car.svg │ │ │ ├── cast.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── cast.svg │ │ │ ├── charging.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── charging.svg │ │ │ ├── checkmark-circle-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── checkmark-circle-2.svg │ │ │ ├── checkmark-circle.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── checkmark-circle.svg │ │ │ ├── checkmark-square-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── checkmark-square-2.svg │ │ │ ├── checkmark-square.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── checkmark-square.svg │ │ │ ├── checkmark.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── checkmark.svg │ │ │ ├── chevron-down.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── chevron-down.svg │ │ │ ├── chevron-left.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── chevron-left.svg │ │ │ ├── chevron-right.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── chevron-right.svg │ │ │ ├── chevron-up.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── chevron-up.svg │ │ │ ├── clipboard.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── clipboard.svg │ │ │ ├── clock.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── clock.svg │ │ │ ├── close-circle.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── close-circle.svg │ │ │ ├── close-square.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── close-square.svg │ │ │ ├── close.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── close.svg │ │ │ ├── cloud-download.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── cloud-download.svg │ │ │ ├── cloud-upload.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── cloud-upload.svg │ │ │ ├── code-download.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── code-download.svg │ │ │ ├── code.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── code.svg │ │ │ ├── collapse.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── collapse.svg │ │ │ ├── color-palette.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── color-palette.svg │ │ │ ├── color-picker.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── color-picker.svg │ │ │ ├── compass.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── compass.svg │ │ │ ├── copy.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── copy.svg │ │ │ ├── corner-down-left.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── corner-down-left.svg │ │ │ ├── corner-down-right.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── corner-down-right.svg │ │ │ ├── corner-left-down.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── corner-left-down.svg │ │ │ ├── corner-left-up.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── corner-left-up.svg │ │ │ ├── corner-right-down.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── corner-right-down.svg │ │ │ ├── corner-right-up.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── corner-right-up.svg │ │ │ ├── corner-up-left.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── corner-up-left.svg │ │ │ ├── corner-up-right.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── corner-up-right.svg │ │ │ ├── credit-card.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── credit-card.svg │ │ │ ├── crop.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── crop.svg │ │ │ ├── cube.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── cube.svg │ │ │ ├── diagonal-arrow-left-down.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── diagonal-arrow-left-down.svg │ │ │ ├── diagonal-arrow-left-up.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── diagonal-arrow-left-up.svg │ │ │ ├── diagonal-arrow-right-down.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── diagonal-arrow-right-down.svg │ │ │ ├── diagonal-arrow-right-up.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── diagonal-arrow-right-up.svg │ │ │ ├── done-all.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── done-all.svg │ │ │ ├── download.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── download.svg │ │ │ ├── droplet-off.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── droplet-off.svg │ │ │ ├── droplet.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── droplet.svg │ │ │ ├── edit-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── edit-2.svg │ │ │ ├── edit.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── edit.svg │ │ │ ├── email.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── email.svg │ │ │ ├── expand.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── expand.svg │ │ │ ├── external-link.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── external-link.svg │ │ │ ├── eye-off-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── eye-off-2.svg │ │ │ ├── eye-off.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── eye-off.svg │ │ │ ├── eye.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── eye.svg │ │ │ ├── facebook.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── facebook.svg │ │ │ ├── file-add.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── file-add.svg │ │ │ ├── file-remove.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── file-remove.svg │ │ │ ├── file-text.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── file-text.svg │ │ │ ├── file.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── file.svg │ │ │ ├── film.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── film.svg │ │ │ ├── flag.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── flag.svg │ │ │ ├── flash-off.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── flash-off.svg │ │ │ ├── flash.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── flash.svg │ │ │ ├── flip-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── flip-2.svg │ │ │ ├── flip.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── flip.svg │ │ │ ├── folder-add.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── folder-add.svg │ │ │ ├── folder-remove.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── folder-remove.svg │ │ │ ├── folder.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── folder.svg │ │ │ ├── funnel.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── funnel.svg │ │ │ ├── gift.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── gift.svg │ │ │ ├── github.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── github.svg │ │ │ ├── globe-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── globe-2.svg │ │ │ ├── globe-3.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── globe-3.svg │ │ │ ├── globe.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── globe.svg │ │ │ ├── google.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── google.svg │ │ │ ├── grid.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── grid.svg │ │ │ ├── hard-drive.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── hard-drive.svg │ │ │ ├── hash.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── hash.svg │ │ │ ├── headphones.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── headphones.svg │ │ │ ├── heart.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── heart.svg │ │ │ ├── home.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── home.svg │ │ │ ├── image-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image-2.svg │ │ │ ├── image.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image.svg │ │ │ ├── inbox.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── inbox.svg │ │ │ ├── info.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── info.svg │ │ │ ├── keypad.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── keypad.svg │ │ │ ├── layers.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── layers.svg │ │ │ ├── layout.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── layout.svg │ │ │ ├── link-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── link-2.svg │ │ │ ├── link.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── link.svg │ │ │ ├── linkedin.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── linkedin.svg │ │ │ ├── list.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── list.svg │ │ │ ├── lock.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── lock.svg │ │ │ ├── log-in.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── log-in.svg │ │ │ ├── log-out.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── log-out.svg │ │ │ ├── map.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── map.svg │ │ │ ├── maximize.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── maximize.svg │ │ │ ├── menu-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── menu-2.svg │ │ │ ├── menu-arrow.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── menu-arrow.svg │ │ │ ├── menu.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── menu.svg │ │ │ ├── message-circle.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── message-circle.svg │ │ │ ├── message-square.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── message-square.svg │ │ │ ├── mic-off.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mic-off.svg │ │ │ ├── mic.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── mic.svg │ │ │ ├── minimize.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── minimize.svg │ │ │ ├── minus-circle.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── minus-circle.svg │ │ │ ├── minus-square.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── minus-square.svg │ │ │ ├── minus.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── minus.svg │ │ │ ├── monitor.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── monitor.svg │ │ │ ├── moon.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── moon.svg │ │ │ ├── more-horizontal.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── more-horizontal.svg │ │ │ ├── more-vertical.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── more-vertical.svg │ │ │ ├── move.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── move.svg │ │ │ ├── music.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── music.svg │ │ │ ├── navigation-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── navigation-2.svg │ │ │ ├── navigation.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── navigation.svg │ │ │ ├── npm.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── npm.svg │ │ │ ├── options-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── options-2.svg │ │ │ ├── options.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── options.svg │ │ │ ├── pantone.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── pantone.svg │ │ │ ├── paper-plane.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── paper-plane.svg │ │ │ ├── pause-circle.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── pause-circle.svg │ │ │ ├── people.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── people.svg │ │ │ ├── percent.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── percent.svg │ │ │ ├── person-add.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── person-add.svg │ │ │ ├── person-delete.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── person-delete.svg │ │ │ ├── person-done.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── person-done.svg │ │ │ ├── person-remove.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── person-remove.svg │ │ │ ├── person.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── person.svg │ │ │ ├── phone-call.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── phone-call.svg │ │ │ ├── phone-missed.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── phone-missed.svg │ │ │ ├── phone-off.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── phone-off.svg │ │ │ ├── phone.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── phone.svg │ │ │ ├── pie-chart-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── pie-chart-2.svg │ │ │ ├── pie-chart.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── pie-chart.svg │ │ │ ├── pin.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── pin.svg │ │ │ ├── play-circle.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── play-circle.svg │ │ │ ├── plus-circle.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── plus-circle.svg │ │ │ ├── plus-square.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── plus-square.svg │ │ │ ├── plus.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── plus.svg │ │ │ ├── power.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── power.svg │ │ │ ├── pricetags.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── pricetags.svg │ │ │ ├── printer.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── printer.svg │ │ │ ├── question-mark-circle.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── question-mark-circle.svg │ │ │ ├── question-mark.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── question-mark.svg │ │ │ ├── radio-button-off.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── radio-button-off.svg │ │ │ ├── radio-button-on.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── radio-button-on.svg │ │ │ ├── radio.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── radio.svg │ │ │ ├── recording.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── recording.svg │ │ │ ├── refresh.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── refresh.svg │ │ │ ├── repeat.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── repeat.svg │ │ │ ├── rewind-left.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── rewind-left.svg │ │ │ ├── rewind-right.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── rewind-right.svg │ │ │ ├── save.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── save.svg │ │ │ ├── scissors.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── scissors.svg │ │ │ ├── search.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── search.svg │ │ │ ├── settings-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── settings-2.svg │ │ │ ├── settings.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── settings.svg │ │ │ ├── shake.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── shake.svg │ │ │ ├── share.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── share.svg │ │ │ ├── shield-off.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── shield-off.svg │ │ │ ├── shield.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── shield.svg │ │ │ ├── shopping-bag.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── shopping-bag.svg │ │ │ ├── shopping-cart.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── shopping-cart.svg │ │ │ ├── shuffle-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── shuffle-2.svg │ │ │ ├── shuffle.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── shuffle.svg │ │ │ ├── skip-back.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── skip-back.svg │ │ │ ├── skip-forward.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── skip-forward.svg │ │ │ ├── slash.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── slash.svg │ │ │ ├── smartphone.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── smartphone.svg │ │ │ ├── smiling-face.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── smiling-face.svg │ │ │ ├── speaker.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── speaker.svg │ │ │ ├── square.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── square.svg │ │ │ ├── star.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── star.svg │ │ │ ├── stop-circle.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── stop-circle.svg │ │ │ ├── sun.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── sun.svg │ │ │ ├── swap.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── swap.svg │ │ │ ├── sync.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── sync.svg │ │ │ ├── text.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── text.svg │ │ │ ├── thermometer-minus.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── thermometer-minus.svg │ │ │ ├── thermometer-plus.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── thermometer-plus.svg │ │ │ ├── thermometer.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── thermometer.svg │ │ │ ├── toggle-left.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── toggle-left.svg │ │ │ ├── toggle-right.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── toggle-right.svg │ │ │ ├── trash-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── trash-2.svg │ │ │ ├── trash.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── trash.svg │ │ │ ├── trending-down.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── trending-down.svg │ │ │ ├── trending-up.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── trending-up.svg │ │ │ ├── tv.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── tv.svg │ │ │ ├── twitter.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── twitter.svg │ │ │ ├── umbrella.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── umbrella.svg │ │ │ ├── undo.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── undo.svg │ │ │ ├── unlock.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── unlock.svg │ │ │ ├── upload.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── upload.svg │ │ │ ├── video-off.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── video-off.svg │ │ │ ├── video.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── video.svg │ │ │ ├── volume-down.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── volume-down.svg │ │ │ ├── volume-mute.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── volume-mute.svg │ │ │ ├── volume-off.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── volume-off.svg │ │ │ ├── volume-up.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── volume-up.svg │ │ │ ├── wifi-off.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── wifi-off.svg │ │ │ └── wifi.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── wifi.svg │ │ └── outline │ │ │ ├── Contents.json │ │ │ ├── activity-outline.imageset │ │ │ ├── Contents.json │ │ │ └── activity-outline.svg │ │ │ ├── alert-circle-outline.imageset │ │ │ ├── Contents.json │ │ │ └── alert-circle-outline.svg │ │ │ ├── alert-triangle-outline.imageset │ │ │ ├── Contents.json │ │ │ └── alert-triangle-outline.svg │ │ │ ├── archive-outline.imageset │ │ │ ├── Contents.json │ │ │ └── archive-outline.svg │ │ │ ├── arrow-back-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-back-outline.svg │ │ │ ├── arrow-circle-down-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-circle-down-outline.svg │ │ │ ├── arrow-circle-left-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-circle-left-outline.svg │ │ │ ├── arrow-circle-right-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-circle-right-outline.svg │ │ │ ├── arrow-circle-up-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-circle-up-outline.svg │ │ │ ├── arrow-down-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-down-outline.svg │ │ │ ├── arrow-downward-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-downward-outline.svg │ │ │ ├── arrow-forward-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-forward-outline.svg │ │ │ ├── arrow-ios-back-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-ios-back-outline.svg │ │ │ ├── arrow-ios-downward-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-ios-downward-outline.svg │ │ │ ├── arrow-ios-forward-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-ios-forward-outline.svg │ │ │ ├── arrow-ios-upward-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-ios-upward-outline.svg │ │ │ ├── arrow-left-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-left-outline.svg │ │ │ ├── arrow-right-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-right-outline.svg │ │ │ ├── arrow-up-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-up-outline.svg │ │ │ ├── arrow-upward-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-upward-outline.svg │ │ │ ├── arrowhead-down-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrowhead-down-outline.svg │ │ │ ├── arrowhead-left-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrowhead-left-outline.svg │ │ │ ├── arrowhead-right-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrowhead-right-outline.svg │ │ │ ├── arrowhead-up-outline.imageset │ │ │ ├── Contents.json │ │ │ └── arrowhead-up-outline.svg │ │ │ ├── at-outline.imageset │ │ │ ├── Contents.json │ │ │ └── at-outline.svg │ │ │ ├── attach-2-outline.imageset │ │ │ ├── Contents.json │ │ │ └── attach-2-outline.svg │ │ │ ├── attach-outline.imageset │ │ │ ├── Contents.json │ │ │ └── attach-outline.svg │ │ │ ├── award-outline.imageset │ │ │ ├── Contents.json │ │ │ └── award-outline.svg │ │ │ ├── backspace-outline.imageset │ │ │ ├── Contents.json │ │ │ └── backspace-outline.svg │ │ │ ├── bar-chart-2-outline.imageset │ │ │ ├── Contents.json │ │ │ └── bar-chart-2-outline.svg │ │ │ ├── bar-chart-outline.imageset │ │ │ ├── Contents.json │ │ │ └── bar-chart-outline.svg │ │ │ ├── battery-outline.imageset │ │ │ ├── Contents.json │ │ │ └── battery-outline.svg │ │ │ ├── behance-outline.imageset │ │ │ ├── Contents.json │ │ │ └── behance-outline.svg │ │ │ ├── bell-off-outline.imageset │ │ │ ├── Contents.json │ │ │ └── bell-off-outline.svg │ │ │ ├── bell-outline.imageset │ │ │ ├── Contents.json │ │ │ └── bell-outline.svg │ │ │ ├── bluetooth-outline.imageset │ │ │ ├── Contents.json │ │ │ └── bluetooth-outline.svg │ │ │ ├── book-open-outline.imageset │ │ │ ├── Contents.json │ │ │ └── book-open-outline.svg │ │ │ ├── book-outline.imageset │ │ │ ├── Contents.json │ │ │ └── book-outline.svg │ │ │ ├── bookmark-outline.imageset │ │ │ ├── Contents.json │ │ │ └── bookmark-outline.svg │ │ │ ├── briefcase-outline.imageset │ │ │ ├── Contents.json │ │ │ └── briefcase-outline.svg │ │ │ ├── browser-outline.imageset │ │ │ ├── Contents.json │ │ │ └── browser-outline.svg │ │ │ ├── brush-outline.imageset │ │ │ ├── Contents.json │ │ │ └── brush-outline.svg │ │ │ ├── bulb-outline.imageset │ │ │ ├── Contents.json │ │ │ └── bulb-outline.svg │ │ │ ├── calendar-outline.imageset │ │ │ ├── Contents.json │ │ │ └── calendar-outline.svg │ │ │ ├── camera-outline.imageset │ │ │ ├── Contents.json │ │ │ └── camera-outline.svg │ │ │ ├── car-outline.imageset │ │ │ ├── Contents.json │ │ │ └── car-outline.svg │ │ │ ├── cast-outline.imageset │ │ │ ├── Contents.json │ │ │ └── cast-outline.svg │ │ │ ├── charging-outline.imageset │ │ │ ├── Contents.json │ │ │ └── charging-outline.svg │ │ │ ├── checkmark-circle-2-outline.imageset │ │ │ ├── Contents.json │ │ │ └── checkmark-circle-2-outline.svg │ │ │ ├── checkmark-circle-outline.imageset │ │ │ ├── Contents.json │ │ │ └── checkmark-circle-outline.svg │ │ │ ├── checkmark-outline.imageset │ │ │ ├── Contents.json │ │ │ └── checkmark-outline.svg │ │ │ ├── checkmark-square-2-outline.imageset │ │ │ ├── Contents.json │ │ │ └── checkmark-square-2-outline.svg │ │ │ ├── checkmark-square-outline.imageset │ │ │ ├── Contents.json │ │ │ └── checkmark-square-outline.svg │ │ │ ├── chevron-down-outline.imageset │ │ │ ├── Contents.json │ │ │ └── chevron-down-outline.svg │ │ │ ├── chevron-left-outline.imageset │ │ │ ├── Contents.json │ │ │ └── chevron-left-outline.svg │ │ │ ├── chevron-right-outline.imageset │ │ │ ├── Contents.json │ │ │ └── chevron-right-outline.svg │ │ │ ├── chevron-up-outline.imageset │ │ │ ├── Contents.json │ │ │ └── chevron-up-outline.svg │ │ │ ├── clipboard-outline.imageset │ │ │ ├── Contents.json │ │ │ └── clipboard-outline.svg │ │ │ ├── clock-outline.imageset │ │ │ ├── Contents.json │ │ │ └── clock-outline.svg │ │ │ ├── close-circle-outline.imageset │ │ │ ├── Contents.json │ │ │ └── close-circle-outline.svg │ │ │ ├── close-outline.imageset │ │ │ ├── Contents.json │ │ │ └── close-outline.svg │ │ │ ├── close-square-outline.imageset │ │ │ ├── Contents.json │ │ │ └── close-square-outline.svg │ │ │ ├── cloud-download-outline.imageset │ │ │ ├── Contents.json │ │ │ └── cloud-download-outline.svg │ │ │ ├── cloud-upload-outline.imageset │ │ │ ├── Contents.json │ │ │ └── cloud-upload-outline.svg │ │ │ ├── code-download-outline.imageset │ │ │ ├── Contents.json │ │ │ └── code-download-outline.svg │ │ │ ├── code-outline.imageset │ │ │ ├── Contents.json │ │ │ └── code-outline.svg │ │ │ ├── collapse-outline.imageset │ │ │ ├── Contents.json │ │ │ └── collapse-outline.svg │ │ │ ├── color-palette-outline.imageset │ │ │ ├── Contents.json │ │ │ └── color-palette-outline.svg │ │ │ ├── color-picker-outline.imageset │ │ │ ├── Contents.json │ │ │ └── color-picker-outline.svg │ │ │ ├── compass-outline.imageset │ │ │ ├── Contents.json │ │ │ └── compass-outline.svg │ │ │ ├── copy-outline.imageset │ │ │ ├── Contents.json │ │ │ └── copy-outline.svg │ │ │ ├── corner-down-left-outline.imageset │ │ │ ├── Contents.json │ │ │ └── corner-down-left-outline.svg │ │ │ ├── corner-down-right-outline.imageset │ │ │ ├── Contents.json │ │ │ └── corner-down-right-outline.svg │ │ │ ├── corner-left-down-outline.imageset │ │ │ ├── Contents.json │ │ │ └── corner-left-down-outline.svg │ │ │ ├── corner-left-up-outline.imageset │ │ │ ├── Contents.json │ │ │ └── corner-left-up-outline.svg │ │ │ ├── corner-right-down-outline.imageset │ │ │ ├── Contents.json │ │ │ └── corner-right-down-outline.svg │ │ │ ├── corner-right-up-outline.imageset │ │ │ ├── Contents.json │ │ │ └── corner-right-up-outline.svg │ │ │ ├── corner-up-left-outline.imageset │ │ │ ├── Contents.json │ │ │ └── corner-up-left-outline.svg │ │ │ ├── corner-up-right-outline.imageset │ │ │ ├── Contents.json │ │ │ └── corner-up-right-outline.svg │ │ │ ├── credit-card-outline.imageset │ │ │ ├── Contents.json │ │ │ └── credit-card-outline.svg │ │ │ ├── crop-outline.imageset │ │ │ ├── Contents.json │ │ │ └── crop-outline.svg │ │ │ ├── cube-outline.imageset │ │ │ ├── Contents.json │ │ │ └── cube-outline.svg │ │ │ ├── diagonal-arrow-left-down-outline.imageset │ │ │ ├── Contents.json │ │ │ └── diagonal-arrow-left-down-outline.svg │ │ │ ├── diagonal-arrow-left-up-outline.imageset │ │ │ ├── Contents.json │ │ │ └── diagonal-arrow-left-up-outline.svg │ │ │ ├── diagonal-arrow-right-down-outline.imageset │ │ │ ├── Contents.json │ │ │ └── diagonal-arrow-right-down-outline.svg │ │ │ ├── diagonal-arrow-right-up-outline.imageset │ │ │ ├── Contents.json │ │ │ └── diagonal-arrow-right-up-outline.svg │ │ │ ├── done-all-outline.imageset │ │ │ ├── Contents.json │ │ │ └── done-all-outline.svg │ │ │ ├── download-outline.imageset │ │ │ ├── Contents.json │ │ │ └── download-outline.svg │ │ │ ├── droplet-off-outline.imageset │ │ │ ├── Contents.json │ │ │ └── droplet-off-outline.svg │ │ │ ├── droplet-outline.imageset │ │ │ ├── Contents.json │ │ │ └── droplet-outline.svg │ │ │ ├── edit-2-outline.imageset │ │ │ ├── Contents.json │ │ │ └── edit-2-outline.svg │ │ │ ├── edit-outline.imageset │ │ │ ├── Contents.json │ │ │ └── edit-outline.svg │ │ │ ├── email-outline.imageset │ │ │ ├── Contents.json │ │ │ └── email-outline.svg │ │ │ ├── expand-outline.imageset │ │ │ ├── Contents.json │ │ │ └── expand-outline.svg │ │ │ ├── external-link-outline.imageset │ │ │ ├── Contents.json │ │ │ └── external-link-outline.svg │ │ │ ├── eye-off-2-outline.imageset │ │ │ ├── Contents.json │ │ │ └── eye-off-2-outline.svg │ │ │ ├── eye-off-outline.imageset │ │ │ ├── Contents.json │ │ │ └── eye-off-outline.svg │ │ │ ├── eye-outline.imageset │ │ │ ├── Contents.json │ │ │ └── eye-outline.svg │ │ │ ├── facebook-outline.imageset │ │ │ ├── Contents.json │ │ │ └── facebook-outline.svg │ │ │ ├── file-add-outline.imageset │ │ │ ├── Contents.json │ │ │ └── file-add-outline.svg │ │ │ ├── file-outline.imageset │ │ │ ├── Contents.json │ │ │ └── file-outline.svg │ │ │ ├── file-remove-outline.imageset │ │ │ ├── Contents.json │ │ │ └── file-remove-outline.svg │ │ │ ├── file-text-outline.imageset │ │ │ ├── Contents.json │ │ │ └── file-text-outline.svg │ │ │ ├── film-outline.imageset │ │ │ ├── Contents.json │ │ │ └── film-outline.svg │ │ │ ├── flag-outline.imageset │ │ │ ├── Contents.json │ │ │ └── flag-outline.svg │ │ │ ├── flash-off-outline.imageset │ │ │ ├── Contents.json │ │ │ └── flash-off-outline.svg │ │ │ ├── flash-outline.imageset │ │ │ ├── Contents.json │ │ │ └── flash-outline.svg │ │ │ ├── flip-2-outline.imageset │ │ │ ├── Contents.json │ │ │ └── flip-2-outline.svg │ │ │ ├── flip-outline.imageset │ │ │ ├── Contents.json │ │ │ └── flip-outline.svg │ │ │ ├── folder-add-outline.imageset │ │ │ ├── Contents.json │ │ │ └── folder-add-outline.svg │ │ │ ├── folder-outline.imageset │ │ │ ├── Contents.json │ │ │ └── folder-outline.svg │ │ │ ├── folder-remove-outline.imageset │ │ │ ├── Contents.json │ │ │ └── folder-remove-outline.svg │ │ │ ├── funnel-outline.imageset │ │ │ ├── Contents.json │ │ │ └── funnel-outline.svg │ │ │ ├── gift-outline.imageset │ │ │ ├── Contents.json │ │ │ └── gift-outline.svg │ │ │ ├── github-outline.imageset │ │ │ ├── Contents.json │ │ │ └── github-outline.svg │ │ │ ├── globe-2-outline.imageset │ │ │ ├── Contents.json │ │ │ └── globe-2-outline.svg │ │ │ ├── globe-outline.imageset │ │ │ ├── Contents.json │ │ │ └── globe-outline.svg │ │ │ ├── google-outline.imageset │ │ │ ├── Contents.json │ │ │ └── google-outline.svg │ │ │ ├── grid-outline.imageset │ │ │ ├── Contents.json │ │ │ └── grid-outline.svg │ │ │ ├── hard-drive-outline.imageset │ │ │ ├── Contents.json │ │ │ └── hard-drive-outline.svg │ │ │ ├── hash-outline.imageset │ │ │ ├── Contents.json │ │ │ └── hash-outline.svg │ │ │ ├── headphones-outline.imageset │ │ │ ├── Contents.json │ │ │ └── headphones-outline.svg │ │ │ ├── heart-outline.imageset │ │ │ ├── Contents.json │ │ │ └── heart-outline.svg │ │ │ ├── home-outline.imageset │ │ │ ├── Contents.json │ │ │ └── home-outline.svg │ │ │ ├── image-outline.imageset │ │ │ ├── Contents.json │ │ │ └── image-outline.svg │ │ │ ├── inbox-outline.imageset │ │ │ ├── Contents.json │ │ │ └── inbox-outline.svg │ │ │ ├── info-outline.imageset │ │ │ ├── Contents.json │ │ │ └── info-outline.svg │ │ │ ├── keypad-outline.imageset │ │ │ ├── Contents.json │ │ │ └── keypad-outline.svg │ │ │ ├── layers-outline.imageset │ │ │ ├── Contents.json │ │ │ └── layers-outline.svg │ │ │ ├── layout-outline.imageset │ │ │ ├── Contents.json │ │ │ └── layout-outline.svg │ │ │ ├── link-2-outline.imageset │ │ │ ├── Contents.json │ │ │ └── link-2-outline.svg │ │ │ ├── link-outline.imageset │ │ │ ├── Contents.json │ │ │ └── link-outline.svg │ │ │ ├── linkedin-outline.imageset │ │ │ ├── Contents.json │ │ │ └── linkedin-outline.svg │ │ │ ├── list-outline.imageset │ │ │ ├── Contents.json │ │ │ └── list-outline.svg │ │ │ ├── loader-outline.imageset │ │ │ ├── Contents.json │ │ │ └── loader-outline.svg │ │ │ ├── lock-outline.imageset │ │ │ ├── Contents.json │ │ │ └── lock-outline.svg │ │ │ ├── log-in-outline.imageset │ │ │ ├── Contents.json │ │ │ └── log-in-outline.svg │ │ │ ├── log-out-outline.imageset │ │ │ ├── Contents.json │ │ │ └── log-out-outline.svg │ │ │ ├── map-outline.imageset │ │ │ ├── Contents.json │ │ │ └── map-outline.svg │ │ │ ├── maximize-outline.imageset │ │ │ ├── Contents.json │ │ │ └── maximize-outline.svg │ │ │ ├── menu-2-outline.imageset │ │ │ ├── Contents.json │ │ │ └── menu-2-outline.svg │ │ │ ├── menu-arrow-outline.imageset │ │ │ ├── Contents.json │ │ │ └── menu-arrow-outline.svg │ │ │ ├── menu-outline.imageset │ │ │ ├── Contents.json │ │ │ └── menu-outline.svg │ │ │ ├── message-circle-outline.imageset │ │ │ ├── Contents.json │ │ │ └── message-circle-outline.svg │ │ │ ├── message-square-outline.imageset │ │ │ ├── Contents.json │ │ │ └── message-square-outline.svg │ │ │ ├── mic-off-outline.imageset │ │ │ ├── Contents.json │ │ │ └── mic-off-outline.svg │ │ │ ├── mic-outline.imageset │ │ │ ├── Contents.json │ │ │ └── mic-outline.svg │ │ │ ├── minimize-outline.imageset │ │ │ ├── Contents.json │ │ │ └── minimize-outline.svg │ │ │ ├── minus-circle-outline.imageset │ │ │ ├── Contents.json │ │ │ └── minus-circle-outline.svg │ │ │ ├── minus-outline.imageset │ │ │ ├── Contents.json │ │ │ └── minus-outline.svg │ │ │ ├── minus-square-outline.imageset │ │ │ ├── Contents.json │ │ │ └── minus-square-outline.svg │ │ │ ├── monitor-outline.imageset │ │ │ ├── Contents.json │ │ │ └── monitor-outline.svg │ │ │ ├── moon-outline.imageset │ │ │ ├── Contents.json │ │ │ └── moon-outline.svg │ │ │ ├── more-horizontal-outline.imageset │ │ │ ├── Contents.json │ │ │ └── more-horizontal-outline.svg │ │ │ ├── more-vertical-outline.imageset │ │ │ ├── Contents.json │ │ │ └── more-vertical-outline.svg │ │ │ ├── move-outline.imageset │ │ │ ├── Contents.json │ │ │ └── move-outline.svg │ │ │ ├── music-outline.imageset │ │ │ ├── Contents.json │ │ │ └── music-outline.svg │ │ │ ├── navigation-2-outline.imageset │ │ │ ├── Contents.json │ │ │ └── navigation-2-outline.svg │ │ │ ├── navigation-outline.imageset │ │ │ ├── Contents.json │ │ │ └── navigation-outline.svg │ │ │ ├── npm-outline.imageset │ │ │ ├── Contents.json │ │ │ └── npm-outline.svg │ │ │ ├── options-2-outline.imageset │ │ │ ├── Contents.json │ │ │ └── options-2-outline.svg │ │ │ ├── options-outline.imageset │ │ │ ├── Contents.json │ │ │ └── options-outline.svg │ │ │ ├── pantone-outline.imageset │ │ │ ├── Contents.json │ │ │ └── pantone-outline.svg │ │ │ ├── paper-plane-outline.imageset │ │ │ ├── Contents.json │ │ │ └── paper-plane-outline.svg │ │ │ ├── pause-circle-outline.imageset │ │ │ ├── Contents.json │ │ │ └── pause-circle-outline.svg │ │ │ ├── people-outline.imageset │ │ │ ├── Contents.json │ │ │ └── people-outline.svg │ │ │ ├── percent-outline.imageset │ │ │ ├── Contents.json │ │ │ └── percent-outline.svg │ │ │ ├── person-add-outline.imageset │ │ │ ├── Contents.json │ │ │ └── person-add-outline.svg │ │ │ ├── person-delete-outline.imageset │ │ │ ├── Contents.json │ │ │ └── person-delete-outline.svg │ │ │ ├── person-done-outline.imageset │ │ │ ├── Contents.json │ │ │ └── person-done-outline.svg │ │ │ ├── person-outline.imageset │ │ │ ├── Contents.json │ │ │ └── person-outline.svg │ │ │ ├── person-remove-outline.imageset │ │ │ ├── Contents.json │ │ │ └── person-remove-outline.svg │ │ │ ├── phone-call-outline.imageset │ │ │ ├── Contents.json │ │ │ └── phone-call-outline.svg │ │ │ ├── phone-missed-outline.imageset │ │ │ ├── Contents.json │ │ │ └── phone-missed-outline.svg │ │ │ ├── phone-off-outline.imageset │ │ │ ├── Contents.json │ │ │ └── phone-off-outline.svg │ │ │ ├── phone-outline.imageset │ │ │ ├── Contents.json │ │ │ └── phone-outline.svg │ │ │ ├── pie-chart-outline.imageset │ │ │ ├── Contents.json │ │ │ └── pie-chart-outline.svg │ │ │ ├── pin-outline.imageset │ │ │ ├── Contents.json │ │ │ └── pin-outline.svg │ │ │ ├── play-circle-outline.imageset │ │ │ ├── Contents.json │ │ │ └── play-circle-outline.svg │ │ │ ├── plus-circle-outline.imageset │ │ │ ├── Contents.json │ │ │ └── plus-circle-outline.svg │ │ │ ├── plus-outline.imageset │ │ │ ├── Contents.json │ │ │ └── plus-outline.svg │ │ │ ├── plus-square-outline.imageset │ │ │ ├── Contents.json │ │ │ └── plus-square-outline.svg │ │ │ ├── power-outline.imageset │ │ │ ├── Contents.json │ │ │ └── power-outline.svg │ │ │ ├── pricetags-outline.imageset │ │ │ ├── Contents.json │ │ │ └── pricetags-outline.svg │ │ │ ├── printer-outline.imageset │ │ │ ├── Contents.json │ │ │ └── printer-outline.svg │ │ │ ├── question-mark-circle-outline.imageset │ │ │ ├── Contents.json │ │ │ └── question-mark-circle-outline.svg │ │ │ ├── question-mark-outline.imageset │ │ │ ├── Contents.json │ │ │ └── question-mark-outline.svg │ │ │ ├── radio-button-off-outline.imageset │ │ │ ├── Contents.json │ │ │ └── radio-button-off-outline.svg │ │ │ ├── radio-button-on-outline.imageset │ │ │ ├── Contents.json │ │ │ └── radio-button-on-outline.svg │ │ │ ├── radio-outline.imageset │ │ │ ├── Contents.json │ │ │ └── radio-outline.svg │ │ │ ├── recording-outline.imageset │ │ │ ├── Contents.json │ │ │ └── recording-outline.svg │ │ │ ├── refresh-outline.imageset │ │ │ ├── Contents.json │ │ │ └── refresh-outline.svg │ │ │ ├── repeat-outline.imageset │ │ │ ├── Contents.json │ │ │ └── repeat-outline.svg │ │ │ ├── rewind-left-outline.imageset │ │ │ ├── Contents.json │ │ │ └── rewind-left-outline.svg │ │ │ ├── rewind-right-outline.imageset │ │ │ ├── Contents.json │ │ │ └── rewind-right-outline.svg │ │ │ ├── save-outline.imageset │ │ │ ├── Contents.json │ │ │ └── save-outline.svg │ │ │ ├── scissors-outline.imageset │ │ │ ├── Contents.json │ │ │ └── scissors-outline.svg │ │ │ ├── search-outline.imageset │ │ │ ├── Contents.json │ │ │ └── search-outline.svg │ │ │ ├── settings-2-outline.imageset │ │ │ ├── Contents.json │ │ │ └── settings-2-outline.svg │ │ │ ├── settings-outline.imageset │ │ │ ├── Contents.json │ │ │ └── settings-outline.svg │ │ │ ├── shake-outline.imageset │ │ │ ├── Contents.json │ │ │ └── shake-outline.svg │ │ │ ├── share-outline.imageset │ │ │ ├── Contents.json │ │ │ └── share-outline.svg │ │ │ ├── shield-off-outline.imageset │ │ │ ├── Contents.json │ │ │ └── shield-off-outline.svg │ │ │ ├── shield-outline.imageset │ │ │ ├── Contents.json │ │ │ └── shield-outline.svg │ │ │ ├── shopping-bag-outline.imageset │ │ │ ├── Contents.json │ │ │ └── shopping-bag-outline.svg │ │ │ ├── shopping-cart-outline.imageset │ │ │ ├── Contents.json │ │ │ └── shopping-cart-outline.svg │ │ │ ├── shuffle-2-outline.imageset │ │ │ ├── Contents.json │ │ │ └── shuffle-2-outline.svg │ │ │ ├── shuffle-outline.imageset │ │ │ ├── Contents.json │ │ │ └── shuffle-outline.svg │ │ │ ├── skip-back-outline.imageset │ │ │ ├── Contents.json │ │ │ └── skip-back-outline.svg │ │ │ ├── skip-forward-outline.imageset │ │ │ ├── Contents.json │ │ │ └── skip-forward-outline.svg │ │ │ ├── slash-outline.imageset │ │ │ ├── Contents.json │ │ │ └── slash-outline.svg │ │ │ ├── smartphone-outline.imageset │ │ │ ├── Contents.json │ │ │ └── smartphone-outline.svg │ │ │ ├── smiling-face-outline.imageset │ │ │ ├── Contents.json │ │ │ └── smiling-face-outline.svg │ │ │ ├── speaker-outline.imageset │ │ │ ├── Contents.json │ │ │ └── speaker-outline.svg │ │ │ ├── square-outline.imageset │ │ │ ├── Contents.json │ │ │ └── square-outline.svg │ │ │ ├── star-outline.imageset │ │ │ ├── Contents.json │ │ │ └── star-outline.svg │ │ │ ├── stop-circle-outline.imageset │ │ │ ├── Contents.json │ │ │ └── stop-circle-outline.svg │ │ │ ├── sun-outline.imageset │ │ │ ├── Contents.json │ │ │ └── sun-outline.svg │ │ │ ├── swap-outline.imageset │ │ │ ├── Contents.json │ │ │ └── swap-outline.svg │ │ │ ├── sync-outline.imageset │ │ │ ├── Contents.json │ │ │ └── sync-outline.svg │ │ │ ├── text-outline.imageset │ │ │ ├── Contents.json │ │ │ └── text-outline.svg │ │ │ ├── thermometer-minus-outline.imageset │ │ │ ├── Contents.json │ │ │ └── thermometer-minus-outline.svg │ │ │ ├── thermometer-outline.imageset │ │ │ ├── Contents.json │ │ │ └── thermometer-outline.svg │ │ │ ├── thermometer-plus-outline.imageset │ │ │ ├── Contents.json │ │ │ └── thermometer-plus-outline.svg │ │ │ ├── toggle-left-outline.imageset │ │ │ ├── Contents.json │ │ │ └── toggle-left-outline.svg │ │ │ ├── toggle-right-outline.imageset │ │ │ ├── Contents.json │ │ │ └── toggle-right-outline.svg │ │ │ ├── trash-2-outline.imageset │ │ │ ├── Contents.json │ │ │ └── trash-2-outline.svg │ │ │ ├── trash-outline.imageset │ │ │ ├── Contents.json │ │ │ └── trash-outline.svg │ │ │ ├── trending-down-outline.imageset │ │ │ ├── Contents.json │ │ │ └── trending-down-outline.svg │ │ │ ├── trending-up-outline.imageset │ │ │ ├── Contents.json │ │ │ └── trending-up-outline.svg │ │ │ ├── tv-outline.imageset │ │ │ ├── Contents.json │ │ │ └── tv-outline.svg │ │ │ ├── twitter-outline.imageset │ │ │ ├── Contents.json │ │ │ └── twitter-outline.svg │ │ │ ├── umbrella-outline.imageset │ │ │ ├── Contents.json │ │ │ └── umbrella-outline.svg │ │ │ ├── undo-outline.imageset │ │ │ ├── Contents.json │ │ │ └── undo-outline.svg │ │ │ ├── unlock-outline.imageset │ │ │ ├── Contents.json │ │ │ └── unlock-outline.svg │ │ │ ├── upload-outline.imageset │ │ │ ├── Contents.json │ │ │ └── upload-outline.svg │ │ │ ├── video-off-outline.imageset │ │ │ ├── Contents.json │ │ │ └── video-off-outline.svg │ │ │ ├── video-outline.imageset │ │ │ ├── Contents.json │ │ │ └── video-outline.svg │ │ │ ├── volume-down-outline.imageset │ │ │ ├── Contents.json │ │ │ └── volume-down-outline.svg │ │ │ ├── volume-mute-outline.imageset │ │ │ ├── Contents.json │ │ │ └── volume-mute-outline.svg │ │ │ ├── volume-off-outline.imageset │ │ │ ├── Contents.json │ │ │ └── volume-off-outline.svg │ │ │ ├── volume-up-outline.imageset │ │ │ ├── Contents.json │ │ │ └── volume-up-outline.svg │ │ │ ├── wifi-off-outline.imageset │ │ │ ├── Contents.json │ │ │ └── wifi-off-outline.svg │ │ │ └── wifi-outline.imageset │ │ │ ├── Contents.json │ │ │ └── wifi-outline.svg │ │ └── imagehash_cats │ │ ├── Contents.json │ │ ├── imagehash_cat_aspect.imageset │ │ ├── Contents.json │ │ └── cat_aspect.png │ │ ├── imagehash_cat_borders.imageset │ │ ├── Contents.json │ │ └── cat_borders.png │ │ ├── imagehash_cat_color.imageset │ │ ├── Contents.json │ │ └── cat_color.png │ │ ├── imagehash_cat_lots_of_text.imageset │ │ ├── Contents.json │ │ └── cat_lots_of_text.png │ │ ├── imagehash_cat_not_cat.imageset │ │ ├── Contents.json │ │ └── cat_not_cat.png │ │ ├── imagehash_cat_original.imageset │ │ ├── Contents.json │ │ └── cat.png │ │ ├── imagehash_cat_size.imageset │ │ ├── Contents.json │ │ └── cat_size.png │ │ └── imagehash_cat_text.imageset │ │ ├── Contents.json │ │ └── cat_text.png ├── AppForCheckingPureXctest │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ ├── HidEventsDebugging │ │ ├── AppForCheckingPureXctest-Bridging-Header.h │ │ ├── HidEventsTracker.swift │ │ └── PrivateApi.h │ ├── Info.plist │ ├── View.swift │ └── ViewController.swift ├── AppForCheckingPureXctestUITests │ ├── AppForCheckingPureXctestUITests.swift │ └── Info.plist ├── BlackBoxUiTests │ ├── BlackBoxUiTests-Bridging-Header.h │ ├── Info.plist │ ├── Support │ │ ├── BlackBoxTestCaseDependencies.swift │ │ ├── LaunchingApplication │ │ │ ├── BuiltinIpcLaunchableApplication.swift │ │ │ └── LaunchableApplicationProvider.swift │ │ ├── MixboxHelperPrototype │ │ │ └── MixboxHelperClient.swift │ │ └── TestCase.swift │ └── Tests │ │ ├── DifferentHierarchies │ │ ├── HierarchySourcesTests.swift │ │ └── ThirdPartyAppsTests.swift │ │ ├── FakeCells │ │ └── FakeCellsDisablingTests.swift │ │ ├── IPC │ │ ├── Echoing │ │ │ ├── BaseIpcEchoingTests.swift │ │ │ ├── IpcEchoingUsingBuiltinIpcTests.swift │ │ │ └── IpcEchoingUsingSbtuiTestTunnelTests.swift │ │ └── IpcCallbacksTests.swift │ │ ├── LaunchingApp │ │ └── LaunchingAppTests.swift │ │ ├── Network │ │ ├── Player │ │ │ ├── RecordingNetworkPlayerTests.swift │ │ │ └── Showcase │ │ │ │ ├── MoreComplexExample.recordedNetworkSession.json │ │ │ │ ├── NetworkPlayerShowcaseTests.alwaysEmpty.json │ │ │ │ ├── NetworkPlayerShowcaseTests.recordedNetworkSession.json │ │ │ │ └── NetworkPlayerShowcaseTests.swift │ │ ├── Recording │ │ │ └── NetworkRecordingTests.swift │ │ ├── Stubbing │ │ │ └── LegacyNetworkStubbingTests.swift │ │ └── Support │ │ │ └── BaseNetworkMockingTestCase.swift │ │ ├── Reports │ │ └── ApplicationCrashProducesMeaninfulErrorTests.swift │ │ ├── Scrolling │ │ ├── ScrollingSmokeTests.swift │ │ └── ScrollingTriesToMakeViewFullyVisibleTests.swift │ │ └── Tools │ │ ├── ApplicationBundleProviderTests.swift │ │ └── PhotoStubberTests.swift ├── FakeSettingsApp │ ├── Entitlements.entitlements │ ├── Info.plist │ └── main.swift ├── Frameworks │ └── TestsIpc │ │ ├── Sources │ │ ├── GlobalIpc │ │ │ ├── BidirectionalCommunication │ │ │ │ ├── BidirectionalCommunicationPingPongMethod.swift │ │ │ │ └── BidirectionalCommunicationPingPongMethodHandler.swift │ │ │ ├── Callback │ │ │ │ ├── CallbackFromApp │ │ │ │ │ └── CallbackFromAppIpcMethod.swift │ │ │ │ ├── CallbackToApp │ │ │ │ │ └── CallbackToAppIpcMethod.swift │ │ │ │ └── NestedCallbacks │ │ │ │ │ └── NestedCallbacksToAppIpcMethod.swift │ │ │ ├── Echo │ │ │ │ └── EchoIpcMethod.swift │ │ │ ├── ProcessInfo │ │ │ │ ├── IpcProcessInfo.swift │ │ │ │ └── ProcessInfoIpcMethod.swift │ │ │ └── SetScreen │ │ │ │ ├── ScreenContainerType.swift │ │ │ │ └── SetScreenIpcMethod.swift │ │ ├── SharedCode │ │ │ └── PrivateApiAccessibilityForTestAutomationInitializer.swift │ │ ├── Singletons │ │ │ ├── DebugEnvironmentProvider.swift │ │ │ ├── Singletons+PerformanceLogger.swift │ │ │ └── Singletons.swift │ │ └── ViewIpc │ │ │ ├── ActionsTestsView │ │ │ ├── ActionTestViewActionResult.swift │ │ │ ├── GetActionResultIpcMethod.swift │ │ │ └── SetViewsIpcMethod.swift │ │ │ ├── CheckTestsView │ │ │ ├── ChecksTestsViewConfiguration.swift │ │ │ └── ConfigureChecksTestsViewIpcMethod.swift │ │ │ ├── FakeCellsTestsView │ │ │ ├── FakeCellsReload │ │ │ │ ├── FakeCellsReloadIpcMethod.swift │ │ │ │ └── FakeCellsReloadType.swift │ │ │ ├── FakeCellsSubviewsInfo │ │ │ │ └── FakeCellsSubviewsInfoIpcMethod.swift │ │ │ └── FakeCellsTestsConstants.swift │ │ │ ├── Generic │ │ │ └── ResetUiIpcMethod.swift │ │ │ ├── InteractionsUseVisiblePointTestsView │ │ │ └── InteractionsUseVisiblePointTestsViewConfiguration.swift │ │ │ ├── IpcTestingView │ │ │ ├── IpcColor.swift │ │ │ ├── IpcTestingViewConfiguration.swift │ │ │ └── IpcView.swift │ │ │ ├── NavigationBarCanBeFoundTestsView │ │ │ └── NavigationBarCanBeFoundTestsViewConfiguration.swift │ │ │ ├── NetworkStubbingTestsView │ │ │ └── NetworkStubbingTestsViewSetResponseIpcMethod.swift │ │ │ ├── ScreenshotTestsView │ │ │ └── ScreenshotTestsConstants.swift │ │ │ ├── Scrolling │ │ │ ├── ScrollingSmokeTestsView │ │ │ │ └── ScrollingSmokeTestsConstants.swift │ │ │ └── ScrollingTriesToMakeViewFullyVisibleTestsView │ │ │ │ └── ScrollingTriesToMakeViewFullyVisibleTestsViewConfiguration.swift │ │ │ ├── SoftwareKeyboardTestsViewConfiguration │ │ │ └── SoftwareKeyboardTestsViewConfiguration.swift │ │ │ └── WaitingForQuiescenceTestsView │ │ │ └── WaitingForQuiescenceTestsViewConfiguration.swift │ │ └── TestsIpc.podspec ├── GrayBoxUiTests │ ├── GrayBoxUiTests-Bridging-Header.h │ ├── Info.plist │ ├── Mocks │ │ └── generate_mocks │ ├── Support │ │ └── TestCase │ │ │ ├── GrayBoxTestCaseDependencies.swift │ │ │ ├── IpcRouterHolder.swift │ │ │ └── TestCase.swift │ └── Tests │ │ ├── ElementHierarchyDescriptionProvider │ │ └── ElementHierarchyDescriptionProviderTests.swift │ │ ├── IpcTests.swift │ │ ├── KeyboardEventInjectorImplTests.swift │ │ ├── PredefinedObjcMethodsTests.swift │ │ ├── RunLoopSpinner │ │ └── RunLoopSpinnerTests.swift │ │ ├── ScreenshotTests │ │ └── GrayScreenshotTakerTests.swift │ │ ├── Stubbing │ │ ├── NetworkStubbingTestCase.swift │ │ └── NetworkStubbingTests.swift │ │ └── screenshotTestsView_screenshot.png ├── HostedAppLogicTests │ ├── HostedAppLogicTests.swift │ ├── Info.plist │ ├── Support │ │ └── HostedAppLogicTests-Bridging-Header.h │ └── TestCase.swift ├── Lint │ └── Info.plist ├── Makefile ├── OsxUnitTests │ ├── Info.plist │ └── Tests │ │ └── MixboxMockGeneration │ │ ├── MockGenerationTests.swift │ │ ├── NameCollisionAvoidanceTests.swift │ │ ├── SnippetsTests.swift │ │ ├── TypeName_TypeInstanceExpression_Tests.swift │ │ ├── TypeName_ValidClosureType_Tests.swift │ │ └── TypeName_ValidTypeName_Tests.swift ├── Podfile ├── Podfile.lock ├── Scripts │ ├── mock_generation.sh │ └── warm_up_code_generation ├── TestedApp │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ ├── CustomIpc │ │ ├── Callback │ │ │ ├── CallbackFromApp │ │ │ │ └── CallbackFromAppIpcMethodHandler.swift │ │ │ ├── CallbackToApp │ │ │ │ └── CallbackToAppIpcMethodHandler.swift │ │ │ └── NestedCallbacks │ │ │ │ └── NestedCallbacksToAppIpcMethodHandler.swift │ │ ├── CustomIpcMethods.swift │ │ ├── Echo │ │ │ └── EchoIpcMethodHandler.swift │ │ ├── IpcBetweenViewAndTest │ │ │ ├── ClosureMethodHandler.swift │ │ │ ├── ViewIpc+ResetUi.swift │ │ │ └── ViewIpc.swift │ │ ├── ProcessInfo │ │ │ └── ProcessInfoIpcMethodHandler.swift │ │ └── SetScreen │ │ │ └── SetScreenIpcMethodHandler.swift │ ├── Info.plist │ ├── TestedApp-Bridging-Header.h │ ├── Testing │ │ ├── InAppServicesDependencyCollectionRegisterer.swift │ │ ├── SupportViews │ │ │ ├── CollectionView │ │ │ │ ├── CellModel.swift │ │ │ │ ├── CollectionView.swift │ │ │ │ └── SingleViewCell.swift │ │ │ ├── TapIndicatorButton.swift │ │ │ ├── TestStackScrollView.swift │ │ │ └── ViewsWithClosures │ │ │ │ ├── ButtonWithClosures.swift │ │ │ │ ├── LabelWithClosures.swift │ │ │ │ ├── README.md │ │ │ │ ├── TextFieldWithClosures.swift │ │ │ │ └── TextViewWithClosures.swift │ │ ├── ViewControllers │ │ │ ├── IntermediateBetweenTests │ │ │ │ └── IntermediateBetweenTestsViewController.swift │ │ │ └── Testing │ │ │ │ ├── InitializableWithTestingViewControllerSettings.swift │ │ │ │ ├── TestingView.swift │ │ │ │ ├── TestingViewController.swift │ │ │ │ ├── TestingViewControllerFactory.swift │ │ │ │ ├── TestingViewControllerSettings.swift │ │ │ │ ├── ViewControllerContainerType.swift │ │ │ │ └── ViewControllerContainerTypeProvider.swift │ │ └── Views │ │ │ ├── Actions │ │ │ ├── ActionsTestsView │ │ │ │ ├── ActionTestsViewViewRegistrar.swift │ │ │ │ └── ActionsTestsView.swift │ │ │ └── MovingElementTests │ │ │ │ └── MovingElementTestsView.swift │ │ │ ├── ApplicationBundleProviderTests │ │ │ └── ApplicationBundleProviderTestsView.swift │ │ │ ├── AssertingCustomValuesTests │ │ │ └── AssertingCustomValuesTestsView.swift │ │ │ ├── ChangingHierarchyTests │ │ │ └── ChangingHierarchyTestsView.swift │ │ │ ├── ChecksTests │ │ │ ├── ChecksTestsView.swift │ │ │ └── ExpandingView.swift │ │ │ ├── CrashTests │ │ │ └── CrashTestsView.swift │ │ │ ├── DummyForLaunchingUiTestsView.swift │ │ │ ├── FakeCells │ │ │ ├── FakeCellsDoNotCauseSideEffectsTests │ │ │ │ ├── FakeCellsDoNotCauseSideEffectsTestsCollectionView.swift │ │ │ │ └── FakeCellsDoNotCauseSideEffectsTestsView.swift │ │ │ ├── FakeCellsDoNotCrashAppTests │ │ │ │ ├── CellThatCrashesAtInit.swift │ │ │ │ ├── CrashingCell.swift │ │ │ │ ├── CrashingCellException.swift │ │ │ │ └── FakeCellsDoNotCrashAppTestsView.swift │ │ │ └── FakeCellsTests │ │ │ │ └── FakeCellsTestsView.swift │ │ │ ├── HierarchySourcesTests │ │ │ └── HierarchySourcesTestsView.swift │ │ │ ├── HierarchyTests │ │ │ └── HierarchyTestsView.swift │ │ │ ├── IpcTestingView │ │ │ └── IpcTestingView.swift │ │ │ ├── Keyboard │ │ │ ├── KeyboardEventInjectorImplTestsView.swift │ │ │ └── SoftwareKeyboardTestsView.swift │ │ │ ├── LocatorsTests │ │ │ └── LocatorsTestsView.swift │ │ │ ├── NavigationBarCanBeFoundTests │ │ │ ├── NavigationBarCanBeFoundTestsView+NestedViewController.swift │ │ │ └── NavigationBarCanBeFoundTestsView.swift │ │ │ ├── NetworkStubbingTests │ │ │ └── NetworkStubbingTestsView.swift │ │ │ ├── NonViewElements │ │ │ ├── NonViewElementsTestsCustomDrawingView.swift │ │ │ ├── NonViewElementsTestsMapView.swift │ │ │ └── NonViewElementsTestsWebView.swift │ │ │ ├── Performance │ │ │ └── LocatorsPerformanceTestsView.swift │ │ │ ├── Permissions │ │ │ ├── PermissionInfo │ │ │ │ ├── Impls │ │ │ │ │ ├── CameraPermissionInfo.swift │ │ │ │ │ ├── GeolocationPermissionInfo.swift │ │ │ │ │ ├── MicrophonePermissionInfo.swift │ │ │ │ │ ├── NotificationsPermissionInfo.swift │ │ │ │ │ └── PhotosPermissionInfo.swift │ │ │ │ └── Support │ │ │ │ │ ├── AvCaptureDevicePermissionInfo.swift │ │ │ │ │ └── PermissionInfo.swift │ │ │ └── PermissionsTestsView.swift │ │ │ ├── ScreenshotTests │ │ │ ├── ScreenshotDHashLabelsTestsView.swift │ │ │ └── ScreenshotTestsView.swift │ │ │ ├── Scrolling │ │ │ ├── ScrollingSmokeTests │ │ │ │ ├── ScrollingSmokeTestsCollectionView.swift │ │ │ │ ├── ScrollingSmokeTestsScrollView.swift │ │ │ │ └── ScrollingSmokeTestsView.swift │ │ │ └── ScrollingTriesToMakeViewFullyVisibleTests │ │ │ │ └── ScrollingTriesToMakeViewFullyVisibleTestsView.swift │ │ │ ├── SetTextActionWaitsForElementToGainFocusTests │ │ │ ├── DelayingFocusGainingInput.swift │ │ │ └── SetTextActionWaitsForElementToGainFocusTestsView.swift │ │ │ ├── SwiftUI │ │ │ ├── SwiftUICustomValuesTestsView.swift │ │ │ ├── SwiftUIListTestsView.swift │ │ │ ├── SwiftUINavigationBarItemTestsView.swift │ │ │ └── UIHostingView.swift │ │ │ ├── TextsTests │ │ │ └── TextTestsView.swift │ │ │ ├── Touches │ │ │ └── TouchesTestsView.swift │ │ │ ├── Visibility │ │ │ └── InteractionsUseVisiblePointTestsView │ │ │ │ └── InteractionsUseVisiblePointTestsView.swift │ │ │ └── WaitingForQuiescence │ │ │ ├── CenteredLineButtonView.swift │ │ │ ├── TrackingCAAnimationDelegate.swift │ │ │ └── WaitingForQuiescenceTestsView.swift │ ├── Utils │ │ ├── ApplicationNameProvider.swift │ │ ├── RootViewControllerManager │ │ │ ├── RootViewControllerManager.swift │ │ │ └── RootViewControllerManagerImpl.swift │ │ ├── SingleResponseWebServer.swift │ │ ├── TargetAction.swift │ │ ├── UIBarButtonItem+TargetAction.swift │ │ ├── UIView+Layout.swift │ │ └── ViewWithUtilities.swift │ └── main.m ├── Tests.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ ├── AppForCheckingPureXctest.xcscheme │ │ ├── BlackBoxUiTests.xcscheme │ │ ├── BuildLintAndUnitTest.xcscheme │ │ ├── GrayBoxUiTests.xcscheme │ │ ├── Lint.xcscheme │ │ ├── OsxUnitTests.xcscheme │ │ ├── PodspecLinting.xcscheme │ │ └── UnitTests.xcscheme ├── Tests.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── WorkspaceSettings.xcsettings ├── UiTestsShared │ ├── Support │ │ ├── Emcee │ │ │ └── RuntimeDump │ │ │ │ ├── TestGetter.h │ │ │ │ ├── TestGetter.m │ │ │ │ ├── TestQuery.swift │ │ │ │ ├── TestSuiteInfo.h │ │ │ │ └── TestSuiteInfo.m │ │ ├── FileSystemMocking │ │ │ ├── FileSystem │ │ │ │ ├── FileSystem.swift │ │ │ │ └── FileSystemImpl.swift │ │ │ ├── TemporaryDirectory │ │ │ │ ├── CreatedTemporaryDirectory.swift │ │ │ │ └── TemporaryDirectory.swift │ │ │ ├── TemporaryDirectoryPathProvider │ │ │ │ ├── NsTemporaryDirectoryPathProvider.swift │ │ │ │ └── TemporaryDirectoryPathProvider.swift │ │ │ └── TemporaryFile │ │ │ │ ├── CreatedTemporaryFile.swift │ │ │ │ └── TemporaryFile.swift │ │ ├── Lifecycle │ │ │ ├── MeasureableTimedActivityMetricSenderWaiterTestLifecycleManager.swift │ │ │ └── TestObservationEntryPoint.swift │ │ ├── PageObjects │ │ │ ├── CustomElements │ │ │ │ └── TapIndicatorButtonElement.swift │ │ │ ├── PageObjects.swift │ │ │ ├── PageObjects │ │ │ │ ├── ActionsTestsScreen.swift │ │ │ │ ├── CanTapKeyboardTests │ │ │ │ │ └── CanTapKeyboardTestsViewPageObject.swift │ │ │ │ ├── ChecksTestsScreen.swift │ │ │ │ ├── GenericPageObject.swift │ │ │ │ ├── HierarchyTestsViewPageObject.swift │ │ │ │ ├── InteractionsUseVisiblePointTestsViewPageObject.swift │ │ │ │ ├── IpcTestingViewPageObject.swift │ │ │ │ ├── KeyboardEventInjectorImplTestsViewPageObject.swift │ │ │ │ ├── LocatorsPerformanceTestsViewPageObject.swift │ │ │ │ ├── LocatorsTestsViewPageObject.swift │ │ │ │ ├── NavigationBarCanBeFoundTests │ │ │ │ │ └── NavigationBarCanBeFoundTestsViewPageObject.swift │ │ │ │ ├── NetworkStubbingTestsViewPageObject.swift │ │ │ │ ├── NonViewElementsTests │ │ │ │ │ ├── NonViewElementsTestsCustomDrawingViewPageObject.swift │ │ │ │ │ ├── NonViewElementsTestsMapViewPageObject.swift │ │ │ │ │ └── NonViewElementsTestsWebViewPageObject.swift │ │ │ │ ├── PermissionsTestsViewPageObject.swift │ │ │ │ ├── ScreenshotTestsViewPageObject.swift │ │ │ │ ├── Scrolling │ │ │ │ │ ├── ScrollingSmokeTestsViewPageObject.swift │ │ │ │ │ └── ScrollingTriesToMakeViewFullyVisibleTestsViewPageObject.swift │ │ │ │ ├── SetTextActionWaitsForElementToGainFocusTestsViewPageObject.swift │ │ │ │ ├── TouchesTestsViewPageObject.swift │ │ │ │ └── WaitingForQuiescenceTestsViewPageObject.swift │ │ │ └── Support │ │ │ │ ├── Apps.swift │ │ │ │ ├── BasePageObject+Extension.swift │ │ │ │ ├── MainAppScreen.swift │ │ │ │ └── OpenableScreen.swift │ │ ├── Reports │ │ │ ├── README.md │ │ │ ├── ReportingSystem │ │ │ │ ├── AsyncReportingSystem.swift │ │ │ │ ├── Domain │ │ │ │ │ ├── TestCaseReport.swift │ │ │ │ │ ├── TestMethodReport.swift │ │ │ │ │ ├── TestReportAttachment.swift │ │ │ │ │ ├── TestReportFailure.swift │ │ │ │ │ ├── TestReportStatus.swift │ │ │ │ │ └── TestStepReport.swift │ │ │ │ ├── ReportingSystem.swift │ │ │ │ └── ReportingSystems.swift │ │ │ └── ReportingTestLifecycleManager.swift │ │ ├── TestCase │ │ │ ├── BaseUiTestCase+Info.swift │ │ │ ├── BaseUiTestCase+ResetUi.swift │ │ │ ├── BaseUiTestCase+ResolveFunctions.swift │ │ │ ├── BaseUiTestCase.swift │ │ │ ├── ScreenOpener.swift │ │ │ └── UiTestCaseDependencies.swift │ │ └── Utils │ │ │ └── RedImagesProvider.swift │ └── Tests │ │ ├── FakeCells │ │ ├── FakeCellsDoNotCauseSideEffectsTests.swift │ │ ├── FakeCellsDoNotCrashAppTests.swift │ │ └── FakeCellsTests.swift │ │ ├── GettingInfoAboutUserInterfaceState │ │ ├── FindingElement │ │ │ ├── LocatorsTests.swift │ │ │ └── SituationsWhereHierarchyIsChangedOverTimeAreHandledProperlyTests.swift │ │ ├── GettingElementInfo │ │ │ ├── GettingUiKitHierarchyTests.swift │ │ │ └── TestabilityTextTests.swift │ │ └── StandardLibraryViews │ │ │ └── NavigationBarCanBeFoundTests.swift │ │ ├── Interactions │ │ ├── Actions │ │ │ ├── Common │ │ │ │ └── RunningActionsInRandomOrderTests.swift │ │ │ ├── SelfCheck │ │ │ │ └── BaseActionTestCaseTests.swift │ │ │ ├── Specific │ │ │ │ ├── ClearText │ │ │ │ │ └── ClearTextActionTests.swift │ │ │ │ ├── Press │ │ │ │ │ └── PressActionTests.swift │ │ │ │ ├── SetText │ │ │ │ │ ├── SetTestActionSetsTextProperlyTests.swift │ │ │ │ │ ├── SetTextActionCanBeRunSubsequentlyWithSameResultTests.swift │ │ │ │ │ ├── SetTextActionDoesntGainFocusIfItIsAlreadyGainedTests.swift │ │ │ │ │ ├── SetTextActionFailuresTests.swift │ │ │ │ │ ├── SetTextActionWaitsElementTests.swift │ │ │ │ │ └── SetTextActionWaitsForElementToGainFocusTests.swift │ │ │ │ ├── Swipe │ │ │ │ │ ├── SwipeActionCanBeRunFromAnyPartOfScreenTests.swift │ │ │ │ │ ├── SwipeActionCanBeRunSubsequentlyTests.swift │ │ │ │ │ ├── SwipeActionFailuresTests.swift │ │ │ │ │ ├── SwipeActionTouchesTests.swift │ │ │ │ │ └── SwipeActionWaitsTests.swift │ │ │ │ └── Tap │ │ │ │ │ ├── CanTapMovingElementTests.swift │ │ │ │ │ ├── TapActionTests.swift │ │ │ │ │ └── TapActionTouchesTests.swift │ │ │ └── Support │ │ │ │ ├── BaseActionTestCase │ │ │ │ ├── BaseActionTestCase+BasicAsserts.swift │ │ │ │ ├── BaseActionTestCase+Checks.swift │ │ │ │ ├── BaseActionTestCase+SetViews.swift │ │ │ │ └── BaseActionTestCase.swift │ │ │ │ ├── BaseTouchesTestCase │ │ │ │ ├── BaseTouchesTestCase+AllEvents.swift │ │ │ │ ├── BaseTouchesTestCase+AllTouches.swift │ │ │ │ ├── BaseTouchesTestCase+Asserts.swift │ │ │ │ ├── BaseTouchesTestCase+Coordinates.swift │ │ │ │ ├── BaseTouchesTestCase+GetEvents.swift │ │ │ │ └── BaseTouchesTestCase.swift │ │ │ │ └── Specification │ │ │ │ ├── ActionSpecification.swift │ │ │ │ ├── ActionSpecifications.swift │ │ │ │ └── AnyActionSpecification.swift │ │ └── Checks │ │ │ ├── AssertMatchesReferenceWithDhashComparatorTests.swift │ │ │ ├── AssertMatchesReferenceWithPerPixelComparatorTests.swift │ │ │ ├── AssertingCustomValuesTests.swift │ │ │ └── BasedOnBaseChecksTestCase │ │ │ ├── Base │ │ │ ├── AssertSpec.swift │ │ │ └── BaseChecksTestCase.swift │ │ │ └── Tests │ │ │ ├── ContinueAfterFailureTests.swift │ │ │ ├── DifferentChecks │ │ │ ├── AssertBecomesShorterAfterInteractionTests.swift │ │ │ ├── AssertBecomesTallerAfterInteractionTests.swift │ │ │ ├── AssertContainsTextInteractionTests.swift │ │ │ ├── AssertHasAccessibilityLabelInteractionTests.swift │ │ │ ├── AssertHasAccessibilityValueInteractionTests.swift │ │ │ ├── AssertHasTextInteractionTests.swift │ │ │ ├── AssertIsDisabledInteractionTests.swift │ │ │ ├── AssertIsDisplayedInteractionTests.swift │ │ │ ├── AssertIsEnabledInteractionTests.swift │ │ │ ├── AssertIsNotDisplayedInteractionTests.swift │ │ │ ├── AssertTextMatchesInteractionTests.swift │ │ │ ├── IsDisplayedInteractionTests.swift │ │ │ └── TextInteractionTests.swift │ │ │ └── IgnoringDefinitelyHiddenElementsTests.swift │ │ ├── Ipc │ │ └── BidirectionalIpcTests.swift │ │ ├── Keyboard │ │ └── SoftwareKeyboardTests.swift │ │ ├── NonViewElementsTests │ │ ├── NonViewElementsTests+BlackBoxOnly.swift │ │ └── NonViewElementsTests.swift │ │ ├── PageObjectMakingHelper │ │ └── PageObjectMakingHelperTests.swift │ │ ├── Performance │ │ ├── LocatorsPerformanceTests.swift │ │ └── VisibilityCheckPerformanceTests.swift │ │ ├── Permissions │ │ ├── Kinds │ │ │ ├── Camera │ │ │ │ ├── CameraApplicationPermissionSpecification.swift │ │ │ │ └── CameraApplicationPermissionTests.swift │ │ │ ├── Geolocation │ │ │ │ ├── GeolocationApplicationPermissionSpecification.swift │ │ │ │ └── GeolocationApplicationPermissionTests.swift │ │ │ ├── Microphone │ │ │ │ ├── MicrophoneApplicationPermissionSpecification.swift │ │ │ │ └── MicrophoneApplicationPermissionTests.swift │ │ │ ├── Notifications │ │ │ │ ├── NotificationsApplicationPermissionSpecification.swift │ │ │ │ └── NotificationsApplicationPermissionTests.swift │ │ │ └── Photos │ │ │ │ ├── PhotosApplicationPermissionSpecification.swift │ │ │ │ └── PhotosApplicationPermissionTests.swift │ │ └── Support │ │ │ ├── BasePermissionTestCase.swift │ │ │ └── Specification │ │ │ ├── Generic │ │ │ └── ApplicationPermissionSpecification.swift │ │ │ └── Specific │ │ │ ├── ApplicationPermissionWithAllowedDeniedNotDeterminedStateSpecification.swift │ │ │ └── ApplicationPermissionWithAllowedDeniedStateSpecification.swift │ │ ├── Reporting │ │ └── FailuresAreHighlightedInCorrectPlacesInIdeTests.swift │ │ ├── SelfCheck │ │ └── CallToSuperInPreconditionOfBaseUiTestCaseValidationTests.swift │ │ ├── SwiftUI │ │ ├── SwiftUICustomValuesTests.swift │ │ ├── SwiftUIListTests.swift │ │ └── SwiftUINavigationBarItemTests.swift │ │ ├── Visibility │ │ ├── InteractionsUseVisiblePointTests.swift │ │ └── VisibilityCheckTests.swift │ │ └── WaitingForQuiescence │ │ └── WaitingForQuiescenceTests.swift ├── UnitTests │ ├── FileLineTests.swift │ ├── Info.plist │ ├── Mocks │ │ ├── Custom │ │ │ ├── ConstantAnyGenerator.swift │ │ │ ├── ConstantRandomNumberProvider.swift │ │ │ ├── ElementMatcherBuilderFactory.swift │ │ │ ├── SequenceAnyGenerator.swift │ │ │ └── SequenceRandomNumberProvider.swift │ │ └── generate_mocks │ ├── Support │ │ ├── BaseSerializationTestCase.swift │ │ ├── TestCase.swift │ │ ├── UnitTests-Bridging-Header.h │ │ └── WhiteBoxTestCaseDependencies.swift │ └── Tests │ │ ├── MixboxBuiltinDi │ │ └── DependencyInjectionImplTests.swift │ │ ├── MixboxCocoaImageHashing │ │ ├── Assets │ │ │ ├── blur │ │ │ │ ├── blur_Chang_PermanentMidnightintheChairofJasperJohns_large.bmp │ │ │ │ ├── blur_Hhirst_BGE.bmp │ │ │ │ ├── blur_Scotland_castle_wedding.bmp │ │ │ │ ├── blur_Tower-Bridge-at-night--London--England_web.bmp │ │ │ │ ├── blur_architecture1.bmp │ │ │ │ ├── blur_architecture_2.bmp │ │ │ │ ├── blur_bamarket115.bmp │ │ │ │ ├── blur_butterflywallpaper.bmp │ │ │ │ ├── blur_damien_hirst.bmp │ │ │ │ ├── blur_damien_hirst_does_fashion_week.bmp │ │ │ │ ├── blur_damien_hirst_virgin_mother.bmp │ │ │ │ ├── blur_damienhirst.bmp │ │ │ │ ├── blur_dhirst_a3b9ddea.bmp │ │ │ │ ├── blur_diamondskull.bmp │ │ │ │ ├── blur_doodle.bmp │ │ │ │ ├── blur_england.bmp │ │ │ │ ├── blur_englandpath.bmp │ │ │ │ ├── blur_jasper_johns.bmp │ │ │ │ ├── blur_johns_portrait_380x311.bmp │ │ │ │ ├── blur_latrobe.bmp │ │ │ │ ├── blur_targetjasperjohns.bmp │ │ │ │ ├── blur_uk-golf-scotland.bmp │ │ │ │ └── blur_wallacestevens.bmp │ │ │ ├── compr │ │ │ │ ├── compr_Chang_PermanentMidnightintheChairofJasperJohns_large.jpg │ │ │ │ ├── compr_Hhirst_BGE.jpg │ │ │ │ ├── compr_Scotland_castle_wedding.jpg │ │ │ │ ├── compr_Tower-Bridge-at-night--London--England_web.jpg │ │ │ │ ├── compr_architecture1.jpg │ │ │ │ ├── compr_architecture_2.jpg │ │ │ │ ├── compr_bamarket115.jpg │ │ │ │ ├── compr_butterflywallpaper.jpg │ │ │ │ ├── compr_damien_hirst.jpg │ │ │ │ ├── compr_damien_hirst_does_fashion_week.jpg │ │ │ │ ├── compr_damien_hirst_virgin_mother.jpg │ │ │ │ ├── compr_damienhirst.jpg │ │ │ │ ├── compr_dhirst_a3b9ddea.jpg │ │ │ │ ├── compr_diamondskull.jpg │ │ │ │ ├── compr_doodle.jpg │ │ │ │ ├── compr_england.jpg │ │ │ │ ├── compr_englandpath.jpg │ │ │ │ ├── compr_jasper_johns.jpg │ │ │ │ ├── compr_johns_portrait_380x311.jpg │ │ │ │ ├── compr_latrobe.jpg │ │ │ │ ├── compr_targetjasperjohns.jpg │ │ │ │ ├── compr_uk-golf-scotland.jpg │ │ │ │ └── compr_wallacestevens.jpg │ │ │ └── misc │ │ │ │ ├── misc_Chang_PermanentMidnightintheChairofJasperJohns_large.bmp │ │ │ │ ├── misc_Hhirst_BGE.bmp │ │ │ │ ├── misc_Scotland_castle_wedding.bmp │ │ │ │ ├── misc_Tower-Bridge-at-night--London--England_web.bmp │ │ │ │ ├── misc_architecture1.bmp │ │ │ │ ├── misc_architecture_2.bmp │ │ │ │ ├── misc_bamarket115.bmp │ │ │ │ ├── misc_butterflywallpaper.bmp │ │ │ │ ├── misc_damien_hirst.bmp │ │ │ │ ├── misc_damien_hirst_does_fashion_week.bmp │ │ │ │ ├── misc_damien_hirst_virgin_mother.bmp │ │ │ │ ├── misc_damienhirst.bmp │ │ │ │ ├── misc_dhirst_a3b9ddea.bmp │ │ │ │ ├── misc_diamondskull.bmp │ │ │ │ ├── misc_doodle.bmp │ │ │ │ ├── misc_england.bmp │ │ │ │ ├── misc_englandpath.bmp │ │ │ │ ├── misc_jasper_johns.bmp │ │ │ │ ├── misc_johns_portrait_380x311.bmp │ │ │ │ ├── misc_latrobe.bmp │ │ │ │ ├── misc_targetjasperjohns.bmp │ │ │ │ ├── misc_uk-golf-scotland.bmp │ │ │ │ └── misc_wallacestevens.bmp │ │ ├── CococaImageHashingTests.m │ │ ├── OSAHashTests.m │ │ ├── OSDHashTests.m │ │ ├── OSFastGraphicsTests.m │ │ ├── OSImageHashingBaseTest.h │ │ ├── OSImageHashingBaseTest.m │ │ ├── OSPHashTests.m │ │ └── OSSimilaritySearchTests.m │ │ ├── MixboxDi │ │ └── CompoundDependencyResolverTests.swift │ │ ├── MixboxFoundation │ │ ├── CachingLazyMappingSequenceTests.swift │ │ ├── CollectionExtensionTests.swift │ │ ├── DebugDescriptionBuilderTests.swift │ │ ├── GenericSerializationTests.swift │ │ ├── ObjectiveC │ │ │ ├── AssociatedObjectTests.swift │ │ │ ├── AssociatedValueTests.swift │ │ │ └── ObjectiveCExceptionCatcherTests.swift │ │ ├── String_Indentation_Tests.swift │ │ ├── ThreadUnsafeOnceToken │ │ │ └── ThreadUnsafeOnceTokenTests.swift │ │ └── UnwrapOrThrowTests.swift │ │ ├── MixboxGenerator │ │ ├── AnyGenerator │ │ │ └── DynamicLookup │ │ │ │ └── DynamicLookupGeneratorTests.swift │ │ ├── Generator │ │ │ ├── GeneratorTests.swift │ │ │ └── Generators │ │ │ │ ├── Foundation │ │ │ │ └── RandomUrlGeneratorTests.swift │ │ │ │ └── Swift │ │ │ │ ├── Empty │ │ │ │ ├── EmptyArrayGeneratorTests.swift │ │ │ │ ├── EmptyDictionaryGeneratorTests.swift │ │ │ │ └── EmptyOptionalGeneratorTests.swift │ │ │ │ └── Random │ │ │ │ ├── RandomArrayGeneratorTests.swift │ │ │ │ ├── RandomBoolGeneratorTests.swift │ │ │ │ ├── RandomDictionaryGeneratorTests.swift │ │ │ │ ├── RandomFloatGeneratorTests.swift │ │ │ │ ├── RandomIntegerGeneratorTests.swift │ │ │ │ └── RandomSetGeneratorTests.swift │ │ ├── GeneratorFacadeTests │ │ │ ├── GeneratorFacadeTests.swift │ │ │ ├── Support │ │ │ │ ├── BaseGeneratorFacadeTests+SharedCode.swift │ │ │ │ └── BaseGeneratorFacadeTests+SharedModels.swift │ │ │ └── Tests │ │ │ │ ├── CommonLogicGeneratorFacadeTests.swift │ │ │ │ ├── GeneratingNestedFields │ │ │ │ └── NestedFieldsGeneratorFacadeTests.swift │ │ │ │ └── GeneratingTopLevelObjects │ │ │ │ ├── ArrayGeneratorFacadeTests.swift │ │ │ │ ├── DictionaryGeneratorFacadeTests.swift │ │ │ │ ├── EnumsGeneratorFacadeTests.swift │ │ │ │ ├── NonFinalClassesGeneratorFacadeTests.swift │ │ │ │ └── OptionalGeneratorFacadeTests.swift │ │ ├── Random │ │ │ ├── MersenneTwisterRandomNumberProviderTests.swift │ │ │ └── OverflowingUInt64Tests.swift │ │ └── Support │ │ │ └── BaseGeneratorTestCase.swift │ │ ├── MixboxGray │ │ └── MultiTouchEventFactoryTests.swift │ │ ├── MixboxInAppServices │ │ ├── IdlingResourceObjectTrackerTests.swift │ │ ├── ImagePixelDataTests.swift │ │ ├── InAppScreenshotTakerImplTests.swift │ │ ├── ObjcRuntimeObjcMethodsWithUniqueImplementationProviderTests.swift │ │ ├── UiEventObservableImplTests.swift │ │ ├── VisibilityCheckForLoopOptimizerImplTests.swift │ │ └── VisibilityCheckImageColorShifterImplTests.swift │ │ ├── MixboxIoKit │ │ ├── BaseEventTestCase.swift │ │ ├── DigitizerEventTests.swift │ │ ├── DigitizerFingerEventTests.swift │ │ └── EventOptionBitsTests.swift │ │ ├── MixboxIpcCommon │ │ └── IpcThrowingFunctionResultTests.swift │ │ ├── MixboxMocksRuntime │ │ ├── FixturePaths │ │ │ └── FixturesPathsForOsxUnitTests.swift │ │ ├── Fixtures │ │ │ ├── ForGenerics │ │ │ │ ├── Protocol0.swift │ │ │ │ ├── Protocol1.swift │ │ │ │ ├── Protocol2.swift │ │ │ │ ├── Protocol3.swift │ │ │ │ └── Protocol4.swift │ │ │ ├── MocksTestsFixtureBaseProtocolFromOtherFile.swift │ │ │ ├── MocksTestsFixtureObjcProtocol.swift │ │ │ ├── MocksTestsFixtureProtocol.swift │ │ │ └── MocksTestsFixtureSimpleProtocol.swift │ │ ├── Models │ │ │ ├── Completion.swift │ │ │ └── GenericCompletionHolder.swift │ │ ├── Support │ │ │ ├── BaseMixboxMocksRuntimeTests.swift │ │ │ └── Extensions │ │ │ │ ├── RecordedCall+Equatable.swift │ │ │ │ ├── RecordedCallArgument+Equatable.swift │ │ │ │ ├── RecordedCallArgumentValue+Equatable.swift │ │ │ │ └── RecordedCallArguments+Equatable.swift │ │ └── Tests │ │ │ ├── DynamicBehaviorGeneration │ │ │ ├── Integrational │ │ │ │ ├── DynamicBehaviorIntegrationalTests.swift │ │ │ │ └── DynamicBehaviorIntegrationalTestsProtocol.swift │ │ │ └── MixboxMocksDynamicResultTests.swift │ │ │ ├── EasyClosureStubbing │ │ │ ├── EasyClosureStubbingIntegrationalTests.swift │ │ │ └── EasyClosureStubbingIntegrationalTestsProtocol.swift │ │ │ ├── PublicInterfaceOfMocks │ │ │ └── MixboxMocksSettingMockManagerTests.swift │ │ │ ├── RecordedCallsHolderImplTests.swift │ │ │ ├── StubsHolderImplImplTests.swift │ │ │ └── SupportForDifferentDeclarations │ │ │ ├── MixboxMocksGenericFunctionsTests.swift │ │ │ ├── MixboxMocksNonEscapingFunctionsTests.swift │ │ │ └── MixboxMocksThrowingFunctionsTests.swift │ │ ├── MixboxReflection │ │ ├── EnumImmutableValueReflectionTests.swift │ │ ├── ValueCodeGenerator │ │ │ ├── BaseValueCodeGeneratorTests+SharedFunctions.swift │ │ │ ├── BaseValueCodeGeneratorTests+SharedModels.swift │ │ │ ├── BaseValueCodeGeneratorTests.swift │ │ │ ├── ValueCodeGeneratorCollectionsTests.swift │ │ │ ├── ValueCodeGeneratorEnumsTests.swift │ │ │ ├── ValueCodeGeneratorIntegrationTests.swift │ │ │ ├── ValueCodeGeneratorKnownIssuesTests.swift │ │ │ ├── ValueCodeGeneratorPrimitivesTests.swift │ │ │ ├── ValueCodeGeneratorRecursionTests.swift │ │ │ └── ValueCodeGeneratorTuplesTests.swift │ │ └── ValueIsObjectCheckerTests.swift │ │ ├── MixboxTestsFoundation │ │ ├── AutomaticCurrentTestCaseProvider.swift │ │ ├── BundleResourcePathProvider │ │ │ ├── BundleResourcePathProviderImplTests.swift │ │ │ ├── BundleResourcePathProviderImplTests.with.lots.of.dots.json │ │ │ ├── BundleResourcePathProviderImplTests_with_extension.json │ │ │ └── BundleResourcePathProviderImplTests_without_extension_json │ │ ├── Collection_ElementOrFail_Tests.swift │ │ ├── Collection_OnlyOrFail_Tests.swift │ │ ├── CurrentApplicationCurrentSimulatorFileSystemRootProviderTests.swift │ │ ├── DynamicMatcherBuilder │ │ │ └── DynamicMatcherBuilderTests.swift │ │ ├── FileLineForFailureProvider │ │ │ ├── ExtendedStackTraceEntryFromStackTraceEntryConverterImplTests.swift │ │ │ ├── ExtendedStackTraceProviderImplTests.swift │ │ │ ├── FirstOfTargetFileFromCallStackFileLineForFailureProvider │ │ │ │ └── FirstOfTargetFileFromCallStackFileLineForFailureProviderTests.swift │ │ │ ├── LastCallOfCurrentTestFileLineForFailureProvider │ │ │ │ ├── LastCallOfCurrentTestFileLineForFailureProviderIntegrationTests.swift │ │ │ │ └── LastCallOfCurrentTestFileLineForFailureProviderUnitTests.swift │ │ │ └── Support │ │ │ │ ├── ExtendedStackTraceProviderMock.swift │ │ │ │ └── FileForStacktraceTestsWithFixedNameAndLineNumbers.swift │ │ └── SimulatorFileSystemRootTests.swift │ │ ├── MixboxUiKit │ │ └── Extensions │ │ │ └── CoreGraphics │ │ │ ├── CGRect │ │ │ └── CGRect_Rounding_Tests.swift │ │ │ └── CGVector_Extensions_Tests.swift │ │ ├── MixboxUiTestsFoundation │ │ ├── AutomaticRecorderAndReplayerCreationSettingsProvider │ │ │ ├── AutomaticRecorderAndReplayerCreationSettingsProviderImplTests.empty.json │ │ │ ├── AutomaticRecorderAndReplayerCreationSettingsProviderImplTests.recordedNetworkSession.json │ │ │ └── AutomaticRecorderAndReplayerCreationSettingsProviderImplTests.swift │ │ ├── ElementSettingsTests.swift │ │ ├── ImageHash │ │ │ └── ImageHashCalculatorTests.swift │ │ ├── Matching │ │ │ ├── ElementMatcherBuilderTests.swift │ │ │ ├── Matchers │ │ │ │ ├── Array │ │ │ │ │ └── ArrayEqualsMatcherTests.swift │ │ │ │ ├── ElementSnapshot │ │ │ │ │ ├── IsSubviewMatcherTests.swift │ │ │ │ │ └── SnapshotHierarchyMatcherTests.swift │ │ │ │ ├── Logic │ │ │ │ │ ├── AlwaysFalseMatcherTests.swift │ │ │ │ │ ├── AlwaysTrueMatcherTests.swift │ │ │ │ │ ├── AndMatcherTests.swift │ │ │ │ │ ├── NotMatcherTests.swift │ │ │ │ │ ├── OrMatcherTests.swift │ │ │ │ │ └── Support │ │ │ │ │ │ ├── BaseLogicMatcherTests.swift │ │ │ │ │ │ └── TestFailingMatcher.swift │ │ │ │ └── Value │ │ │ │ │ └── Comparable │ │ │ │ │ ├── IsGreaterMatcherTests.swift │ │ │ │ │ ├── IsGreaterOrEqualsMatcherTests.swift │ │ │ │ │ ├── IsGreaterOrEqualsWithAccuracyMatcherTests.swift │ │ │ │ │ ├── IsGreaterWithAccuracyMatcherTests.swift │ │ │ │ │ ├── IsLessMatcherTests.swift │ │ │ │ │ ├── IsLessOrEqualsMatcherTests.swift │ │ │ │ │ ├── IsLessOrEqualsWithAccuracyMatcherTests.swift │ │ │ │ │ └── IsLessWithAccuracyMatcherTests.swift │ │ │ └── Support │ │ │ │ ├── BaseMatcherTests.swift │ │ │ │ ├── ElementSnapshotStub.swift │ │ │ │ └── ElementSnapshotStubTests.swift │ │ ├── RecordedSessionStubber │ │ │ └── RecordedSessionStubberTests.swift │ │ └── SnapshotComparison │ │ │ ├── BaseSnapshotsComparatorTestCase.swift │ │ │ ├── ImageHashCalculatorSnapshotsComparatorTests.swift │ │ │ ├── PerPixelSnapshotsComparatorTests.swift │ │ │ └── SnapshotComparisonAccuracyTests.swift │ │ └── SelfCheck │ │ └── RecordIssueIsOverridenByRecordFailureTests.swift └── WhiteBoxAndGrayBoxTestsShared │ └── Accessibility │ ├── BaseTestabilityTestCase.swift │ ├── NSObjectTestabilityTests.swift │ └── UIViewTestabilityTests.swift ├── ci ├── bash │ ├── bash_ci.sh │ └── include │ │ ├── bash_utils.sh │ │ ├── ci_integration.sh │ │ ├── ci_integration │ │ ├── __init__.py │ │ ├── base_ci_integration.sh │ │ ├── no_ci_integration.sh │ │ └── teamcity_ci_integration.sh │ │ ├── error_handling.sh │ │ ├── install_python.sh │ │ ├── python.sh │ │ ├── swift_package_manager.sh │ │ └── utils.sh ├── builds │ ├── check_bumping_version │ └── push_specs ├── destinations │ ├── all_destinations_for_pr.json │ └── single_destination_for_pr.json ├── gemfiles │ ├── Gemfile_cocoapods │ └── Gemfile_cocoapods.lock ├── swift │ ├── .emceeversion │ ├── .gitignore │ ├── MakePackage │ │ ├── Package.swift.template │ │ ├── make_package.py │ │ └── requirements.txt │ ├── Makefile │ ├── Package.resolved │ ├── Sources │ │ ├── AllTests │ │ │ ├── Support │ │ │ │ └── XCTestCase+AssertDoesntThrow.swift │ │ │ └── Tests │ │ │ │ ├── Bash │ │ │ │ ├── FunctionalTests │ │ │ │ │ └── BashExecutorFunctionalTests.swift │ │ │ │ ├── Mocks │ │ │ │ │ ├── BashExecutorMock.swift │ │ │ │ │ └── ProcessExecutorMock.swift │ │ │ │ └── UnitTests │ │ │ │ │ ├── BashEscapedCommandMakerImplTests.swift │ │ │ │ │ └── BashExecutorUnitTests.swift │ │ │ │ ├── CiFoundation │ │ │ │ ├── FunctionalTests │ │ │ │ │ ├── FileDownloaderTests.swift │ │ │ │ │ └── TemporaryFileProviderTests.swift │ │ │ │ └── Mocks │ │ │ │ │ ├── EnvironmentProviderMock.swift │ │ │ │ │ └── TemporaryFileProviderMock.swift │ │ │ │ ├── Cocoapods │ │ │ │ ├── CocoapodsSearchOutputParserImplTests.swift │ │ │ │ ├── CocoapodsTrunkInfoOutputParserImplTests.swift │ │ │ │ └── ThrowingScannerTests.swift │ │ │ │ ├── Di │ │ │ │ └── UnitTests │ │ │ │ │ └── TeamcityBuildDiTests.swift │ │ │ │ ├── Git │ │ │ │ ├── FunctionalTests │ │ │ │ │ └── GitTagsProviderImplTests.swift │ │ │ │ └── Mocks │ │ │ │ │ ├── CurrentCommitProviderMock.swift │ │ │ │ │ ├── GitRevListProviderMock.swift │ │ │ │ │ ├── GitTagsProviderMock.swift │ │ │ │ │ └── RepoRootProviderMock.swift │ │ │ │ ├── Releases │ │ │ │ └── UnitTests │ │ │ │ │ ├── ListOfPodspecsToPushProviderImplTests.swift │ │ │ │ │ ├── NextReleaseVersionProviderImplTests.swift │ │ │ │ │ └── PodspecsPatcherImplTests.swift │ │ │ │ ├── Simctl │ │ │ │ ├── SimctlTests.swift │ │ │ │ ├── list_xc_10_0_0.json │ │ │ │ ├── list_xc_10_1_0.json │ │ │ │ ├── list_xc_10_2_1.json │ │ │ │ ├── list_xc_11_0_0.json │ │ │ │ └── list_xc_11_4_1.json │ │ │ │ └── StaticChecksTask │ │ │ │ ├── Mocks │ │ │ │ ├── FrameworkInfosProviderMock.swift │ │ │ │ └── FrameworksDirectoryProviderMock.swift │ │ │ │ └── UnitTests │ │ │ │ ├── FrameworkInfosProviderImplTests.swift │ │ │ │ ├── IfClauseInfoByPathProviderImplTests.swift │ │ │ │ ├── MissingConditionalCompilationClausesProviderImplTests.swift │ │ │ │ └── SwiftLintViolationsParserTests.swift │ │ ├── Bash │ │ │ ├── BashCommandEscaper │ │ │ │ ├── BashEscapedCommandMaker.swift │ │ │ │ └── BashEscapedCommandMakerImpl.swift │ │ │ ├── BashExecutor │ │ │ │ ├── BashExecutor.swift │ │ │ │ ├── Impls │ │ │ │ │ └── ProcessExecutorBashExecutor.swift │ │ │ │ └── Models │ │ │ │ │ ├── BashEnvironment.swift │ │ │ │ │ ├── BashOutput.swift │ │ │ │ │ ├── BashResult.swift │ │ │ │ │ └── NonZeroExitCodeBashError.swift │ │ │ └── ProcessExecutor │ │ │ │ ├── Impls │ │ │ │ ├── FoundationProcessExecutor │ │ │ │ │ ├── FoundationProcessExecutor.swift │ │ │ │ │ └── Support │ │ │ │ │ │ ├── LazyPipeProcessOutput.swift │ │ │ │ │ │ ├── Pipe.swift │ │ │ │ │ │ └── Process.swift │ │ │ │ └── LoggingProcessExecutor.swift │ │ │ │ ├── Models │ │ │ │ ├── ProcessExecutorOutputHandling.swift │ │ │ │ ├── ProcessOutput │ │ │ │ │ ├── PlainProcessOutput.swift │ │ │ │ │ └── ProcessOutput.swift │ │ │ │ └── ProcessResult.swift │ │ │ │ └── ProcessExecutor.swift │ │ ├── BuildDsl │ │ │ └── Build │ │ │ │ ├── Build.swift │ │ │ │ ├── BuildDiFactory.swift │ │ │ │ ├── BuildRunner.swift │ │ │ │ ├── BuildTaskFactory.swift │ │ │ │ ├── Teamcity │ │ │ │ ├── BaseTeamcityBuild.swift │ │ │ │ └── TeamcityBuild.swift │ │ │ │ └── Travis │ │ │ │ ├── BaseTravisBuild.swift │ │ │ │ └── TravisBuild.swift │ │ ├── Bundler │ │ │ ├── BundledProcessExecutor │ │ │ │ ├── BundledProcessExecutor.swift │ │ │ │ └── BundledProcessExecutorImpl.swift │ │ │ ├── BundlerBashCommandGenerator │ │ │ │ ├── BundlerBashCommandGenerator.swift │ │ │ │ └── BundlerBashCommandGeneratorImpl.swift │ │ │ └── GemfileLocationProvider │ │ │ │ ├── GemfileLocationProvider.swift │ │ │ │ └── GemfileLocationProviderImpl.swift │ │ ├── CheckDemoTask │ │ │ └── CheckDemoTask.swift │ │ ├── CheckIpcDemoTask │ │ │ └── CheckIpcDemoTask.swift │ │ ├── CheckReleaseToCocoapodsTask │ │ │ └── CheckReleaseToCocoapodsTask.swift │ │ ├── CiDi │ │ │ ├── CommonDi.swift │ │ │ └── Emcee │ │ │ │ ├── DefaultSimulatorOperationTimeoutsProvider.swift │ │ │ │ ├── EmceeFileUploaderImpl.swift │ │ │ │ └── EmceeVersionProviderImpl.swift │ │ ├── CiFoundation │ │ │ ├── Box │ │ │ │ ├── Box.swift │ │ │ │ └── MutableBox.swift │ │ │ ├── CiLogger │ │ │ │ ├── CiLogger.swift │ │ │ │ └── StdoutCiLogger.swift │ │ │ ├── CompoundError.swift │ │ │ ├── CopypastedFromMixbox │ │ │ │ ├── ErrorString.swift │ │ │ │ ├── LazyLoader.swift │ │ │ │ └── Optional+UnwrapOrThrow.swift │ │ │ ├── Environment │ │ │ │ ├── DebugEnvironmentProvider.swift │ │ │ │ ├── EnvironmentProvider.swift │ │ │ │ └── ProcessInfoEnvironmentProvider.swift │ │ │ ├── JSON │ │ │ │ ├── DecodableFromJsonFileLoader │ │ │ │ │ ├── DecodableFromJsonFileLoader.swift │ │ │ │ │ └── DecodableFromJsonFileLoaderImpl.swift │ │ │ │ └── JsonFileFromEncodableGenerator │ │ │ │ │ ├── JsonFileFromEncodableGenerator.swift │ │ │ │ │ └── JsonFileFromEncodableGeneratorImpl.swift │ │ │ ├── Optional+ToArray.swift │ │ │ ├── Retrier │ │ │ │ ├── Retrier.swift │ │ │ │ └── RetrierImpl.swift │ │ │ ├── TemporaryFileProvider │ │ │ │ ├── TemporaryFileProvider.swift │ │ │ │ └── TemporaryFileProviderImpl.swift │ │ │ └── URL+ThrowingInit.swift │ │ ├── Cocoapods │ │ │ ├── Cache │ │ │ │ └── Clean │ │ │ │ │ ├── CocoapodCacheClean.swift │ │ │ │ │ ├── CocoapodCacheCleanImpl.swift │ │ │ │ │ └── CocoapodCacheCleanTarget.swift │ │ │ ├── Install │ │ │ │ ├── CocoapodsInstall.swift │ │ │ │ └── CocoapodsInstallImpl.swift │ │ │ ├── Repo │ │ │ │ ├── Add │ │ │ │ │ ├── CocoapodsRepoAdd.swift │ │ │ │ │ └── CocoapodsRepoAddImpl.swift │ │ │ │ └── Push │ │ │ │ │ ├── CocoapodsRepoPush.swift │ │ │ │ │ └── CocoapodsRepoPushImpl.swift │ │ │ ├── Search │ │ │ │ ├── CocoapodsSearch │ │ │ │ │ ├── CocoapodsSearch.swift │ │ │ │ │ └── CocoapodsSearchImpl.swift │ │ │ │ ├── CocoapodsSearchOutputParser │ │ │ │ │ ├── CocoapodsSearchOutputParser.swift │ │ │ │ │ └── CocoapodsSearchOutputParserImpl.swift │ │ │ │ └── Models │ │ │ │ │ └── CocoapodsSearchResult.swift │ │ │ ├── Support │ │ │ │ ├── CocoapodsCommandExecutor │ │ │ │ │ ├── CocoapodsCommandExecutor.swift │ │ │ │ │ ├── CocoapodsCommandExecutorImpl.swift │ │ │ │ │ └── patched_pod.rb │ │ │ │ ├── CocoapodsTrunkCommandExecutor │ │ │ │ │ ├── CocoapodsTrunkCommandExecutor.swift │ │ │ │ │ └── CocoapodsTrunkCommandExecutorImpl.swift │ │ │ │ ├── CocoapodsTrunkTokenProvider │ │ │ │ │ └── CocoapodsTrunkTokenProvider.swift │ │ │ │ └── ThrowingScanner │ │ │ │ │ ├── ThrowingScanner.swift │ │ │ │ │ └── ThrowingScannerImpl.swift │ │ │ └── Trunk │ │ │ │ ├── AddOwner │ │ │ │ ├── CocoapodsTrunkAddOwner.swift │ │ │ │ └── CocoapodsTrunkAddOwnerImpl.swift │ │ │ │ ├── Info │ │ │ │ ├── CocoapodsTrunkInfo │ │ │ │ │ ├── CocoapodsTrunkInfo.swift │ │ │ │ │ └── CocoapodsTrunkInfoImpl.swift │ │ │ │ ├── CocoapodsTrunkInfoOutputParser │ │ │ │ │ ├── CocoapodsTrunkInfoOutputParser.swift │ │ │ │ │ └── CocoapodsTrunkInfoOutputParserImpl.swift │ │ │ │ └── Models │ │ │ │ │ └── CocoapodsTrunkInfoResult.swift │ │ │ │ ├── Push │ │ │ │ ├── CocoapodsTrunkPush.swift │ │ │ │ └── CocoapodsTrunkPushImpl.swift │ │ │ │ └── RemoveOwner │ │ │ │ ├── CocoapodsTrunkRemoveOwner.swift │ │ │ │ └── CocoapodsTrunkRemoveOwnerImpl.swift │ │ ├── Destinations │ │ │ ├── MixboxTestDestination │ │ │ │ ├── MixboxTestDestinationProvider.swift │ │ │ │ └── MixboxTestDestinationProviderImpl.swift │ │ │ ├── MixboxTestDestinationConfigurationsProvider │ │ │ │ ├── MixboxTestDestinationConfigurationsProvider.swift │ │ │ │ └── MixboxTestDestinationConfigurationsProviderImpl.swift │ │ │ └── Models │ │ │ │ ├── MixboxTestDestination.swift │ │ │ │ └── MixboxTestDestinationConfiguration.swift │ │ ├── Emcee │ │ │ ├── Emcee │ │ │ │ ├── Commands │ │ │ │ │ ├── EmceeDumpCommand │ │ │ │ │ │ ├── EmceeDumpCommand.swift │ │ │ │ │ │ ├── EmceeDumpCommandArguments.swift │ │ │ │ │ │ └── EmceeDumpCommandImpl.swift │ │ │ │ │ └── EmceeRunTestsOnRemoteQueueCommand │ │ │ │ │ │ ├── EmceeRunTestsOnRemoteQueueCommand.swift │ │ │ │ │ │ ├── EmceeRunTestsOnRemoteQueueCommandArguments.swift │ │ │ │ │ │ └── EmceeRunTestsOnRemoteQueueCommandImpl.swift │ │ │ │ ├── DelegatingEmcee.swift │ │ │ │ └── Emcee.swift │ │ │ ├── EmceeExecutable │ │ │ │ ├── EmceeExecutable.swift │ │ │ │ └── EmceeExecutableImpl.swift │ │ │ ├── EmceeInstaller │ │ │ │ ├── EmceeInstaller.swift │ │ │ │ └── EmceeInstallerImpl.swift │ │ │ ├── EmceeProvider │ │ │ │ ├── CachingEmceeProvider.swift │ │ │ │ ├── EmceeProvider.swift │ │ │ │ └── InstallingEmceeProvider.swift │ │ │ ├── EmceeVersionProvider │ │ │ │ └── EmceeVersionProvider.swift │ │ │ ├── RemoteCacheConfigProvider │ │ │ │ └── RemoteCacheConfigProvider.swift │ │ │ ├── RuntimeDump │ │ │ │ └── RuntimeDump.swift │ │ │ ├── SimulatorOperationTimeoutsProvider │ │ │ │ └── SimulatorOperationTimeoutsProvider.swift │ │ │ ├── SimulatorSettingsProvider │ │ │ │ └── SimulatorSettingsProvider.swift │ │ │ ├── TestArgsFile │ │ │ │ ├── TestArgsFileGenerator │ │ │ │ │ ├── TestArgsFileGenerator.swift │ │ │ │ │ └── TestArgsFileGeneratorImpl.swift │ │ │ │ ├── TestArgsFileGeneratorArguments.swift │ │ │ │ └── TestArgsFileJsonGenerator │ │ │ │ │ ├── TestArgsFileJsonGenerator.swift │ │ │ │ │ └── TestArgsFileJsonGeneratorImpl.swift │ │ │ ├── ToolchainConfigurationProvider │ │ │ │ └── DeveloperDirProvider.swift │ │ │ └── Uploader │ │ │ │ └── EmceeFileUploader.swift │ │ ├── Git │ │ │ ├── GitCommandExecutor │ │ │ │ ├── GitCommandExecutor.swift │ │ │ │ └── GitCommandExecutorImpl.swift │ │ │ ├── GitRevListProvider │ │ │ │ ├── GitRevListProvider.swift │ │ │ │ └── GitRevListProviderImpl.swift │ │ │ ├── GitTagAdder │ │ │ │ ├── GitTagAdder.swift │ │ │ │ └── GitTagAdderImpl.swift │ │ │ ├── GitTagDeleter │ │ │ │ ├── GitTagDeleter.swift │ │ │ │ └── GitTagDeleterImpl.swift │ │ │ ├── GitTagsProvider │ │ │ │ ├── GitTagsProvider.swift │ │ │ │ ├── GitTagsProviderImpl.swift │ │ │ │ └── Models │ │ │ │ │ └── GitTag.swift │ │ │ ├── HeadCommitHashProvider │ │ │ │ ├── HeadCommitHashProvider.swift │ │ │ │ └── HeadCommitHashProviderIImpl.swift │ │ │ └── RepoRootProvider │ │ │ │ ├── RepoRootProvider.swift │ │ │ │ └── RepoRootProviderImpl.swift │ │ ├── ManagePodOwnersTask │ │ │ └── ManagePodOwnersTask.swift │ │ ├── ReleaseToCocoapodsTask │ │ │ └── ReleaseToCocoapodsTask.swift │ │ ├── Releases │ │ │ ├── ListOfPodspecsToPushProvider │ │ │ │ ├── EitherArrayOrElement.swift │ │ │ │ ├── JsonPodspec.swift │ │ │ │ ├── JsonSubspec.swift │ │ │ │ ├── ListOfPodspecsToPushProvider.swift │ │ │ │ └── ListOfPodspecsToPushProviderImpl.swift │ │ │ ├── MixboxPodspecsPusher │ │ │ │ ├── MixboxPodspecsPusher.swift │ │ │ │ └── MixboxPodspecsPusherImpl.swift │ │ │ ├── MixboxPodspecsValidator │ │ │ │ ├── MixboxPodspecsValidator.swift │ │ │ │ └── MixboxPodspecsValidatorImpl.swift │ │ │ ├── MixboxReleaseSettingsProvider │ │ │ │ ├── MixboxReleaseSettingsProvider.swift │ │ │ │ └── MixboxReleaseSettingsProviderImpl.swift │ │ │ ├── Models │ │ │ │ ├── Version.swift │ │ │ │ └── VersionTag.swift │ │ │ ├── PodspecsPatcher │ │ │ │ ├── PodspecsPatcher.swift │ │ │ │ └── PodspecsPatcherImpl.swift │ │ │ ├── Tags │ │ │ │ ├── AfterReleaseTagsSetter │ │ │ │ │ └── AfterReleaseTagsSetter.swift │ │ │ │ ├── AfterReleaseTagsSetterForExistingReleaseProvider │ │ │ │ │ └── AfterReleaseTagsSetterForExistingReleaseProvider.swift │ │ │ │ └── BeforeReleaseTagsSetter │ │ │ │ │ ├── BeforeReleaseTagsSetter.swift │ │ │ │ │ └── BeforeReleaseTagsSetterImpl.swift │ │ │ └── Versioning │ │ │ │ ├── CurrentReleaseVersionProvider │ │ │ │ ├── CurrentReleaseVersionProvider.swift │ │ │ │ └── CurrentReleaseVersionProviderImpl.swift │ │ │ │ ├── NextReleaseVersionProvider │ │ │ │ ├── NextReleaseVersionProvider.swift │ │ │ │ └── NextReleaseVersionProviderImpl.swift │ │ │ │ └── RepositoryVersioningInfoProvider │ │ │ │ ├── Models │ │ │ │ └── RepositoryVersioningInfo.swift │ │ │ │ ├── RepositoryVersioningInfoProvider.swift │ │ │ │ └── RepositoryVersioningInfoProviderImpl.swift │ │ ├── RemoteFiles │ │ │ ├── FileDownloader │ │ │ │ ├── AlamofireFileDownloader.swift │ │ │ │ └── FileDownloader.swift │ │ │ ├── FileUploader │ │ │ │ ├── FileUploader.swift │ │ │ │ └── FileUploaderImpl.swift │ │ │ └── FileUploaderExecutableProvider │ │ │ │ ├── FileUploaderExecutable.swift │ │ │ │ ├── FileUploaderExecutableProvider.swift │ │ │ │ └── FileUploaderExecutableProviderImpl.swift │ │ ├── RunBlackBoxTestsTask │ │ │ └── RunBlackBoxTestsTask.swift │ │ ├── RunGrayBoxTestsTask │ │ │ └── RunGrayBoxTestsTask.swift │ │ ├── RunUnitTestsTask │ │ │ └── RunUnitTestsTask.swift │ │ ├── Simctl │ │ │ ├── Commands │ │ │ │ ├── Boot │ │ │ │ │ ├── SimctlBoot.swift │ │ │ │ │ └── SimctlBootImpl.swift │ │ │ │ ├── Create │ │ │ │ │ ├── SimctlCreate.swift │ │ │ │ │ └── SimctlCreateImpl.swift │ │ │ │ ├── List │ │ │ │ │ ├── SimctlList.swift │ │ │ │ │ ├── SimctlListImpl.swift │ │ │ │ │ └── SimctlListResult.swift │ │ │ │ └── Shutdown │ │ │ │ │ ├── SimctlShutdown.swift │ │ │ │ │ └── SimctlShutdownImpl.swift │ │ │ ├── Facade │ │ │ │ ├── DelegatingSimctl.swift │ │ │ │ └── Simctl.swift │ │ │ ├── Models │ │ │ │ ├── Device.swift │ │ │ │ ├── DeviceType.swift │ │ │ │ ├── DeviceTypeIdentifier.swift │ │ │ │ ├── Pair.swift │ │ │ │ ├── Runtime.swift │ │ │ │ └── RuntimeIdentifier.swift │ │ │ └── SimctlExecutor │ │ │ │ ├── SimctlExecutor.swift │ │ │ │ └── SimctlExecutorImpl.swift │ │ ├── SingletonHell │ │ │ └── Utils │ │ │ │ └── Env.swift │ │ ├── StaticChecksTask │ │ │ ├── ConditionalCompilationClausesChecker │ │ │ │ ├── ConditionalCompilationClausesChecker.swift │ │ │ │ ├── ConditionalCompilationClausesCheckerImpl.swift │ │ │ │ ├── FrameworkInfo │ │ │ │ │ ├── FrameworkInfo.swift │ │ │ │ │ ├── FrameworkInfosProvider │ │ │ │ │ │ ├── FrameworkInfosProvider.swift │ │ │ │ │ │ └── FrameworkInfosProviderImpl.swift │ │ │ │ │ └── FrameworksDirectoryProvider │ │ │ │ │ │ ├── FrameworksDirectoryProvider.swift │ │ │ │ │ │ └── FrameworksDirectoryProviderImpl.swift │ │ │ │ ├── IfClauseInfo │ │ │ │ │ ├── IfClauseInfo.swift │ │ │ │ │ └── IfClauseInfoByPathProvider │ │ │ │ │ │ ├── IfClauseInfoByPathProvider.swift │ │ │ │ │ │ └── IfClauseInfoByPathProviderImpl.swift │ │ │ │ ├── MissingConditionalCompilationClause │ │ │ │ │ ├── FilesEnumerator │ │ │ │ │ │ ├── FilesEnumerator.swift │ │ │ │ │ │ └── FilesEnumeratorImpl.swift │ │ │ │ │ ├── MissingConditionalCompilationClause.swift │ │ │ │ │ ├── MissingConditionalCompilationClausesProvider │ │ │ │ │ │ ├── MissingConditionalCompilationClausesProvider.swift │ │ │ │ │ │ └── MissingConditionalCompilationClausesProviderImpl.swift │ │ │ │ │ └── MixboxFrameworksEnumerator │ │ │ │ │ │ ├── MixboxFrameworksEnumerator.swift │ │ │ │ │ │ └── MixboxFrameworksEnumeratorImpl.swift │ │ │ │ └── MissingConditionalCompilationClausesAutocorrector │ │ │ │ │ ├── MissingConditionalCompilationClausesAutocorrector.swift │ │ │ │ │ └── MissingConditionalCompilationClausesAutocorrectorImpl.swift │ │ │ ├── Linter │ │ │ │ ├── SwiftLint │ │ │ │ │ ├── SwiftLint.swift │ │ │ │ │ └── SwiftLintImpl.swift │ │ │ │ ├── SwiftLintViolation │ │ │ │ │ ├── SwiftLintViolation.swift │ │ │ │ │ └── SwiftLintViolationType.swift │ │ │ │ └── SwiftLintViolationsParser │ │ │ │ │ ├── SwiftLintViolationsParser.swift │ │ │ │ │ └── SwiftLintViolationsParserImpl.swift │ │ │ └── StaticChecksTask.swift │ │ ├── Tasks │ │ │ ├── LocalTask.swift │ │ │ └── LocalTaskExecutor.swift │ │ ├── TeamcityBlackBoxTestsBuild │ │ │ └── main.swift │ │ ├── TeamcityCheckReleaseToCocoapodsBuild │ │ │ └── main.swift │ │ ├── TeamcityDi │ │ │ ├── Impls │ │ │ │ ├── DeveloperDirProviderImpl.swift │ │ │ │ ├── RemoteCacheConfigProviderImpl.swift │ │ │ │ ├── SimulatorSettingsProviderImpl.swift │ │ │ │ ├── TeamcityCiLogger.swift │ │ │ │ ├── TeamcityCocoapodsTrunkTokenProvider.swift │ │ │ │ └── TeamcityLocalTaskExecutor.swift │ │ │ └── TeamcityBuildDi.swift │ │ ├── TeamcityGrayBoxTestsBuild │ │ │ └── main.swift │ │ ├── TeamcityIpcDemoBuild │ │ │ └── main.swift │ │ ├── TeamcityLogicTestsBuild │ │ │ └── main.swift │ │ ├── TeamcityManagePodOwnersBuild │ │ │ └── main.swift │ │ ├── TeamcityReleaseToCocoapodsBuild │ │ │ └── main.swift │ │ ├── TeamcityStaticChecksBuild │ │ │ └── main.swift │ │ ├── TeamcityUiTestsDemoBuild │ │ │ └── main.swift │ │ ├── TestRunning │ │ │ ├── IosBuildArtifactsProvider │ │ │ │ ├── IosBuildArtifactsProvider.swift │ │ │ │ ├── IosBuildArtifactsProviderFactory.swift │ │ │ │ ├── IosBuildArtifactsProviderFactoryImpl.swift │ │ │ │ └── IosBuildArtifactsProviderImpl.swift │ │ │ ├── TestRunner │ │ │ │ ├── EmceeTestRunner.swift │ │ │ │ └── TestRunner.swift │ │ │ └── TestsTaskRunner │ │ │ │ ├── TestsTaskRunner.swift │ │ │ │ └── TestsTaskRunnerImpl.swift │ │ ├── TravisDi │ │ │ ├── Impls │ │ │ │ └── TravisLocalTaskExecutor.swift │ │ │ └── TravisBuildDi.swift │ │ ├── TravisIpcDemoBuild │ │ │ └── main.swift │ │ ├── TravisLogicTestsBuild │ │ │ └── main.swift │ │ ├── TravisOversimplifiedDemoBuild │ │ │ └── main.swift │ │ └── Xcodebuild │ │ │ ├── DerivedDataPathProvider │ │ │ ├── DerivedDataPathProvider.swift │ │ │ └── DerivedDataPathProviderImpl.swift │ │ │ ├── IosProjectBuilder │ │ │ ├── IosProjectBuilder.swift │ │ │ └── IosProjectBuilderImpl.swift │ │ │ ├── MacosProjectBuilder │ │ │ ├── MacosProjectBuilder.swift │ │ │ └── MacosProjectBuilderImpl.swift │ │ │ └── Xcodebuild │ │ │ ├── Xcodebuild.swift │ │ │ ├── XcodebuildAction.swift │ │ │ ├── XcodebuildExitCode.swift │ │ │ ├── XcodebuildImpl.swift │ │ │ └── XcodebuildResult.swift │ ├── make.sh │ └── run_swift ├── tools │ └── yacc │ │ └── check_yacc └── travis │ └── make_travis_yml │ ├── make_travis_yml │ └── travis_yml ├── cocoapods ├── enable_testing_with_mixbox.rb ├── get_mixbox_dependencies_ordered_by_same_order_that_they_should_be_pushed.rb ├── lock_patcher.rb ├── mixbox_podspecs_source.rb ├── mixbox_spec.rb ├── patch_deployment_target.rb ├── patch_xcconfigs_toolchain_dir.rb ├── repo.rb ├── repo_settings.rb ├── repo_with_settings.rb └── software_versions.rb └── make.sh /.travis.yml: -------------------------------------------------------------------------------- 1 | os: osx 2 | language: objective-c 3 | sudo: false 4 | osx_image: xcode10.1 5 | matrix: 6 | include: 7 | - name: "Logic Tests / iPhone X / iOS 12.1 / Xcode 11.0 / macOS 10.14" 8 | osx_image: "xcode11.0" 9 | env: MIXBOX_CI_DESTINATION="iphone_x_ios121.json" MIXBOX_CI_BUILD_EXECUTABLE="TravisLogicTestsBuild" MIXBOX_CI_REPORTS_PATH="." 10 | script: 11 | ci/swift/run_swift -------------------------------------------------------------------------------- /Demos/OsxIpcDemo/IpcDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Demos/OsxIpcDemo/IpcDemo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Demos/OsxIpcDemo/IpcDemo/HelloIpcMethod.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpc 2 | 3 | final class HelloIpcMethod: IpcMethod { 4 | typealias Arguments = IpcVoid 5 | typealias ReturnValue = String 6 | } 7 | -------------------------------------------------------------------------------- /Demos/OsxIpcDemo/IpcDemo/HelloIpcMethodHandler.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpc 2 | 3 | final class HelloIpcMethodHandler: IpcMethodHandler { 4 | let method = HelloIpcMethod() 5 | 6 | func handle(arguments: IpcVoid, completion: @escaping (String) -> ()) { 7 | completion("Hello, world!") 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Demos/OsxIpcDemo/IpcDemo/Support/PollingSynchronousIpcClientFactory.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpc 2 | 3 | public final class PollingSynchronousIpcClientFactory: SynchronousIpcClientFactory { 4 | public init() { 5 | } 6 | 7 | public func synchronousIpcClient(ipcClient: IpcClient) -> SynchronousIpcClient { 8 | return PollingSynchronousIpcClient(ipcClient: ipcClient) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Demos/OsxIpcDemo/IpcDemo/main.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpc 2 | import MixboxBuiltinIpc 3 | import Foundation 4 | 5 | // Example usage of MixboxBuiltinIpc: 6 | 7 | if let port = ProcessInfo.processInfo.environment["PORT"].flatMap({ UInt($0) }) { 8 | mainForSlave(port) 9 | } else { 10 | mainForMaster() 11 | } 12 | -------------------------------------------------------------------------------- /Demos/UiTestsDemo/App/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Demos/UiTestsDemo/App/ViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | class ViewController: UIViewController { 4 | override func viewDidLoad() { 5 | super.viewDidLoad() 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Demos/UiTestsDemo/BlackBoxTests/BlackBoxTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | class BlackBoxTests: TestCase { 4 | func test() { 5 | launch() 6 | 7 | pageObjects.firstScreen.label.assertHasText("Label") 8 | pageObjects.firstScreen.button.tap() 9 | 10 | pageObjects.secondScreen.otherLabel.assertHasText("Other Label") 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Demos/UiTestsDemo/Frameworks/UiTestsSharedCode/Sources/PageObjects/PageObjects.swift: -------------------------------------------------------------------------------- 1 | import MixboxUiTestsFoundation 2 | 3 | public final class PageObjects: BasePageObjects { 4 | public var firstScreen: FirstScreen { 5 | return pageObject() 6 | } 7 | 8 | public var secondScreen: SecondScreen { 9 | return pageObject() 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Demos/UiTestsDemo/Frameworks/UiTestsSharedCode/Sources/PageObjects/PageObjects/SecondScreen.swift: -------------------------------------------------------------------------------- 1 | import MixboxUiTestsFoundation 2 | import MixboxTestsFoundation 3 | 4 | public final class SecondScreen: BasePageObjectWithDefaultInitializer { 5 | public var otherLabel: LabelElement { 6 | return element("other label") { element in 7 | element.id == "otherLabel" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Demos/UiTestsDemo/GrayBoxTests/GrayBoxTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | class GrayBoxTests: TestCase { 4 | func test() { 5 | pageObjects.firstScreen.label.assertHasText("Label") 6 | pageObjects.firstScreen.button.tap() 7 | 8 | pageObjects.secondScreen.otherLabel.assertHasText("Other Label") 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Demos/UiTestsDemo/UiTestsDemo.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | DisableBuildSystemDeprecationWarning 6 | 7 | PreviewsEnabled 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Demos/UiTestsDemo/cocoapods: -------------------------------------------------------------------------------- 1 | ../../cocoapods -------------------------------------------------------------------------------- /Docs/Images/Dependencies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Docs/Images/Dependencies.png -------------------------------------------------------------------------------- /Docs/PrivateApi/Examples.md: -------------------------------------------------------------------------------- 1 | # Examples 2 | 3 | This document contains real life examples of how it is done. I missed this kind of example even when I already had some experience in the field. It can be helpful. 4 | 5 | ## Fixing injection of events 6 | 7 | [FixingInjectionOfEventsExample.md](FixingInjectionOfEventsExample.md) 8 | -------------------------------------------------------------------------------- /Frameworks/Black/Sources/Application/Launching/FastLaunching/ApplicationInstallationVersionChecker.swift: -------------------------------------------------------------------------------- 1 | public protocol ApplicationInstallationVersionChecker { 2 | func sameVersionOfTestedApplicationIsAlreadyInstalled() -> Bool 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/Black/Sources/Application/Launching/LaunchableApplication/LaunchableApplication.swift: -------------------------------------------------------------------------------- 1 | import MixboxUiTestsFoundation 2 | 3 | public protocol LaunchableApplication: AnyObject { 4 | var legacyNetworking: LegacyNetworking { get } 5 | 6 | func launch( 7 | arguments: [String], 8 | environment: [String: String]) 9 | -> LaunchedApplication 10 | 11 | func terminate() 12 | } 13 | -------------------------------------------------------------------------------- /Frameworks/Black/Sources/Application/Launching/LaunchableApplication/Sbtui/Mocking/Stubbing/SbtuiStubApplier/SbtuiStubApplier.swift: -------------------------------------------------------------------------------- 1 | public protocol SbtuiStubApplier: AnyObject { 2 | func apply(stub: SbtuiStub) 3 | func removeAllStubs() 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/Black/Sources/Application/Launching/LaunchedApplication/LaunchedApplication.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpc 2 | 3 | public protocol LaunchedApplication: AnyObject { 4 | var ipcClient: IpcClient? { get } 5 | var ipcRouter: IpcRouter? { get } 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/Black/Sources/Extensions/CGRect+Hashable.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | extension CGRect: Hashable { 4 | public func hash(into hasher: inout Hasher) { 5 | hasher.combine(origin.x) 6 | hasher.combine(origin.y) 7 | hasher.combine(size.width) 8 | hasher.combine(size.height) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Frameworks/Black/Sources/Extensions/ObjcVisibilityWorkaround.h: -------------------------------------------------------------------------------- 1 | // When bridging Obj-C to Swift it Xcode ignores defines somehow 2 | // so definitions are missing in public interface of module, this makes them 3 | // visible inside current module. I mean, there are #ifdef there and no code 4 | // is ouside #ifdef. 5 | #import 6 | -------------------------------------------------------------------------------- /Frameworks/Black/Sources/Utils/ActionDependencies/EventGenerator/XcuiEventGeneratorObjC/EventGeneratorObjCProvider.h: -------------------------------------------------------------------------------- 1 | #import "EventGeneratorObjC.h" 2 | 3 | @interface EventGeneratorObjCProvider : NSObject 4 | 5 | + (nonnull id)eventGeneratorObjC; 6 | 7 | @end 8 | -------------------------------------------------------------------------------- /Frameworks/Black/Sources/Utils/ActionDependencies/EventGenerator/XcuiEventGeneratorObjC/Xcode_10_1_Xcode_10_0_EventGeneratorObjC.h: -------------------------------------------------------------------------------- 1 | #if __IPHONE_OS_VERSION_MAX_ALLOWED < 120200 2 | 3 | #import 4 | #import "EventGeneratorObjC.h" 5 | 6 | @interface Xcode_10_1_Xcode_10_0_EventGeneratorObjC : NSObject 7 | 8 | @end 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /Frameworks/Black/Sources/Utils/ActionDependencies/EventGenerator/XcuiEventGeneratorObjC/Xcode_10_2_Xcode_11_0_EventGeneratorObjC.h: -------------------------------------------------------------------------------- 1 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 120200 2 | 3 | #import 4 | #import "EventGeneratorObjC.h" 5 | 6 | @interface Xcode_10_2_Xcode_11_0_EventGeneratorObjC : NSObject 7 | 8 | @end 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /Frameworks/Black/Sources/Utils/ApplicationLifecycleObservable/ApplicationLifecycleObservable.swift: -------------------------------------------------------------------------------- 1 | public protocol ApplicationLifecycleObservable: AnyObject { 2 | var applicationIsLaunched: Bool { get } 3 | func addObserver(_ observer: ApplicationLifecycleObserver) 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/Black/Sources/Utils/ApplicationLifecycleObservable/ApplicationLifecycleObserver.swift: -------------------------------------------------------------------------------- 1 | public protocol ApplicationLifecycleObserver: AnyObject { 2 | func applicationStateChanged(applicationIsLaunched: Bool) 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/Black/Sources/Utils/Screenshots/XcuiDeviceScreenshotTaker.swift: -------------------------------------------------------------------------------- 1 | import MixboxUiTestsFoundation 2 | import XCTest 3 | 4 | public final class XcuiDeviceScreenshotTaker: DeviceScreenshotTaker { 5 | public init() { 6 | } 7 | 8 | public func takeDeviceScreenshot() throws -> UIImage { 9 | return XCUIScreen.main.screenshot().image 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Frameworks/CocoaImageHashing/Sources/CocoaImageHashing.h: -------------------------------------------------------------------------------- 1 | // 2 | // CocoaImageHashing.h 3 | // CocoaImageHashing 4 | // 5 | // Created by Andreas Meingast on 10/10/15. 6 | // Copyright © 2015 Andreas Meingast. All rights reserved. 7 | // 8 | 9 | #import "OSImageHashing.h" 10 | 11 | FOUNDATION_EXPORT double CocoaImageHashingVersionNumber; 12 | FOUNDATION_EXPORT const unsigned char CocoaImageHashingVersionString[]; 13 | -------------------------------------------------------------------------------- /Frameworks/CocoaImageHashing/Sources/OSAHash.h: -------------------------------------------------------------------------------- 1 | // 2 | // OSAHash.h 3 | // CocoaImageHashing 4 | // 5 | // Created by Andreas Meingast on 10/10/15. 6 | // Copyright © 2015 Andreas Meingast. All rights reserved. 7 | // 8 | 9 | #import "OSImageHashing.h" 10 | #import "OSAbstractHash.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface OSAHash : OSAbstractHash 15 | 16 | @end 17 | 18 | NS_ASSUME_NONNULL_END 19 | -------------------------------------------------------------------------------- /Frameworks/CocoaImageHashing/Sources/OSAbstractHash.h: -------------------------------------------------------------------------------- 1 | // 2 | // OSAbstractHash.h 3 | // CocoaImageHashing 4 | // 5 | // Created by Andreas Meingast on 16/10/15. 6 | // Copyright © 2015 Andreas Meingast. All rights reserved. 7 | // 8 | 9 | #import "OSTypes.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface OSAbstractHash : NSObject 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Frameworks/CocoaImageHashing/Sources/OSDHash.h: -------------------------------------------------------------------------------- 1 | // 2 | // OSDHash.h 3 | // CocoaImageHashing 4 | // 5 | // Created by Andreas Meingast on 10/10/15. 6 | // Copyright © 2015 Andreas Meingast. All rights reserved. 7 | // 8 | 9 | #import "OSImageHashing.h" 10 | #import "OSAbstractHash.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface OSDHash : OSAbstractHash 15 | 16 | @end 17 | 18 | NS_ASSUME_NONNULL_END 19 | -------------------------------------------------------------------------------- /Frameworks/CocoaImageHashing/Sources/OSPHash.h: -------------------------------------------------------------------------------- 1 | // 2 | // OSPHash.h 3 | // CocoaImageHashing 4 | // 5 | // Created by Andreas Meingast on 10/10/15. 6 | // Copyright © 2015 Andreas Meingast. All rights reserved. 7 | // 8 | 9 | #import "OSImageHashing.h" 10 | #import "OSAbstractHash.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface OSPHash : OSAbstractHash 15 | 16 | @end 17 | 18 | NS_ASSUME_NONNULL_END 19 | -------------------------------------------------------------------------------- /Frameworks/CocoaImageHashing/Sources/include/module.modulemap: -------------------------------------------------------------------------------- 1 | module CocoaImageHashing [system] { 2 | header "../shim.h" 3 | link "CocoaImageHashingStatic" 4 | export * 5 | } -------------------------------------------------------------------------------- /Frameworks/CocoaImageHashing/Sources/shim.h: -------------------------------------------------------------------------------- 1 | #import "CocoaImageHashing.h" 2 | -------------------------------------------------------------------------------- /Frameworks/Di/Sources/Models/Scope.swift: -------------------------------------------------------------------------------- 1 | #if MIXBOX_ENABLE_FRAMEWORK_DI && MIXBOX_DISABLE_FRAMEWORK_DI 2 | #error("Di is marked as both enabled and disabled, choose one of the flags") 3 | #elseif MIXBOX_DISABLE_FRAMEWORK_DI || (!MIXBOX_ENABLE_ALL_FRAMEWORKS && !MIXBOX_ENABLE_FRAMEWORK_DI) 4 | // The compilation is disabled 5 | #else 6 | 7 | public enum Scope { 8 | case single 9 | case unique 10 | } 11 | 12 | #endif 13 | -------------------------------------------------------------------------------- /Frameworks/FakeSettingsAppMain/Sources/Application/AppDelegate.h: -------------------------------------------------------------------------------- 1 | @import UIKit; 2 | 3 | @interface AppDelegate: NSObject 4 | 5 | @property (nonatomic) UIWindow *window; 6 | 7 | @end 8 | -------------------------------------------------------------------------------- /Frameworks/FakeSettingsAppMain/Sources/Application/MixboxFakeSettingsAppMain.h: -------------------------------------------------------------------------------- 1 | int FakeSettingsAppMain(int argc, char * argv[]); 2 | -------------------------------------------------------------------------------- /Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_0_add_target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_0_add_target.png -------------------------------------------------------------------------------- /Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_1_select_target_type.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_1_select_target_type.png -------------------------------------------------------------------------------- /Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_2_fill_parameters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_2_fill_parameters.png -------------------------------------------------------------------------------- /Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_3_see_reslts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_3_see_reslts.png -------------------------------------------------------------------------------- /Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_4_replace_files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_4_replace_files.png -------------------------------------------------------------------------------- /Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_5_set_target_entitlements.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_5_set_target_entitlements.png -------------------------------------------------------------------------------- /Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_6_change_project_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_6_change_project_settings.png -------------------------------------------------------------------------------- /Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_7_1_add_target_dependency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_7_1_add_target_dependency.png -------------------------------------------------------------------------------- /Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_7_2_add_target_dependency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_7_2_add_target_dependency.png -------------------------------------------------------------------------------- /Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_7_3_review_target_dependencies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Frameworks/FakeSettingsAppMain/Sources/Docs/Images/step_7_3_review_target_dependencies.png -------------------------------------------------------------------------------- /Frameworks/FakeSettingsAppMain/Sources/Example/Entitlements.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.bulletinboard.settings 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Frameworks/Gray/Sources/Utils/CodeStubs/CodeStubs.swift: -------------------------------------------------------------------------------- 1 | import MixboxTestsFoundation 2 | 3 | // Temporary stubs that help to commit code. 4 | // TODO: Remove. 5 | 6 | public func grayNotImplemented(function: StaticString = #function) -> Never { 7 | UnavoidableFailure.fail("Not implemented. Function: \(function)") 8 | } 9 | 10 | public func assertIsOnMainThread() { 11 | assert(Thread.isMainThread) 12 | } 13 | -------------------------------------------------------------------------------- /Frameworks/Gray/Sources/Utils/Gestures/Support/PathGestureUtils/PathGestureUtilsFactory.swift: -------------------------------------------------------------------------------- 1 | public protocol PathGestureUtilsFactory: AnyObject { 2 | func pathGestureUtils() -> PathGestureUtils 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/Gray/Sources/Utils/Gestures/Touches/MultiTouchCommandExecutor/MultiTouchCommandExecutor.swift: -------------------------------------------------------------------------------- 1 | public protocol MultiTouchCommandExecutor: AnyObject { 2 | func execute(command: MultiTouchCommand) 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/Gray/Sources/Utils/Gestures/Touches/TouchEventFactory/AggregatingTouchEventFactory/AggregatingTouchEventFactory.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | import MixboxIoKit 3 | 4 | public protocol AggregatingTouchEventFactory { 5 | func aggregatingTouchEvent( 6 | dequeuedMultiTouchInfo: DequeuedMultiTouchInfo, 7 | time: AbsoluteTime) 8 | -> DigitizerEvent 9 | } 10 | -------------------------------------------------------------------------------- /Frameworks/Gray/Sources/Utils/Gestures/Touches/TouchEventFactory/FingerTouchEventFactory/FingerTouchEventFactory.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | import MixboxIoKit 3 | 4 | public protocol FingerTouchEventFactory { 5 | func fingerEvents( 6 | dequeuedMultiTouchInfo: DequeuedMultiTouchInfo, 7 | time: AbsoluteTime) 8 | -> [DigitizerFingerEvent] 9 | } 10 | -------------------------------------------------------------------------------- /Frameworks/Gray/Sources/Utils/Gestures/Touches/TouchEventFactory/MultiTouchEventFactory/MultiTouchEventFactory.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | import MixboxIoKit 3 | 4 | public protocol MultiTouchEventFactory { 5 | func multiTouchEvent(dequeuedMultiTouchInfo: DequeuedMultiTouchInfo, time: AbsoluteTime) -> DigitizerEvent 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/Gray/Sources/Utils/Gestures/Touches/TouchInjector/TouchInjector.swift: -------------------------------------------------------------------------------- 1 | public protocol TouchInjector: AnyObject { 2 | func enqueue(enqueuedMultiTouchInfo: EnqueuedMultiTouchInfo) 3 | func startInjectionIfNecessary() 4 | func waitForInjectionToFinish() 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/Gray/Sources/Utils/Gestures/Touches/TouchInjectorFactory/TouchInjectorFactory.swift: -------------------------------------------------------------------------------- 1 | public protocol TouchInjectorFactory: AnyObject { 2 | func touchInjector() -> TouchInjector 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/Gray/Sources/Utils/Gestures/Touches/TouchPerformer/TouchPerformer.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | public protocol TouchPerformer: AnyObject { 4 | func touch( 5 | touchPaths: [[CGPoint]], 6 | duration: TimeInterval, 7 | isExpendable: Bool) 8 | throws 9 | } 10 | -------------------------------------------------------------------------------- /Frameworks/Gray/Sources/Utils/GrayApplicationFrameProvider.swift: -------------------------------------------------------------------------------- 1 | import MixboxUiTestsFoundation 2 | 3 | public final class GrayApplicationFrameProvider: ApplicationFrameProvider { 4 | public init() { 5 | } 6 | 7 | public var applicationFrame: CGRect { 8 | return UIScreen.main.bounds // TODO: Proper code! Write tests! 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Frameworks/Gray/Sources/Utils/GrayApplicationStateProvider.swift: -------------------------------------------------------------------------------- 1 | import MixboxUiTestsFoundation 2 | 3 | public final class GrayApplicationStateProvider: ApplicationStateProvider { 4 | public init() { 5 | } 6 | 7 | public func applicationState() throws -> ApplicationState { 8 | return .runningForeground 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Frameworks/Gray/Sources/Utils/Networking/Stubbing/Stubs/GrayBoxLegacyNetworkStubbingNetworkStubRepository.swift: -------------------------------------------------------------------------------- 1 | public protocol GrayBoxLegacyNetworkStubbingNetworkStubRepository { 2 | func add(stub: GrayBoxLegacyNetworkStubbingNetworkStub) 3 | func removeAllStubs() 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/Gray/Sources/Utils/ZeroToleranceTimer/New Group/ZeroToleranceTimerTarget.swift: -------------------------------------------------------------------------------- 1 | public final class ZeroToleranceTimerTarget { 2 | public let timerFired: () -> () 3 | 4 | public init(timerFired: @escaping () -> ()) { 5 | self.timerFired = timerFired 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/Gray/Sources/Utils/ZeroToleranceTimer/Sheduler/ZeroToleranceTimerScheduler.swift: -------------------------------------------------------------------------------- 1 | public protocol ZeroToleranceTimerScheduler: AnyObject { 2 | func schedule( 3 | interval: TimeInterval, 4 | target: ZeroToleranceTimerTarget) 5 | -> ScheduledZeroToleranceTimer 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/Gray/Sources/Utils/ZeroToleranceTimer/Started/ScheduledZeroToleranceTimer.swift: -------------------------------------------------------------------------------- 1 | public protocol ScheduledZeroToleranceTimer: AnyObject { 2 | func invalidate() 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/InAppServices/Sources/Features/AccessibilityEnchancement/Support/VisibilityChecker/VisibilityChecker.md: -------------------------------------------------------------------------------- 1 | # VisibilityChecker 2 | 3 | The entire code is copypasted from EarlGrey with minimal edits. 4 | -------------------------------------------------------------------------------- /Frameworks/IoKit/README.md: -------------------------------------------------------------------------------- 1 | # MixboxIoKit 2 | 3 | Framework for working with IOKit from Swift. Includes private headers. 4 | 5 | Should be an only framework that is linked with IOKit directly. 6 | 7 | Should only contain wrappers for IOKit and no client logic (e.g. making of gestures). 8 | -------------------------------------------------------------------------------- /Frameworks/IpcCommon/README.md: -------------------------------------------------------------------------------- 1 | # MixboxAppAndTestsCommon 2 | 3 | Just shared code between tests and app. It is mostly declarations of API. -------------------------------------------------------------------------------- /Frameworks/IpcSbtuiClient/README.md: -------------------------------------------------------------------------------- 1 | # MixboxIpcSbtuiClient 2 | 3 | Implementation of MixboxIpc using SBTUITestTunnel. because SBTUITestTunnel requires us to use separate frameworks for app and tests, there are 2 frameworks for SBTUI implementation of MixboxIpc. The other is MixboxIpcSbtuiHost. -------------------------------------------------------------------------------- /Frameworks/IpcSbtuiHost/README.md: -------------------------------------------------------------------------------- 1 | # MixboxIpcSbtuiHost 2 | 3 | Implementation of MixboxIpc using SBTUITestTunnel. because SBTUITestTunnel requires us to use separate frameworks for app and tests, there are 2 frameworks for SBTUI implementation of MixboxIpc. The other is MixboxIpcSbtuiClient. -------------------------------------------------------------------------------- /Frameworks/LinkXCTAutomationSupport/Sources/AutomationInfrastructureIntegrationTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | -------------------------------------------------------------------------------- /Frameworks/MocksGeneration/Sources/Sourcery/Parsing/ModuleParser/ModuleParser.swift: -------------------------------------------------------------------------------- 1 | import PathKit 2 | 3 | public protocol ModuleParser { 4 | func parse( 5 | paths: [Path], 6 | moduleName: String) 7 | throws 8 | -> ParsedModule 9 | } 10 | -------------------------------------------------------------------------------- /Frameworks/MocksGeneration/Sources/Sourcery/Parsing/SourceFileParser/SourceFileParser.swift: -------------------------------------------------------------------------------- 1 | import PathKit 2 | 3 | public protocol SourceFileParser { 4 | func parse( 5 | path: Path, 6 | moduleName: String) 7 | throws 8 | -> ParsedSourceFile 9 | } 10 | -------------------------------------------------------------------------------- /Frameworks/MocksGeneration/Sources/Utils/ErrorString.swift: -------------------------------------------------------------------------------- 1 | // Note: copypasted from MixboxFoundation 2 | public final class ErrorString: Error, CustomStringConvertible { 3 | public let value: String 4 | 5 | public init(_ value: String) { 6 | self.value = value 7 | } 8 | 9 | public var description: String { 10 | return value 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Builders/Stubbing/StubbingBuilder.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | public protocol StubbingBuilder: AnyObject { 4 | init(mockManager: MockManager, fileLine: FileLine) 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Builders/Verification/Matching/TimesMethodWasCalled/TimesMethodWasCalledMatchingResult.swift: -------------------------------------------------------------------------------- 1 | public enum TimesMethodWasCalledMatchingResult { 2 | case match 3 | case mismatch(matchIsPossibleLater: Bool) 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Builders/Verification/Result/VerificationFailureDescription.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | public final class VerificationFailureDescription { 4 | public let message: String 5 | public let fileLine: FileLine 6 | 7 | public init(message: String, fileLine: FileLine) { 8 | self.message = message 9 | self.fileLine = fileLine 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Builders/Verification/Result/VerificationResult.swift: -------------------------------------------------------------------------------- 1 | public enum VerificationResult { 2 | case success 3 | case fail([VerificationFailureDescription]) 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Builders/Verification/VerifcationBuilder.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | public protocol VerificationBuilder: AnyObject { 4 | init(mockManager: MockManager, fileLine: FileLine) 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Manager/Interfaces/MockManagerStateTransferring.swift: -------------------------------------------------------------------------------- 1 | // Transfers all state from one MockManager to another. 2 | public protocol MockManagerStateTransferring { 3 | func transferState(to mockManager: MockManager) 4 | func appendRecordedCalls(from recordedCallsProvider: RecordedCallsProvider) 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Manager/Interfaces/MockManagerStubbing.swift: -------------------------------------------------------------------------------- 1 | public protocol MockManagerStubbing { 2 | func stub( 3 | functionIdentifier: FunctionIdentifier, 4 | callStub: CallStub) 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Manager/MockManager.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | public protocol MockManager: 4 | MockManagerStubbing, 5 | MockManagerCalling, 6 | MockManagerVerification, 7 | MockManagerStateTransferring 8 | { 9 | } 10 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Manager/MockManagerFactory.swift: -------------------------------------------------------------------------------- 1 | public protocol MockManagerFactory { 2 | func mockManager() -> MockManager 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Manager/Support/DynamicCallable/Factory/DynamicCallableFactory.swift: -------------------------------------------------------------------------------- 1 | import MixboxGenerators 2 | 3 | public protocol DynamicCallableFactory { 4 | func dynamicCallable( 5 | generatorSpecializations: [HashableType: TypeErasedAnyGeneratorSpecialization]) 6 | -> DynamicCallable 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Manager/Support/RecordedCallsHolder/Models/Escaping/RecordedCallArguments.swift: -------------------------------------------------------------------------------- 1 | public final class RecordedCallArguments { 2 | public let arguments: [RecordedCallArgument] 3 | 4 | public init(arguments: [RecordedCallArgument]) { 5 | self.arguments = arguments 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Manager/Support/RecordedCallsHolder/Models/Nonescaping/NonescapingCallArguments.swift: -------------------------------------------------------------------------------- 1 | public final class NonEscapingCallArguments { 2 | public let arguments: [NonEscapingCallArgument] 3 | 4 | public init(arguments: [NonEscapingCallArgument]) { 5 | self.arguments = arguments 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Manager/Support/RecordedCallsHolder/Models/Shared/StoringValues/RegularArgumentValue.swift: -------------------------------------------------------------------------------- 1 | public final class RegularArgumentValue { 2 | public let value: Any 3 | 4 | public init(value: Any) { 5 | self.value = value 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Manager/Support/RecordedCallsHolder/RecordedCallsProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol RecordedCallsProvider: AnyObject { 2 | var recordedCalls: [RecordedCall] { get } 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Manager/Support/StubHolder/StubsProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol StubsProvider: AnyObject { 2 | var stubs: [FunctionIdentifier: [CallStub]] { get } 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Mock/DefaultImplementationSettable.swift: -------------------------------------------------------------------------------- 1 | public protocol DefaultImplementationSettable: AnyObject { 2 | associatedtype MockedType 3 | 4 | // TODO: Should we allow resetting it (making argument optional)? 5 | @discardableResult 6 | func setDefaultImplementation(_ defaultImplementation: MockedType) -> MixboxMocksRuntimeVoid 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Mock/MockInfo.swift: -------------------------------------------------------------------------------- 1 | public final class MockInfo { 2 | public let mockedType: Any.Type 3 | 4 | public init( 5 | mockedType: Any.Type) 6 | { 7 | self.mockedType = mockedType 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Mock/MockInfoProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol MockInfoProvider: AnyObject { 2 | func getMockInfo(_: MixboxMocksRuntimeVoid.Type) -> MockInfo 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Mock/MockManagerProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol MockManagerProvider: AnyObject { 2 | func getMockManager(_: MixboxMocksRuntimeVoid.Type) -> MockManager 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Mock/MockManagerSettable.swift: -------------------------------------------------------------------------------- 1 | // TODO: Replace with `setMockManagerFactory`? This will make it less likely to 2 | // set same `mockManager` to multiple instances. 3 | public protocol MockManagerSettable: AnyObject { 4 | @discardableResult 5 | func setMockManager(_ mockManager: MockManager) -> MixboxMocksRuntimeVoid 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Mock/StorableMock.swift: -------------------------------------------------------------------------------- 1 | // Protocol for Mock without associated types (it makes it storable) 2 | public protocol StorableMock: MockManagerProvider, MockManagerSettable, MockInfoProvider { 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Registration/MockRegisterer.swift: -------------------------------------------------------------------------------- 1 | public protocol MockRegisterer: AnyObject { 2 | func register(mock: StorableMock) 3 | } 4 | 5 | extension MockRegisterer { 6 | public func register(_ mock: Mock) -> Mock { 7 | self.register(mock: mock) 8 | 9 | return mock 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Frameworks/MocksRuntime/Sources/Utility/MixboxMocksRuntimeVoid.swift: -------------------------------------------------------------------------------- 1 | // Used to avoid possible signature collisions 2 | public struct MixboxMocksRuntimeVoid { 3 | public init() {} 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/Reflection/Sources/ValueReflection/Immutable/ImmutableValueReflection.swift: -------------------------------------------------------------------------------- 1 | public protocol ImmutableValueReflection { 2 | var type: Any.Type { get } 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/Reflection/Sources/ValueReflection/Immutable/ImmutableValueReflectionProvider/ImmutableValueReflectionProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol ImmutableValueReflectionProvider { 2 | func reflection(value: Any) -> TypedImmutableValueReflection 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/Reflection/Sources/ValueReflection/Immutable/LabeledImmutableValueReflection.swift: -------------------------------------------------------------------------------- 1 | public final class LabeledImmutableValueReflection { 2 | public let label: String? 3 | public let value: TypedImmutableValueReflection 4 | 5 | public init(label: String?, value: TypedImmutableValueReflection) { 6 | self.label = label 7 | self.value = value 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Frameworks/Reflection/Sources/ValueReflection/Immutable/Typed/Base/Fields/ImmutableValueReflectionField.swift: -------------------------------------------------------------------------------- 1 | public typealias ImmutableValueReflectionField = LabeledImmutableValueReflection 2 | -------------------------------------------------------------------------------- /Frameworks/Reflection/Sources/ValueReflection/Immutable/Typed/Base/Fields/ImmutableValueReflectionWithFields.swift: -------------------------------------------------------------------------------- 1 | protocol ImmutableValueReflectionWithFields: ImmutableValueReflection { 2 | var fields: [ImmutableValueReflectionField] { get } 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/Reflection/Sources/ValueReflection/Immutable/Typed/Collection/CollectionImmutableValueReflection.swift: -------------------------------------------------------------------------------- 1 | public final class CollectionImmutableValueReflection: BaseCollectionImmutableValueReflection { 2 | } 3 | -------------------------------------------------------------------------------- /Frameworks/Reflection/Sources/ValueReflection/Immutable/Typed/Set/SetImmutableValueReflection.swift: -------------------------------------------------------------------------------- 1 | public final class SetImmutableValueReflection: BaseCollectionImmutableValueReflection { 2 | } 3 | -------------------------------------------------------------------------------- /Frameworks/Reflection/Sources/ValueReflection/Immutable/Typed/Tuple/TupleImmutableValueReflectionElement.swift: -------------------------------------------------------------------------------- 1 | public typealias TupleImmutableValueReflectionElement = LabeledImmutableValueReflection 2 | -------------------------------------------------------------------------------- /Frameworks/SBTUITestTunnelClient/README.md: -------------------------------------------------------------------------------- 1 | # SBTUITestTunnelClient 2 | 3 | Library for IPC. 4 | 5 | It was copy-pasted from . See top-level README.md for explanation. 6 | 7 | ## Author 8 | 9 | [Subito-it](https://github.com/Subito-it) 10 | 11 | ## Licenses 12 | 13 | All source code is licensed under the [Apache License, Version 2.0](LICENSE). 14 | -------------------------------------------------------------------------------- /Frameworks/SBTUITestTunnelCommon/README.md: -------------------------------------------------------------------------------- 1 | # SBTUITestTunnelCommon 2 | 3 | Library for IPC. 4 | 5 | It was copy-pasted from . See top-level README.md for explanation. 6 | 7 | ## Author 8 | 9 | [Subito-it](https://github.com/Subito-it) 10 | 11 | ## Licenses 12 | 13 | All source code is licensed under the [Apache License, Version 2.0](LICENSE). 14 | -------------------------------------------------------------------------------- /Frameworks/SBTUITestTunnelServer/README.md: -------------------------------------------------------------------------------- 1 | # SBTUITestTunnelServer 2 | 3 | Library for IPC. 4 | 5 | It was copy-pasted from . See top-level README.md for explanation. 6 | 7 | ## Author 8 | 9 | [Subito-it](https://github.com/Subito-it) 10 | 11 | ## Licenses 12 | 13 | All source code is licensed under the [Apache License, Version 2.0](LICENSE). 14 | -------------------------------------------------------------------------------- /Frameworks/Stubbing/README.md: -------------------------------------------------------------------------------- 1 | # MixboxGenerator 2 | 3 | Provides an abstraction for generating something. 4 | 5 | The key class in this framework is Generator. Pseudo-code: 6 | 7 | ``` 8 | class Generator { 9 | func generate() -> T 10 | } 11 | ``` 12 | 13 | It was originally meant to be a set of tools for generating stubs for tests, but there might be other purposes too. 14 | -------------------------------------------------------------------------------- /Frameworks/Stubbing/Sources/Facade/TestFailingGenerator/Facade/TestFailingGenerator.swift: -------------------------------------------------------------------------------- 1 | public protocol TestFailingGenerator: 2 | TestFailingAnyGenerator, 3 | TestFailingObjectGenerator, 4 | TestFailingArrayGenerator, 5 | TestFailingDictionaryGenerator, 6 | TestFailingOptionalGenerator 7 | { 8 | } 9 | -------------------------------------------------------------------------------- /Frameworks/Stubbing/Sources/Facade/TestFailingGenerator/Observer/NoopTestFailingGeneratorObserver.swift: -------------------------------------------------------------------------------- 1 | public final class NoopTestFailingGeneratorObserver: TestFailingGeneratorObserver { 2 | public init() { 3 | } 4 | 5 | public func didGenerate(type: Any.Type, value: Any) { 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/Testability/README.md: -------------------------------------------------------------------------------- 1 | # MixboxTestability 2 | 3 | To be included in tested app. The code allows you to improve/customize info about views that is visible for tests. 4 | Code is disabled if `TEST` is not defined. 5 | 6 | ## TODO 7 | 8 | - Move AccessibilityPurpose here from Avito app 9 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/README.md: -------------------------------------------------------------------------------- 1 | # MixboxTestsFoundation 2 | 3 | A collection of tools that are suitable for every type of tests (unit tests/ui tests). -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Di/TestFailingDependencyResolver/TestFailingDependencyResolver.swift: -------------------------------------------------------------------------------- 1 | import MixboxDi 2 | 3 | public protocol TestFailingDependencyResolver { 4 | func resolve() -> T 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Interfaces/BundleResourcePathProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol BundleResourcePathProvider: AnyObject { 2 | func path(resource: String) throws -> String 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Lifecycle/LifecycleManager/TestLifecycleManager.swift: -------------------------------------------------------------------------------- 1 | public protocol TestLifecycleManager: AnyObject { 2 | func startObserving(testLifecycleObservable: TestLifecycleObservable) 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Lifecycle/Observer/Observers/TestLifecycleTestBundleObserver.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public protocol TestLifecycleTestBundleObserver { 4 | func onStart(testBundle: Bundle) 5 | func onStop(testBundle: Bundle) 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Lifecycle/Observer/Observers/TestLifecycleTestCaseObserver.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | public protocol TestLifecycleTestCaseObserver { 4 | func onStart(testCase: XCTestCase) 5 | func onStop(testCase: XCTestCase) 6 | func onFail(testCase: XCTestCase, description: String, filePath: String?, lineNumber: Int) 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Lifecycle/Observer/Observers/TestLifecycleTestSuiteObserver.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | public protocol TestLifecycleTestSuiteObserver { 4 | func onStart(testSuite: XCTestSuite) 5 | func onStop(testSuite: XCTestSuite) 6 | func onFail(testSuite: XCTestSuite, description: String, filePath: String?, lineNumber: Int) 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Lifecycle/SetUpAndTearDown/Noop/NoopTearDownAction.swift: -------------------------------------------------------------------------------- 1 | public final class NoopTearDownAction: TearDownAction { 2 | public init() { 3 | } 4 | 5 | public func tearDown() { 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Lifecycle/SetUpAndTearDown/SetUpAction.swift: -------------------------------------------------------------------------------- 1 | public protocol SetUpAction { 2 | func setUp() -> TearDownAction 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Lifecycle/SetUpAndTearDown/TearDownAction.swift: -------------------------------------------------------------------------------- 1 | public protocol TearDownAction { 2 | func tearDown() 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Matching/Matchers/Impls/Generic/Logic/AlwaysTrueMatcher.swift: -------------------------------------------------------------------------------- 1 | public class AlwaysTrueMatcher: Matcher { 2 | public init() { 3 | super.init( 4 | description: { "Always true" }, 5 | matchingFunction: { _ in 6 | .match 7 | } 8 | ) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Matching/Matchers/Impls/Generic/Value/Comparable/Exact/IsGreaterMatcher.swift: -------------------------------------------------------------------------------- 1 | public final class IsGreaterMatcher: BaseComparableMatcher { 2 | public init(_ otherValue: T) { 3 | super.init( 4 | otherValue: otherValue, 5 | comparisonOperatorInfo: .greaterThan 6 | ) 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Matching/Matchers/Impls/Generic/Value/Comparable/Exact/IsGreaterOrEqualsMatcher.swift: -------------------------------------------------------------------------------- 1 | public final class IsGreaterOrEqualsMatcher: BaseComparableMatcher { 2 | public init(_ otherValue: T) { 3 | super.init( 4 | otherValue: otherValue, 5 | comparisonOperatorInfo: .greaterThanOrEqualTo 6 | ) 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Matching/Matchers/Impls/Generic/Value/Comparable/Exact/IsLessMatcher.swift: -------------------------------------------------------------------------------- 1 | public final class IsLessMatcher: BaseComparableMatcher { 2 | public init(_ otherValue: T) { 3 | super.init( 4 | otherValue: otherValue, 5 | comparisonOperatorInfo: .lessThan 6 | ) 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Matching/Matchers/Impls/Generic/Value/Comparable/Exact/IsLessOrEqualsMatcher.swift: -------------------------------------------------------------------------------- 1 | public final class IsLessOrEqualsMatcher: BaseComparableMatcher { 2 | public init(_ otherValue: T) { 3 | super.init( 4 | otherValue: otherValue, 5 | comparisonOperatorInfo: .lessThanOrEqualTo 6 | ) 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Matching/Matchers/Models/MismatchResult.swift: -------------------------------------------------------------------------------- 1 | public protocol MismatchResult { 2 | // This property is called often: 3 | var percentageOfMatching: Double { get } 4 | 5 | // These properties are called rarely (e.g. when test failure is produced): 6 | var mismatchDescription: String { get } 7 | var attachments: [Attachment] { get } 8 | } 9 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Network/IpcRouterProvider.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpc 2 | 3 | public protocol IpcRouterProvider { 4 | var ipcRouter: IpcRouter? { get } 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Network/Mocking/AddedUrlProtocolStub/AddedUrlProtocolStub.swift: -------------------------------------------------------------------------------- 1 | public protocol AddedUrlProtocolStub: AnyObject { 2 | func remove() 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Network/Mocking/UrlProtocolStubAdder/UrlProtocolStubAdder.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpcCommon 2 | 3 | public protocol UrlProtocolStubAdder: AnyObject { 4 | func addStub( 5 | bridgedUrlProtocolClass: BridgedUrlProtocolClass) 6 | throws 7 | -> AddedUrlProtocolStub 8 | } 9 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Network/README.md: -------------------------------------------------------------------------------- 1 | # TODO 2 | 3 | Remove IPC from white and gray box testing 4 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/Disassembled/_XCTCurrentTestCase.h: -------------------------------------------------------------------------------- 1 | // It is possible to rewrite this in Swift: 2 | // 3 | // @_silgen_name("_XCTCurrentTestCase") 4 | // public func _XCTCurrentTestCase() -> AnyObject? 5 | // 6 | // However, tests were crashing with EXC_BAD_ACCESS on a real app project. 7 | 8 | id _XCTCurrentTestCase(void); 9 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/DTXConnection/Xcode_15_0_DTXConnection.h: -------------------------------------------------------------------------------- 1 | @interface DTXConnection: NSObject 2 | @end 3 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/DTXProxyChannel/Xcode_10_0_DTXProxyChannel.h: -------------------------------------------------------------------------------- 1 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 120000 && __IPHONE_OS_VERSION_MAX_ALLOWED < 120100 2 | 3 | @interface DTXProxyChannel: NSObject 4 | @end 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/DTXProxyChannel/Xcode_10_1_DTXProxyChannel.h: -------------------------------------------------------------------------------- 1 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 120100 && __IPHONE_OS_VERSION_MAX_ALLOWED < 120200 2 | 3 | @interface DTXProxyChannel: NSObject 4 | @end 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/DTXProxyChannel/Xcode_10_2_DTXProxyChannel.h: -------------------------------------------------------------------------------- 1 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 120200 && __IPHONE_OS_VERSION_MAX_ALLOWED < 120400 2 | 3 | @interface DTXProxyChannel: NSObject 4 | @end 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/DTXProxyChannel/Xcode_10_3_DTXProxyChannel.h: -------------------------------------------------------------------------------- 1 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 120400 && __IPHONE_OS_VERSION_MAX_ALLOWED < 130000 2 | 3 | @interface DTXProxyChannel: NSObject 4 | @end 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/DTXProxyChannel/Xcode_11_0_DTXProxyChannel.h: -------------------------------------------------------------------------------- 1 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 && __IPHONE_OS_VERSION_MAX_ALLOWED < 140000 2 | 3 | @interface DTXProxyChannel: NSObject 4 | @end 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/DTXProxyChannel/Xcode_12_0_DTXProxyChannel.h: -------------------------------------------------------------------------------- 1 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000 && __IPHONE_OS_VERSION_MAX_ALLOWED < 150000 2 | 3 | @interface DTXProxyChannel: NSObject 4 | @end 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/DTXProxyChannel/Xcode_13_0_DTXProxyChannel.h: -------------------------------------------------------------------------------- 1 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000 && __IPHONE_OS_VERSION_MAX_ALLOWED < 160000 2 | 3 | @interface DTXProxyChannel: NSObject 4 | @end 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/DTXProxyChannel/Xcode_15_0_DTXProxyChannel.h: -------------------------------------------------------------------------------- 1 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 170000 && __IPHONE_OS_VERSION_MAX_ALLOWED < 180000 2 | 3 | @interface DTXProxyChannel: NSObject 4 | @end 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/SharedHeader/Includes/DispatchEventEventBuilder.h: -------------------------------------------------------------------------------- 1 | #ifndef XCSynthesizedEventRecord_h 2 | #define XCSynthesizedEventRecord_h 3 | 4 | @class XCElementSnapshot; 5 | @class XCSynthesizedEventRecord; 6 | 7 | typedef XCSynthesizedEventRecord *(^DispatchEventEventBuilder)(XCElementSnapshot *); 8 | 9 | #endif /* XCSynthesizedEventRecord_h */ 10 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/SharedHeader/Xcode_10_0_SharedHeader.h: -------------------------------------------------------------------------------- 1 | #ifndef XC10_SharedHeader_h 2 | #define XC10_SharedHeader_h 3 | 4 | #import "Xcode_All_SharedHeader.h" 5 | 6 | #endif /* XC10_SharedHeader_h */ 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/SharedHeader/Xcode_10_1_SharedHeader.h: -------------------------------------------------------------------------------- 1 | #ifndef XC10_SharedHeader_h 2 | #define XC10_SharedHeader_h 3 | 4 | #import "Xcode_All_SharedHeader.h" 5 | 6 | #endif /* XC10_SharedHeader_h */ 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/SharedHeader/Xcode_10_2_SharedHeader.h: -------------------------------------------------------------------------------- 1 | #ifndef XC10_SharedHeader_h 2 | #define XC10_SharedHeader_h 3 | 4 | #import "Xcode_All_SharedHeader.h" 5 | #import "DispatchEventEventBuilder.h" 6 | 7 | #endif /* XC10_SharedHeader_h */ 8 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/SharedHeader/Xcode_10_3_SharedHeader.h: -------------------------------------------------------------------------------- 1 | #ifndef XC10_SharedHeader_h 2 | #define XC10_SharedHeader_h 3 | 4 | #import "Xcode_All_SharedHeader.h" 5 | #import "DispatchEventEventBuilder.h" 6 | 7 | #endif /* XC10_SharedHeader_h */ 8 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/SharedHeader/Xcode_11_0_SharedHeader.h: -------------------------------------------------------------------------------- 1 | #ifndef XC10_SharedHeader_h 2 | #define XC10_SharedHeader_h 3 | 4 | #import "Xcode_All_SharedHeader.h" 5 | #import "DispatchEventEventBuilder.h" 6 | 7 | #endif /* XC10_SharedHeader_h */ 8 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/SharedHeader/Xcode_12_0_SharedHeader.h: -------------------------------------------------------------------------------- 1 | #ifndef Xcode_12_0_SharedHeader_h 2 | #define Xcode_12_0_SharedHeader_h 3 | 4 | #import "Xcode_All_SharedHeader.h" 5 | #import "DispatchEventEventBuilder.h" 6 | 7 | typedef void * CDUnknownFunctionPointerType; 8 | 9 | #endif /* Xcode_12_0_SharedHeader_h */ 10 | 11 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/SharedHeader/Xcode_13_0_SharedHeader.h: -------------------------------------------------------------------------------- 1 | #ifndef Xcode_13_0_SharedHeader_h 2 | #define Xcode_13_0_SharedHeader_h 3 | 4 | #import "Xcode_All_SharedHeader.h" 5 | #import "DispatchEventEventBuilder.h" 6 | 7 | typedef void * CDUnknownFunctionPointerType; 8 | 9 | #endif /* Xcode_13_0_SharedHeader_h */ 10 | 11 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/SharedHeader/Xcode_14_0_SharedHeader.h: -------------------------------------------------------------------------------- 1 | #ifndef Xcode_14_0_SharedHeader_h 2 | #define Xcode_14_0_SharedHeader_h 3 | 4 | #import "Xcode_All_SharedHeader.h" 5 | #import "DispatchEventEventBuilder.h" 6 | 7 | typedef void * CDUnknownFunctionPointerType; 8 | 9 | #endif /* Xcode_14_0_SharedHeader_h */ 10 | 11 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/SharedHeader/Xcode_15_0_SharedHeader.h: -------------------------------------------------------------------------------- 1 | #ifndef Xcode_14_0_SharedHeader_h 2 | #define Xcode_14_0_SharedHeader_h 3 | 4 | #import "Xcode_All_SharedHeader.h" 5 | #import "DispatchEventEventBuilder.h" 6 | 7 | typedef void * CDUnknownFunctionPointerType; 8 | 9 | #endif /* Xcode_14_0_SharedHeader_h */ 10 | 11 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/PrivateHeaders/Manual/XCTest/Xcode_10_All_XCTTestSchedulerDelegate.h: -------------------------------------------------------------------------------- 1 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 120000 2 | 3 | @protocol XCTTestSchedulerDelegate 4 | @end 5 | 6 | #endif 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Reporting/CurrentTestCase/CurrentTestCaseProvider.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | public protocol CurrentTestCaseProvider: AnyObject { 4 | func currentTestCase() -> XCTestCase? 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Reporting/CurrentTestCase/CurrentTestCaseSettable.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | public protocol CurrentTestCaseSettable: AnyObject { 4 | func setCurrentTestCase(_ testCase: XCTestCase?) 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Reporting/FileLineForFailureProvider/FileLineForFailureProvider.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | public protocol FileLineForFailureProvider: AnyObject { 4 | func fileLineForFailure() -> RuntimeFileLine? 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Reporting/FileLineForFailureProvider/Impls/NoopFileLineForFailureProvider.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | public final class NoopFileLineForFailureProvider: FileLineForFailureProvider { 4 | public init() { 5 | } 6 | 7 | public func fileLineForFailure() -> RuntimeFileLine? { 8 | return nil 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Reporting/FileLineForFailureProvider/StackTrace/ExtendedStackTraceEntryFromStackTraceEntryConverter.swift: -------------------------------------------------------------------------------- 1 | public protocol ExtendedStackTraceEntryFromStackTraceEntryConverter: AnyObject { 2 | func extendedStackTraceEntry(stackTraceEntry: StackTraceEntry) -> ExtendedStackTraceEntry 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Reporting/FileLineForFailureProvider/StackTrace/ExtendedStackTraceProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol ExtendedStackTraceProvider: AnyObject { 2 | func extendedStackTrace() -> [ExtendedStackTraceEntry] 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Reporting/FileLineForFailureProvider/StackTrace/Simple/StackTraceProvider.swift: -------------------------------------------------------------------------------- 1 | // Should return array of trace with format as in backtrace_symbols 2 | public protocol StackTraceProvider: AnyObject { 3 | func stackTrace() -> [StackTraceEntry] 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Reporting/Stepping/StepLogsCleaner.swift: -------------------------------------------------------------------------------- 1 | public protocol StepLogsCleaner { 2 | func cleanLogs() 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Reporting/Stepping/StepLogsProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol StepLogsProvider: AnyObject { 2 | var stepLogs: [StepLog] { get } 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/Extensions/Optional+DescriptionOrNil.swift: -------------------------------------------------------------------------------- 1 | extension Optional { 2 | public func descriptionOrNil() -> String { 3 | if let unwrapped = self { 4 | return "\(unwrapped)" 5 | } else { 6 | return "nil" 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/FileSystem/ApplicationPaths/ApplicationBundleProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol ApplicationBundleProvider: AnyObject { 2 | // Throws ErrorString 3 | func applicationBundle() throws -> Bundle 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/FileSystem/CurrentSimulatorFileSystemRootProvider/CurrentSimulatorFileSystemRootProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol CurrentSimulatorFileSystemRootProvider: AnyObject { 2 | func currentSimulatorFileSystemRoot() throws -> SimulatorFileSystemRoot 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/Media/ImageProvider/ImageProvider.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | import UIKit 3 | 4 | public protocol ImageProvider: AnyObject { 5 | func image() throws -> UIImage 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/Media/PhotoSaver/PhotoSaver.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | public protocol PhotoSaver: AnyObject { 4 | func save(imagesProvider: ImagesProvider) throws 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/Media/PhotoStubber/PhotoStubber.swift: -------------------------------------------------------------------------------- 1 | public protocol PhotoStubber: AnyObject { 2 | func stubPhotos(minimalCount: Int) throws 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/Permissions/Factory/ApplicationPermissionsSetterFactory.swift: -------------------------------------------------------------------------------- 1 | public protocol ApplicationPermissionsSetterFactory: AnyObject { 2 | func applicationPermissionsSetter( 3 | bundleId: String, 4 | displayName: String) 5 | -> ApplicationPermissionsSetter 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/Permissions/Factory/ApplicationPermissionsSetterFactoryImpl/TccDb/TccDbApplicationPermissionSetterFactory.swift: -------------------------------------------------------------------------------- 1 | public protocol TccDbApplicationPermissionSetterFactory: AnyObject { 2 | func tccDbApplicationPermissionSetter( 3 | service: TccService, 4 | bundleId: String) 5 | -> ApplicationPermissionSetter 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/Permissions/Implementation/Geolocation/Factory/GeolocationApplicationPermissionSetterFactory.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | public protocol GeolocationApplicationPermissionSetterFactory: AnyObject { 4 | func geolocationApplicationPermissionSetter(bundleId: String) -> ApplicationPermissionSetter 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/Permissions/Implementation/TccDb/Support/TccPrivacySettingsManager/Models/TccServicePrivacyState.swift: -------------------------------------------------------------------------------- 1 | public enum TccServicePrivacyState { 2 | case allowed 3 | case denied 4 | case notDetermined 5 | case selectedPhotos 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/Permissions/Implementation/TccDb/Support/TccPrivacySettingsManager/TccDb/TccDbFactory.swift: -------------------------------------------------------------------------------- 1 | public protocol TccDbFactory { 2 | func tccDb() throws -> TccDb 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/Permissions/Implementation/TccDb/Support/TccPrivacySettingsManager/TccDb/TccDbFinder/TccDbFinder.swift: -------------------------------------------------------------------------------- 1 | // Searches for TCC.db of current simulator 2 | public protocol TccDbFinder: AnyObject { 3 | func tccDbPath() throws -> String 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/Permissions/Single/ApplicationPermissionSetter/AllowedDeniedNotDeterminedState.swift: -------------------------------------------------------------------------------- 1 | public enum AllowedDeniedNotDeterminedState: CaseIterable { 2 | case allowed 3 | case denied 4 | case notDetermined 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/Permissions/Single/ApplicationPermissionSetter/ApplicationPermissionSetter.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | // Facade for setting a single permission. 4 | public protocol ApplicationPermissionSetter: AnyObject { 5 | func set(_ state: AllowedDeniedNotDeterminedState) 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/Permissions/Single/ApplicationPermissionWithoutNotDeterminedStateSetter/AllowedDeniedState.swift: -------------------------------------------------------------------------------- 1 | public enum AllowedDeniedState: CaseIterable { 2 | case allowed 3 | case denied 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/Permissions/Single/ApplicationPermissionWithoutNotDeterminedStateSetter/ApplicationPermissionWithoutNotDeterminedStateSetter.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | public protocol ApplicationPermissionWithoutNotDeterminedStateSetter { 4 | func set(_ state: AllowedDeniedState) 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/TestsFoundation/Sources/Utilities/XcodeVersion/XcodeVersionProviderObjC.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | NS_ASSUME_NONNULL_BEGIN 4 | 5 | @interface XcodeVersionProviderObjC : NSObject 6 | 7 | + (NSArray *)xcodeVersion; 8 | 9 | @end 10 | 11 | NS_ASSUME_NONNULL_END 12 | -------------------------------------------------------------------------------- /Frameworks/UiKit/README.md: -------------------------------------------------------------------------------- 1 | # MixboxUiKit 2 | 3 | Various extensions and utilities that extend UIKit functionality. 4 | 5 | It is same as MixboxFoundation, but MixboxFoundation is crossplatform and MixboxUiKit is only for iOS. -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Interaction/Interaction/Common/InteractionType.swift: -------------------------------------------------------------------------------- 1 | public enum InteractionType { 2 | case action 3 | case check 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/IpcClients/IpcClients.md: -------------------------------------------------------------------------------- 1 | # MixboxIpcClients 2 | 3 | Easy to use clients for interacting with the app from tests. -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/IpcClients/Keyboard/SyncronousKeyboardEventInjector/SynchronousKeyboardEventInjector.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpcCommon 2 | 3 | public protocol SynchronousKeyboardEventInjector { 4 | func inject(events: [KeyboardEvent]) throws 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/IpcClients/OpenUrl/UrlOpener.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public protocol UrlOpener: AnyObject { 4 | func open(url: URL) throws 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/IpcClients/ScrollingHintsProvider/ScrollingHintsProvider.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpcCommon 2 | 3 | public protocol ScrollingHintsProvider: AnyObject { 4 | func scrollingHint(element: ElementSnapshot) -> ScrollingHint 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/LegacyNetworkMocking/Autorecording/Factory/NetworkAutomaticRecorderAndReplayerProvider/NetworkAutomaticRecorderAndReplayerProvider.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | public protocol NetworkAutomaticRecorderAndReplayerProvider: AnyObject { 4 | func player( 5 | session: RecordedNetworkSessionPath) 6 | -> NetworkPlayer 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/LegacyNetworkMocking/Autorecording/Factory/RecordedNetworkSessionFileLoader/RecordedNetworkSessionFileLoader.swift: -------------------------------------------------------------------------------- 1 | public protocol RecordedNetworkSessionFileLoader: AnyObject { 2 | func recordedNetworkSession(path: String) throws -> RecordedNetworkSession 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/LegacyNetworkMocking/Autorecording/Observing/DummyNetworkReplayingObserver.swift: -------------------------------------------------------------------------------- 1 | public final class DummyNetworkReplayingObserver: NetworkReplayingObserver { 2 | public init() { 3 | } 4 | 5 | public func networkPlayerStartedReplaying() { 6 | } 7 | 8 | public func networkPlayerStartedRecording() { 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/LegacyNetworkMocking/Autorecording/Observing/NetworkReplayingObserver.swift: -------------------------------------------------------------------------------- 1 | public protocol NetworkReplayingObserver: AnyObject { 2 | func networkPlayerStartedReplaying() 3 | func networkPlayerStartedRecording() 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/LegacyNetworkMocking/Autorecording/Player/ReplayingNetworkPlayer/RecordedSessionStubber.swift: -------------------------------------------------------------------------------- 1 | public protocol RecordedSessionStubber: AnyObject { 2 | func stub( 3 | recordedStub: RecordedStub) 4 | throws 5 | 6 | func stubAllNetworkInitially() 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/LegacyNetworkMocking/Facade/Everything/LegacyNetworking.swift: -------------------------------------------------------------------------------- 1 | // Facade for mocking and stubbing Network, ready to use from UI tests 2 | public protocol LegacyNetworking: AnyObject { 3 | var stubbing: LegacyNetworkStubbing { get } 4 | var recording: LegacyNetworkRecording { get } 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/LegacyNetworkMocking/Facade/Recording/LegacyNetworkRecording.swift: -------------------------------------------------------------------------------- 1 | public protocol LegacyNetworkRecording: 2 | NetworkRecordsProvider, 3 | NetworkRecorderLifecycle, 4 | NetworkAutomaticRecorderAndReplayerProvider 5 | { 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/LegacyNetworkMocking/Facade/Stubbing/LegacyNetworkStubbing.swift: -------------------------------------------------------------------------------- 1 | public typealias LegacyNetworkStubbing = StubRequestBuilder 2 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/LegacyNetworkMocking/Recording/NetworkRecorderLifecycle.swift: -------------------------------------------------------------------------------- 1 | public protocol NetworkRecorderLifecycle: AnyObject { 2 | func startRecording() 3 | func stopRecording() 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/LegacyNetworkMocking/Stubbing/Models/HttpMethod.swift: -------------------------------------------------------------------------------- 1 | public enum HttpMethod: String, Codable, Hashable { 2 | case options, get, head, post, put, patch, delete, trace, connect 3 | 4 | public var value: String { 5 | return rawValue.uppercased() 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObject/PageObject.swift: -------------------------------------------------------------------------------- 1 | public protocol PageObject: AnyObject { 2 | } 3 | 4 | public protocol PageObjectWithDefaultInitializer: PageObject { 5 | init(pageObjectDependenciesFactory: PageObjectDependenciesFactory) 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/DI/Builders/FieldBuilderCallImplementation.swift: -------------------------------------------------------------------------------- 1 | public protocol FieldBuilderCallImplementation { 2 | associatedtype Structure 3 | associatedtype Result 4 | 5 | func call( 6 | keyPath: WritableKeyPath, 7 | field: Field) 8 | -> Result 9 | } 10 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/DI/Builders/FieldBuilderProperty+CustomizableScalar.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | extension FieldBuilderProperty { 4 | public func callAsFunction( 5 | _ value: Customizable) 6 | -> T.Result 7 | where Field == CustomizableScalar 8 | { 9 | return callAsFunction(.customized(value)) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Finder/ElementFinder.swift: -------------------------------------------------------------------------------- 1 | public protocol ElementFinder: AnyObject { 2 | func query( 3 | elementMatcher: ElementMatcher, 4 | elementFunctionDeclarationLocation: FunctionDeclarationLocation 5 | ) -> ElementQuery 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Finder/ElementQuery.swift: -------------------------------------------------------------------------------- 1 | public protocol ElementQuery: AnyObject { 2 | func resolveElement( 3 | interactionMode: InteractionMode 4 | ) -> ResolvedElementQuery 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/InteractionSettings/InteractionSettingsDefaults/InteractionSettingsDefaultsProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol InteractionSettingsDefaultsProvider: AnyObject { 2 | func interactionSettingsDefaults( 3 | interaction: ElementInteraction) 4 | -> InteractionSettingsDefaults 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/Actions/ElementAction/ElementInteractionDependencies/Dependencies/ApplicationFrameProvider/ApplicationFrameProvider.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public protocol ApplicationFrameProvider: AnyObject { 4 | var applicationFrame: CGRect { get } 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/Actions/ElementAction/ElementInteractionDependencies/Dependencies/ElementHierarchyDescriptionProvider.swift: -------------------------------------------------------------------------------- 1 | // TODO: Replace with provider of real hierarchy (instead of String). 2 | public protocol ElementHierarchyDescriptionProvider: AnyObject { 3 | func elementHierarchyDescription() -> String? 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/Actions/ElementAction/ElementInteractionDependencies/Dependencies/FailureFactory/ApplicationStateProvider/ApplicationStateProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol ApplicationStateProvider: AnyObject { 2 | func applicationState() throws -> ApplicationState 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/Actions/ElementAction/ElementInteractionDependencies/Dependencies/InteractionRetrier/InteractionRetrier.swift: -------------------------------------------------------------------------------- 1 | public protocol InteractionRetrier: AnyObject { 2 | func retryInteractionUntilTimeout( 3 | closure: (_ interaction: RetriableTimedInteractionState) -> InteractionResult) 4 | -> InteractionResult 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/Actions/ElementAction/ElementInteractionDependencies/Dependencies/NestedInteractionPerformer/NestedInteractionPerformer.swift: -------------------------------------------------------------------------------- 1 | public protocol NestedInteractionPerformer: AnyObject { 2 | func perform(interaction: ElementInteraction) -> InteractionResult 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/Actions/ElementAction/ElementInteractionDependencies/Dependencies/Resolving/ElementResolverWithScrollingAndRetries.swift: -------------------------------------------------------------------------------- 1 | public protocol ElementResolverWithScrollingAndRetries: AnyObject { 2 | func resolveElementWithRetries( 3 | isPossibleToRetryProvider: IsPossibleToRetryProvider) 4 | throws 5 | -> ResolvedElementQuery 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/Actions/ElementAction/ElementInteractionDependencies/Dependencies/RetriableTimedInteractionState/IsPossibleToRetryProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol IsPossibleToRetryProvider: AnyObject { 2 | func isPossibleToRetry() -> Bool 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/Actions/ElementAction/ElementInteractionDependencies/Dependencies/RetriableTimedInteractionState/MarkableAsImpossibleToRetry.swift: -------------------------------------------------------------------------------- 1 | public protocol MarkableAsImpossibleToRetry: AnyObject { 2 | func markAsImpossibleToRetry() 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/Actions/ElementAction/ElementInteractionDependencies/Dependencies/RetriableTimedInteractionState/RetriableTimedInteractionState.swift: -------------------------------------------------------------------------------- 1 | public typealias RetriableTimedInteractionState = IsPossibleToRetryProvider 2 | & MarkableAsImpossibleToRetry 3 | & RetriableTimedInteractionStateForNestedRetryOperationProvider 4 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/Actions/ElementAction/ElementInteractionDependencies/Dependencies/TextTyper/TextTyperInstruction.swift: -------------------------------------------------------------------------------- 1 | public enum TextTyperInstruction { 2 | case text(String) 3 | case key(TextTyperKey) 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/Actions/ElementAction/ElementInteractionDependencies/Dependencies/TextTyper/TextTyperKey.swift: -------------------------------------------------------------------------------- 1 | public enum TextTyperKey { 2 | case delete // aka backspace 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/Actions/ElementAction/Impls/Text/SettingText/Domain/TextEditingActionMode.swift: -------------------------------------------------------------------------------- 1 | public enum TextEditingActionMode { 2 | case replace 3 | case append 4 | 5 | static var `default`: TextEditingActionMode { 6 | .replace 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/Actions/ElementAction/Impls/Touches/Swipe/Models/SwipeActionEndPoint.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpcCommon 2 | import UIKit 3 | 4 | public enum SwipeActionEndPoint { 5 | case directionWithDefaultLength(SwipeDirection) 6 | case directionWithLength(SwipeDirection, CGFloat) 7 | case interactionCoordinates(InteractionCoordinates) 8 | } 9 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/Actions/ElementAction/Impls/Touches/Swipe/Models/SwipeActionStartPoint.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpcCommon 2 | 3 | public typealias SwipeActionStartPoint = InteractionCoordinates 4 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/ElementResolver/ElementResolver.swift: -------------------------------------------------------------------------------- 1 | public protocol ElementResolver: AnyObject { 2 | func resolveElement() throws -> ResolvedElementQuery 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Interactions/Interaction/ElementInteractionPerformer.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | public protocol ElementInteractionPerformer: AnyObject { 4 | func perform( 5 | interaction: ElementInteraction, 6 | interactionPerformingSettings: InteractionPerformingSettings) 7 | -> InteractionResult 8 | } 9 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Kinds/AbstractionOfDriver/PageObjectElementInteractionPerformer/PageObjectElementInteractionPerformer.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | public protocol PageObjectElementInteractionPerformer: ElementInteractionPerformer { 4 | func with( 5 | settings: ElementSettings) 6 | -> PageObjectElementInteractionPerformer 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Kinds/Endpoints/Base/BaseElement.swift: -------------------------------------------------------------------------------- 1 | open class BaseElement { 2 | public let core: PageObjectElementCore 3 | 4 | public init( 5 | core: PageObjectElementCore) 6 | { 7 | self.core = core 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Kinds/Endpoints/Base/ElementWithDefaultInitializer.swift: -------------------------------------------------------------------------------- 1 | public protocol ElementWithDefaultInitializer: Element { 2 | init(core: PageObjectElementCore) 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Kinds/Endpoints/ButtonElement.swift: -------------------------------------------------------------------------------- 1 | public final class ButtonElement: 2 | BaseElementWithDefaultInitializer, 3 | ElementWithUi, 4 | ElementWithText, 5 | ElementWithEnabledState 6 | { 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Kinds/Endpoints/ImageElement.swift: -------------------------------------------------------------------------------- 1 | public typealias ImageElement = ViewElement 2 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Kinds/Endpoints/InputElement.swift: -------------------------------------------------------------------------------- 1 | import MixboxTestsFoundation 2 | 3 | public final class InputElement: 4 | BaseElementWithDefaultInitializer, 5 | ElementWithUi, 6 | ElementWithText, 7 | ElementWithEnabledState 8 | { 9 | } 10 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Kinds/Endpoints/LabelElement.swift: -------------------------------------------------------------------------------- 1 | public final class LabelElement: 2 | BaseElementWithDefaultInitializer, 3 | ElementWithUi, 4 | ElementWithText 5 | { 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Kinds/Endpoints/ScrollElement.swift: -------------------------------------------------------------------------------- 1 | public typealias ScrollElement = ViewElement 2 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Kinds/Endpoints/ViewElement.swift: -------------------------------------------------------------------------------- 1 | import MixboxTestsFoundation 2 | 3 | public final class ViewElement: 4 | BaseElementWithDefaultInitializer, 5 | ElementWithUi 6 | { 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Kinds/Parts/ElementWithEnabledState/ElementWithEnabledState.swift: -------------------------------------------------------------------------------- 1 | public protocol ElementWithEnabledState: 2 | ElementWithUi 3 | { 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Kinds/Parts/ElementWithText/ElementWithText.swift: -------------------------------------------------------------------------------- 1 | public protocol ElementWithText: 2 | ElementWithUi 3 | { 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Kinds/Parts/ElementWithUi/ElementWithUi.swift: -------------------------------------------------------------------------------- 1 | public protocol ElementWithUi: 2 | Element 3 | { 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Kinds/Parts/SwipeDirection.swift: -------------------------------------------------------------------------------- 1 | // TODO: Rename and remove duplicated classes 2 | public enum SwipeDirection { 3 | case up 4 | case down 5 | case left 6 | case right 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/PageObjectElement/Snapshot/ElementMatcher.swift: -------------------------------------------------------------------------------- 1 | import MixboxTestsFoundation 2 | 3 | public typealias ElementMatcher = Matcher 4 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Screenshots/ApplicationScreenshotTaker.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public protocol ApplicationScreenshotTaker: AnyObject { 4 | func takeApplicationScreenshot() throws -> UIImage 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Screenshots/DeviceScreenshotTaker.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public protocol DeviceScreenshotTaker: AnyObject { 4 | func takeDeviceScreenshot() throws -> UIImage 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Screenshots/ElementImageProvider/ElementImageProvider.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public protocol ElementImageProvider { 4 | func elementImage( 5 | elementShanpshot: ElementSnapshot) 6 | throws 7 | -> UIImage 8 | } 9 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Screenshots/Hashing/CocoaImageHashing/AHashImageHashCalculator.swift: -------------------------------------------------------------------------------- 1 | import MixboxCocoaImageHashing 2 | 3 | public final class AHashImageHashCalculator: BaseCocoaImageHashingImageHashCalculator { 4 | public init() { 5 | super.init(osImageHashingProviderId: .aHash) 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Screenshots/Hashing/CocoaImageHashing/DHashImageHashCalculator.swift: -------------------------------------------------------------------------------- 1 | import MixboxCocoaImageHashing 2 | 3 | public final class DHashImageHashCalculator: BaseCocoaImageHashingImageHashCalculator { 4 | public init() { 5 | super.init(osImageHashingProviderId: .dHash) 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Screenshots/Hashing/CocoaImageHashing/PHashImageHashCalculator.swift: -------------------------------------------------------------------------------- 1 | import MixboxCocoaImageHashing 2 | 3 | public final class PHashImageHashCalculator: BaseCocoaImageHashingImageHashCalculator { 4 | public init() { 5 | super.init(osImageHashingProviderId: .pHash) 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Screenshots/Hashing/ImageHashCalculator.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public protocol ImageHashCalculator: AnyObject { 4 | func imageHash(image: UIImage) throws -> UInt64 5 | func hashDistance(lhsHash: UInt64, rhsHash: UInt64) -> UInt8 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Utils/Extensions/CustomizableScalar+FromOptional.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | extension CustomizableScalar { 4 | static func from(optional: T?) -> Self { 5 | if let customized = optional { 6 | return .customized(customized) 7 | } else { 8 | return .automatic 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Utils/PageObjectMakingHelper/InteractionFailureDebugger/InteractionFailureDebugger.swift: -------------------------------------------------------------------------------- 1 | public protocol InteractionFailureDebugger { 2 | func performDebugging() throws -> InteractionFailureDebuggingResult 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Utils/PageObjectMakingHelper/InteractionFailureDebugger/InteractionFailureDebuggingResult.swift: -------------------------------------------------------------------------------- 1 | public enum InteractionFailureDebuggingResult { 2 | case failureWasFixed 3 | case failureWasNotFixed 4 | } 5 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Utils/PageObjectMakingHelper/InteractionFailureDebugger/NoopInteractionFailureDebugger.swift: -------------------------------------------------------------------------------- 1 | public final class NoopInteractionFailureDebugger: InteractionFailureDebugger { 2 | public init() { 3 | } 4 | 5 | public func performDebugging() -> InteractionFailureDebuggingResult { 6 | return .failureWasNotFixed 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Utils/SnapshotComparison/DifferenceImageGenerator/DifferenceImageGenerator.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | // TODO: Test with images of same and different sizes 4 | public protocol DifferenceImageGenerator { 5 | func differenceImage(actualImage: UIImage, expectedImage: UIImage) -> UIImage? 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Utils/SnapshotComparison/Factory/SnapshotsComparatorFactory.swift: -------------------------------------------------------------------------------- 1 | public protocol SnapshotsComparatorFactory { 2 | func snapshotsComparator(type: SnapshotsComparatorType) -> SnapshotsComparator 3 | } 4 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Utils/SnapshotComparison/Models/SnapshotsComparisonResult.swift: -------------------------------------------------------------------------------- 1 | // Note: comparators compare for similarity, not for equality. 2 | // For some comparators similarity can mean equality. 3 | public enum SnapshotsComparisonResult { 4 | case similar 5 | case different(SnapshotsDifferenceDescription) 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Utils/SnapshotComparison/Models/SnapshotsDifferenceDescription/SnapshotsDifferenceDescription.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public protocol SnapshotsDifferenceDescription: AnyObject { 4 | var percentageOfMatching: Double { get } 5 | var message: String { get } 6 | var actualImage: UIImage { get } 7 | var expectedImage: UIImage { get } 8 | } 9 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Utils/SnapshotComparison/SnapshotsComparator.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public protocol SnapshotsComparator: AnyObject { 4 | func compare(actualImage: UIImage, expectedImage: UIImage) -> SnapshotsComparisonResult 5 | } 6 | -------------------------------------------------------------------------------- /Frameworks/UiTestsFoundation/Sources/Utils/SnapshotComparison/SnapshotsDifferenceAttachmentGenerator/SnapshotsDifferenceAttachmentGenerator.swift: -------------------------------------------------------------------------------- 1 | import MixboxTestsFoundation 2 | 3 | public protocol SnapshotsDifferenceAttachmentGenerator { 4 | func attachments(snapshotsDifferenceDescription: SnapshotsDifferenceDescription) -> [Attachment] 5 | } 6 | -------------------------------------------------------------------------------- /Helper/MixboxHelper.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Helper/MixboxHelper.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Helper/MixboxHelper/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Helper/MixboxHelper/Assets.xcassets/menu-icon-colored.imageset/menu-icon-colored.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Helper/MixboxHelper/Assets.xcassets/menu-icon-colored.imageset/menu-icon-colored.png -------------------------------------------------------------------------------- /Helper/MixboxHelper/Assets.xcassets/menu-icon-grayscale.imageset/menu-icon-grayscale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Helper/MixboxHelper/Assets.xcassets/menu-icon-grayscale.imageset/menu-icon-grayscale.png -------------------------------------------------------------------------------- /Helper/MixboxHelper/MixboxHelper.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Helper/MixboxHelper/ViewController.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | 3 | class ViewController: NSViewController { 4 | } 5 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | %: 2 | ./make.sh $@ 3 | .PHONY: % -------------------------------------------------------------------------------- /Mixbox.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::BaseSpec.new do |s| 4 | s.name = 'Mixbox' 5 | s.platforms = [:ios] 6 | 7 | s.summary = 'This pod is reserved for future use. It should not be used at the moment.' 8 | 9 | s.subspec 'Foundation' do |ss| 10 | ss.dependency 'MixboxFoundation' 11 | end 12 | end -------------------------------------------------------------------------------- /MixboxAnyCodable.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxAnyCodable' 5 | s.platforms = [:ios] 6 | end -------------------------------------------------------------------------------- /MixboxBuiltinDi.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxBuiltinDi' 5 | s.platforms = [:ios, :osx] 6 | 7 | s.dependency 'MixboxDi' 8 | end 9 | -------------------------------------------------------------------------------- /MixboxBuiltinIpc.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxBuiltinIpc' 5 | s.platforms = [:ios, :osx] 6 | 7 | s.dependency 'MixboxIpc' 8 | s.dependency 'GCDWebServer' 9 | end -------------------------------------------------------------------------------- /MixboxCocoaImageHashing.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxCocoaImageHashing' 5 | s.platforms = [:ios] 6 | end -------------------------------------------------------------------------------- /MixboxDi.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxDi' 5 | s.platforms = [:ios, :osx] 6 | end 7 | -------------------------------------------------------------------------------- /MixboxFakeSettingsAppMain.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxFakeSettingsAppMain' 5 | s.platforms = [:ios] 6 | end -------------------------------------------------------------------------------- /MixboxFoundation.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxFoundation' 5 | s.platforms = [:ios, :osx] 6 | end -------------------------------------------------------------------------------- /MixboxGenerators.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxGenerators' 5 | s.platforms = [:ios] 6 | 7 | s.dependency 'MixboxDi' 8 | end 9 | -------------------------------------------------------------------------------- /MixboxIoKit.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxIoKit' 5 | s.platforms = [:ios] 6 | 7 | s.dependency 'MixboxFoundation' 8 | 9 | s.frameworks = 'IOKit', 'UIKit' 10 | end 11 | -------------------------------------------------------------------------------- /MixboxIpc.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxIpc' 5 | s.platforms = [:ios, :osx] 6 | 7 | s.dependency 'MixboxFoundation' 8 | end -------------------------------------------------------------------------------- /MixboxIpcCommon.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxIpcCommon' 5 | s.platforms = [:ios] 6 | 7 | s.dependency 'MixboxIpc' 8 | s.dependency 'MixboxAnyCodable' 9 | end -------------------------------------------------------------------------------- /MixboxIpcSbtuiHost.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxIpcSbtuiHost' 5 | s.platforms = [:ios] 6 | 7 | s.dependency 'MixboxIpc' 8 | s.dependency 'MixboxSBTUITestTunnelServer' 9 | end -------------------------------------------------------------------------------- /MixboxMocksGeneration.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxMocksGeneration' 5 | s.platforms = [:osx] 6 | 7 | s.dependency 'SourceryFramework' 8 | s.dependency 'SourceryRuntime' 9 | end 10 | -------------------------------------------------------------------------------- /MixboxReflection.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxReflection' 5 | s.platforms = [:ios, :osx] 6 | end 7 | -------------------------------------------------------------------------------- /MixboxSBTUITestTunnelClient.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxSBTUITestTunnelClient' 5 | s.platforms = [:ios] 6 | 7 | s.dependency 'MixboxSBTUITestTunnelCommon' 8 | 9 | s.frameworks = 'XCTest' 10 | end 11 | -------------------------------------------------------------------------------- /MixboxSBTUITestTunnelCommon.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxSBTUITestTunnelCommon' 5 | s.platforms = [:ios] 6 | end 7 | -------------------------------------------------------------------------------- /MixboxSBTUITestTunnelServer.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxSBTUITestTunnelServer' 5 | s.platforms = [:ios] 6 | 7 | s.dependency 'MixboxSBTUITestTunnelCommon' 8 | 9 | s.dependency 'GCDWebServer', '~> 3.0' 10 | end 11 | -------------------------------------------------------------------------------- /MixboxTestability.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxTestability' 5 | s.platforms = [:ios] 6 | end 7 | -------------------------------------------------------------------------------- /MixboxUiKit.podspec: -------------------------------------------------------------------------------- 1 | require_relative 'cocoapods/mixbox_spec' 2 | 3 | Mixbox::FrameworkSpec.new do |s| 4 | s.name = 'MixboxUiKit' 5 | s.platforms = [:ios] 6 | 7 | s.dependency 'MixboxFoundation' 8 | end -------------------------------------------------------------------------------- /Tests/AllTestsShared/AllTestsSharedBridgingHeader.h: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Tests/AllTestsShared/TestCase/BaseTestCase+ValuesByIosVersion.swift: -------------------------------------------------------------------------------- 1 | extension BaseTestCase { 2 | func valuesByIosVersion(type: T.Type = T.self) -> ValuesByIosVersionInInitialState { 3 | return ValuesByIosVersionInInitialState( 4 | iosVersionProvider: iosVersionProvider 5 | ) 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Tests/AllTestsShared/TestType.swift: -------------------------------------------------------------------------------- 1 | enum TestType { 2 | case whiteBox 3 | case grayBox 4 | case blackBox 5 | } 6 | -------------------------------------------------------------------------------- /Tests/AllTestsShared/TestingFails/Failures/GatherFailuresResult.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | struct GatherFailuresResult { 4 | enum BodyResult { 5 | case finished(T) 6 | case testFailedAndCannotBeContinued 7 | case caughtException(NSException) 8 | } 9 | 10 | let bodyResult: BodyResult 11 | let failures: [XcTestFailure] 12 | } 13 | -------------------------------------------------------------------------------- /Tests/AllTestsShared/TestingFails/Failures/XcTestFailure.swift: -------------------------------------------------------------------------------- 1 | struct XcTestFailure: Equatable { 2 | let description: String 3 | let file: String 4 | let line: UInt 5 | let expected: Bool 6 | } 7 | -------------------------------------------------------------------------------- /Tests/AllTestsShared/TestingFails/Logs/Matchers/AttachmentMatcherBuilder.swift: -------------------------------------------------------------------------------- 1 | import MixboxTestsFoundation 2 | 3 | final class AttachmentMatcherBuilder { 4 | let name = PropertyMatcherBuilder("name", \Attachment.name) 5 | let content = PropertyMatcherBuilder("content", \Attachment.content) 6 | } 7 | -------------------------------------------------------------------------------- /Tests/AllTestsShared/TestingFails/Logs/StartedStepLoggerRecording.swift: -------------------------------------------------------------------------------- 1 | import MixboxTestsFoundation 2 | 3 | protocol StartedStepLoggerRecording: StepLogger, StepLogsProvider { 4 | func stopRecording() 5 | } 6 | -------------------------------------------------------------------------------- /Tests/AllTestsShared/TestingFails/Logs/StepLoggerRecordingStarter.swift: -------------------------------------------------------------------------------- 1 | import MixboxTestsFoundation 2 | 3 | protocol StepLoggerRecordingStarter: AnyObject { 4 | func startRecording() -> StartedStepLoggerRecording & StepLogsProvider 5 | } 6 | -------------------------------------------------------------------------------- /Tests/AllTestsShared/TestingFails/UninterceptableErrorTracker/UninterceptableError.swift: -------------------------------------------------------------------------------- 1 | import MixboxFoundation 2 | 3 | final class UninterceptableError { 4 | let error: Error 5 | let fileLine: FileLine 6 | 7 | init(error: Error, fileLine: FileLine) { 8 | self.error = error 9 | self.fileLine = fileLine 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Tests/AllTestsShared/TestingFails/UninterceptableErrorTracker/UninterceptableErrorRecorder.swift: -------------------------------------------------------------------------------- 1 | import MixboxTestsFoundation 2 | 3 | protocol UninterceptableErrorRecorder { 4 | func recordFailures(testCase: TestCaseSuppressingWarningAboutDeprecatedRecordFailure) 5 | } 6 | -------------------------------------------------------------------------------- /Tests/AllTestsShared/UIColor+RGB.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | extension UIColor { 4 | convenience init(red: Int, green: Int, blue: Int, alpha: Int = 255) { 5 | self.init( 6 | red: CGFloat(red) / 255.0, 7 | green: CGFloat(green) / 255.0, 8 | blue: CGFloat(blue) / 255.0, 9 | alpha: CGFloat(alpha) / 255.0 10 | ) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tests/AllTestsShared/ValuesByIosVersion/ValueStartingFromGivenIosVersion.swift: -------------------------------------------------------------------------------- 1 | import MixboxUiKit 2 | 3 | struct ValueStartingFromGivenIosVersion { 4 | let iosVersion: IosVersion 5 | let value: T 6 | } 7 | -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/eva_icons/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "properties" : { 7 | "provides-namespace" : true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/eva_icons/fill/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "properties" : { 7 | "provides-namespace" : true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/eva_icons/outline/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "properties" : { 7 | "provides-namespace" : true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "properties" : { 7 | "provides-namespace" : true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_aspect.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "cat_aspect.png", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_aspect.imageset/cat_aspect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_aspect.imageset/cat_aspect.png -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_borders.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "cat_borders.png", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_borders.imageset/cat_borders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_borders.imageset/cat_borders.png -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_color.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "cat_color.png", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_color.imageset/cat_color.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_color.imageset/cat_color.png -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_lots_of_text.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "cat_lots_of_text.png", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_lots_of_text.imageset/cat_lots_of_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_lots_of_text.imageset/cat_lots_of_text.png -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_not_cat.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "cat_not_cat.png", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_not_cat.imageset/cat_not_cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_not_cat.imageset/cat_not_cat.png -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_original.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "cat.png", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_original.imageset/cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_original.imageset/cat.png -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_size.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "cat_size.png", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_size.imageset/cat_size.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_size.imageset/cat_size.png -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_text.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "cat_text.png", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_text.imageset/cat_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/AppAndTestsShared/Media.xcassets/imagehash_cats/imagehash_cat_text.imageset/cat_text.png -------------------------------------------------------------------------------- /Tests/AppForCheckingPureXctest/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Tests/AppForCheckingPureXctest/HidEventsDebugging/AppForCheckingPureXctest-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "PrivateApi.h" 2 | -------------------------------------------------------------------------------- /Tests/AppForCheckingPureXctest/HidEventsDebugging/PrivateApi.h: -------------------------------------------------------------------------------- 1 | @import Foundation; 2 | @import UIKit; 3 | 4 | typedef struct __IOHIDEvent * IOHIDEventRef; 5 | 6 | @interface UIEvent(PrivateApi) 7 | - (IOHIDEventRef) _hidEvent; 8 | @end 9 | -------------------------------------------------------------------------------- /Tests/AppForCheckingPureXctest/ViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | class ViewController: UIViewController { 4 | override func loadView() { 5 | view = View() 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Tests/BlackBoxUiTests/BlackBoxUiTests-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "AllTestsSharedBridgingHeader.h" 2 | 3 | #import "TestGetter.h" 4 | #import "TestSuiteInfo.h" 5 | -------------------------------------------------------------------------------- /Tests/BlackBoxUiTests/Tests/Network/Player/Showcase/NetworkPlayerShowcaseTests.alwaysEmpty.json: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Tests/FakeSettingsApp/Entitlements.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.bulletinboard.settings 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Tests/FakeSettingsApp/main.swift: -------------------------------------------------------------------------------- 1 | import MixboxFakeSettingsAppMain 2 | 3 | FakeSettingsAppMain(CommandLine.argc, CommandLine.unsafeArgv) 4 | -------------------------------------------------------------------------------- /Tests/Frameworks/TestsIpc/Sources/GlobalIpc/Echo/EchoIpcMethod.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpc 2 | 3 | public final class EchoIpcMethod: IpcMethod { 4 | public typealias Arguments = T 5 | public typealias ReturnValue = T 6 | 7 | public init() { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/Frameworks/TestsIpc/Sources/GlobalIpc/ProcessInfo/ProcessInfoIpcMethod.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpc 2 | 3 | public final class ProcessInfoIpcMethod: IpcMethod { 4 | public typealias Arguments = IpcVoid 5 | public typealias ReturnValue = IpcProcessInfo 6 | 7 | public init() { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/Frameworks/TestsIpc/Sources/GlobalIpc/SetScreen/ScreenContainerType.swift: -------------------------------------------------------------------------------- 1 | public enum ScreenContainerType: String, Codable { 2 | case none 3 | case navigationController 4 | } 5 | -------------------------------------------------------------------------------- /Tests/Frameworks/TestsIpc/Sources/ViewIpc/ActionsTestsView/GetActionResultIpcMethod.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpc 2 | import MixboxFoundation 3 | 4 | public final class GetActionResultIpcMethod: IpcMethod { 5 | public typealias Arguments = IpcVoid 6 | public typealias ReturnValue = ActionsTestsViewActionResult 7 | 8 | public init() { 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Tests/Frameworks/TestsIpc/Sources/ViewIpc/CheckTestsView/ConfigureChecksTestsViewIpcMethod.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpc 2 | 3 | public final class ConfigureChecksTestsViewIpcMethod: IpcMethod { 4 | public typealias Arguments = ChecksTestsViewConfiguration 5 | public typealias ReturnValue = IpcVoid 6 | 7 | public init() { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/Frameworks/TestsIpc/Sources/ViewIpc/Generic/ResetUiIpcMethod.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpc 2 | import MixboxFoundation 3 | import MixboxIpcCommon 4 | 5 | public final class ResetUiIpcMethod: IpcMethod { 6 | public typealias Arguments = GenericArguments 7 | public typealias ReturnValue = IpcThrowingFunctionResult 8 | 9 | public init() { 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Tests/Frameworks/TestsIpc/Sources/ViewIpc/IpcTestingView/IpcTestingViewConfiguration.swift: -------------------------------------------------------------------------------- 1 | public final class IpcTestingViewConfiguration: Codable { 2 | public let views: [IpcView] 3 | 4 | public init( 5 | views: [IpcView]) 6 | { 7 | self.views = views 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/Frameworks/TestsIpc/Sources/ViewIpc/NetworkStubbingTestsView/NetworkStubbingTestsViewSetResponseIpcMethod.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpc 2 | 3 | public final class NetworkStubbingTestsViewSetResponseIpcMethod: IpcMethod { 4 | public typealias Arguments = String 5 | public typealias ReturnValue = IpcVoid 6 | 7 | public init() { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/GrayBoxUiTests/GrayBoxUiTests-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "AllTestsSharedBridgingHeader.h" 2 | 3 | #import "TestGetter.h" 4 | #import "TestSuiteInfo.h" 5 | -------------------------------------------------------------------------------- /Tests/GrayBoxUiTests/Support/TestCase/IpcRouterHolder.swift: -------------------------------------------------------------------------------- 1 | import MixboxTestsFoundation 2 | import MixboxIpc 3 | 4 | final class IpcRouterHolder: IpcRouterProvider { 5 | var ipcRouter: IpcRouter? 6 | } 7 | -------------------------------------------------------------------------------- /Tests/GrayBoxUiTests/Tests/screenshotTestsView_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/GrayBoxUiTests/Tests/screenshotTestsView_screenshot.png -------------------------------------------------------------------------------- /Tests/HostedAppLogicTests/HostedAppLogicTests.swift: -------------------------------------------------------------------------------- 1 | // This test target is empty now. It's used to test that logic tests with hosted app can work with Mixbox. 2 | // There was a problem with Xcode 9 & iOS 10 (with LD_RUNPATH_SEARCH_PATHS). 3 | // Test will be added to this target in future. 4 | import XCTest 5 | 6 | class HostedAppLogicTests: XCTestCase { 7 | } 8 | -------------------------------------------------------------------------------- /Tests/HostedAppLogicTests/Support/HostedAppLogicTests-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "AllTestsSharedBridgingHeader.h" 2 | -------------------------------------------------------------------------------- /Tests/HostedAppLogicTests/TestCase.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | class TestCase: XCTestCase { 4 | } 5 | -------------------------------------------------------------------------------- /Tests/Makefile: -------------------------------------------------------------------------------- 1 | open: 2 | bundle install --gemfile=../ci/gemfiles/Gemfile_cocoapods 3 | bundle exec --gemfile=../ci/gemfiles/Gemfile_cocoapods -- pod install 4 | open Tests.xcworkspace -------------------------------------------------------------------------------- /Tests/Scripts/warm_up_code_generation: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -ueo pipefail 4 | 5 | script_root=$(cd "$(dirname "$0")" && pwd) 6 | REPO_ROOT=$(cd "${script_root}/../.." && pwd) 7 | 8 | source "$REPO_ROOT/Tests/Scripts/mock_generation.sh" 9 | 10 | build_generator_if_needed 11 | -------------------------------------------------------------------------------- /Tests/TestedApp/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Tests/TestedApp/CustomIpc/Echo/EchoIpcMethodHandler.swift: -------------------------------------------------------------------------------- 1 | import MixboxIpc 2 | import TestsIpc 3 | 4 | final class EchoIpcMethodHandler: IpcMethodHandler { 5 | let method = EchoIpcMethod() 6 | 7 | func handle(arguments: T, completion: @escaping (T) -> ()) { 8 | completion(arguments) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Tests/TestedApp/TestedApp-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | -------------------------------------------------------------------------------- /Tests/TestedApp/Testing/SupportViews/ViewsWithClosures/README.md: -------------------------------------------------------------------------------- 1 | # ViewsWithClosures 2 | 3 | Expected to have no behavior other than setting up callbacks and defining closures 4 | 5 | -------------------------------------------------------------------------------- /Tests/TestedApp/Testing/ViewControllers/Testing/InitializableWithTestingViewControllerSettings.swift: -------------------------------------------------------------------------------- 1 | public protocol InitializableWithTestingViewControllerSettings: AnyObject { 2 | init(testingViewControllerSettings: TestingViewControllerSettings) 3 | } 4 | -------------------------------------------------------------------------------- /Tests/TestedApp/Testing/ViewControllers/Testing/ViewControllerContainerType.swift: -------------------------------------------------------------------------------- 1 | public enum ViewControllerContainerType { 2 | case navigationController 3 | case none 4 | 5 | static let `default` = ViewControllerContainerType.none 6 | } 7 | -------------------------------------------------------------------------------- /Tests/TestedApp/Testing/ViewControllers/Testing/ViewControllerContainerTypeProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol ViewControllerContainerTypeProvider { 2 | static var viewControllerContainerType: ViewControllerContainerType { get } 3 | } 4 | -------------------------------------------------------------------------------- /Tests/TestedApp/Testing/Views/Permissions/PermissionInfo/Impls/CameraPermissionInfo.swift: -------------------------------------------------------------------------------- 1 | import AVFoundation 2 | 3 | final class CameraPermissionInfo: AvCaptureDevicePermissionInfo { 4 | init() { 5 | super.init( 6 | mediaType: .video, 7 | identifier: "camera" 8 | ) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Tests/TestedApp/Testing/Views/Permissions/PermissionInfo/Impls/MicrophonePermissionInfo.swift: -------------------------------------------------------------------------------- 1 | import AVFoundation 2 | 3 | final class MicrophonePermissionInfo: AvCaptureDevicePermissionInfo { 4 | init() { 5 | super.init( 6 | mediaType: .audio, 7 | identifier: "microphone" 8 | ) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Tests/TestedApp/Testing/Views/Permissions/PermissionInfo/Support/PermissionInfo.swift: -------------------------------------------------------------------------------- 1 | protocol PermissionInfo: AnyObject { 2 | func identifier() -> String 3 | func authorizationStatus() -> String 4 | } 5 | -------------------------------------------------------------------------------- /Tests/TestedApp/Testing/Views/Scrolling/ScrollingSmokeTests/ScrollingSmokeTestsView.swift: -------------------------------------------------------------------------------- 1 | // Marker protocol 2 | public protocol ScrollingSmokeTestsView: AnyObject {} 3 | -------------------------------------------------------------------------------- /Tests/TestedApp/Utils/ApplicationNameProvider.swift: -------------------------------------------------------------------------------- 1 | public final class ApplicationNameProvider { 2 | public static let applicationName = "TestedApp" 3 | } 4 | -------------------------------------------------------------------------------- /Tests/TestedApp/Utils/RootViewControllerManager/RootViewControllerManager.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public protocol RootViewControllerManager { 4 | // Pass `nil` to reset view controller to a default view controller 5 | func set(rootViewController: UIViewController?, completion: @escaping () -> ()) 6 | } 7 | -------------------------------------------------------------------------------- /Tests/TestedApp/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "TestedApp-Swift.h" 4 | 5 | int main(int argc, char * argv[]) { 6 | @try { 7 | @autoreleasepool { 8 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 9 | } 10 | } @catch (NSException *exception) { 11 | NSLog(@"%@", exception); 12 | @throw exception; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Tests/Tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Tests/Tests.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Tests/UiTestsShared/Support/Emcee/RuntimeDump/TestGetter.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @class TestSuiteInfo; 4 | 5 | NS_ASSUME_NONNULL_BEGIN 6 | 7 | @interface TestGetter : NSObject 8 | 9 | - (NSArray *)allTests; 10 | 11 | @end 12 | 13 | NS_ASSUME_NONNULL_END 14 | -------------------------------------------------------------------------------- /Tests/UiTestsShared/Support/FileSystemMocking/TemporaryDirectory/TemporaryDirectory.swift: -------------------------------------------------------------------------------- 1 | public protocol TemporaryDirectory: AnyObject { 2 | var path: String { get } 3 | } 4 | -------------------------------------------------------------------------------- /Tests/UiTestsShared/Support/FileSystemMocking/TemporaryDirectoryPathProvider/NsTemporaryDirectoryPathProvider.swift: -------------------------------------------------------------------------------- 1 | public final class NsTemporaryDirectoryPathProvider: TemporaryDirectoryPathProvider { 2 | public init() { 3 | } 4 | 5 | public func temporaryDirectoryPath() -> String { 6 | return NSTemporaryDirectory() 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Tests/UiTestsShared/Support/FileSystemMocking/TemporaryDirectoryPathProvider/TemporaryDirectoryPathProvider.swift: -------------------------------------------------------------------------------- 1 | protocol TemporaryDirectoryPathProvider: AnyObject { 2 | func temporaryDirectoryPath() -> String 3 | } 4 | -------------------------------------------------------------------------------- /Tests/UiTestsShared/Support/PageObjects/PageObjects/HierarchyTestsViewPageObject.swift: -------------------------------------------------------------------------------- 1 | import MixboxUiTestsFoundation 2 | 3 | public final class HierarchyTestsViewPageObject: BasePageObjectWithDefaultInitializer, OpenableScreen { 4 | public let viewName = "HierarchyTestsView" 5 | } 6 | -------------------------------------------------------------------------------- /Tests/UiTestsShared/Support/PageObjects/PageObjects/IpcTestingViewPageObject.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import MixboxUiTestsFoundation 3 | 4 | public final class IpcTestingViewPageObject: 5 | BasePageObjectWithDefaultInitializer, 6 | OpenableScreen 7 | { 8 | public let viewName = "IpcTestingView" 9 | } 10 | -------------------------------------------------------------------------------- /Tests/UiTestsShared/Support/PageObjects/Support/BasePageObject+Extension.swift: -------------------------------------------------------------------------------- 1 | import MixboxUiTestsFoundation 2 | import MixboxTestsFoundation 3 | 4 | extension BasePageObject { 5 | public func byId( 6 | _ id: String) 7 | -> T 8 | { 9 | return element(id) { element in 10 | element.id == id 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Tests/UiTestsShared/Support/Reports/ReportingSystem/Domain/TestReportAttachment.swift: -------------------------------------------------------------------------------- 1 | import MixboxTestsFoundation 2 | 3 | public final class TestReportAttachment { 4 | public let attachment: Attachment 5 | 6 | public init(attachment: Attachment) { 7 | self.attachment = attachment 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/UiTestsShared/Support/Reports/ReportingSystem/Domain/TestReportStatus.swift: -------------------------------------------------------------------------------- 1 | // TODO: Rename cases and remove comments. 2 | public enum TestReportStatus { 3 | // Auto tests 4 | case failed 5 | case passed 6 | 7 | // Manual tests 8 | case manual 9 | 10 | // Infrastructure failure 11 | case error 12 | } 13 | -------------------------------------------------------------------------------- /Tests/UiTestsShared/Tests/Interactions/Actions/Specific/SetText/SetTextActionDoesntGainFocusIfItIsAlreadyGainedTests.swift: -------------------------------------------------------------------------------- 1 | // TODO: Implement this feature and write tests 2 | final class SetTextActionDoesntGainFocusIfItIsAlreadyGainedTests: BaseActionTestCase { 3 | } 4 | -------------------------------------------------------------------------------- /Tests/UiTestsShared/Tests/Interactions/Actions/Support/Specification/AnyActionSpecification.swift: -------------------------------------------------------------------------------- 1 | import MixboxUiTestsFoundation 2 | import TestsIpc 3 | 4 | protocol AnyActionSpecification: AnyObject { 5 | var elementId: String { get } 6 | var expectedResult: ActionsTestsViewActionResult { get } 7 | 8 | func performAction(screen: ActionsTestsViewPageObject) 9 | } 10 | -------------------------------------------------------------------------------- /Tests/UiTestsShared/Tests/Interactions/Checks/BasedOnBaseChecksTestCase/Base/AssertSpec.swift: -------------------------------------------------------------------------------- 1 | import MixboxUiTestsFoundation 2 | 3 | struct AssertSpecification { 4 | var element: (ChecksTestsViewPageObject) -> (ElementType) 5 | var assert: (ElementType) -> () 6 | } 7 | -------------------------------------------------------------------------------- /Tests/UnitTests/FileLineTests.swift: -------------------------------------------------------------------------------- 1 | final class FileLineTests { 2 | func test() { 3 | let t = Xctest 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /Tests/UnitTests/Mocks/Custom/ConstantAnyGenerator.swift: -------------------------------------------------------------------------------- 1 | import MixboxGenerators 2 | 3 | final class ConstantAnyGenerator: AnyGenerator { 4 | private let constant: Any 5 | 6 | init(_ constant: T) { 7 | self.constant = constant 8 | } 9 | 10 | func generate() throws -> T { 11 | return try (constant as? T).unwrapOrThrow() 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Tests/UnitTests/Mocks/Custom/ConstantRandomNumberProvider.swift: -------------------------------------------------------------------------------- 1 | import MixboxGenerators 2 | 3 | final class ConstantRandomNumberProvider: RandomNumberProvider { 4 | private let constant: UInt64 5 | 6 | init(_ constant: UInt64) { 7 | self.constant = constant 8 | } 9 | 10 | func nextRandomNumber() -> UInt64 { 11 | return constant 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Tests/UnitTests/Support/UnitTests-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "AllTestsSharedBridgingHeader.h" 2 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_Chang_PermanentMidnightintheChairofJasperJohns_large.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_Chang_PermanentMidnightintheChairofJasperJohns_large.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_Hhirst_BGE.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_Hhirst_BGE.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_Scotland_castle_wedding.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_Scotland_castle_wedding.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_Tower-Bridge-at-night--London--England_web.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_Tower-Bridge-at-night--London--England_web.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_architecture1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_architecture1.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_architecture_2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_architecture_2.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_bamarket115.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_bamarket115.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_butterflywallpaper.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_butterflywallpaper.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_damien_hirst.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_damien_hirst.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_damien_hirst_does_fashion_week.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_damien_hirst_does_fashion_week.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_damien_hirst_virgin_mother.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_damien_hirst_virgin_mother.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_damienhirst.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_damienhirst.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_dhirst_a3b9ddea.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_dhirst_a3b9ddea.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_diamondskull.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_diamondskull.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_doodle.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_doodle.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_england.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_england.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_englandpath.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_englandpath.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_jasper_johns.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_jasper_johns.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_johns_portrait_380x311.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_johns_portrait_380x311.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_latrobe.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_latrobe.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_targetjasperjohns.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_targetjasperjohns.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_uk-golf-scotland.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_uk-golf-scotland.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_wallacestevens.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/blur/blur_wallacestevens.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_Chang_PermanentMidnightintheChairofJasperJohns_large.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_Chang_PermanentMidnightintheChairofJasperJohns_large.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_Hhirst_BGE.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_Hhirst_BGE.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_Scotland_castle_wedding.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_Scotland_castle_wedding.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_Tower-Bridge-at-night--London--England_web.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_Tower-Bridge-at-night--London--England_web.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_architecture1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_architecture1.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_architecture_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_architecture_2.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_bamarket115.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_bamarket115.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_butterflywallpaper.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_butterflywallpaper.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_damien_hirst.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_damien_hirst.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_damien_hirst_does_fashion_week.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_damien_hirst_does_fashion_week.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_damien_hirst_virgin_mother.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_damien_hirst_virgin_mother.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_damienhirst.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_damienhirst.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_dhirst_a3b9ddea.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_dhirst_a3b9ddea.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_diamondskull.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_diamondskull.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_doodle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_doodle.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_england.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_england.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_englandpath.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_englandpath.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_jasper_johns.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_jasper_johns.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_johns_portrait_380x311.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_johns_portrait_380x311.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_latrobe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_latrobe.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_targetjasperjohns.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_targetjasperjohns.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_uk-golf-scotland.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_uk-golf-scotland.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_wallacestevens.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/compr/compr_wallacestevens.jpg -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_Chang_PermanentMidnightintheChairofJasperJohns_large.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_Chang_PermanentMidnightintheChairofJasperJohns_large.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_Hhirst_BGE.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_Hhirst_BGE.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_Scotland_castle_wedding.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_Scotland_castle_wedding.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_Tower-Bridge-at-night--London--England_web.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_Tower-Bridge-at-night--London--England_web.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_architecture1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_architecture1.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_architecture_2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_architecture_2.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_bamarket115.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_bamarket115.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_butterflywallpaper.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_butterflywallpaper.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_damien_hirst.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_damien_hirst.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_damien_hirst_does_fashion_week.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_damien_hirst_does_fashion_week.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_damien_hirst_virgin_mother.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_damien_hirst_virgin_mother.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_damienhirst.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_damienhirst.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_dhirst_a3b9ddea.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_dhirst_a3b9ddea.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_diamondskull.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_diamondskull.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_doodle.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_doodle.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_england.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_england.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_englandpath.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_englandpath.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_jasper_johns.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_jasper_johns.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_johns_portrait_380x311.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_johns_portrait_380x311.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_latrobe.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_latrobe.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_targetjasperjohns.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_targetjasperjohns.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_uk-golf-scotland.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_uk-golf-scotland.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_wallacestevens.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/Tests/UnitTests/Tests/MixboxCocoaImageHashing/Assets/misc/misc_wallacestevens.bmp -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxGenerator/Generator/GeneratorTests.swift: -------------------------------------------------------------------------------- 1 | import MixboxGenerators 2 | import XCTest 3 | 4 | final class GeneratorTests: TestCase { 5 | func test___generate___calls_generateFunction_passed_via_init() { 6 | let generator = Generator { 42 } 7 | XCTAssertEqual(try generator.generate(), 42) 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxGenerator/Generator/Generators/Swift/Empty/EmptyArrayGeneratorTests.swift: -------------------------------------------------------------------------------- 1 | import MixboxGenerators 2 | import XCTest 3 | 4 | final class EmptyArrayGeneratorTests: TestCase { 5 | func test___generate___generates_empty_array() { 6 | let generator = EmptyArrayGenerator() 7 | XCTAssertEqual(try generator.generate(), []) 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxGenerator/Generator/Generators/Swift/Empty/EmptyDictionaryGeneratorTests.swift: -------------------------------------------------------------------------------- 1 | import MixboxGenerators 2 | import XCTest 3 | 4 | final class EmptyDictionaryGeneratorTests: TestCase { 5 | func test___generate___generates_empty_array() { 6 | let generator = EmptyDictionaryGenerator() 7 | XCTAssertEqual(try generator.generate(), [:]) 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxGenerator/Generator/Generators/Swift/Empty/EmptyOptionalGeneratorTests.swift: -------------------------------------------------------------------------------- 1 | import MixboxGenerators 2 | import XCTest 3 | 4 | final class EmptyOptionalGeneratorTests: TestCase { 5 | func test___generate___generates_empty_optional() { 6 | let generator = EmptyOptionalGenerator() 7 | XCTAssertNil(try generator.generate()) 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxGenerator/Support/BaseGeneratorTestCase.swift: -------------------------------------------------------------------------------- 1 | import MixboxDi 2 | import MixboxBuiltinDi 3 | import MixboxStubbing 4 | import MixboxFoundation 5 | import MixboxTestsFoundation 6 | import MixboxUiTestsFoundation 7 | 8 | class BaseGeneratorTestCase: TestCase { 9 | override var reuseState: Bool { 10 | false 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxMocksRuntime/Fixtures/ForGenerics/Protocol0.swift: -------------------------------------------------------------------------------- 1 | protocol Protocol0 {} 2 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxMocksRuntime/Fixtures/ForGenerics/Protocol1.swift: -------------------------------------------------------------------------------- 1 | protocol Protocol1 {} 2 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxMocksRuntime/Fixtures/ForGenerics/Protocol2.swift: -------------------------------------------------------------------------------- 1 | protocol Protocol2 {} 2 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxMocksRuntime/Fixtures/ForGenerics/Protocol3.swift: -------------------------------------------------------------------------------- 1 | protocol Protocol3 {} 2 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxMocksRuntime/Fixtures/ForGenerics/Protocol4.swift: -------------------------------------------------------------------------------- 1 | protocol Protocol4 {} 2 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxMocksRuntime/Fixtures/MocksTestsFixtureBaseProtocolFromOtherFile.swift: -------------------------------------------------------------------------------- 1 | protocol MocksTestsFixtureBaseProtocolFromOtherFile { 2 | var _mocksTestsFixtureBaseProtocolFromOtherFileProperty: Int { get } 3 | func mocksTestsFixtureBaseProtocolFromOtherFileFunction() 4 | } 5 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxMocksRuntime/Fixtures/MocksTestsFixtureObjcProtocol.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | @objc 4 | protocol MocksTestsFixtureObjcProtocol { 5 | @objc 6 | func objcFunctionWithObjcAttribute() 7 | 8 | func objcFunctionWithoutObjcAttribute() 9 | 10 | var gettable: Int { get } 11 | 12 | var settable: Int { get set } 13 | } 14 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxMocksRuntime/Fixtures/MocksTestsFixtureSimpleProtocol.swift: -------------------------------------------------------------------------------- 1 | protocol MocksTestsFixtureSimpleProtocol { 2 | func function(int: Int) -> Int 3 | } 4 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxMocksRuntime/Models/Completion.swift: -------------------------------------------------------------------------------- 1 | public typealias Completion = () -> () 2 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxMocksRuntime/Models/GenericCompletionHolder.swift: -------------------------------------------------------------------------------- 1 | public final class GenericClosureHolder { 2 | public typealias Closure = (T) -> U 3 | } 4 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxMocksRuntime/Support/Extensions/RecordedCall+Equatable.swift: -------------------------------------------------------------------------------- 1 | import MixboxMocksRuntime 2 | 3 | extension RecordedCall: Equatable { 4 | public static func ==(lhs: RecordedCall, rhs: RecordedCall) -> Bool { 5 | return lhs.functionIdentifier == rhs.functionIdentifier && 6 | lhs.arguments == rhs.arguments 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxMocksRuntime/Support/Extensions/RecordedCallArgument+Equatable.swift: -------------------------------------------------------------------------------- 1 | import MixboxMocksRuntime 2 | 3 | extension RecordedCallArgument: Equatable { 4 | public static func ==(lhs: RecordedCallArgument, rhs: RecordedCallArgument) -> Bool { 5 | return lhs.name == rhs.name && 6 | lhs.type == rhs.type && 7 | lhs.value == rhs.value 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxMocksRuntime/Support/Extensions/RecordedCallArguments+Equatable.swift: -------------------------------------------------------------------------------- 1 | import MixboxMocksRuntime 2 | 3 | extension RecordedCallArguments: Equatable { 4 | public static func ==(lhs: RecordedCallArguments, rhs: RecordedCallArguments) -> Bool { 5 | return lhs.arguments == rhs.arguments 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxMocksRuntime/Tests/DynamicBehaviorGeneration/Integrational/DynamicBehaviorIntegrationalTestsProtocol.swift: -------------------------------------------------------------------------------- 1 | protocol DynamicBehaviorIntegrationalTestsProtocol { 2 | func intFunction() -> Int 3 | func asyncVoidFunction(completion: (Int) -> ()) 4 | func asyncNonVoidFunction(completion: (Int) -> ()) -> Int 5 | func functionWithClosure(closure: (Int) -> ()) -> Int 6 | } 7 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxReflection/ValueCodeGenerator/BaseValueCodeGeneratorTests.swift: -------------------------------------------------------------------------------- 1 | class BaseValueCodeGeneratorTests: TestCase { 2 | } 3 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxTestsFoundation/AutomaticCurrentTestCaseProvider.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import MixboxTestsFoundation 3 | 4 | class AutomaticCurrentTestCaseProviderTests: XCTestCase { 5 | func test() { 6 | 7 | XCTAssert( 8 | AutomaticCurrentTestCaseProvider().currentTestCase() === self 9 | ) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxTestsFoundation/BundleResourcePathProvider/BundleResourcePathProviderImplTests.with.lots.of.dots.json: -------------------------------------------------------------------------------- 1 | { 2 | } 3 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxTestsFoundation/BundleResourcePathProvider/BundleResourcePathProviderImplTests_with_extension.json: -------------------------------------------------------------------------------- 1 | { 2 | } 3 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxTestsFoundation/BundleResourcePathProvider/BundleResourcePathProviderImplTests_without_extension_json: -------------------------------------------------------------------------------- 1 | { 2 | } 3 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxUiTestsFoundation/AutomaticRecorderAndReplayerCreationSettingsProvider/AutomaticRecorderAndReplayerCreationSettingsProviderImplTests.empty.json: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Tests/UnitTests/Tests/MixboxUiTestsFoundation/AutomaticRecorderAndReplayerCreationSettingsProvider/AutomaticRecorderAndReplayerCreationSettingsProviderImplTests.recordedNetworkSession.json: -------------------------------------------------------------------------------- 1 | { 2 | "buckets" : [] 3 | } 4 | -------------------------------------------------------------------------------- /ci/bash/include/ci_integration/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/avito-tech/Mixbox/712eaa6222a39ea8fee1de5f1744541f75a35f66/ci/bash/include/ci_integration/__init__.py -------------------------------------------------------------------------------- /ci/bash/include/error_handling.sh: -------------------------------------------------------------------------------- 1 | # Convenient method to report errors 2 | # Example: cat foo | grep bar || fatal_error "Can not find bar in foo" 3 | fatal_error() { 4 | echo ${@+"$@"} 5 | exit 1 6 | } 7 | 8 | # Convenient method to ignore errors 9 | # Example: rm foo || ignore_error" 10 | ignore_error() { 11 | true 12 | } 13 | -------------------------------------------------------------------------------- /ci/bash/include/utils.sh: -------------------------------------------------------------------------------- 1 | # __join_array_with_separator ", " 1 2 3 ---> "1, 2, 3" 2 | join_array_with_separator() { 3 | local separator="$1" 4 | shift 5 | 6 | echo -n "$1" 7 | shift 8 | for component in "${@}"; do 9 | echo -n "$separator" 10 | echo -n "$component" 11 | done 12 | 13 | echo 14 | } 15 | -------------------------------------------------------------------------------- /ci/gemfiles/Gemfile_cocoapods: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'cocoapods', '1.15.2' 4 | gem 'cocoapods-trunk', '1.6.0' 5 | gem 'xcpretty', '0.3.0' 6 | gem 'git', '1.9.1' 7 | -------------------------------------------------------------------------------- /ci/swift/.emceeversion: -------------------------------------------------------------------------------- 1 | 59e268714064177f15ad4a45ff7c0dec6405d884 2 | -------------------------------------------------------------------------------- /ci/swift/.gitignore: -------------------------------------------------------------------------------- 1 | *.xcodeproj 2 | Package.swift 3 | .swiftpm 4 | -------------------------------------------------------------------------------- /ci/swift/MakePackage/requirements.txt: -------------------------------------------------------------------------------- 1 | jinja2>=3.0.1 -------------------------------------------------------------------------------- /ci/swift/Makefile: -------------------------------------------------------------------------------- 1 | %: 2 | ./make.sh $@ 3 | .PHONY: % -------------------------------------------------------------------------------- /ci/swift/Sources/AllTests/Tests/CiFoundation/Mocks/EnvironmentProviderMock.swift: -------------------------------------------------------------------------------- 1 | import CiFoundation 2 | 3 | final class EnvironmentProviderMock: EnvironmentProvider { 4 | let environment: [String: String] 5 | 6 | init(environment: [String: String]) { 7 | self.environment = environment 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /ci/swift/Sources/AllTests/Tests/Git/Mocks/GitTagsProviderMock.swift: -------------------------------------------------------------------------------- 1 | import Git 2 | 3 | public final class GitTagsProviderMock: GitTagsProvider { 4 | private let gitTagsStub: [GitTag] 5 | 6 | public init(gitTags: [GitTag]) { 7 | self.gitTagsStub = gitTags 8 | } 9 | 10 | public func gitTags() throws -> [GitTag] { 11 | return gitTagsStub 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ci/swift/Sources/AllTests/Tests/Git/Mocks/RepoRootProviderMock.swift: -------------------------------------------------------------------------------- 1 | import Git 2 | 3 | public final class RepoRootProviderMock: RepoRootProvider { 4 | private let repoRootPathStub: String 5 | 6 | public init(repoRootPath: String) { 7 | self.repoRootPathStub = repoRootPath 8 | } 9 | 10 | public func repoRootPath() throws -> String { 11 | return repoRootPathStub 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ci/swift/Sources/Bash/BashCommandEscaper/BashEscapedCommandMaker.swift: -------------------------------------------------------------------------------- 1 | /// Makes string from arguments that can be used as command in BASH. 2 | public protocol BashEscapedCommandMaker { 3 | func escapedCommand(arguments: [String]) -> String 4 | } 5 | -------------------------------------------------------------------------------- /ci/swift/Sources/Bash/BashExecutor/Models/BashEnvironment.swift: -------------------------------------------------------------------------------- 1 | public enum BashExecutorEnvironment { 2 | case current 3 | case custom([String: String]) 4 | } 5 | -------------------------------------------------------------------------------- /ci/swift/Sources/Bash/ProcessExecutor/Impls/FoundationProcessExecutor/Support/LazyPipeProcessOutput.swift: -------------------------------------------------------------------------------- 1 | import CiFoundation 2 | import Foundation 3 | 4 | final class LazyProcessOutput: ProcessOutput { 5 | private let pipe: Pipe 6 | 7 | init(pipe: Pipe) { 8 | self.pipe = pipe 9 | } 10 | 11 | var data: Data { 12 | return pipe.getDataSynchronously() 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /ci/swift/Sources/Bash/ProcessExecutor/Models/ProcessOutput/PlainProcessOutput.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public final class PlainProcessOutput: ProcessOutput { 4 | public let data: Data 5 | 6 | public init(data: Data) { 7 | self.data = data 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /ci/swift/Sources/BuildDsl/Build/Build.swift: -------------------------------------------------------------------------------- 1 | public typealias Build = BuildTaskFactory & BuildDiFactory 2 | -------------------------------------------------------------------------------- /ci/swift/Sources/BuildDsl/Build/BuildDiFactory.swift: -------------------------------------------------------------------------------- 1 | import DI 2 | 3 | public protocol BuildDiFactory { 4 | func di() -> DependencyInjection 5 | } 6 | -------------------------------------------------------------------------------- /ci/swift/Sources/BuildDsl/Build/BuildTaskFactory.swift: -------------------------------------------------------------------------------- 1 | import Tasks 2 | import DI 3 | 4 | public protocol BuildTaskFactory { 5 | func task(di: DependencyResolver) throws -> LocalTask 6 | } 7 | -------------------------------------------------------------------------------- /ci/swift/Sources/BuildDsl/Build/Teamcity/BaseTeamcityBuild.swift: -------------------------------------------------------------------------------- 1 | import DI 2 | import TeamcityDi 3 | 4 | open class BaseTeamcityBuild: BuildDiFactory { 5 | public init() { 6 | } 7 | 8 | open func di() -> DependencyInjection { 9 | return DiMaker.makeDi() 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ci/swift/Sources/BuildDsl/Build/Teamcity/TeamcityBuild.swift: -------------------------------------------------------------------------------- 1 | public typealias TeamcityBuild = BaseTeamcityBuild & BuildTaskFactory 2 | -------------------------------------------------------------------------------- /ci/swift/Sources/BuildDsl/Build/Travis/BaseTravisBuild.swift: -------------------------------------------------------------------------------- 1 | import DI 2 | import TravisDi 3 | 4 | open class BaseTravisBuild: BuildDiFactory { 5 | public init() { 6 | } 7 | 8 | open func di() -> DependencyInjection { 9 | return DiMaker.makeDi() 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ci/swift/Sources/BuildDsl/Build/Travis/TravisBuild.swift: -------------------------------------------------------------------------------- 1 | public typealias TravisBuild = BaseTravisBuild & BuildTaskFactory 2 | -------------------------------------------------------------------------------- /ci/swift/Sources/Bundler/BundlerBashCommandGenerator/BundlerBashCommandGenerator.swift: -------------------------------------------------------------------------------- 1 | public protocol BundlerBashCommandGenerator { 2 | func bashCommandRunningCommandBundler( 3 | arguments: [String]) 4 | throws 5 | -> String 6 | } 7 | -------------------------------------------------------------------------------- /ci/swift/Sources/Bundler/GemfileLocationProvider/GemfileLocationProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol GemfileLocationProvider { 2 | func gemfileLocation() throws -> String 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/CiFoundation/Box/Box.swift: -------------------------------------------------------------------------------- 1 | public class Box { 2 | public let value: T 3 | 4 | public init(value: T) { 5 | self.value = value 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /ci/swift/Sources/CiFoundation/Box/MutableBox.swift: -------------------------------------------------------------------------------- 1 | public class MutableBox { 2 | public var value: T 3 | 4 | public init(value: T) { 5 | self.value = value 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /ci/swift/Sources/CiFoundation/CiLogger/CiLogger.swift: -------------------------------------------------------------------------------- 1 | public protocol CiLogger { 2 | func logBlock( 3 | name: String, 4 | body: () throws -> () 5 | ) rethrows 6 | } 7 | -------------------------------------------------------------------------------- /ci/swift/Sources/CiFoundation/CiLogger/StdoutCiLogger.swift: -------------------------------------------------------------------------------- 1 | public final class StdoutCiLogger: CiLogger { 2 | public init() {} 3 | 4 | public func logBlock( 5 | name: String, 6 | body: () throws -> () 7 | ) rethrows { 8 | try body() 9 | } 10 | 11 | public func log( 12 | string: @autoclosure () -> String 13 | ) { 14 | print(string()) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ci/swift/Sources/CiFoundation/Environment/EnvironmentProvider.swift: -------------------------------------------------------------------------------- 1 | // NOTE: Copypasted from Mixbox Tests. 2 | public protocol EnvironmentProvider { 3 | var environment: [String: String] { get } 4 | } 5 | -------------------------------------------------------------------------------- /ci/swift/Sources/CiFoundation/JSON/DecodableFromJsonFileLoader/DecodableFromJsonFileLoader.swift: -------------------------------------------------------------------------------- 1 | public protocol DecodableFromJsonFileLoader { 2 | func load(path: String) throws -> T 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/CiFoundation/JSON/JsonFileFromEncodableGenerator/JsonFileFromEncodableGenerator.swift: -------------------------------------------------------------------------------- 1 | public protocol JsonFileFromEncodableGenerator { 2 | func generateJsonFile(encodable: T) throws -> String 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/CiFoundation/Optional+ToArray.swift: -------------------------------------------------------------------------------- 1 | extension Optional { 2 | public func toArray(transform: (Wrapped) throws -> [T]) rethrows -> [T] { 3 | return try map(transform) ?? [] 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /ci/swift/Sources/CiFoundation/TemporaryFileProvider/TemporaryFileProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol TemporaryFileProvider { 2 | func temporaryFilePath() -> String 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/CiFoundation/TemporaryFileProvider/TemporaryFileProviderImpl.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public final class TemporaryFileProviderImpl: TemporaryFileProvider { 4 | public init() { 5 | } 6 | 7 | public func temporaryFilePath() -> String { 8 | return (NSTemporaryDirectory() as NSString) 9 | .appendingPathComponent(UUID().uuidString) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ci/swift/Sources/Cocoapods/Cache/Clean/CocoapodCacheClean.swift: -------------------------------------------------------------------------------- 1 | public protocol CocoapodCacheClean { 2 | func clean( 3 | target: CocoapodCacheCleanTarget) 4 | throws 5 | } 6 | -------------------------------------------------------------------------------- /ci/swift/Sources/Cocoapods/Cache/Clean/CocoapodCacheCleanTarget.swift: -------------------------------------------------------------------------------- 1 | public enum CocoapodCacheCleanTarget { 2 | case podName(String) 3 | case all 4 | } 5 | -------------------------------------------------------------------------------- /ci/swift/Sources/Cocoapods/Install/CocoapodsInstall.swift: -------------------------------------------------------------------------------- 1 | public protocol CocoapodsInstall { 2 | func install( 3 | projectDirectory: String) 4 | throws 5 | } 6 | -------------------------------------------------------------------------------- /ci/swift/Sources/Cocoapods/Repo/Add/CocoapodsRepoAdd.swift: -------------------------------------------------------------------------------- 1 | public protocol CocoapodsRepoAdd { 2 | func add( 3 | repoName: String, 4 | url: String) 5 | throws 6 | } 7 | -------------------------------------------------------------------------------- /ci/swift/Sources/Cocoapods/Search/CocoapodsSearch/CocoapodsSearch.swift: -------------------------------------------------------------------------------- 1 | public protocol CocoapodsSearch { 2 | func search( 3 | name: String) 4 | throws 5 | -> CocoapodsSearchResult 6 | } 7 | -------------------------------------------------------------------------------- /ci/swift/Sources/Cocoapods/Search/CocoapodsSearchOutputParser/CocoapodsSearchOutputParser.swift: -------------------------------------------------------------------------------- 1 | public protocol CocoapodsSearchOutputParser { 2 | func parse(output: String) throws -> CocoapodsSearchResult 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Cocoapods/Support/CocoapodsCommandExecutor/patched_pod.rb: -------------------------------------------------------------------------------- 1 | # Load code: 2 | 3 | require 'cocoapods' 4 | 5 | # Apply patch to loaded code: 6 | 7 | module Pod 8 | class Validator 9 | def validate 10 | true 11 | end 12 | 13 | def validated? 14 | true 15 | end 16 | end 17 | end 18 | 19 | # Execute original command: 20 | 21 | load %x(which pod).strip 22 | -------------------------------------------------------------------------------- /ci/swift/Sources/Cocoapods/Support/CocoapodsTrunkTokenProvider/CocoapodsTrunkTokenProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol CocoapodsTrunkTokenProvider { 2 | func cocoapodsTrunkToken() throws -> String 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Cocoapods/Trunk/AddOwner/CocoapodsTrunkAddOwner.swift: -------------------------------------------------------------------------------- 1 | public protocol CocoapodsTrunkAddOwner { 2 | func addOwner( 3 | podName: String, 4 | ownerEmail: String) 5 | throws 6 | } 7 | -------------------------------------------------------------------------------- /ci/swift/Sources/Cocoapods/Trunk/Info/CocoapodsTrunkInfo/CocoapodsTrunkInfo.swift: -------------------------------------------------------------------------------- 1 | public protocol CocoapodsTrunkInfo { 2 | func info( 3 | podName: String) 4 | throws 5 | -> CocoapodsTrunkInfoResult 6 | } 7 | -------------------------------------------------------------------------------- /ci/swift/Sources/Cocoapods/Trunk/Info/CocoapodsTrunkInfoOutputParser/CocoapodsTrunkInfoOutputParser.swift: -------------------------------------------------------------------------------- 1 | public protocol CocoapodsTrunkInfoOutputParser { 2 | func parse(output: String) throws -> CocoapodsTrunkInfoResult 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Cocoapods/Trunk/RemoveOwner/CocoapodsTrunkRemoveOwner.swift: -------------------------------------------------------------------------------- 1 | public protocol CocoapodsTrunkRemoveOwner { 2 | func removeOwner( 3 | podName: String, 4 | ownerEmail: String) 5 | throws 6 | } 7 | -------------------------------------------------------------------------------- /ci/swift/Sources/Destinations/MixboxTestDestination/MixboxTestDestinationProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol MixboxTestDestinationProvider { 2 | func mixboxTestDestination() throws -> MixboxTestDestination 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Destinations/MixboxTestDestinationConfigurationsProvider/MixboxTestDestinationConfigurationsProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol MixboxTestDestinationConfigurationsProvider { 2 | func mixboxTestDestinationConfigurations() throws -> [MixboxTestDestinationConfiguration] 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Emcee/Emcee/Emcee.swift: -------------------------------------------------------------------------------- 1 | public protocol Emcee: 2 | EmceeDumpCommand, 3 | EmceeRunTestsOnRemoteQueueCommand 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /ci/swift/Sources/Emcee/EmceeExecutable/EmceeExecutable.swift: -------------------------------------------------------------------------------- 1 | public protocol EmceeExecutable { 2 | func execute(command: String, arguments: [String]) throws 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Emcee/EmceeInstaller/EmceeInstaller.swift: -------------------------------------------------------------------------------- 1 | public typealias EmceeExecutablePath = String 2 | 3 | public protocol EmceeInstaller { 4 | func installEmcee() throws -> EmceeExecutablePath 5 | } 6 | -------------------------------------------------------------------------------- /ci/swift/Sources/Emcee/EmceeProvider/EmceeProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol EmceeProvider { 2 | func emcee() throws -> Emcee 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Emcee/EmceeVersionProvider/EmceeVersionProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol EmceeVersionProvider { 2 | func emceeVersion() throws -> String 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Emcee/RemoteCacheConfigProvider/RemoteCacheConfigProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol RemoteCacheConfigProvider { 2 | func remoteCacheConfigJsonFilePath() throws -> String 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Emcee/RuntimeDump/RuntimeDump.swift: -------------------------------------------------------------------------------- 1 | import TestDiscovery 2 | 3 | public final class RuntimeDump { 4 | public let discoveredTestEntries: [DiscoveredTestEntry] 5 | 6 | public init(discoveredTestEntries: [DiscoveredTestEntry]) { 7 | self.discoveredTestEntries = discoveredTestEntries 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /ci/swift/Sources/Emcee/SimulatorOperationTimeoutsProvider/SimulatorOperationTimeoutsProvider.swift: -------------------------------------------------------------------------------- 1 | import SimulatorPoolModels 2 | 3 | public protocol SimulatorOperationTimeoutsProvider { 4 | func simulatorOperationTimeouts() -> SimulatorOperationTimeouts 5 | } 6 | -------------------------------------------------------------------------------- /ci/swift/Sources/Emcee/SimulatorSettingsProvider/SimulatorSettingsProvider.swift: -------------------------------------------------------------------------------- 1 | import SimulatorPoolModels 2 | 3 | public protocol SimulatorSettingsProvider { 4 | func simulatorSettings() throws -> SimulatorSettings 5 | } 6 | -------------------------------------------------------------------------------- /ci/swift/Sources/Emcee/TestArgsFile/TestArgsFileGenerator/TestArgsFileGenerator.swift: -------------------------------------------------------------------------------- 1 | import TestArgFile 2 | 3 | public protocol TestArgFileGenerator { 4 | func testArgFile( 5 | arguments: TestArgFileGeneratorArguments) 6 | throws 7 | -> TestArgFile 8 | } 9 | -------------------------------------------------------------------------------- /ci/swift/Sources/Emcee/TestArgsFile/TestArgsFileJsonGenerator/TestArgsFileJsonGenerator.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public protocol TestArgFileJsonGenerator { 4 | func testArgFile( 5 | arguments: TestArgFileGeneratorArguments) 6 | throws 7 | -> String 8 | } 9 | -------------------------------------------------------------------------------- /ci/swift/Sources/Emcee/ToolchainConfigurationProvider/DeveloperDirProvider.swift: -------------------------------------------------------------------------------- 1 | import DeveloperDirLocatorModels 2 | 3 | public protocol DeveloperDirProvider { 4 | func developerDir() throws -> DeveloperDir 5 | } 6 | -------------------------------------------------------------------------------- /ci/swift/Sources/Emcee/Uploader/EmceeFileUploader.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public protocol EmceeFileUploader { 4 | func upload(path: String) throws -> URL 5 | } 6 | -------------------------------------------------------------------------------- /ci/swift/Sources/Git/GitCommandExecutor/GitCommandExecutor.swift: -------------------------------------------------------------------------------- 1 | public protocol GitCommandExecutor { 2 | func execute( 3 | arguments: [String]) 4 | throws 5 | -> String 6 | } 7 | -------------------------------------------------------------------------------- /ci/swift/Sources/Git/GitRevListProvider/GitRevListProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol GitRevListProvider { 2 | func revList( 3 | branch: String) 4 | throws 5 | -> [String] 6 | } 7 | -------------------------------------------------------------------------------- /ci/swift/Sources/Git/GitTagsProvider/GitTagsProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol GitTagsProvider { 2 | func gitTags() throws -> [GitTag] 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Git/GitTagsProvider/Models/GitTag.swift: -------------------------------------------------------------------------------- 1 | public final class GitTag { 2 | public let name: String 3 | public let sha: String 4 | 5 | public init(name: String, sha: String) { 6 | self.name = name 7 | self.sha = sha 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /ci/swift/Sources/Git/HeadCommitHashProvider/HeadCommitHashProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol HeadCommitHashProvider { 2 | func headCommitHash() 3 | throws 4 | -> String 5 | } 6 | -------------------------------------------------------------------------------- /ci/swift/Sources/Git/RepoRootProvider/RepoRootProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol RepoRootProvider { 2 | func repoRootPath() throws -> String 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Releases/ListOfPodspecsToPushProvider/JsonSubspec.swift: -------------------------------------------------------------------------------- 1 | public class JsonSubspec: Codable { 2 | public let name: String 3 | public let dependencies: [String: [String]]? 4 | 5 | public init( 6 | name: String, 7 | dependencies: [String : [String]]?) 8 | { 9 | self.name = name 10 | self.dependencies = dependencies 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ci/swift/Sources/Releases/MixboxPodspecsPusher/MixboxPodspecsPusher.swift: -------------------------------------------------------------------------------- 1 | public protocol MixboxPodspecsPusher { 2 | func pushMixboxPodspecs() throws 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Releases/MixboxPodspecsValidator/MixboxPodspecsValidator.swift: -------------------------------------------------------------------------------- 1 | public protocol MixboxPodspecsValidator { 2 | func validateMixboxPodspecs() throws 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Releases/MixboxReleaseSettingsProvider/MixboxReleaseSettingsProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol MixboxReleaseSettingsProvider { 2 | var majorVersion: Int { get } 3 | var minorVersion: Int { get } 4 | var releaseBranchName: String { get } // e.g. "master" 5 | var releaseRemoteName: String { get } // e.g. "origin" 6 | var releaseBranchFullName: String { get } // e.g. "origin/master" 7 | } 8 | -------------------------------------------------------------------------------- /ci/swift/Sources/Releases/Models/VersionTag.swift: -------------------------------------------------------------------------------- 1 | public final class VersionTag { 2 | public init( 3 | version: Version, 4 | revision: String) 5 | { 6 | self.version = version 7 | self.revision = revision 8 | } 9 | 10 | public let version: Version 11 | public let revision: String 12 | } 13 | -------------------------------------------------------------------------------- /ci/swift/Sources/Releases/PodspecsPatcher/PodspecsPatcher.swift: -------------------------------------------------------------------------------- 1 | public protocol PodspecsPatcher { 2 | func setMixboxPodspecsSource( 3 | _ source: String) 4 | throws 5 | 6 | func resetMixboxPodspecsSource() throws 7 | } 8 | -------------------------------------------------------------------------------- /ci/swift/Sources/Releases/Tags/AfterReleaseTagsSetter/AfterReleaseTagsSetter.swift: -------------------------------------------------------------------------------- 1 | public protocol AfterReleaseTagsSetter { 2 | func setUpTagsAfterRelease() throws 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Releases/Tags/AfterReleaseTagsSetterForExistingReleaseProvider/AfterReleaseTagsSetterForExistingReleaseProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol AfterReleaseTagsSetterForExistingReleaseProvider { 2 | func afterReleaseTagsSetterForExistingRelease( 3 | version: Version, 4 | remote: String) 5 | -> AfterReleaseTagsSetter 6 | } 7 | -------------------------------------------------------------------------------- /ci/swift/Sources/Releases/Tags/BeforeReleaseTagsSetter/BeforeReleaseTagsSetter.swift: -------------------------------------------------------------------------------- 1 | public protocol BeforeReleaseTagsSetter { 2 | func setUpTagsBeforeRelease( 3 | version: Version, 4 | commitHash: String, 5 | remote: String) 6 | throws 7 | -> AfterReleaseTagsSetter 8 | } 9 | -------------------------------------------------------------------------------- /ci/swift/Sources/Releases/Versioning/CurrentReleaseVersionProvider/CurrentReleaseVersionProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol CurrentReleaseVersionProvider { 2 | func currentReleaseVersion( 3 | commitHashToRelease: String, 4 | releaseBranchName: String) 5 | throws 6 | -> Version 7 | } 8 | -------------------------------------------------------------------------------- /ci/swift/Sources/Releases/Versioning/NextReleaseVersionProvider/NextReleaseVersionProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol NextReleaseVersionProvider { 2 | func nextReleaseVersion( 3 | majorVersion: Int, 4 | minorVersion: Int, 5 | commitHashToRelease: String, 6 | releaseBranchName: String) 7 | throws 8 | -> Version 9 | } 10 | -------------------------------------------------------------------------------- /ci/swift/Sources/Releases/Versioning/RepositoryVersioningInfoProvider/RepositoryVersioningInfoProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol RepositoryVersioningInfoProvider { 2 | func repositoryVersioningInfo( 3 | commitHashToRelease: String, 4 | releaseBranchName: String) 5 | throws 6 | -> RepositoryVersioningInfo 7 | } 8 | -------------------------------------------------------------------------------- /ci/swift/Sources/RemoteFiles/FileDownloader/FileDownloader.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public protocol FileDownloader { 4 | // Returns path to existing downloaded file 5 | func download(url: URL) throws -> String 6 | } 7 | -------------------------------------------------------------------------------- /ci/swift/Sources/RemoteFiles/FileUploader/FileUploader.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public protocol FileUploader { 4 | func upload( 5 | file: String, 6 | remoteName: String) 7 | throws 8 | -> URL 9 | } 10 | -------------------------------------------------------------------------------- /ci/swift/Sources/Simctl/Facade/Simctl.swift: -------------------------------------------------------------------------------- 1 | public protocol Simctl: 2 | SimctlList, 3 | SimctlBoot, 4 | SimctlShutdown, 5 | SimctlCreate 6 | { 7 | } 8 | -------------------------------------------------------------------------------- /ci/swift/Sources/Simctl/Models/DeviceTypeIdentifier.swift: -------------------------------------------------------------------------------- 1 | public typealias DeviceTypeIdentifier = String 2 | -------------------------------------------------------------------------------- /ci/swift/Sources/Simctl/Models/RuntimeIdentifier.swift: -------------------------------------------------------------------------------- 1 | // Xcode 10.1: "iOS 11.4" (runtime.name) 2 | // Xcode 10.2.1: "com.apple.CoreSimulator.SimRuntime.iOS-11-4" (runtime.identifier) 3 | public typealias RuntimeIdentifier = String 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Simctl/SimctlExecutor/SimctlExecutor.swift: -------------------------------------------------------------------------------- 1 | import Bash 2 | 3 | public protocol SimctlExecutor { 4 | func execute(arguments: [String]) throws -> ProcessResult 5 | } 6 | -------------------------------------------------------------------------------- /ci/swift/Sources/StaticChecksTask/ConditionalCompilationClausesChecker/ConditionalCompilationClausesChecker.swift: -------------------------------------------------------------------------------- 1 | public protocol ConditionalCompilationClausesChecker { 2 | func checkConditionalCompilationClauses() throws 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/StaticChecksTask/ConditionalCompilationClausesChecker/FrameworkInfo/FrameworkInfosProvider/FrameworkInfosProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol FrameworkInfosProvider { 2 | func frameworkInfos() -> [FrameworkInfo] 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/StaticChecksTask/ConditionalCompilationClausesChecker/FrameworkInfo/FrameworksDirectoryProvider/FrameworksDirectoryProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol FrameworksDirectoryProvider { 2 | func frameworksDirectory() throws -> String 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/StaticChecksTask/ConditionalCompilationClausesChecker/IfClauseInfo/IfClauseInfoByPathProvider/IfClauseInfoByPathProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol IfClauseInfoByPathProvider { 2 | func ifClauseInfo( 3 | frameworkName: String, 4 | filePath: String 5 | ) -> IfClauseInfo? 6 | } 7 | -------------------------------------------------------------------------------- /ci/swift/Sources/StaticChecksTask/ConditionalCompilationClausesChecker/MissingConditionalCompilationClause/FilesEnumerator/FilesEnumerator.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public protocol FilesEnumerator { 4 | func enumerateFiles( 5 | directory: String, 6 | handler: (_ enumerator: FileManager.DirectoryEnumerator, _ url: String) throws -> ()) 7 | throws 8 | } 9 | -------------------------------------------------------------------------------- /ci/swift/Sources/StaticChecksTask/ConditionalCompilationClausesChecker/MissingConditionalCompilationClause/MissingConditionalCompilationClausesProvider/MissingConditionalCompilationClausesProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol MissingConditionalCompilationClausesProvider { 2 | func missingConditionalCompilationClauses( 3 | ) throws -> Set 4 | } 5 | -------------------------------------------------------------------------------- /ci/swift/Sources/StaticChecksTask/ConditionalCompilationClausesChecker/MissingConditionalCompilationClause/MixboxFrameworksEnumerator/MixboxFrameworksEnumerator.swift: -------------------------------------------------------------------------------- 1 | public protocol MixboxFrameworksEnumerator { 2 | func enumerateFrameworks( 3 | handler: (_ frameworkDirectory: String, _ frameworkName: String) throws -> ()) 4 | throws 5 | } 6 | -------------------------------------------------------------------------------- /ci/swift/Sources/StaticChecksTask/ConditionalCompilationClausesChecker/MissingConditionalCompilationClausesAutocorrector/MissingConditionalCompilationClausesAutocorrector.swift: -------------------------------------------------------------------------------- 1 | public protocol MissingConditionalCompilationClausesAutocorrector { 2 | func autocorrect( 3 | missingConditionalCompilationClauses: Set 4 | ) throws 5 | } 6 | -------------------------------------------------------------------------------- /ci/swift/Sources/StaticChecksTask/Linter/SwiftLint/SwiftLint.swift: -------------------------------------------------------------------------------- 1 | public protocol SwiftLint { 2 | func lint() throws 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/StaticChecksTask/Linter/SwiftLintViolation/SwiftLintViolationType.swift: -------------------------------------------------------------------------------- 1 | public enum SwiftLintViolationType: String { 2 | case warning 3 | case error 4 | } 5 | -------------------------------------------------------------------------------- /ci/swift/Sources/StaticChecksTask/Linter/SwiftLintViolationsParser/SwiftLintViolationsParser.swift: -------------------------------------------------------------------------------- 1 | public protocol SwiftLintViolationsParser { 2 | func parseViolations(stdout: String) throws -> [SwiftLintViolation] 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Tasks/LocalTask.swift: -------------------------------------------------------------------------------- 1 | // Task that can be executed on current machine 2 | public protocol LocalTask { 3 | var name: String { get } 4 | 5 | func execute() throws 6 | } 7 | 8 | extension LocalTask { 9 | public var name: String { 10 | String(describing: type(of: self)) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ci/swift/Sources/Tasks/LocalTaskExecutor.swift: -------------------------------------------------------------------------------- 1 | // Takes full responsibility of executing CI task. Can exit process. 2 | public protocol LocalTaskExecutor { 3 | func execute(localTask: LocalTask) -> Never 4 | } 5 | -------------------------------------------------------------------------------- /ci/swift/Sources/TestRunning/IosBuildArtifactsProvider/IosBuildArtifactsProviderFactory.swift: -------------------------------------------------------------------------------- 1 | import Xcodebuild 2 | 3 | public protocol IosBuildArtifactsProviderFactory { 4 | func iosBuildArtifactsProvider( 5 | xcodebuildResult: XcodebuildResult 6 | ) -> IosBuildArtifactsProvider 7 | } 8 | -------------------------------------------------------------------------------- /ci/swift/Sources/TestRunning/TestRunner/TestRunner.swift: -------------------------------------------------------------------------------- 1 | import Destinations 2 | import BuildArtifactsApple 3 | 4 | public protocol TestRunner { 5 | func runTests( 6 | iosBuildArtifacts: AppleBuildArtifacts, 7 | mixboxTestDestinationConfigurations: [MixboxTestDestinationConfiguration], 8 | additionalEnvironment: [String: String] 9 | ) throws 10 | } 11 | -------------------------------------------------------------------------------- /ci/swift/Sources/Xcodebuild/DerivedDataPathProvider/DerivedDataPathProvider.swift: -------------------------------------------------------------------------------- 1 | public protocol DerivedDataPathProvider { 2 | func derivedDataPath() -> String 3 | } 4 | -------------------------------------------------------------------------------- /ci/swift/Sources/Xcodebuild/MacosProjectBuilder/MacosProjectBuilder.swift: -------------------------------------------------------------------------------- 1 | public protocol MacosProjectBuilder { 2 | func build( 3 | projectDirectoryFromRepoRoot: String, 4 | action: XcodebuildAction, 5 | scheme: String, 6 | workspaceName: String) 7 | throws 8 | -> XcodebuildResult 9 | } 10 | -------------------------------------------------------------------------------- /ci/swift/Sources/Xcodebuild/Xcodebuild/XcodebuildAction.swift: -------------------------------------------------------------------------------- 1 | public enum XcodebuildAction: String { 2 | case test = "test" 3 | case build = "build" 4 | case buildForTesting = "build-for-testing" 5 | } 6 | -------------------------------------------------------------------------------- /cocoapods/mixbox_podspecs_source.rb: -------------------------------------------------------------------------------- 1 | $mixbox_podspecs_source = 'https://github.com/avito-tech/Mixbox.git' -------------------------------------------------------------------------------- /cocoapods/software_versions.rb: -------------------------------------------------------------------------------- 1 | $mixbox_ios_version = '13.0' 2 | $mixbox_osx_version = '12.0' 3 | $mixbox_swift_version = '5.0' --------------------------------------------------------------------------------