├── .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'
--------------------------------------------------------------------------------