diff --git a/.github/scripts/test_lib.sh b/.github/scripts/test_lib.sh new file mode 100644 index 0000000..839b76d --- /dev/null +++ b/.github/scripts/test_lib.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +set -eo pipefail + +xcodebuild -workspace Example/iONess.xcworkspace \ + -scheme iONess-Example \ + -destination platform=iOS\ Simulator,OS=14.3,name=iPhone\ 11 \ + clean test | xcpretty diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml new file mode 100644 index 0000000..96a3184 --- /dev/null +++ b/.github/workflows/testing.yml @@ -0,0 +1,19 @@ +name: test + +on: + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + test: + name: Testing Pod + runs-on: macOS-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v1 + - name: Force XCode 12.3 + run: sudo xcode-select -switch /Applications/Xcode_12.3.app + - name: Testing Pod Library + run: bash ./.github/scripts/test_lib.sh diff --git a/Example/Podfile b/Example/Podfile index 6bb6c48..391c39c 100644 --- a/Example/Podfile +++ b/Example/Podfile @@ -6,7 +6,7 @@ target 'iONess_Example' do target 'iONess_Tests' do inherit! :search_paths - pod 'Quick', '~> 1.2.0' - pod 'Nimble', '~> 7.0' + pod 'Quick', '~> 3.0.0' + pod 'Nimble', '~> 9.0.0' end end diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 8d0b995..7d67803 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,12 +1,12 @@ PODS: - - iONess (0.1.0) - - Nimble (7.3.4) - - Quick (1.2.0) + - iONess (1.2.2) + - Nimble (9.0.0) + - Quick (3.0.0) DEPENDENCIES: - iONess (from `../`) - - Nimble (~> 7.0) - - Quick (~> 1.2.0) + - Nimble (~> 9.0.0) + - Quick (~> 3.0.0) SPEC REPOS: trunk: @@ -18,10 +18,10 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - iONess: ec0f857e3c20fbc10e6b5a805bc9f9c4ac7a0e0a - Nimble: 051e3d8912d40138fa5591c78594f95fb172af37 - Quick: 58d203b1c5e27fff7229c4c1ae445ad7069a7a08 + iONess: cc5ae19bd12d5c50bc6128746f3448474aa109cc + Nimble: 3b4ec3fd40f1dc178058e0981107721c615643d8 + Quick: 6d9559f40647bc4d510103842ef2fdd882d753e2 -PODFILE CHECKSUM: 3b5c23e7f0799d3808b35d845bac59a57d70e2a5 +PODFILE CHECKSUM: 8144533663cf8b140228454000f3f11dde5ede15 -COCOAPODS: 1.10.0.rc.1 +COCOAPODS: 1.10.0 diff --git a/Example/Pods/Local Podspecs/iONess.podspec.json b/Example/Pods/Local Podspecs/iONess.podspec.json index e88af11..5497d9e 100644 --- a/Example/Pods/Local Podspecs/iONess.podspec.json +++ b/Example/Pods/Local Podspecs/iONess.podspec.json @@ -1,22 +1,24 @@ { "name": "iONess", - "version": "0.1.0", - "summary": "A short description of iONess.", - "description": "TODO: Add long description of the pod here.", - "homepage": "https://github.com/nayanda/iONess", + "version": "1.2.2", + "summary": "iOS Network Session", + "description": "iONess is HTTP Request Helper for iOS platform used by HCI iOS App", + "homepage": "https://github.com/oss-homecredit-id/iONess", "license": { "type": "MIT", "file": "LICENSE" }, "authors": { - "nayanda": "nayanda.haberty@homecredit.co.id" + "nayanda": "nayanda1@outlook.com" }, "source": { - "git": "https://github.com/nayanda/iONess.git", - "tag": "0.1.0" + "git": "https://github.com/oss-homecredit-id/iONess.git", + "tag": "1.2.2" }, "platforms": { "ios": "8.0" }, - "source_files": "iONess/Classes/**/*" + "source_files": "iONess/Classes/**/*", + "swift_versions": "5.0", + "swift_version": "5.0" } diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 8d0b995..7d67803 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,12 +1,12 @@ PODS: - - iONess (0.1.0) - - Nimble (7.3.4) - - Quick (1.2.0) + - iONess (1.2.2) + - Nimble (9.0.0) + - Quick (3.0.0) DEPENDENCIES: - iONess (from `../`) - - Nimble (~> 7.0) - - Quick (~> 1.2.0) + - Nimble (~> 9.0.0) + - Quick (~> 3.0.0) SPEC REPOS: trunk: @@ -18,10 +18,10 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: - iONess: ec0f857e3c20fbc10e6b5a805bc9f9c4ac7a0e0a - Nimble: 051e3d8912d40138fa5591c78594f95fb172af37 - Quick: 58d203b1c5e27fff7229c4c1ae445ad7069a7a08 + iONess: cc5ae19bd12d5c50bc6128746f3448474aa109cc + Nimble: 3b4ec3fd40f1dc178058e0981107721c615643d8 + Quick: 6d9559f40647bc4d510103842ef2fdd882d753e2 -PODFILE CHECKSUM: 3b5c23e7f0799d3808b35d845bac59a57d70e2a5 +PODFILE CHECKSUM: 8144533663cf8b140228454000f3f11dde5ede15 -COCOAPODS: 1.10.0.rc.1 +COCOAPODS: 1.10.0 diff --git a/Example/Pods/Nimble/Carthage/Checkouts/CwlCatchException/Sources/CwlCatchException/CwlCatchException.swift b/Example/Pods/Nimble/Carthage/Checkouts/CwlCatchException/Sources/CwlCatchException/CwlCatchException.swift index 3e89e23..2cb9b29 100644 --- a/Example/Pods/Nimble/Carthage/Checkouts/CwlCatchException/Sources/CwlCatchException/CwlCatchException.swift +++ b/Example/Pods/Nimble/Carthage/Checkouts/CwlCatchException/Sources/CwlCatchException/CwlCatchException.swift @@ -3,7 +3,7 @@ // CwlAssertionTesting // // Created by Matt Gallagher on 2016/01/10. -// Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved. +// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -24,12 +24,12 @@ import Foundation import CwlCatchExceptionSupport #endif -private func catchReturnTypeConverter(_ type: T.Type, block: () -> Void) -> T? { +private func catchReturnTypeConverter(_ type: T.Type, block: @escaping () -> Void) -> T? { return catchExceptionOfKind(type, block) as? T } extension NSException { - public static func catchException(in block: () -> Void) -> Self? { + public static func catchException(in block: @escaping () -> Void) -> Self? { return catchReturnTypeConverter(self, block: block) } } diff --git a/Example/Pods/Nimble/Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/CwlCatchException.m b/Example/Pods/Nimble/Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/CwlCatchException.m index 8cf414f..ff35465 100644 --- a/Example/Pods/Nimble/Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/CwlCatchException.m +++ b/Example/Pods/Nimble/Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/CwlCatchException.m @@ -3,7 +3,7 @@ // CwlAssertionTesting // // Created by Matt Gallagher on 2016/01/10. -// Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved. +// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -20,10 +20,7 @@ #import "CwlCatchException.h" -#if !SWIFT_PACKAGE && NON_SWIFT_PACKAGE -__attribute__((visibility("hidden"))) -#endif -NSException* catchExceptionOfKind(Class __nonnull type, __attribute__((noescape)) void (^ __nonnull inBlock)(void)) { +NSException* __nullable catchExceptionOfKind(Class __nonnull type, void (^ __nonnull inBlock)(void)) { @try { inBlock(); } @catch (NSException *exception) { diff --git a/Example/Pods/Nimble/Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/include/CwlCatchException.h b/Example/Pods/Nimble/Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/include/CwlCatchException.h index 0c8dd87..eb42378 100644 --- a/Example/Pods/Nimble/Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/include/CwlCatchException.h +++ b/Example/Pods/Nimble/Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/include/CwlCatchException.h @@ -3,7 +3,7 @@ // CwlCatchException // // Created by Matt Gallagher on 2016/01/10. -// Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved. +// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -20,13 +20,4 @@ #import -//! Project version number for CwlCatchException. -FOUNDATION_EXPORT double CwlCatchExceptionVersionNumber; - -//! Project version string for CwlCatchException. -FOUNDATION_EXPORT const unsigned char CwlCatchExceptionVersionString[]; - -#if !SWIFT_PACKAGE && NON_SWIFT_PACKAGE -__attribute__((visibility("hidden"))) -#endif -NSException* __nullable catchExceptionOfKind(Class __nonnull type, __attribute__((noescape)) void (^ __nonnull inBlock)(void)); +NSException* __nullable catchExceptionOfKind(Class __nonnull type, void (^ __nonnull inBlock)(void)); diff --git a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/CwlMachBadInstructionHandler.m b/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/CwlMachBadInstructionHandler.m index 8183196..2ab0ea5 100644 --- a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/CwlMachBadInstructionHandler.m +++ b/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/CwlMachBadInstructionHandler.m @@ -3,7 +3,7 @@ // CwlPreconditionTesting // // Created by Matt Gallagher on 2016/01/10. -// Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved. +// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -18,33 +18,36 @@ // IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // -#if defined(__x86_64__) +#ifdef __APPLE__ +#import "TargetConditionals.h" +#if TARGET_OS_OSX || TARGET_OS_IOS - #import "mach_excServer.h" - #import "CwlMachBadInstructionHandler.h" - - @protocol BadInstructionReply - +(NSNumber *)receiveReply:(NSValue *)value; - @end - - /// A basic function that receives callbacks from mach_exc_server and relays them to the Swift implemented BadInstructionException.catch_mach_exception_raise_state. - kern_return_t catch_mach_exception_raise_state(mach_port_t exception_port, exception_type_t exception, const mach_exception_data_t code, mach_msg_type_number_t codeCnt, int *flavor, const thread_state_t old_state, mach_msg_type_number_t old_stateCnt, thread_state_t new_state, mach_msg_type_number_t *new_stateCnt) { - bad_instruction_exception_reply_t reply = { exception_port, exception, code, codeCnt, flavor, old_state, old_stateCnt, new_state, new_stateCnt }; - Class badInstructionClass = NSClassFromString(@"BadInstructionException"); - NSValue *value = [NSValue valueWithBytes: &reply objCType: @encode(bad_instruction_exception_reply_t)]; - return [[badInstructionClass performSelector: @selector(receiveReply:) withObject: value] intValue]; - } - - // The mach port should be configured so that this function is never used. - kern_return_t catch_mach_exception_raise(mach_port_t exception_port, mach_port_t thread, mach_port_t task, exception_type_t exception, mach_exception_data_t code, mach_msg_type_number_t codeCnt) { - assert(false); - return KERN_FAILURE; - } - - // The mach port should be configured so that this function is never used. - kern_return_t catch_mach_exception_raise_state_identity(mach_port_t exception_port, mach_port_t thread, mach_port_t task, exception_type_t exception, mach_exception_data_t code, mach_msg_type_number_t codeCnt, int *flavor, thread_state_t old_state, mach_msg_type_number_t old_stateCnt, thread_state_t new_state, mach_msg_type_number_t *new_stateCnt) { - assert(false); - return KERN_FAILURE; - } +#import "mach_excServer.h" +#import "CwlMachBadInstructionHandler.h" + +@protocol BadInstructionReply ++(NSNumber *)receiveReply:(NSValue *)value; +@end + +/// A basic function that receives callbacks from mach_exc_server and relays them to the Swift implemented BadInstructionException.catch_mach_exception_raise_state. +kern_return_t catch_mach_exception_raise_state(mach_port_t exception_port, exception_type_t exception, const mach_exception_data_t code, mach_msg_type_number_t codeCnt, int *flavor, const thread_state_t old_state, mach_msg_type_number_t old_stateCnt, thread_state_t new_state, mach_msg_type_number_t *new_stateCnt) { + bad_instruction_exception_reply_t reply = { exception_port, exception, code, codeCnt, flavor, old_state, old_stateCnt, new_state, new_stateCnt }; + Class badInstructionClass = NSClassFromString(@"BadInstructionException"); + NSValue *value = [NSValue valueWithBytes: &reply objCType: @encode(bad_instruction_exception_reply_t)]; + return [[badInstructionClass performSelector: @selector(receiveReply:) withObject: value] intValue]; +} + +// The mach port should be configured so that this function is never used. +kern_return_t catch_mach_exception_raise(mach_port_t exception_port, mach_port_t thread, mach_port_t task, exception_type_t exception, mach_exception_data_t code, mach_msg_type_number_t codeCnt) { + assert(false); + return KERN_FAILURE; +} + +// The mach port should be configured so that this function is never used. +kern_return_t catch_mach_exception_raise_state_identity(mach_port_t exception_port, mach_port_t thread, mach_port_t task, exception_type_t exception, mach_exception_data_t code, mach_msg_type_number_t codeCnt, int *flavor, thread_state_t old_state, mach_msg_type_number_t old_stateCnt, thread_state_t new_state, mach_msg_type_number_t *new_stateCnt) { + assert(false); + return KERN_FAILURE; +} -#endif +#endif /* TARGET_OS_OSX || TARGET_OS_IOS */ +#endif /* __APPLE__ */ diff --git a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/include/CwlMachBadInstructionHandler.h b/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/include/CwlMachBadInstructionHandler.h index aef59c2..3fbd5a4 100644 --- a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/include/CwlMachBadInstructionHandler.h +++ b/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/include/CwlMachBadInstructionHandler.h @@ -3,7 +3,7 @@ // CwlPreconditionTesting // // Created by Matt Gallagher on 2016/01/10. -// Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved. +// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -19,8 +19,14 @@ // #import + +#if TARGET_OS_OSX || TARGET_OS_IOS + #import +extern bool _swift_disableExclusivityChecking; +extern bool _swift_reportFatalErrorsToDebugger; + NS_ASSUME_NONNULL_BEGIN extern boolean_t mach_exc_server(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP); @@ -68,3 +74,5 @@ typedef struct } bad_instruction_exception_reply_t; NS_ASSUME_NONNULL_END + +#endif diff --git a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.c b/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.c index 733c564..ccd8f84 100644 --- a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.c +++ b/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.c @@ -5,13 +5,12 @@ * OPTIONS: */ -#if defined(__x86_64__) - /* Module mach_exc */ #define __MIG_check__Request__mach_exc_subsystem__ 1 -#include "mach_excServer.h" +#import "mach_excServer.h" +#if TARGET_OS_OSX || TARGET_OS_IOS #ifndef mig_internal #define mig_internal static __inline__ @@ -534,4 +533,4 @@ mig_external mig_routine_t mach_exc_server_routine return catch_mach_exc_subsystem.routine[msgh_id].stub_routine; } -#endif +#endif /* TARGET_OS_OSX || TARGET_OS_IOS */ diff --git a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.h b/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.h index 52e53ae..1f03d66 100644 --- a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.h +++ b/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.h @@ -1,9 +1,14 @@ +#ifdef __APPLE__ +#import "TargetConditionals.h" +#if TARGET_OS_OSX || TARGET_OS_IOS + #ifndef _mach_exc_server_ #define _mach_exc_server_ /* Module mach_exc */ #include + #include #include #include @@ -319,3 +324,6 @@ __AfterMigServerHeader #endif /* __AfterMigServerHeader */ #endif /* _mach_exc_server_ */ + +#endif /* TARGET_OS_OSX || TARGET_OS_IOS */ +#endif /* __APPLE__ */ diff --git a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlBadInstructionException.swift b/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlBadInstructionException.swift index 91e5d4d..90ee022 100644 --- a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlBadInstructionException.swift +++ b/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlBadInstructionException.swift @@ -3,7 +3,7 @@ // CwlPreconditionTesting // // Created by Matt Gallagher on 2016/01/10. -// Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved. +// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -18,6 +18,8 @@ // IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // +#if (os(macOS) || os(iOS)) && arch(x86_64) + import Foundation #if SWIFT_PACKAGE @@ -44,46 +46,44 @@ public class BadInstructionException: NSException { /// An Objective-C callable function, invoked from the `mach_exc_server` callback function `catch_mach_exception_raise_state` to push the `raiseBadInstructionException` function onto the stack. @objc(receiveReply:) public class func receiveReply(_ value: NSValue) -> NSNumber { - #if arch(x86_64) - var reply = bad_instruction_exception_reply_t(exception_port: 0, exception: 0, code: nil, codeCnt: 0, flavor: nil, old_state: nil, old_stateCnt: 0, new_state: nil, new_stateCnt: nil) - withUnsafeMutablePointer(to: &reply) { value.getValue(UnsafeMutableRawPointer($0)) } - - let old_state: UnsafePointer = reply.old_state! - let old_stateCnt: mach_msg_type_number_t = reply.old_stateCnt - let new_state: thread_state_t = reply.new_state! - let new_stateCnt: UnsafeMutablePointer = reply.new_stateCnt! - - // Make sure we've been given enough memory - if old_stateCnt != x86_THREAD_STATE64_COUNT || new_stateCnt.pointee < x86_THREAD_STATE64_COUNT { - return NSNumber(value: KERN_INVALID_ARGUMENT) - } - - // Read the old thread state - var state = old_state.withMemoryRebound(to: x86_thread_state64_t.self, capacity: 1) { return $0.pointee } - - // 1. Decrement the stack pointer - state.__rsp -= __uint64_t(MemoryLayout.size) - - // 2. Save the old Instruction Pointer to the stack. - if let pointer = UnsafeMutablePointer<__uint64_t>(bitPattern: UInt(state.__rsp)) { - pointer.pointee = state.__rip - } else { - return NSNumber(value: KERN_INVALID_ARGUMENT) - } - - // 3. Set the Instruction Pointer to the new function's address - var f: @convention(c) () -> Void = raiseBadInstructionException - withUnsafePointer(to: &f) { - state.__rip = $0.withMemoryRebound(to: __uint64_t.self, capacity: 1) { return $0.pointee } - } - - // Write the new thread state - new_state.withMemoryRebound(to: x86_thread_state64_t.self, capacity: 1) { $0.pointee = state } - new_stateCnt.pointee = x86_THREAD_STATE64_COUNT - - return NSNumber(value: KERN_SUCCESS) - #else - fatalError("Unavailable for this CPU architecture") - #endif + var reply = bad_instruction_exception_reply_t(exception_port: 0, exception: 0, code: nil, codeCnt: 0, flavor: nil, old_state: nil, old_stateCnt: 0, new_state: nil, new_stateCnt: nil) + withUnsafeMutablePointer(to: &reply) { value.getValue(UnsafeMutableRawPointer($0)) } + + let old_state: UnsafePointer = reply.old_state! + let old_stateCnt: mach_msg_type_number_t = reply.old_stateCnt + let new_state: thread_state_t = reply.new_state! + let new_stateCnt: UnsafeMutablePointer = reply.new_stateCnt! + + // Make sure we've been given enough memory + if old_stateCnt != x86_THREAD_STATE64_COUNT || new_stateCnt.pointee < x86_THREAD_STATE64_COUNT { + return NSNumber(value: KERN_INVALID_ARGUMENT) + } + + // Read the old thread state + var state = old_state.withMemoryRebound(to: x86_thread_state64_t.self, capacity: 1) { return $0.pointee } + + // 1. Decrement the stack pointer + state.__rsp -= __uint64_t(MemoryLayout.size) + + // 2. Save the old Instruction Pointer to the stack. + if let pointer = UnsafeMutablePointer<__uint64_t>(bitPattern: UInt(state.__rsp)) { + pointer.pointee = state.__rip + } else { + return NSNumber(value: KERN_INVALID_ARGUMENT) + } + + // 3. Set the Instruction Pointer to the new function's address + var f: @convention(c) () -> Void = raiseBadInstructionException + withUnsafePointer(to: &f) { + state.__rip = $0.withMemoryRebound(to: __uint64_t.self, capacity: 1) { return $0.pointee } + } + + // Write the new thread state + new_state.withMemoryRebound(to: x86_thread_state64_t.self, capacity: 1) { $0.pointee = state } + new_stateCnt.pointee = x86_THREAD_STATE64_COUNT + + return NSNumber(value: KERN_SUCCESS) } } + +#endif diff --git a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlCatchBadInstruction.swift b/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlCatchBadInstruction.swift index f96ec63..521b2a1 100644 --- a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlCatchBadInstruction.swift +++ b/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlCatchBadInstruction.swift @@ -3,7 +3,7 @@ // CwlPreconditionTesting // // Created by Matt Gallagher on 2016/01/10. -// Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved. +// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -18,180 +18,192 @@ // IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // +#if (os(macOS) || os(iOS)) && arch(x86_64) + import Foundation +import Swift #if SWIFT_PACKAGE import CwlMachBadInstructionHandler #endif -#if arch(x86_64) - - private enum PthreadError: Error { case code(Int32) } - private enum MachExcServer: Error { case code(kern_return_t) } - - /// A quick function for converting Mach error results into Swift errors - private func kernCheck(_ f: () -> Int32) throws { - let r = f() - guard r == KERN_SUCCESS else { - throw NSError(domain: NSMachErrorDomain, code: Int(r), userInfo: nil) - } +private enum PthreadError: Error { case code(Int32) } +private enum MachExcServer: Error { case code(kern_return_t) } + +/// A quick function for converting Mach error results into Swift errors +private func kernCheck(_ f: () -> Int32) throws { + let r = f() + guard r == KERN_SUCCESS else { + throw NSError(domain: NSMachErrorDomain, code: Int(r), userInfo: nil) } - - extension request_mach_exception_raise_t { - mutating func withMsgHeaderPointer(in block: (UnsafeMutablePointer) -> R) -> R { - return withUnsafeMutablePointer(to: &self) { p -> R in - return p.withMemoryRebound(to: mach_msg_header_t.self, capacity: 1) { ptr -> R in - return block(ptr) - } +} + +extension request_mach_exception_raise_t { + mutating func withMsgHeaderPointer(in block: (UnsafeMutablePointer) -> R) -> R { + return withUnsafeMutablePointer(to: &self) { p -> R in + return p.withMemoryRebound(to: mach_msg_header_t.self, capacity: 1) { ptr -> R in + return block(ptr) } } } - - extension reply_mach_exception_raise_state_t { - mutating func withMsgHeaderPointer(in block: (UnsafeMutablePointer) -> R) -> R { - return withUnsafeMutablePointer(to: &self) { p -> R in - return p.withMemoryRebound(to: mach_msg_header_t.self, capacity: 1) { ptr -> R in - return block(ptr) - } +} + +extension reply_mach_exception_raise_state_t { + mutating func withMsgHeaderPointer(in block: (UnsafeMutablePointer) -> R) -> R { + return withUnsafeMutablePointer(to: &self) { p -> R in + return p.withMemoryRebound(to: mach_msg_header_t.self, capacity: 1) { ptr -> R in + return block(ptr) } } } +} + +/// A structure used to store context associated with the Mach message port +private struct MachContext { + var masks = execTypesCountTuple() + var count: mach_msg_type_number_t = 0 + var ports = execTypesCountTuple() + var behaviors = execTypesCountTuple() + var flavors = execTypesCountTuple() + var currentExceptionPort: mach_port_t = 0 + var handlerThread: pthread_t? = nil - /// A structure used to store context associated with the Mach message port - private struct MachContext { - var masks = execTypesCountTuple() - var count: mach_msg_type_number_t = 0 - var ports = execTypesCountTuple() - var behaviors = execTypesCountTuple() - var flavors = execTypesCountTuple() - var currentExceptionPort: mach_port_t = 0 - var handlerThread: pthread_t? = nil - - static func internalMutablePointers(_ m: UnsafeMutablePointer>, _ c: UnsafeMutablePointer, _ p: UnsafeMutablePointer>, _ b: UnsafeMutablePointer>, _ f: UnsafeMutablePointer>, _ block: (UnsafeMutablePointer, UnsafeMutablePointer, UnsafeMutablePointer, UnsafeMutablePointer, UnsafeMutablePointer) -> R) -> R { - return m.withMemoryRebound(to: exception_mask_t.self, capacity: 1) { masksPtr in - return c.withMemoryRebound(to: mach_msg_type_number_t.self, capacity: 1) { countPtr in - return p.withMemoryRebound(to: mach_port_t.self, capacity: 1) { portsPtr in - return b.withMemoryRebound(to: exception_behavior_t.self, capacity: 1) { behaviorsPtr in - return f.withMemoryRebound(to: thread_state_flavor_t.self, capacity: 1) { flavorsPtr in - return block(masksPtr, countPtr, portsPtr, behaviorsPtr, flavorsPtr) - } + static func internalMutablePointers(_ m: UnsafeMutablePointer>, _ c: UnsafeMutablePointer, _ p: UnsafeMutablePointer>, _ b: UnsafeMutablePointer>, _ f: UnsafeMutablePointer>, _ block: (UnsafeMutablePointer, UnsafeMutablePointer, UnsafeMutablePointer, UnsafeMutablePointer, UnsafeMutablePointer) -> R) -> R { + return m.withMemoryRebound(to: exception_mask_t.self, capacity: 1) { masksPtr in + return c.withMemoryRebound(to: mach_msg_type_number_t.self, capacity: 1) { countPtr in + return p.withMemoryRebound(to: mach_port_t.self, capacity: 1) { portsPtr in + return b.withMemoryRebound(to: exception_behavior_t.self, capacity: 1) { behaviorsPtr in + return f.withMemoryRebound(to: thread_state_flavor_t.self, capacity: 1) { flavorsPtr in + return block(masksPtr, countPtr, portsPtr, behaviorsPtr, flavorsPtr) } } } } } - - mutating func withUnsafeMutablePointers(in block: @escaping (UnsafeMutablePointer, UnsafeMutablePointer, UnsafeMutablePointer, UnsafeMutablePointer, UnsafeMutablePointer) -> R) -> R { - return MachContext.internalMutablePointers(&masks, &count, &ports, &behaviors, &flavors, block) - } } - /// A function for receiving mach messages and parsing the first with mach_exc_server (and if any others are received, throwing them away). - private func machMessageHandler(_ arg: UnsafeMutableRawPointer) -> UnsafeMutableRawPointer? { - let context = arg.assumingMemoryBound(to: MachContext.self).pointee - var request = request_mach_exception_raise_t() - var reply = reply_mach_exception_raise_state_t() + mutating func withUnsafeMutablePointers(in block: @escaping (UnsafeMutablePointer, UnsafeMutablePointer, UnsafeMutablePointer, UnsafeMutablePointer, UnsafeMutablePointer) -> R) -> R { + return MachContext.internalMutablePointers(&masks, &count, &ports, &behaviors, &flavors, block) + } +} + +/// A function for receiving mach messages and parsing the first with mach_exc_server (and if any others are received, throwing them away). +private func machMessageHandler(_ arg: UnsafeMutableRawPointer) -> UnsafeMutableRawPointer? { + let context = arg.assumingMemoryBound(to: MachContext.self).pointee + var request = request_mach_exception_raise_t() + var reply = reply_mach_exception_raise_state_t() + + var handledfirstException = false + repeat { do { + // Request the next mach message from the port + request.Head.msgh_local_port = context.currentExceptionPort + request.Head.msgh_size = UInt32(MemoryLayout.size) + let requestSize = request.Head.msgh_size + try kernCheck { request.withMsgHeaderPointer { requestPtr in + mach_msg(requestPtr, MACH_RCV_MSG | MACH_RCV_INTERRUPT, 0, requestSize, context.currentExceptionPort, 0, UInt32(MACH_PORT_NULL)) + } } - var handledfirstException = false - repeat { do { - // Request the next mach message from the port - request.Head.msgh_local_port = context.currentExceptionPort - request.Head.msgh_size = UInt32(MemoryLayout.size) - let requestSize = request.Head.msgh_size - try kernCheck { request.withMsgHeaderPointer { requestPtr in - mach_msg(requestPtr, MACH_RCV_MSG | MACH_RCV_INTERRUPT, 0, requestSize, context.currentExceptionPort, 0, UInt32(MACH_PORT_NULL)) - } } - - // Prepare the reply structure - reply.Head.msgh_bits = MACH_MSGH_BITS(MACH_MSGH_BITS_REMOTE(request.Head.msgh_bits), 0) - reply.Head.msgh_local_port = UInt32(MACH_PORT_NULL) - reply.Head.msgh_remote_port = request.Head.msgh_remote_port - reply.Head.msgh_size = UInt32(MemoryLayout.size) - reply.NDR = NDR_record - - if !handledfirstException { - // Use the MiG generated server to invoke our handler for the request and fill in the rest of the reply structure - guard request.withMsgHeaderPointer(in: { requestPtr in reply.withMsgHeaderPointer { replyPtr in - mach_exc_server(requestPtr, replyPtr) - } }) != 0 else { throw MachExcServer.code(reply.RetCode) } - - handledfirstException = true - } else { - // If multiple fatal errors occur, don't handle subsquent errors (let the program crash) - reply.RetCode = KERN_FAILURE - } + // Prepare the reply structure + reply.Head.msgh_bits = MACH_MSGH_BITS(MACH_MSGH_BITS_REMOTE(request.Head.msgh_bits), 0) + reply.Head.msgh_local_port = UInt32(MACH_PORT_NULL) + reply.Head.msgh_remote_port = request.Head.msgh_remote_port + reply.Head.msgh_size = UInt32(MemoryLayout.size) + reply.NDR = NDR_record + + if !handledfirstException { + // Use the MiG generated server to invoke our handler for the request and fill in the rest of the reply structure + guard request.withMsgHeaderPointer(in: { requestPtr in reply.withMsgHeaderPointer { replyPtr in + mach_exc_server(requestPtr, replyPtr) + } }) != 0 else { throw MachExcServer.code(reply.RetCode) } - // Send the reply - let replySize = reply.Head.msgh_size - try kernCheck { reply.withMsgHeaderPointer { replyPtr in - mach_msg(replyPtr, MACH_SEND_MSG, replySize, 0, UInt32(MACH_PORT_NULL), 0, UInt32(MACH_PORT_NULL)) - } } - } catch let error as NSError where (error.domain == NSMachErrorDomain && (error.code == Int(MACH_RCV_PORT_CHANGED) || error.code == Int(MACH_RCV_INVALID_NAME))) { - // Port was already closed before we started or closed while we were listening. - // This means the controlling thread shut down. - return nil - } catch { - // Should never be reached but this is testing code, don't try to recover, just abort - fatalError("Mach message error: \(error)") - } } while true + handledfirstException = true + } else { + // If multiple fatal errors occur, don't handle subsquent errors (let the program crash) + reply.RetCode = KERN_FAILURE + } + + // Send the reply + let replySize = reply.Head.msgh_size + try kernCheck { reply.withMsgHeaderPointer { replyPtr in + mach_msg(replyPtr, MACH_SEND_MSG, replySize, 0, UInt32(MACH_PORT_NULL), 0, UInt32(MACH_PORT_NULL)) + } } + } catch let error as NSError where (error.domain == NSMachErrorDomain && (error.code == Int(MACH_RCV_PORT_CHANGED) || error.code == Int(MACH_RCV_INVALID_NAME))) { + // Port was already closed before we started or closed while we were listening. + // This means the controlling thread shut down. + return nil + } catch { + // Should never be reached but this is testing code, don't try to recover, just abort + fatalError("Mach message error: \(error)") + } } while true +} + +/// Run the provided block. If a mach "BAD_INSTRUCTION" exception is raised, catch it and return a BadInstructionException (which captures stack information about the throw site, if desired). Otherwise return nil. +/// NOTE: This function is only intended for use in test harnesses – use in a distributed build is almost certainly a bad choice. If a "BAD_INSTRUCTION" exception is raised, the block will be exited before completion via Objective-C exception. The risks associated with an Objective-C exception apply here: most Swift/Objective-C functions are *not* exception-safe. Memory may be leaked and the program will not necessarily be left in a safe state. +/// - parameter block: a function without parameters that will be run +/// - returns: if an EXC_BAD_INSTRUCTION is raised during the execution of `block` then a BadInstructionException will be returned, otherwise `nil`. +public func catchBadInstruction(in block: @escaping () -> Void) -> BadInstructionException? { + // Suppress Swift runtime's direct triggering of the debugger and exclusivity checking which crashes when we throw past it + let previousExclusivity = _swift_disableExclusivityChecking + let previousReporting = _swift_reportFatalErrorsToDebugger + _swift_disableExclusivityChecking = true + _swift_reportFatalErrorsToDebugger = false + defer { + _swift_reportFatalErrorsToDebugger = previousReporting + _swift_disableExclusivityChecking = previousExclusivity } - /// Run the provided block. If a mach "BAD_INSTRUCTION" exception is raised, catch it and return a BadInstructionException (which captures stack information about the throw site, if desired). Otherwise return nil. - /// NOTE: This function is only intended for use in test harnesses – use in a distributed build is almost certainly a bad choice. If a "BAD_INSTRUCTION" exception is raised, the block will be exited before completion via Objective-C exception. The risks associated with an Objective-C exception apply here: most Swift/Objective-C functions are *not* exception-safe. Memory may be leaked and the program will not necessarily be left in a safe state. - /// - parameter block: a function without parameters that will be run - /// - returns: if an EXC_BAD_INSTRUCTION is raised during the execution of `block` then a BadInstructionException will be returned, otherwise `nil`. - public func catchBadInstruction(in block: () -> Void) -> BadInstructionException? { - var context = MachContext() - var result: BadInstructionException? = nil - do { - var handlerThread: pthread_t? = nil - defer { - // 8. Wait for the thread to terminate *if* we actually made it to the creation point - // The mach port should be destroyed *before* calling pthread_join to avoid a deadlock. - if handlerThread != nil { - pthread_join(handlerThread!, nil) - } - } - - try kernCheck { - // 1. Create the mach port - mach_port_allocate(mach_task_self_, MACH_PORT_RIGHT_RECEIVE, &context.currentExceptionPort) - } - defer { - // 7. Cleanup the mach port - mach_port_destroy(mach_task_self_, context.currentExceptionPort) - } - - try kernCheck { - // 2. Configure the mach port - mach_port_insert_right(mach_task_self_, context.currentExceptionPort, context.currentExceptionPort, MACH_MSG_TYPE_MAKE_SEND) + var context = MachContext() + var result: BadInstructionException? = nil + do { + var handlerThread: pthread_t? = nil + defer { + // 8. Wait for the thread to terminate *if* we actually made it to the creation point + // The mach port should be destroyed *before* calling pthread_join to avoid a deadlock. + if handlerThread != nil { + pthread_join(handlerThread!, nil) } + } + + try kernCheck { + // 1. Create the mach port + mach_port_allocate(mach_task_self_, MACH_PORT_RIGHT_RECEIVE, &context.currentExceptionPort) + } + defer { + // 7. Cleanup the mach port + mach_port_destroy(mach_task_self_, context.currentExceptionPort) + } + + try kernCheck { + // 2. Configure the mach port + mach_port_insert_right(mach_task_self_, context.currentExceptionPort, context.currentExceptionPort, MACH_MSG_TYPE_MAKE_SEND) + } + + let currentExceptionPtr = context.currentExceptionPort + try kernCheck { context.withUnsafeMutablePointers { masksPtr, countPtr, portsPtr, behaviorsPtr, flavorsPtr in + // 3. Apply the mach port as the handler for this thread + thread_swap_exception_ports(mach_thread_self(), EXC_MASK_BAD_INSTRUCTION, currentExceptionPtr, Int32(bitPattern: UInt32(EXCEPTION_STATE) | MACH_EXCEPTION_CODES), x86_THREAD_STATE64, masksPtr, countPtr, portsPtr, behaviorsPtr, flavorsPtr) + } } + + defer { context.withUnsafeMutablePointers { masksPtr, countPtr, portsPtr, behaviorsPtr, flavorsPtr in + // 6. Unapply the mach port + _ = thread_swap_exception_ports(mach_thread_self(), EXC_MASK_BAD_INSTRUCTION, 0, EXCEPTION_DEFAULT, THREAD_STATE_NONE, masksPtr, countPtr, portsPtr, behaviorsPtr, flavorsPtr) + } } + + try withUnsafeMutablePointer(to: &context) { c throws in + // 4. Create the thread + let e = pthread_create(&handlerThread, nil, machMessageHandler, c) + guard e == 0 else { throw PthreadError.code(e) } - let currentExceptionPtr = context.currentExceptionPort - try kernCheck { context.withUnsafeMutablePointers { masksPtr, countPtr, portsPtr, behaviorsPtr, flavorsPtr in - // 3. Apply the mach port as the handler for this thread - thread_swap_exception_ports(mach_thread_self(), EXC_MASK_BAD_INSTRUCTION, currentExceptionPtr, Int32(bitPattern: UInt32(EXCEPTION_STATE) | MACH_EXCEPTION_CODES), x86_THREAD_STATE64, masksPtr, countPtr, portsPtr, behaviorsPtr, flavorsPtr) - } } - - defer { context.withUnsafeMutablePointers { masksPtr, countPtr, portsPtr, behaviorsPtr, flavorsPtr in - // 6. Unapply the mach port - _ = thread_swap_exception_ports(mach_thread_self(), EXC_MASK_BAD_INSTRUCTION, 0, EXCEPTION_DEFAULT, THREAD_STATE_NONE, masksPtr, countPtr, portsPtr, behaviorsPtr, flavorsPtr) - } } - - try withUnsafeMutablePointer(to: &context) { c throws in - // 4. Create the thread - let e = pthread_create(&handlerThread, nil, machMessageHandler, c) - guard e == 0 else { throw PthreadError.code(e) } - - // 5. Run the block - result = BadInstructionException.catchException(in: block) - } - } catch { - // Should never be reached but this is testing code, don't try to recover, just abort - fatalError("Mach port error: \(error)") + // 5. Run the block + result = BadInstructionException.catchException(in: block) } - return result + } catch { + // Should never be reached but this is testing code, don't try to recover, just abort + fatalError("Mach port error: \(error)") } + + return result +} #endif diff --git a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlDarwinDefinitions.swift b/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlDarwinDefinitions.swift index 8d99d5e..f22ed1f 100644 --- a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlDarwinDefinitions.swift +++ b/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlDarwinDefinitions.swift @@ -3,7 +3,7 @@ // CwlPreconditionTesting // // Created by Matt Gallagher on 2016/01/10. -// Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved. +// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above @@ -18,38 +18,38 @@ // IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // +#if (os(macOS) || os(iOS)) && arch(x86_64) + import Darwin -#if arch(x86_64) - - // From /usr/include/mach/message.h - // #define MACH_MSG_TYPE_MAKE_SEND 20 /* Must hold receive right */ - // #define MACH_MSGH_BITS_REMOTE(bits) \ - // ((bits) & MACH_MSGH_BITS_REMOTE_MASK) - // #define MACH_MSGH_BITS(remote, local) /* legacy */ \ - // ((remote) | ((local) << 8)) - public let MACH_MSG_TYPE_MAKE_SEND: UInt32 = 20 - public func MACH_MSGH_BITS_REMOTE(_ bits: UInt32) -> UInt32 { return bits & UInt32(MACH_MSGH_BITS_REMOTE_MASK) } - public func MACH_MSGH_BITS(_ remote: UInt32, _ local: UInt32) -> UInt32 { return ((remote) | ((local) << 8)) } - - // From /usr/include/mach/exception_types.h - // #define EXC_BAD_INSTRUCTION 2 /* Instruction failed */ - // #define EXC_MASK_BAD_INSTRUCTION (1 << EXC_BAD_INSTRUCTION) - public let EXC_BAD_INSTRUCTION: UInt32 = 2 - public let EXC_MASK_BAD_INSTRUCTION: UInt32 = 1 << EXC_BAD_INSTRUCTION - - // From /usr/include/mach/i386/thread_status.h - // #define x86_THREAD_STATE64_COUNT ((mach_msg_type_number_t) \ - // ( sizeof (x86_thread_state64_t) / sizeof (int) )) - public let x86_THREAD_STATE64_COUNT = UInt32(MemoryLayout.size / MemoryLayout.size) - - public let EXC_TYPES_COUNT = 14 - public struct execTypesCountTuple { - // From /usr/include/mach/i386/exception.h - // #define EXC_TYPES_COUNT 14 /* incl. illegal exception 0 */ - public var value: (T, T, T, T, T, T, T, T, T, T, T, T, T, T) = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - public init() { - } +// From /usr/include/mach/message.h +// #define MACH_MSG_TYPE_MAKE_SEND 20 /* Must hold receive right */ +// #define MACH_MSGH_BITS_REMOTE(bits) \ +// ((bits) & MACH_MSGH_BITS_REMOTE_MASK) +// #define MACH_MSGH_BITS(remote, local) /* legacy */ \ +// ((remote) | ((local) << 8)) +public let MACH_MSG_TYPE_MAKE_SEND: UInt32 = 20 +public func MACH_MSGH_BITS_REMOTE(_ bits: UInt32) -> UInt32 { return bits & UInt32(MACH_MSGH_BITS_REMOTE_MASK) } +public func MACH_MSGH_BITS(_ remote: UInt32, _ local: UInt32) -> UInt32 { return ((remote) | ((local) << 8)) } + +// From /usr/include/mach/exception_types.h +// #define EXC_BAD_INSTRUCTION 2 /* Instruction failed */ +// #define EXC_MASK_BAD_INSTRUCTION (1 << EXC_BAD_INSTRUCTION) +public let EXC_BAD_INSTRUCTION: UInt32 = 2 +public let EXC_MASK_BAD_INSTRUCTION: UInt32 = 1 << EXC_BAD_INSTRUCTION + +// From /usr/include/mach/i386/thread_status.h +// #define x86_THREAD_STATE64_COUNT ((mach_msg_type_number_t) \ +// ( sizeof (x86_thread_state64_t) / sizeof (int) )) +public let x86_THREAD_STATE64_COUNT = UInt32(MemoryLayout.size / MemoryLayout.size) + +public let EXC_TYPES_COUNT = 14 +public struct execTypesCountTuple { + // From /usr/include/mach/i386/exception.h + // #define EXC_TYPES_COUNT 14 /* incl. illegal exception 0 */ + public var value: (T, T, T, T, T, T, T, T, T, T, T, T, T, T) = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + public init() { } +} #endif diff --git a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/Mach/CwlPreconditionTesting.h b/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/Mach/CwlPreconditionTesting.h deleted file mode 100644 index 7c50da1..0000000 --- a/Example/Pods/Nimble/Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/Mach/CwlPreconditionTesting.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// CwlPreconditionTesting.h -// CwlPreconditionTesting -// -// Created by Matt Gallagher on 2016/01/10. -// Copyright © 2016 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -#import - -extern bool _swift_reportFatalErrorsToDebugger; - -//! Project version number for CwlUtils. -FOUNDATION_EXPORT double CwlPreconditionTestingVersionNumber; - -//! Project version string for CwlUtils. -FOUNDATION_EXPORT const unsigned char CwlAssertingTestingVersionString[]; - -#include "CwlMachBadInstructionHandler.h" -#include "CwlCatchException.h" diff --git a/Example/Pods/Nimble/README.md b/Example/Pods/Nimble/README.md index 647028c..aa7ef09 100644 --- a/Example/Pods/Nimble/README.md +++ b/Example/Pods/Nimble/README.md @@ -3,6 +3,7 @@ [![Build Status](https://travis-ci.org/Quick/Nimble.svg?branch=master)](https://travis-ci.org/Quick/Nimble) [![CocoaPods](https://img.shields.io/cocoapods/v/Nimble.svg)](https://cocoapods.org/pods/Nimble) [![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) +[![Accio supported](https://img.shields.io/badge/Accio-supported-0A7CF5.svg?style=flat)](https://github.com/JamitLabs/Accio) [![Platforms](https://img.shields.io/cocoapods/p/Nimble.svg)](https://cocoapods.org/pods/Nimble) Use Nimble to express the expected outcomes of Swift @@ -69,6 +70,7 @@ expect(ocean.isClean).toEventually(beTruthy()) - [Installing Nimble](#installing-nimble) - [Installing Nimble as a Submodule](#installing-nimble-as-a-submodule) - [Installing Nimble via CocoaPods](#installing-nimble-via-cocoapods) + - [Installing Nimble via Accio](#installing-nimble-via-accio) - [Using Nimble without XCTest](#using-nimble-without-xctest) @@ -306,8 +308,7 @@ In Nimble, it's easy to make expectations on values that are updated asynchronously. Just use `toEventually` or `toEventuallyNot`: ```swift -// Swift 3.0 and later - +// Swift DispatchQueue.main.async { ocean.add("dolphins") ocean.add("whales") @@ -316,17 +317,6 @@ expect(ocean).toEventually(contain("dolphins", "whales")) ``` -```swift -// Swift 2.3 and earlier - -dispatch_async(dispatch_get_main_queue()) { - ocean.add("dolphins") - ocean.add("whales") -} -expect(ocean).toEventually(contain("dolphins", "whales")) -``` - - ```objc // Objective-C @@ -355,10 +345,10 @@ cases, use the `timeout` parameter: // Swift // Waits three seconds for ocean to contain "starfish": -expect(ocean).toEventually(contain("starfish"), timeout: 3) +expect(ocean).toEventually(contain("starfish"), timeout: .seconds(3)) // Evaluate someValue every 0.2 seconds repeatedly until it equals 100, or fails if it timeouts after 5.5 seconds. -expect(someValue).toEventually(equal(100), timeout: 5.5, pollInterval: 0.2) +expect(someValue).toEventually(equal(100), timeout: .milliseconds(5500), pollInterval: .milliseconds(200)) ``` ```objc @@ -397,7 +387,7 @@ waitUntil(^(void (^done)(void)){ ```swift // Swift -waitUntil(timeout: 10) { done in +waitUntil(timeout: .seconds(10)) { done in ocean.goFish { success in expect(success).to(beTrue()) done() @@ -429,10 +419,10 @@ the default timeout and poll interval values. This can be done as follows: // Swift // Increase the global timeout to 5 seconds: -Nimble.AsyncDefaults.Timeout = 5 +Nimble.AsyncDefaults.timeout = .seconds(1) // Slow the polling interval to 0.1 seconds: -Nimble.AsyncDefaults.PollInterval = 0.1 +Nimble.AsyncDefaults.pollInterval = .milliseconds(100) ``` ## Objective-C Support @@ -857,11 +847,7 @@ Notes: ## Swift Error Handling -If you're using Swift 2.0 or newer, you can use the `throwError` matcher to check if an error is thrown. - -Note: -The following code sample references the `Swift.Error` protocol. -This is `Swift.ErrorProtocol` in versions of Swift prior to version 3.0. +You can use the `throwError` matcher to check if an error is thrown. ```swift // Swift @@ -1186,20 +1172,31 @@ For Objective-C, the actual value must be one of the following classes, or their ```swift // Swift -let testNotification = Notification(name: "Foo", object: nil) +let testNotification = Notification(name: Notification.Name("Foo"), object: nil) -// passes if the closure in expect { ... } posts a notification to the default +// Passes if the closure in expect { ... } posts a notification to the default // notification center. expect { - NotificationCenter.default.postNotification(testNotification) -}.to(postNotifications(equal([testNotification])) + NotificationCenter.default.post(testNotification) +}.to(postNotifications(equal([testNotification]))) -// passes if the closure in expect { ... } posts a notification to a given +// Passes if the closure in expect { ... } posts a notification to a given // notification center let notificationCenter = NotificationCenter() expect { - notificationCenter.postNotification(testNotification) -}.to(postNotifications(equal([testNotification]), fromNotificationCenter: notificationCenter)) + notificationCenter.post(testNotification) +}.to(postNotifications(equal([testNotification]), from: notificationCenter)) + +// Passes if the closure in expect { ... } posts a notification with the provided names to a given +// notification center. Make sure to use this when running tests on Catalina, +// using DistributedNotificationCenter as there is currently no way +// of observing notifications without providing specific names. +let distributedNotificationCenter = DistributedNotificationCenter() +expect { + distributedNotificationCenter.post(testNotification) +}.toEventually(postDistributedNotifications(equal([testNotification]), + from: distributedNotificationCenter, + names: [testNotification.name])) ``` > This matcher is only available in Swift. @@ -1518,19 +1515,17 @@ For a more comprehensive message that spans multiple lines, use ## Supporting Objective-C To use a custom matcher written in Swift from Objective-C, you'll have -to extend the `NMBObjCMatcher` class, adding a new class method for your +to extend the `NMBPredicate` class, adding a new class method for your custom matcher. The example below defines the class method -`+[NMBObjCMatcher beNilMatcher]`: +`+[NMBPredicate beNilMatcher]`: ```swift // Swift -extension NMBObjCMatcher { - public class func beNilMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher { actualBlock, failureMessage, location in - let block = ({ actualBlock() as NSObject? }) - let expr = Expression(expression: block, location: location) - return beNil().matches(expr, failureMessage: failureMessage) +extension NMBPredicate { + @objc public class func beNilMatcher() -> NMBPredicate { + return NMBPredicate { actualExpression in + return try beNil().satisfies(actualExpression).toObjectiveC() } } } @@ -1541,7 +1536,7 @@ The above allows you to use the matcher from Objective-C: ```objc // Objective-C -expect(actual).to([NMBObjCMatcher beNilMatcher]()); +expect(actual).to([NMBPredicate beNilMatcher]()); ``` To make the syntax easier to use, define a C function that calls the @@ -1550,8 +1545,8 @@ class method: ```objc // Objective-C -FOUNDATION_EXPORT id beNil() { - return [NMBObjCMatcher beNilMatcher]; +FOUNDATION_EXPORT NMBPredicate *beNil() { + return [NMBPredicate beNilMatcher]; } ``` @@ -1573,29 +1568,25 @@ expect(nil).to(equal(nil)); // fails expect(nil).to(beNil()); // passes ``` -If your matcher does not want to match with nil, you use `NonNilMatcherFunc` -and the `canMatchNil` constructor on `NMBObjCMatcher`. Using both types will -automatically generate expected value failure messages when they're nil. +If your matcher does not want to match with nil, you use `Predicate.define` or `Predicate.simple`. +Using those factory methods will automatically generate expected value failure messages when they're nil. ```swift +public func beginWith(_ startingElement: S.Element) -> Predicate where S.Element: Equatable { + return Predicate.simple("begin with <\(startingElement)>") { actualExpression in + guard let actualValue = try actualExpression.evaluate() else { return .fail } -public func beginWith(startingElement: T) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "begin with <\(startingElement)>" - if let actualValue = actualExpression.evaluate() { - var actualGenerator = actualValue.makeIterator() - return actualGenerator.next() == startingElement - } - return false + var actualGenerator = actualValue.makeIterator() + return PredicateStatus(bool: actualGenerator.next() == startingElement) } } -extension NMBObjCMatcher { - public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let actual = actualExpression.evaluate() +extension NMBPredicate { + @objc public class func beginWithMatcher(_ expected: Any) -> NMBPredicate { + return NMBPredicate { actualExpression in + let actual = try actualExpression.evaluate() let expr = actualExpression.cast { $0 as? NMBOrderedCollection } - return beginWith(expected).matches(expr, failureMessage: failureMessage) + return try beginWith(expected).satisfies(expr).toObjectiveC() } } } @@ -1620,7 +1611,7 @@ converts those types to the newer `Predicate`. ```swift // Swift -public func beginWith(startingElement: T) -> Predicate { +public func beginWith(_ startingElement: S.Element) -> Predicate where S.Element: Equatable { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingElement)>" if let actualValue = actualExpression.evaluate() { @@ -1643,7 +1634,7 @@ matcher types. ```swift // Swift -public func beginWith(startingElement: T) -> Predicate { +public func beginWith(_ startingElement: S.Element) -> Predicate where S.Element: Equatable { return Predicate.fromDeprecatedClosure { actualExpression, failureMessage in failureMessage.postfixMessage = "begin with <\(startingElement)>" if let actualValue = actualExpression.evaluate() { @@ -1673,11 +1664,11 @@ backported. The deprecating plan is a 3 major versions removal. Which is as follows: 1. Introduce new `Predicate` API, deprecation warning for old matcher APIs. - (Nimble `v7.x.x`) + (Nimble `v7.x.x` and `v8.x.x`) 2. Introduce warnings on migration-path features (`.predicate`, `Predicate`-constructors with similar arguments to old API). (Nimble - `v8.x.x`) - 3. Remove old API. (Nimble `v9.x.x`) + `v9.x.x`) + 3. Remove old API. (Nimble `v10.x.x`) # Installing Nimble @@ -1720,12 +1711,33 @@ source 'https://github.com/CocoaPods/Specs.git' target 'YOUR_APP_NAME_HERE_Tests', :exclusive => true do use_frameworks! - pod 'Nimble', '~> 6.0.0' + pod 'Nimble' end ``` Finally run `pod install`. +## Installing Nimble via Accio + +Add the following to your Package.swift: + +```swift +.package(url: "https://github.com/Quick/Nimble.git", .upToNextMajor(from: "8.0.1")), +``` + +Next, add `Nimble` to your App targets dependencies like so: + +```swift +.testTarget( + name: "AppTests", + dependencies: [ + "Nimble", + ] +), +``` + +Then run `accio update`. + ## Using Nimble without XCTest Nimble is integrated with XCTest to allow it work well when used in Xcode test diff --git a/Example/Pods/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift b/Example/Pods/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift index 2e58fdf..a28bf2b 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift @@ -1,5 +1,3 @@ -import Foundation - /// Protocol for the assertion handler that Nimble uses for all expectations. public protocol AssertionHandler { func assert(_ assertion: Bool, message: FailureMessage, location: SourceLocation) @@ -13,5 +11,6 @@ public protocol AssertionHandler { /// /// @see AssertionHandler public var NimbleAssertionHandler: AssertionHandler = { () -> AssertionHandler in + // swiftlint:disable:previous identifier_name return isXCTestAvailable() ? NimbleXCTestHandler() : NimbleXCTestUnavailableHandler() }() diff --git a/Example/Pods/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift b/Example/Pods/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift index cc39636..ac75467 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift @@ -1,5 +1,3 @@ -import Foundation - /// A data structure that stores information about an assertion when /// AssertionRecorder is set as the Nimble assertion handler. /// @@ -37,21 +35,48 @@ public class AssertionRecorder: AssertionHandler { } } +extension NMBExceptionCapture { + internal func tryBlockThrows(_ unsafeBlock: () throws -> Void) throws { + var catchedError: Error? + tryBlock { + do { + try unsafeBlock() + } catch { + catchedError = error + } + } + if let error = catchedError { + throw error + } + } +} + /// Allows you to temporarily replace the current Nimble assertion handler with /// the one provided for the scope of the closure. /// /// Once the closure finishes, then the original Nimble assertion handler is restored. /// /// @see AssertionHandler -public func withAssertionHandler(_ tempAssertionHandler: AssertionHandler, closure: () throws -> Void) { +public func withAssertionHandler(_ tempAssertionHandler: AssertionHandler, + file: FileString = #file, + line: UInt = #line, + closure: () throws -> Void) { let environment = NimbleEnvironment.activeInstance let oldRecorder = environment.assertionHandler let capturer = NMBExceptionCapture(handler: nil, finally: ({ environment.assertionHandler = oldRecorder })) environment.assertionHandler = tempAssertionHandler - capturer.tryBlock { - try! closure() + + do { + try capturer.tryBlockThrows { + try closure() + } + } catch { + let failureMessage = FailureMessage() + failureMessage.stringValue = "unexpected error thrown: <\(error)>" + let location = SourceLocation(file: file, line: line) + tempAssertionHandler.assert(false, message: failureMessage, location: location) } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift b/Example/Pods/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift index add7d3f..32d9b60 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift @@ -1,6 +1,7 @@ -import Foundation - -#if (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE +#if canImport(Darwin) && !SWIFT_PACKAGE +import class Foundation.NSObject +import typealias Foundation.TimeInterval +import enum Dispatch.DispatchTimeInterval private func from(objcPredicate: NMBPredicate) -> Predicate { return Predicate { actualExpression in @@ -10,31 +11,38 @@ private func from(objcPredicate: NMBPredicate) -> Predicate { } } -internal struct ObjCMatcherWrapper: Matcher { - let matcher: NMBMatcher - - func matches(_ actualExpression: Expression, failureMessage: FailureMessage) -> Bool { - return matcher.matches( - ({ try! actualExpression.evaluate() }), - failureMessage: failureMessage, - location: actualExpression.location) - } - - func doesNotMatch(_ actualExpression: Expression, failureMessage: FailureMessage) -> Bool { - return matcher.doesNotMatch( - ({ try! actualExpression.evaluate() }), - failureMessage: failureMessage, - location: actualExpression.location) +private func from(matcher: NMBMatcher, style: ExpectationStyle) -> Predicate { + // Almost same as `Matcher.toClosure` + let closure: (Expression, FailureMessage) throws -> Bool = { expr, msg in + switch style { + case .toMatch: + return matcher.matches( + // swiftlint:disable:next force_try + ({ try! expr.evaluate() }), + failureMessage: msg, + location: expr.location + ) + case .toNotMatch: + return !matcher.doesNotMatch( + // swiftlint:disable:next force_try + ({ try! expr.evaluate() }), + failureMessage: msg, + location: expr.location + ) + } } + return Predicate._fromDeprecatedClosure(closure) } // Equivalent to Expectation, but for Nimble's Objective-C interface public class NMBExpectation: NSObject { + // swiftlint:disable identifier_name internal let _actualBlock: () -> NSObject? internal var _negative: Bool internal let _file: FileString internal let _line: UInt - internal var _timeout: TimeInterval = 1.0 + internal var _timeout: DispatchTimeInterval = .seconds(1) + // swiftlint:enable identifier_name @objc public init(actualBlock: @escaping () -> NSObject?, negative: Bool, file: FileString, line: UInt) { self._actualBlock = actualBlock @@ -44,63 +52,65 @@ public class NMBExpectation: NSObject { } private var expectValue: Expectation { - return expect(_file, line: _line) { - self._actualBlock() as NSObject? - } + return expect(file: _file, line: _line, self._actualBlock() as NSObject?) } @objc public var withTimeout: (TimeInterval) -> NMBExpectation { - return ({ timeout in self._timeout = timeout + return { timeout in self._timeout = timeout.dispatchInterval return self - }) + } } - @objc public var to: (NMBMatcher) -> Void { - return ({ matcher in + @objc public var to: (NMBMatcher) -> NMBExpectation { + return { matcher in if let pred = matcher as? NMBPredicate { self.expectValue.to(from(objcPredicate: pred)) } else { - self.expectValue.to(ObjCMatcherWrapper(matcher: matcher)) + self.expectValue.to(from(matcher: matcher, style: .toMatch)) } - }) + return self + } } - @objc public var toWithDescription: (NMBMatcher, String) -> Void { - return ({ matcher, description in + @objc public var toWithDescription: (NMBMatcher, String) -> NMBExpectation { + return { matcher, description in if let pred = matcher as? NMBPredicate { self.expectValue.to(from(objcPredicate: pred), description: description) } else { - self.expectValue.to(ObjCMatcherWrapper(matcher: matcher), description: description) + self.expectValue.to(from(matcher: matcher, style: .toMatch), description: description) } - }) + return self + } } - @objc public var toNot: (NMBMatcher) -> Void { - return ({ matcher in + @objc public var toNot: (NMBMatcher) -> NMBExpectation { + return { matcher in if let pred = matcher as? NMBPredicate { self.expectValue.toNot(from(objcPredicate: pred)) } else { - self.expectValue.toNot(ObjCMatcherWrapper(matcher: matcher)) + self.expectValue.toNot(from(matcher: matcher, style: .toNotMatch)) } - }) + return self + } } - @objc public var toNotWithDescription: (NMBMatcher, String) -> Void { - return ({ matcher, description in + @objc public var toNotWithDescription: (NMBMatcher, String) -> NMBExpectation { + return { matcher, description in if let pred = matcher as? NMBPredicate { self.expectValue.toNot(from(objcPredicate: pred), description: description) } else { - self.expectValue.toNot(ObjCMatcherWrapper(matcher: matcher), description: description) + self.expectValue.toNot(from(matcher: matcher, style: .toNotMatch), description: description) } - }) + return self + } } - @objc public var notTo: (NMBMatcher) -> Void { return toNot } + @objc public var notTo: (NMBMatcher) -> NMBExpectation { return toNot } - @objc public var notToWithDescription: (NMBMatcher, String) -> Void { return toNotWithDescription } + @objc public var notToWithDescription: (NMBMatcher, String) -> NMBExpectation { return toNotWithDescription } @objc public var toEventually: (NMBMatcher) -> Void { - return ({ matcher in + return { matcher in if let pred = matcher as? NMBPredicate { self.expectValue.toEventually( from(objcPredicate: pred), @@ -109,16 +119,16 @@ public class NMBExpectation: NSObject { ) } else { self.expectValue.toEventually( - ObjCMatcherWrapper(matcher: matcher), + from(matcher: matcher, style: .toMatch), timeout: self._timeout, description: nil ) } - }) + } } @objc public var toEventuallyWithDescription: (NMBMatcher, String) -> Void { - return ({ matcher, description in + return { matcher, description in if let pred = matcher as? NMBPredicate { self.expectValue.toEventually( from(objcPredicate: pred), @@ -127,16 +137,16 @@ public class NMBExpectation: NSObject { ) } else { self.expectValue.toEventually( - ObjCMatcherWrapper(matcher: matcher), + from(matcher: matcher, style: .toMatch), timeout: self._timeout, description: description ) } - }) + } } @objc public var toEventuallyNot: (NMBMatcher) -> Void { - return ({ matcher in + return { matcher in if let pred = matcher as? NMBPredicate { self.expectValue.toEventuallyNot( from(objcPredicate: pred), @@ -145,16 +155,16 @@ public class NMBExpectation: NSObject { ) } else { self.expectValue.toEventuallyNot( - ObjCMatcherWrapper(matcher: matcher), + from(matcher: matcher, style: .toNotMatch), timeout: self._timeout, description: nil ) } - }) + } } @objc public var toEventuallyNotWithDescription: (NMBMatcher, String) -> Void { - return ({ matcher, description in + return { matcher, description in if let pred = matcher as? NMBPredicate { self.expectValue.toEventuallyNot( from(objcPredicate: pred), @@ -163,12 +173,12 @@ public class NMBExpectation: NSObject { ) } else { self.expectValue.toEventuallyNot( - ObjCMatcherWrapper(matcher: matcher), + from(matcher: matcher, style: .toNotMatch), timeout: self._timeout, description: description ) } - }) + } } @objc public var toNotEventually: (NMBMatcher) -> Void { diff --git a/Example/Pods/Nimble/Sources/Nimble/Adapters/NMBObjCMatcher.swift b/Example/Pods/Nimble/Sources/Nimble/Adapters/NMBObjCMatcher.swift index a114dff..8b8258d 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Adapters/NMBObjCMatcher.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/NMBObjCMatcher.swift @@ -1,15 +1,17 @@ -import Foundation - -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +#if canImport(Darwin) +import class Foundation.NSObject // swiftlint:disable line_length public typealias MatcherBlock = (_ actualExpression: Expression, _ failureMessage: FailureMessage) throws -> Bool public typealias FullMatcherBlock = (_ actualExpression: Expression, _ failureMessage: FailureMessage, _ shouldNotMatch: Bool) throws -> Bool // swiftlint:enable line_length +@available(*, deprecated, message: "Use NMBPredicate instead") public class NMBObjCMatcher: NSObject, NMBMatcher { + // swiftlint:disable identifier_name let _match: MatcherBlock let _doesNotMatch: MatcherBlock + // swiftlint:enable identifier_name let canMatchNil: Bool public init(canMatchNil: Bool, matcher: @escaping MatcherBlock, notMatcher: @escaping MatcherBlock) { diff --git a/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift b/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift index 818e478..06bde8a 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift @@ -1,5 +1,6 @@ import Dispatch -import Foundation +import class Foundation.NSObject +import class Foundation.Thread /// "Global" state of Nimble is stored here. Only DSL functions should access / be aware of this /// class' existence @@ -20,6 +21,7 @@ internal class NimbleEnvironment: NSObject { } } + // swiftlint:disable:next todo // TODO: eventually migrate the global to this environment value var assertionHandler: AssertionHandler { get { return NimbleAssertionHandler } @@ -30,13 +32,7 @@ internal class NimbleEnvironment: NSObject { var awaiter: Awaiter override init() { - let timeoutQueue: DispatchQueue - if #available(OSX 10.10, *) { - timeoutQueue = DispatchQueue.global(qos: .userInitiated) - } else { - timeoutQueue = DispatchQueue.global(priority: .high) - } - + let timeoutQueue = DispatchQueue.global(qos: .userInitiated) awaiter = Awaiter( waitLock: AssertionWaitLock(), asyncQueue: .main, diff --git a/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift b/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift index 14bb045..5f29628 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift @@ -45,7 +45,7 @@ class NimbleXCTestUnavailableHandler: AssertionHandler { private var stashed_swift_reportFatalErrorsToDebugger: Bool = false @objc func testCaseWillStart(_ testCase: XCTestCase) { - #if swift(>=3.2) + #if os(macOS) || os(iOS) stashed_swift_reportFatalErrorsToDebugger = _swift_reportFatalErrorsToDebugger _swift_reportFatalErrorsToDebugger = false #endif @@ -56,7 +56,7 @@ class NimbleXCTestUnavailableHandler: AssertionHandler { @objc func testCaseDidFinish(_ testCase: XCTestCase) { currentTestCase = nil - #if swift(>=3.2) + #if os(macOS) || os(iOS) _swift_reportFatalErrorsToDebugger = stashed_swift_reportFatalErrorsToDebugger #endif } @@ -64,7 +64,7 @@ class NimbleXCTestUnavailableHandler: AssertionHandler { #endif func isXCTestAvailable() -> Bool { -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +#if canImport(Darwin) // XCTest is weakly linked and so may not be present return NSClassFromString("XCTestCase") != nil #else @@ -77,15 +77,14 @@ public func recordFailure(_ message: String, location: SourceLocation) { XCTFail("\(message)", file: location.file, line: location.line) #else if let testCase = CurrentTestCaseTracker.sharedInstance.currentTestCase { - #if swift(>=4) let line = Int(location.line) - #else - let line = location.line - #endif testCase.recordFailure(withDescription: message, inFile: location.file, atLine: line, expected: true) } else { - let msg = "Attempted to report a test failure to XCTest while no test case was running. " + - "The failure was:\n\"\(message)\"\nIt occurred at: \(location.file):\(location.line)" + let msg = """ + Attempted to report a test failure to XCTest while no test case was running. The failure was: + \"\(message)\" + It occurred at: \(location.file):\(location.line) + """ NSException(name: .internalInconsistencyException, reason: msg, userInfo: nil).raise() } #endif diff --git a/Example/Pods/Nimble/Sources/Nimble/DSL+Wait.swift b/Example/Pods/Nimble/Sources/Nimble/DSL+Wait.swift index ee281ed..4be4524 100644 --- a/Example/Pods/Nimble/Sources/Nimble/DSL+Wait.swift +++ b/Example/Pods/Nimble/Sources/Nimble/DSL+Wait.swift @@ -14,20 +14,20 @@ internal class NMBWait: NSObject { // About these kind of lines, `@objc` attributes are only required for Objective-C // support, so that should be conditional on Darwin platforms and normal Xcode builds // (non-SwiftPM builds). -#if (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE +#if canImport(Darwin) && !SWIFT_PACKAGE @objc internal class func until( timeout: TimeInterval, file: FileString = #file, line: UInt = #line, action: @escaping (@escaping () -> Void) -> Void) { - return throwableUntil(timeout: timeout, file: file, line: line) { done in - action(done) - } + // Convert TimeInterval to DispatchTimeInterval + until(timeout: timeout.dispatchInterval, file: file, line: line, action: action) } -#else +#endif + internal class func until( - timeout: TimeInterval, + timeout: DispatchTimeInterval, file: FileString = #file, line: UInt = #line, action: @escaping (@escaping () -> Void) -> Void) { @@ -35,16 +35,15 @@ internal class NMBWait: NSObject { action(done) } } -#endif // Using a throwable closure makes this method not objc compatible. internal class func throwableUntil( - timeout: TimeInterval, + timeout: DispatchTimeInterval, file: FileString = #file, line: UInt = #line, action: @escaping (@escaping () -> Void) throws -> Void) { let awaiter = NimbleEnvironment.activeInstance.awaiter - let leeway = timeout / 2.0 + let leeway = timeout.divided // swiftlint:disable:next line_length let result = awaiter.performBlock(file: file, line: line) { (done: @escaping (ErrorResult) -> Void) throws -> Void in DispatchQueue.main.async { @@ -72,8 +71,7 @@ internal class NMBWait: NSObject { fail(blockedRunLoopErrorMessageFor("-waitUntil()", leeway: leeway), file: file, line: line) case .timedOut: - let pluralize = (timeout == 1 ? "" : "s") - fail("Waited more than \(timeout) second\(pluralize)", file: file, line: line) + fail("Waited more than \(timeout.description)", file: file, line: line) case let .raisedException(exception): fail("Unexpected exception raised: \(exception)") case let .errorThrown(error): @@ -87,27 +85,27 @@ internal class NMBWait: NSObject { } } -#if (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE +#if canImport(Darwin) && !SWIFT_PACKAGE @objc(untilFile:line:action:) internal class func until( _ file: FileString = #file, line: UInt = #line, action: @escaping (@escaping () -> Void) -> Void) { - until(timeout: 1, file: file, line: line, action: action) + until(timeout: .seconds(1), file: file, line: line, action: action) } #else internal class func until( _ file: FileString = #file, line: UInt = #line, action: @escaping (@escaping () -> Void) -> Void) { - until(timeout: 1, file: file, line: line, action: action) + until(timeout: .seconds(1), file: file, line: line, action: action) } #endif } -internal func blockedRunLoopErrorMessageFor(_ fnName: String, leeway: TimeInterval) -> String { +internal func blockedRunLoopErrorMessageFor(_ fnName: String, leeway: DispatchTimeInterval) -> String { // swiftlint:disable:next line_length - return "\(fnName) timed out but was unable to run the timeout handler because the main thread is unresponsive (\(leeway) seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run." + return "\(fnName) timed out but was unable to run the timeout handler because the main thread is unresponsive (\(leeway.description) is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run." } /// Wait asynchronously until the done closure is called or the timeout has been reached. @@ -117,6 +115,6 @@ internal func blockedRunLoopErrorMessageFor(_ fnName: String, leeway: TimeInterv /// /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. -public func waitUntil(timeout: TimeInterval = AsyncDefaults.Timeout, file: FileString = #file, line: UInt = #line, action: @escaping (@escaping () -> Void) -> Void) { +public func waitUntil(timeout: DispatchTimeInterval = AsyncDefaults.timeout, file: FileString = #file, line: UInt = #line, action: @escaping (@escaping () -> Void) -> Void) { NMBWait.until(timeout: timeout, file: file, line: line, action: action) } diff --git a/Example/Pods/Nimble/Sources/Nimble/DSL.swift b/Example/Pods/Nimble/Sources/Nimble/DSL.swift index e49bb0c..e481f87 100644 --- a/Example/Pods/Nimble/Sources/Nimble/DSL.swift +++ b/Example/Pods/Nimble/Sources/Nimble/DSL.swift @@ -1,7 +1,5 @@ -import Foundation - /// Make an expectation on a given actual value. The value given is lazily evaluated. -public func expect(_ expression: @autoclosure @escaping () throws -> T?, file: FileString = #file, line: UInt = #line) -> Expectation { +public func expect(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure @escaping () throws -> T?) -> Expectation { return Expectation( expression: Expression( expression: expression, @@ -10,10 +8,28 @@ public func expect(_ expression: @autoclosure @escaping () throws -> T?, file } /// Make an expectation on a given actual value. The closure is lazily invoked. -public func expect(_ file: FileString = #file, line: UInt = #line, expression: @escaping () throws -> T?) -> Expectation { +public func expect(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> T)) -> Expectation { return Expectation( expression: Expression( - expression: expression, + expression: expression(), + location: SourceLocation(file: file, line: line), + isClosure: true)) +} + +/// Make an expectation on a given actual value. The closure is lazily invoked. +public func expect(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> T?)) -> Expectation { + return Expectation( + expression: Expression( + expression: expression(), + location: SourceLocation(file: file, line: line), + isClosure: true)) +} + +/// Make an expectation on a given actual value. The closure is lazily invoked. +public func expect(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> Void)) -> Expectation { + return Expectation( + expression: Expression( + expression: expression(), location: SourceLocation(file: file, line: line), isClosure: true)) } @@ -36,29 +52,53 @@ public func fail(_ file: FileString = #file, line: UInt = #line) { /// Like Swift's precondition(), but raises NSExceptions instead of sigaborts internal func nimblePrecondition( - _ expr: @autoclosure() -> Bool, - _ name: @autoclosure() -> String, - _ message: @autoclosure() -> String, + _ expr: @autoclosure () -> Bool, + _ name: @autoclosure () -> String, + _ message: @autoclosure () -> String, file: StaticString = #file, - line: UInt = #line) { - let result = expr() - if !result { -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) - let e = NSException( - name: NSExceptionName(name()), - reason: message(), - userInfo: nil) - e.raise() -#else - preconditionFailure("\(name()) - \(message())", file: file, line: line) -#endif - } + line: UInt = #line +) { + let result = expr() + if !result { + _nimblePrecondition(name(), message(), file, line) + } } internal func internalError(_ msg: String, file: FileString = #file, line: UInt = #line) -> Never { + // swiftlint:disable line_length fatalError( - "Nimble Bug Found: \(msg) at \(file):\(line).\n" + - "Please file a bug to Nimble: https://github.com/Quick/Nimble/issues with the " + - "code snippet that caused this error." + """ + Nimble Bug Found: \(msg) at \(file):\(line). + Please file a bug to Nimble: https://github.com/Quick/Nimble/issues with the code snippet that caused this error. + """ + ) + // swiftlint:enable line_length +} + +#if canImport(Darwin) +import class Foundation.NSException +import struct Foundation.NSExceptionName + +private func _nimblePrecondition( + _ name: String, + _ message: String, + _ file: StaticString, + _ line: UInt +) { + let exception = NSException( + name: NSExceptionName(name), + reason: message, + userInfo: nil ) + exception.raise() } +#else +private func _nimblePrecondition( + _ name: String, + _ message: String, + _ file: StaticString, + _ line: UInt +) { + preconditionFailure("\(name) - \(message)", file: file, line: line) +} +#endif diff --git a/Example/Pods/Nimble/Sources/Nimble/Expectation.swift b/Example/Pods/Nimble/Sources/Nimble/Expectation.swift index 41625a1..9906c70 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Expectation.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Expectation.swift @@ -1,6 +1,4 @@ -import Foundation - -// Deprecated +@available(*, deprecated) internal func expressionDoesNotMatch(_ expression: Expression, matcher: U, toNot: String, description: String?) -> (Bool, FailureMessage) where U: Matcher, U.ValueType == T { let msg = FailureMessage() @@ -69,7 +67,9 @@ public struct Expectation { ////////////////// OLD API ///////////////////// /// DEPRECATED: Tests the actual value using a matcher to match. - public func to(_ matcher: U, description: String? = nil) + @available(*, deprecated, message: "Use Predicate instead") + @discardableResult + public func to(_ matcher: U, description: String? = nil) -> Self where U: Matcher, U.ValueType == T { let (pass, msg) = execute( expression, @@ -80,43 +80,54 @@ public struct Expectation { captureExceptions: false ) verify(pass, msg) + return self } /// DEPRECATED: Tests the actual value using a matcher to not match. - public func toNot(_ matcher: U, description: String? = nil) + @available(*, deprecated, message: "Use Predicate instead") + @discardableResult + public func toNot(_ matcher: U, description: String? = nil) -> Self where U: Matcher, U.ValueType == T { // swiftlint:disable:next line_length let (pass, msg) = expressionDoesNotMatch(expression, matcher: matcher, toNot: "to not", description: description) verify(pass, msg) + return self } /// DEPRECATED: Tests the actual value using a matcher to not match. /// /// Alias to toNot(). - public func notTo(_ matcher: U, description: String? = nil) + @available(*, deprecated, message: "Use Predicate instead") + @discardableResult + public func notTo(_ matcher: U, description: String? = nil) -> Self where U: Matcher, U.ValueType == T { - toNot(matcher, description: description) + return toNot(matcher, description: description) } ////////////////// NEW API ///////////////////// /// Tests the actual value using a matcher to match. - public func to(_ predicate: Predicate, description: String? = nil) { + @discardableResult + public func to(_ predicate: Predicate, description: String? = nil) -> Self { let (pass, msg) = execute(expression, .toMatch, predicate, to: "to", description: description) verify(pass, msg) + return self } /// Tests the actual value using a matcher to not match. - public func toNot(_ predicate: Predicate, description: String? = nil) { + @discardableResult + public func toNot(_ predicate: Predicate, description: String? = nil) -> Self { let (pass, msg) = execute(expression, .toNotMatch, predicate, to: "to not", description: description) verify(pass, msg) + return self } /// Tests the actual value using a matcher to not match. /// /// Alias to toNot(). - public func notTo(_ predicate: Predicate, description: String? = nil) { - toNot(predicate, description: description) + @discardableResult + public func notTo(_ predicate: Predicate, description: String? = nil) -> Self { + return toNot(predicate, description: description) } // see: diff --git a/Example/Pods/Nimble/Sources/Nimble/ExpectationMessage.swift b/Example/Pods/Nimble/Sources/Nimble/ExpectationMessage.swift index 7aae341..4efda7c 100644 --- a/Example/Pods/Nimble/Sources/Nimble/ExpectationMessage.swift +++ b/Example/Pods/Nimble/Sources/Nimble/ExpectationMessage.swift @@ -1,11 +1,9 @@ -import Foundation - public indirect enum ExpectationMessage { // --- Primary Expectations --- /// includes actual value in output ("expected to , got ") case expectedActualValueTo(/* message: */ String) /// uses a custom actual value string in output ("expected to , got ") - case expectedCustomValueTo(/* message: */ String, /* actual: */ String) + case expectedCustomValueTo(/* message: */ String, actual: String) /// excludes actual value in output ("expected to ") case expectedTo(/* message: */ String) /// allows any free-form message ("") @@ -23,14 +21,6 @@ public indirect enum ExpectationMessage { /// provides long-form multi-line explainations ("\n\n") case details(ExpectationMessage, String) - internal var sampleMessage: String { - let asStr = toString(actual: "", expected: "expected", to: "to") - let asFailureMessage = FailureMessage() - update(failureMessage: asFailureMessage) - // swiftlint:disable:next line_length - return "(toString(actual:expected:to:) -> \(asStr) || update(failureMessage:) -> \(asFailureMessage.stringValue))" - } - /// Returns the smallest message after the "expected to" string that summarizes the error. /// /// Returns the message part from ExpectationMessage, ignoring all .appends and .details. @@ -75,6 +65,7 @@ public indirect enum ExpectationMessage { } internal func visitLeafs(_ f: (ExpectationMessage) -> ExpectationMessage) -> ExpectationMessage { + // swiftlint:disable:previous identifier_name switch self { case .fail, .expectedTo, .expectedActualValueTo, .expectedCustomValueTo: return f(self) @@ -90,6 +81,7 @@ public indirect enum ExpectationMessage { /// Replaces a primary expectation with one returned by f. Preserves all composite expectations /// that were built upon it (aka - all appended(message:) and appended(details:). public func replacedExpectation(_ f: @escaping (ExpectationMessage) -> ExpectationMessage) -> ExpectationMessage { + // swiftlint:disable:previous identifier_name func walk(_ msg: ExpectationMessage) -> ExpectationMessage { switch msg { case .fail, .expectedTo, .expectedActualValueTo, .expectedCustomValueTo: @@ -116,7 +108,7 @@ public indirect enum ExpectationMessage { case let .expectedActualValueTo(msg): return .expectedActualValueTo(message + msg) case let .expectedCustomValueTo(msg, actual): - return .expectedCustomValueTo(message + msg, actual) + return .expectedCustomValueTo(message + msg, actual: actual) default: return msg.visitLeafs(walk) } @@ -124,6 +116,7 @@ public indirect enum ExpectationMessage { return visitLeafs(walk) } + // swiftlint:disable:next todo // TODO: test & verify correct behavior internal func prepended(message: String) -> ExpectationMessage { return .prepends(message, self) @@ -183,32 +176,33 @@ public indirect enum ExpectationMessage { extension FailureMessage { internal func toExpectationMessage() -> ExpectationMessage { - let defaultMsg = FailureMessage() - if expected != defaultMsg.expected || _stringValueOverride != nil { + let defaultMessage = FailureMessage() + if expected != defaultMessage.expected || _stringValueOverride != nil { return .fail(stringValue) } - var msg: ExpectationMessage = .fail(userDescription ?? "") + var message: ExpectationMessage = .fail(userDescription ?? "") if actualValue != "" && actualValue != nil { - msg = .expectedCustomValueTo(postfixMessage, actualValue ?? "") - } else if postfixMessage != defaultMsg.postfixMessage { + message = .expectedCustomValueTo(postfixMessage, actual: actualValue ?? "") + } else if postfixMessage != defaultMessage.postfixMessage { if actualValue == nil { - msg = .expectedTo(postfixMessage) + message = .expectedTo(postfixMessage) } else { - msg = .expectedActualValueTo(postfixMessage) + message = .expectedActualValueTo(postfixMessage) } } - if postfixActual != defaultMsg.postfixActual { - msg = .appends(msg, postfixActual) + if postfixActual != defaultMessage.postfixActual { + message = .appends(message, postfixActual) } - if let m = extendedMessage { - msg = .details(msg, m) + if let extended = extendedMessage { + message = .details(message, extended) } - return msg + return message } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +#if canImport(Darwin) +import class Foundation.NSObject public class NMBExpectationMessage: NSObject { private let msg: ExpectationMessage @@ -225,7 +219,7 @@ public class NMBExpectationMessage: NSObject { } public init(expectedActualValueTo message: String, customActualValue actual: String) { - self.msg = .expectedCustomValueTo(message, actual) + self.msg = .expectedCustomValueTo(message, actual: actual) } public init(fail message: String) { diff --git a/Example/Pods/Nimble/Sources/Nimble/Expression.swift b/Example/Pods/Nimble/Sources/Nimble/Expression.swift index 5a233fd..40dde89 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Expression.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Expression.swift @@ -1,15 +1,13 @@ -import Foundation - // Memoizes the given closure, only calling the passed // closure once; even if repeat calls to the returned closure internal func memoizedClosure(_ closure: @escaping () throws -> T) -> (Bool) throws -> T { var cache: T? - return ({ withoutCaching in + return { withoutCaching in if withoutCaching || cache == nil { cache = try closure() } return cache! - }) + } } /// Expression represents the closure of the value inside expect(...). @@ -24,8 +22,10 @@ internal func memoizedClosure(_ closure: @escaping () throws -> T) -> (Bool) /// This provides a common consumable API for matchers to utilize to allow /// Nimble to change internals to how the captured closure is managed. public struct Expression { + // swiftlint:disable identifier_name internal let _expression: (Bool) throws -> T? internal let _withoutCaching: Bool + // swiftlint:enable identifier_name public let location: SourceLocation public let isClosure: Bool diff --git a/Example/Pods/Nimble/Sources/Nimble/FailureMessage.swift b/Example/Pods/Nimble/Sources/Nimble/FailureMessage.swift index 2bc57eb..503b540 100644 --- a/Example/Pods/Nimble/Sources/Nimble/FailureMessage.swift +++ b/Example/Pods/Nimble/Sources/Nimble/FailureMessage.swift @@ -28,6 +28,7 @@ public class FailureMessage: NSObject { } } + // swiftlint:disable:next identifier_name internal var _stringValueOverride: String? internal var hasOverriddenStringValue: Bool { return _stringValueOverride != nil diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/AllPass.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/AllPass.swift index cc6c24f..f067aff 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/AllPass.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/AllPass.swift @@ -1,70 +1,71 @@ -import Foundation - -public func allPass - (_ passFunc: @escaping (T?) throws -> Bool) -> Predicate - where U: Sequence, T == U.Iterator.Element { - let matcher = Predicate.simpleNilable("pass a condition") { actualExpression in - return PredicateStatus(bool: try passFunc(try actualExpression.evaluate())) - } - return createPredicate(matcher) +public func allPass( + _ passFunc: @escaping (S.Element?) throws -> Bool +) -> Predicate { + let matcher = Predicate.simpleNilable("pass a condition") { actualExpression in + return PredicateStatus(bool: try passFunc(try actualExpression.evaluate())) + } + return createPredicate(matcher) } -public func allPass - (_ passName: String, _ passFunc: @escaping (T?) throws -> Bool) -> Predicate - where U: Sequence, T == U.Iterator.Element { - let matcher = Predicate.simpleNilable(passName) { actualExpression in - return PredicateStatus(bool: try passFunc(try actualExpression.evaluate())) - } - return createPredicate(matcher) +public func allPass( + _ passName: String, + _ passFunc: @escaping (S.Element?) throws -> Bool +) -> Predicate { + let matcher = Predicate.simpleNilable(passName) { actualExpression in + return PredicateStatus(bool: try passFunc(try actualExpression.evaluate())) + } + return createPredicate(matcher) } -public func allPass(_ elementMatcher: M) -> Predicate - where S: Sequence, M: Matcher, S.Iterator.Element == M.ValueType { - return createPredicate(elementMatcher.predicate) +@available(*, deprecated, message: "Use Predicate instead") +public func allPass(_ elementMatcher: M) -> Predicate where S.Element == M.ValueType { + return createPredicate(elementMatcher.predicate) } -public func allPass(_ elementPredicate: Predicate) -> Predicate - where S: Sequence { - return createPredicate(elementPredicate) +public func allPass(_ elementPredicate: Predicate) -> Predicate { + return createPredicate(elementPredicate) } -private func createPredicate(_ elementMatcher: Predicate) -> Predicate - where S: Sequence { - return Predicate { actualExpression in - guard let actualValue = try actualExpression.evaluate() else { - return PredicateResult( - status: .fail, - message: .appends(.expectedTo("all pass"), " (use beNil() to match nils)") - ) - } +private func createPredicate(_ elementMatcher: Predicate) -> Predicate { + return Predicate { actualExpression in + guard let actualValue = try actualExpression.evaluate() else { + return PredicateResult( + status: .fail, + message: .appends(.expectedTo("all pass"), " (use beNil() to match nils)") + ) + } - var failure: ExpectationMessage = .expectedTo("all pass") - for currentElement in actualValue { - let exp = Expression( - expression: {currentElement}, location: actualExpression.location) - let predicateResult = try elementMatcher.satisfies(exp) - if predicateResult.status == .matches { - failure = predicateResult.message.prepended(expectation: "all ") - } else { - failure = predicateResult.message - .replacedExpectation({ .expectedTo($0.expectedMessage) }) - .wrappedExpectation( - before: "all ", - after: ", but failed first at element <\(stringify(currentElement))>" - + " in <\(stringify(actualValue))>" - ) - return PredicateResult(status: .doesNotMatch, message: failure) - } + var failure: ExpectationMessage = .expectedTo("all pass") + for currentElement in actualValue { + let exp = Expression( + expression: {currentElement}, location: actualExpression.location) + let predicateResult = try elementMatcher.satisfies(exp) + if predicateResult.status == .matches { + failure = predicateResult.message.prepended(expectation: "all ") + } else { + failure = predicateResult.message + .replacedExpectation({ .expectedTo($0.expectedMessage) }) + .wrappedExpectation( + before: "all ", + after: ", but failed first at element <\(stringify(currentElement))>" + + " in <\(stringify(actualValue))>" + ) + return PredicateResult(status: .doesNotMatch, message: failure) } - failure = failure.replacedExpectation({ expectation in - return .expectedTo(expectation.expectedMessage) - }) - return PredicateResult(status: .matches, message: failure) } + failure = failure.replacedExpectation({ expectation in + return .expectedTo(expectation.expectedMessage) + }) + return PredicateResult(status: .matches, message: failure) + } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { +#if canImport(Darwin) +import class Foundation.NSObject +import struct Foundation.NSFastEnumerationIterator +import protocol Foundation.NSFastEnumeration + +extension NMBPredicate { @objc public class func allPassMatcher(_ matcher: NMBMatcher) -> NMBPredicate { return NMBPredicate { actualExpression in let location = actualExpression.location @@ -103,6 +104,7 @@ extension NMBObjCMatcher { } else { let failureMessage = FailureMessage() let result = matcher.matches( + // swiftlint:disable:next force_try ({ try! expr.evaluate() }), failureMessage: failureMessage, location: expr.location diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/Async.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/Async.swift index c70b65e..dc5e5ed 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/Async.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/Async.swift @@ -1,13 +1,21 @@ import Foundation +import Dispatch /// If you are running on a slower machine, it could be useful to increase the default timeout value /// or slow down poll interval. Default timeout interval is 1, and poll interval is 0.01. public struct AsyncDefaults { + public static var timeout: DispatchTimeInterval = .seconds(1) + public static var pollInterval: DispatchTimeInterval = .milliseconds(10) +} + +extension AsyncDefaults { + @available(*, unavailable, renamed: "timeout") public static var Timeout: TimeInterval = 1 + @available(*, unavailable, renamed: "pollInterval") public static var PollInterval: TimeInterval = 0.01 } -private func async(style: ExpectationStyle, predicate: Predicate, timeout: TimeInterval, poll: TimeInterval, fnName: String) -> Predicate { +private func async(style: ExpectationStyle, predicate: Predicate, timeout: DispatchTimeInterval, poll: DispatchTimeInterval, fnName: String) -> Predicate { return Predicate { actualExpression in let uncachedExpression = actualExpression.withoutCaching() let fnName = "expect(...).\(fnName)(...)" @@ -42,8 +50,10 @@ private func async(style: ExpectationStyle, predicate: Predicate, timeout: } private let toEventuallyRequiresClosureError = FailureMessage( - // swiftlint:disable:next line_length - stringValue: "expect(...).toEventually(...) requires an explicit closure (eg - expect { ... }.toEventually(...) )\nSwift 1.2 @autoclosure behavior has changed in an incompatible way for Nimble to function" + stringValue: """ + expect(...).toEventually(...) requires an explicit closure (eg - expect { ... }.toEventually(...) ) + Swift 1.2 @autoclosure behavior has changed in an incompatible way for Nimble to function + """ ) extension Expectation { @@ -53,7 +63,7 @@ extension Expectation { /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. - public func toEventually(_ predicate: Predicate, timeout: TimeInterval = AsyncDefaults.Timeout, pollInterval: TimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { + public func toEventually(_ predicate: Predicate, timeout: DispatchTimeInterval = AsyncDefaults.timeout, pollInterval: DispatchTimeInterval = AsyncDefaults.pollInterval, description: String? = nil) { nimblePrecondition(expression.isClosure, "NimbleInternalError", toEventuallyRequiresClosureError.stringValue) let (pass, msg) = execute( @@ -73,7 +83,7 @@ extension Expectation { /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. - public func toEventuallyNot(_ predicate: Predicate, timeout: TimeInterval = AsyncDefaults.Timeout, pollInterval: TimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { + public func toEventuallyNot(_ predicate: Predicate, timeout: DispatchTimeInterval = AsyncDefaults.timeout, pollInterval: DispatchTimeInterval = AsyncDefaults.pollInterval, description: String? = nil) { nimblePrecondition(expression.isClosure, "NimbleInternalError", toEventuallyRequiresClosureError.stringValue) let (pass, msg) = execute( @@ -101,12 +111,12 @@ extension Expectation { /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. - public func toNotEventually(_ predicate: Predicate, timeout: TimeInterval = AsyncDefaults.Timeout, pollInterval: TimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { + public func toNotEventually(_ predicate: Predicate, timeout: DispatchTimeInterval = AsyncDefaults.timeout, pollInterval: DispatchTimeInterval = AsyncDefaults.pollInterval, description: String? = nil) { return toEventuallyNot(predicate, timeout: timeout, pollInterval: pollInterval, description: description) } } -// Deprecated +@available(*, deprecated, message: "Use Predicate instead") extension Expectation { /// Tests the actual value using a matcher to match by checking continuously /// at each pollInterval until the timeout is reached. @@ -114,7 +124,7 @@ extension Expectation { /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. - public func toEventually(_ matcher: U, timeout: TimeInterval = AsyncDefaults.Timeout, pollInterval: TimeInterval = AsyncDefaults.PollInterval, description: String? = nil) + public func toEventually(_ matcher: U, timeout: DispatchTimeInterval = AsyncDefaults.timeout, pollInterval: DispatchTimeInterval = AsyncDefaults.pollInterval, description: String? = nil) where U: Matcher, U.ValueType == T { if expression.isClosure { let (pass, msg) = execute( @@ -143,7 +153,7 @@ extension Expectation { /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. - public func toEventuallyNot(_ matcher: U, timeout: TimeInterval = AsyncDefaults.Timeout, pollInterval: TimeInterval = AsyncDefaults.PollInterval, description: String? = nil) + public func toEventuallyNot(_ matcher: U, timeout: DispatchTimeInterval = AsyncDefaults.timeout, pollInterval: DispatchTimeInterval = AsyncDefaults.pollInterval, description: String? = nil) where U: Matcher, U.ValueType == T { if expression.isClosure { let (pass, msg) = expressionDoesNotMatch( @@ -172,7 +182,7 @@ extension Expectation { /// @discussion /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. - public func toNotEventually(_ matcher: U, timeout: TimeInterval = AsyncDefaults.Timeout, pollInterval: TimeInterval = AsyncDefaults.PollInterval, description: String? = nil) + public func toNotEventually(_ matcher: U, timeout: DispatchTimeInterval = AsyncDefaults.timeout, pollInterval: DispatchTimeInterval = AsyncDefaults.pollInterval, description: String? = nil) where U: Matcher, U.ValueType == T { return toEventuallyNot(matcher, timeout: timeout, pollInterval: pollInterval, description: description) } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift index 5d0f5a1..f01ca77 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift @@ -1,5 +1,3 @@ -import Foundation - private func matcherMessage(forType expectedType: T.Type) -> String { return "be a kind of \(String(describing: expectedType))" } @@ -14,12 +12,12 @@ public func beAKindOf(_ expectedType: T.Type) -> Predicate { let instance = try actualExpression.evaluate() guard let validInstance = instance else { - message = .expectedCustomValueTo(matcherMessage(forType: expectedType), "") + message = .expectedCustomValueTo(matcherMessage(forType: expectedType), actual: "") return PredicateResult(status: .fail, message: message) } message = .expectedCustomValueTo( "be a kind of \(String(describing: expectedType))", - "<\(String(describing: type(of: validInstance))) instance>" + actual: "<\(String(describing: type(of: validInstance))) instance>" ) return PredicateResult( @@ -29,7 +27,8 @@ public func beAKindOf(_ expectedType: T.Type) -> Predicate { } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +#if canImport(Darwin) +import class Foundation.NSObject /// A Nimble matcher that succeeds when the actual value is an instance of the given class. /// @see beAnInstanceOf if you want to match against the exact class @@ -43,13 +42,13 @@ public func beAKindOf(_ expectedClass: AnyClass) -> Predicate { status = PredicateStatus(bool: instance != nil && instance!.isKind(of: expectedClass)) message = .expectedCustomValueTo( matcherMessage(forClass: expectedClass), - "<\(String(describing: type(of: validInstance))) instance>" + actual: "<\(String(describing: type(of: validInstance))) instance>" ) } else { status = .fail message = .expectedCustomValueTo( matcherMessage(forClass: expectedClass), - "" + actual: "" ) } @@ -57,8 +56,8 @@ public func beAKindOf(_ expectedClass: AnyClass) -> Predicate { } } -extension NMBObjCMatcher { - @objc public class func beAKindOfMatcher(_ expected: AnyClass) -> NMBMatcher { +extension NMBPredicate { + @objc public class func beAKindOfMatcher(_ expected: AnyClass) -> NMBPredicate { return NMBPredicate { actualExpression in return try beAKindOf(expected).satisfies(actualExpression).toObjectiveC() } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift index bc1b02c..47ea663 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift @@ -16,7 +16,7 @@ public func beAnInstanceOf(_ expectedType: T.Type) -> Predicate { return PredicateResult( status: PredicateStatus(bool: type(of: validInstance) == expectedType), - message: .expectedCustomValueTo(errorMessage, actualString) + message: .expectedCustomValueTo(errorMessage, actual: actualString) ) } } @@ -33,21 +33,21 @@ public func beAnInstanceOf(_ expectedClass: AnyClass) -> Predicate { } else { actualString = "" } - #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + #if canImport(Darwin) let matches = instance != nil && instance!.isMember(of: expectedClass) #else let matches = instance != nil && type(of: instance!) == expectedClass #endif return PredicateResult( status: PredicateStatus(bool: matches), - message: .expectedCustomValueTo(errorMessage, actualString) + message: .expectedCustomValueTo(errorMessage, actual: actualString) ) } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { - @objc public class func beAnInstanceOfMatcher(_ expected: AnyClass) -> NMBMatcher { +#if canImport(Darwin) +extension NMBPredicate { + @objc public class func beAnInstanceOfMatcher(_ expected: AnyClass) -> NMBPredicate { return NMBPredicate { actualExpression in return try beAnInstanceOf(expected).satisfies(actualExpression).toObjectiveC() } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift index b1e6f4c..891193f 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift @@ -1,5 +1,6 @@ import Foundation +// swiftlint:disable:next identifier_name public let DefaultDelta = 0.0001 internal func isCloseTo(_ actualValue: NMBDoubleConvertible?, @@ -10,7 +11,7 @@ internal func isCloseTo(_ actualValue: NMBDoubleConvertible?, return PredicateResult( bool: actualValue != nil && abs(actualValue!.doubleValue - expectedValue.doubleValue) < delta, - message: .expectedCustomValueTo(errorMessage, "<\(stringify(actualValue))>") + message: .expectedCustomValueTo(errorMessage, actual: "<\(stringify(actualValue))>") ) } @@ -18,71 +19,44 @@ internal func isCloseTo(_ actualValue: NMBDoubleConvertible?, /// point values which can have imprecise results when doing arithmetic on them. /// /// @see equal -public func beCloseTo(_ expectedValue: Double, within delta: Double = DefaultDelta) -> Predicate { +public func beCloseTo(_ expectedValue: Value, within delta: Double = DefaultDelta) -> Predicate { return Predicate.define { actualExpression in return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta) } } -/// A Nimble matcher that succeeds when a value is close to another. This is used for floating -/// point values which can have imprecise results when doing arithmetic on them. -/// -/// @see equal -public func beCloseTo(_ expectedValue: NMBDoubleConvertible, within delta: Double = DefaultDelta) -> Predicate { +private func beCloseTo(_ expectedValue: NMBDoubleConvertible, within delta: Double = DefaultDelta) -> Predicate { return Predicate.define { actualExpression in return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta) } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -public class NMBObjCBeCloseToMatcher: NSObject, NMBMatcher { - var _expected: NSNumber - var _delta: CDouble - init(expected: NSNumber, within: CDouble) { +#if canImport(Darwin) +public class NMBObjCBeCloseToPredicate: NMBPredicate { + private let _expected: NSNumber + + fileprivate init(expected: NSNumber, within: CDouble) { _expected = expected - _delta = within - } - @objc public func matches(_ actualExpression: @escaping () -> NSObject?, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - let actualBlock: () -> NMBDoubleConvertible? = ({ - return actualExpression() as? NMBDoubleConvertible - }) - let expr = Expression(expression: actualBlock, location: location) - let matcher = beCloseTo(self._expected, within: self._delta) - - do { - return try matcher.matches(expr, failureMessage: failureMessage) - } catch let error { - failureMessage.stringValue = "unexpected error thrown: <\(error)>" - return false + let predicate = beCloseTo(expected, within: within) + let predicateBlock: PredicateBlock = { actualExpression in + let expr = actualExpression.cast { $0 as? NMBDoubleConvertible } + return try predicate.satisfies(expr).toObjectiveC() } + super.init(predicate: predicateBlock) } - @objc public func doesNotMatch(_ actualExpression: @escaping () -> NSObject?, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - let actualBlock: () -> NMBDoubleConvertible? = ({ - return actualExpression() as? NMBDoubleConvertible - }) - let expr = Expression(expression: actualBlock, location: location) - let matcher = beCloseTo(self._expected, within: self._delta) - - do { - return try matcher.doesNotMatch(expr, failureMessage: failureMessage) - } catch let error { - failureMessage.stringValue = "unexpected error thrown: <\(error)>" - return false + @objc public var within: (CDouble) -> NMBObjCBeCloseToPredicate { + let expected = _expected + return { delta in + return NMBObjCBeCloseToPredicate(expected: expected, within: delta) } } - - @objc public var within: (CDouble) -> NMBObjCBeCloseToMatcher { - return ({ delta in - return NMBObjCBeCloseToMatcher(expected: self._expected, within: delta) - }) - } } -extension NMBObjCMatcher { - @objc public class func beCloseToMatcher(_ expected: NSNumber, within: CDouble) -> NMBObjCBeCloseToMatcher { - return NMBObjCBeCloseToMatcher(expected: expected, within: within) +extension NMBPredicate { + @objc public class func beCloseToMatcher(_ expected: NSNumber, within: CDouble) -> NMBObjCBeCloseToPredicate { + return NMBObjCBeCloseToPredicate(expected: expected, within: within) } } #endif @@ -110,20 +84,27 @@ public func beCloseTo(_ expectedValues: [Double], within delta: Double = Default infix operator ≈ : ComparisonPrecedence -public func ≈(lhs: Expectation<[Double]>, rhs: [Double]) { - lhs.to(beCloseTo(rhs)) +extension Expectation where T == [Double] { + // swiftlint:disable:next identifier_name + public static func ≈(lhs: Expectation, rhs: [Double]) { + lhs.to(beCloseTo(rhs)) + } } -public func ≈(lhs: Expectation, rhs: NMBDoubleConvertible) { - lhs.to(beCloseTo(rhs)) -} +extension Expectation where T == NMBDoubleConvertible { + // swiftlint:disable:next identifier_name + public static func ≈(lhs: Expectation, rhs: NMBDoubleConvertible) { + lhs.to(beCloseTo(rhs)) + } -public func ≈(lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { - lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) -} + // swiftlint:disable:next identifier_name + public static func ≈(lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { + lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) + } -public func == (lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { - lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) + public static func == (lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { + lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) + } } // make this higher precedence than exponents so the Doubles either end aren't pulled in @@ -133,6 +114,7 @@ precedencegroup PlusMinusOperatorPrecedence { } infix operator ± : PlusMinusOperatorPrecedence +// swiftlint:disable:next identifier_name public func ±(lhs: NMBDoubleConvertible, rhs: Double) -> (expected: NMBDoubleConvertible, delta: Double) { return (expected: lhs, delta: rhs) } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeEmpty.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeEmpty.swift index 8d73dcc..3e890d5 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeEmpty.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeEmpty.swift @@ -4,21 +4,37 @@ import Foundation /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> Predicate { return Predicate.simple("be empty") { actualExpression in - let actualSeq = try actualExpression.evaluate() - if actualSeq == nil { - return .fail - } - var generator = actualSeq!.makeIterator() + guard let actual = try actualExpression.evaluate() else { return .fail } + + var generator = actual.makeIterator() return PredicateStatus(bool: generator.next() == nil) } } +/// A Nimble matcher that succeeds when a value is "empty". For collections, this +/// means the are no items in that collection. For strings, it is an empty string. +public func beEmpty() -> Predicate { + return Predicate.simple("be empty") { actualExpression in + guard let actual = try actualExpression.evaluate() else { return .fail } + return PredicateStatus(bool: actual.isEmpty) + } +} + +/// A Nimble matcher that succeeds when a value is "empty". For collections, this +/// means the are no items in that collection. For strings, it is an empty string. +public func beEmpty() -> Predicate { + return Predicate.simple("be empty") { actualExpression in + guard let actual = try actualExpression.evaluate() else { return .fail } + return PredicateStatus(bool: actual.isEmpty) + } +} + /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> Predicate { return Predicate.simple("be empty") { actualExpression in - let actualString = try actualExpression.evaluate() - return PredicateStatus(bool: actualString == nil || NSString(string: actualString!).length == 0) + guard let actual = try actualExpression.evaluate() else { return .fail } + return PredicateStatus(bool: actual.isEmpty) } } @@ -26,8 +42,8 @@ public func beEmpty() -> Predicate { /// means the are no items in that collection. For NSString instances, it is an empty string. public func beEmpty() -> Predicate { return Predicate.simple("be empty") { actualExpression in - let actualString = try actualExpression.evaluate() - return PredicateStatus(bool: actualString == nil || actualString!.length == 0) + guard let actual = try actualExpression.evaluate() else { return .fail } + return PredicateStatus(bool: actual.length == 0) } } @@ -37,42 +53,42 @@ public func beEmpty() -> Predicate { /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> Predicate { - return Predicate.simple("be empty") { actualExpression in - let actualDictionary = try actualExpression.evaluate() - return PredicateStatus(bool: actualDictionary == nil || actualDictionary!.count == 0) - } + return Predicate.simple("be empty") { actualExpression in + guard let actual = try actualExpression.evaluate() else { return .fail } + return PredicateStatus(bool: actual.count == 0) + } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> Predicate { - return Predicate.simple("be empty") { actualExpression in - let actualArray = try actualExpression.evaluate() - return PredicateStatus(bool: actualArray == nil || actualArray!.count == 0) - } + return Predicate.simple("be empty") { actualExpression in + guard let actual = try actualExpression.evaluate() else { return .fail } + return PredicateStatus(bool: actual.count == 0) + } } /// A Nimble matcher that succeeds when a value is "empty". For collections, this /// means the are no items in that collection. For strings, it is an empty string. public func beEmpty() -> Predicate { return Predicate.simple("be empty") { actualExpression in - let actual = try actualExpression.evaluate() - return PredicateStatus(bool: actual == nil || actual!.count == 0) + guard let actual = try actualExpression.evaluate() else { return .fail } + return PredicateStatus(bool: actual.count == 0) } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { +#if canImport(Darwin) +extension NMBPredicate { @objc public class func beEmptyMatcher() -> NMBPredicate { return NMBPredicate { actualExpression in let location = actualExpression.location let actualValue = try actualExpression.evaluate() if let value = actualValue as? NMBCollection { - let expr = Expression(expression: ({ value as NMBCollection }), location: location) + let expr = Expression(expression: ({ value }), location: location) return try beEmpty().satisfies(expr).toObjectiveC() } else if let value = actualValue as? NSString { - let expr = Expression(expression: ({ value as String }), location: location) + let expr = Expression(expression: ({ value }), location: location) return try beEmpty().satisfies(expr).toObjectiveC() } else if let actualValue = actualValue { // swiftlint:disable:next line_length diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift index b86f25d..a8d1212 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift @@ -1,16 +1,20 @@ -import Foundation - /// A Nimble matcher that succeeds when the actual value is greater than the expected value. public func beGreaterThan(_ expectedValue: T?) -> Predicate { let errorMessage = "be greater than <\(stringify(expectedValue))>" return Predicate.simple(errorMessage) { actualExpression in - if let actual = try actualExpression.evaluate(), let expected = expectedValue { - return PredicateStatus(bool: actual > expected) - } - return .fail + guard let actual = try actualExpression.evaluate(), let expected = expectedValue else { return .fail } + + return PredicateStatus(bool: actual > expected) } } +public func >(lhs: Expectation, rhs: T) { + lhs.to(beGreaterThan(rhs)) +} + +#if canImport(Darwin) +import enum Foundation.ComparisonResult + /// A Nimble matcher that succeeds when the actual value is greater than the expected value. public func beGreaterThan(_ expectedValue: NMBComparable?) -> Predicate { let errorMessage = "be greater than <\(stringify(expectedValue))>" @@ -22,20 +26,15 @@ public func beGreaterThan(_ expectedValue: NMBComparable?) -> Predicate(lhs: Expectation, rhs: T) { - lhs.to(beGreaterThan(rhs)) -} - public func > (lhs: Expectation, rhs: NMBComparable?) { lhs.to(beGreaterThan(rhs)) } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { - @objc public class func beGreaterThanMatcher(_ expected: NMBComparable?) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in +extension NMBPredicate { + @objc public class func beGreaterThanMatcher(_ expected: NMBComparable?) -> NMBPredicate { + return NMBPredicate { actualExpression in let expr = actualExpression.cast { $0 as? NMBComparable } - return try beGreaterThan(expected).matches(expr, failureMessage: failureMessage) + return try beGreaterThan(expected).satisfies(expr).toObjectiveC() } } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift index 2a3ca4a..affa58c 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift @@ -1,18 +1,21 @@ -import Foundation - /// A Nimble matcher that succeeds when the actual value is greater than /// or equal to the expected value. public func beGreaterThanOrEqualTo(_ expectedValue: T?) -> Predicate { let message = "be greater than or equal to <\(stringify(expectedValue))>" return Predicate.simple(message) { actualExpression in - let actualValue = try actualExpression.evaluate() - if let actual = actualValue, let expected = expectedValue { - return PredicateStatus(bool: actual >= expected) - } - return .fail + guard let actual = try actualExpression.evaluate(), let expected = expectedValue else { return .fail } + + return PredicateStatus(bool: actual >= expected) } } +public func >=(lhs: Expectation, rhs: T) { + lhs.to(beGreaterThanOrEqualTo(rhs)) +} + +#if canImport(Darwin) +import enum Foundation.ComparisonResult + /// A Nimble matcher that succeeds when the actual value is greater than /// or equal to the expected value. public func beGreaterThanOrEqualTo(_ expectedValue: T?) -> Predicate { @@ -24,20 +27,15 @@ public func beGreaterThanOrEqualTo(_ expectedValue: T?) -> Pre } } -public func >=(lhs: Expectation, rhs: T) { - lhs.to(beGreaterThanOrEqualTo(rhs)) -} - public func >=(lhs: Expectation, rhs: T) { lhs.to(beGreaterThanOrEqualTo(rhs)) } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { - @objc public class func beGreaterThanOrEqualToMatcher(_ expected: NMBComparable?) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in +extension NMBPredicate { + @objc public class func beGreaterThanOrEqualToMatcher(_ expected: NMBComparable?) -> NMBPredicate { + return NMBPredicate { actualExpression in let expr = actualExpression.cast { $0 as? NMBComparable } - return try beGreaterThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage) + return try beGreaterThanOrEqualTo(expected).satisfies(expr).toObjectiveC() } } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift index dfbcb9e..85e14f9 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift @@ -1,60 +1,28 @@ -import Foundation - /// A Nimble matcher that succeeds when the actual value is the same instance /// as the expected instance. public func beIdenticalTo(_ expected: Any?) -> Predicate { return Predicate.define { actualExpression in - #if os(Linux) - #if swift(>=4.0) - #if !swift(>=4.1.50) - let actual = try actualExpression.evaluate() as? AnyObject - #else - let actual = try actualExpression.evaluate() as AnyObject? - #endif - #else - #if !swift(>=3.4) - let actual = try actualExpression.evaluate() as? AnyObject - #else - let actual = try actualExpression.evaluate() as AnyObject? - #endif - #endif - #else - let actual = try actualExpression.evaluate() as AnyObject? - #endif + let actual = try actualExpression.evaluate() as AnyObject? - let bool: Bool - #if os(Linux) - #if swift(>=4.0) - #if !swift(>=4.1.50) - bool = actual === (expected as? AnyObject) && actual !== nil - #else - bool = actual === (expected as AnyObject?) && actual !== nil - #endif - #else - #if !swift(>=3.4) - bool = actual === (expected as? AnyObject) && actual !== nil - #else - bool = actual === (expected as AnyObject?) && actual !== nil - #endif - #endif - #else - bool = actual === (expected as AnyObject?) && actual !== nil - #endif + let bool = actual === (expected as AnyObject?) && actual !== nil return PredicateResult( bool: bool, message: .expectedCustomValueTo( "be identical to \(identityAsString(expected))", - "\(identityAsString(actual))" + actual: "\(identityAsString(actual))" ) ) } } -public func === (lhs: Expectation, rhs: Any?) { - lhs.to(beIdenticalTo(rhs)) -} -public func !== (lhs: Expectation, rhs: Any?) { - lhs.toNot(beIdenticalTo(rhs)) +extension Expectation where T == Any { + public static func === (lhs: Expectation, rhs: Any?) { + lhs.to(beIdenticalTo(rhs)) + } + + public static func !== (lhs: Expectation, rhs: Any?) { + lhs.toNot(beIdenticalTo(rhs)) + } } /// A Nimble matcher that succeeds when the actual value is the same instance @@ -65,12 +33,14 @@ public func be(_ expected: Any?) -> Predicate { return beIdenticalTo(expected) } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { - @objc public class func beIdenticalToMatcher(_ expected: NSObject?) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in +#if canImport(Darwin) +import class Foundation.NSObject + +extension NMBPredicate { + @objc public class func beIdenticalToMatcher(_ expected: NSObject?) -> NMBPredicate { + return NMBPredicate { actualExpression in let aExpr = actualExpression.cast { $0 as Any? } - return try beIdenticalTo(expected).matches(aExpr, failureMessage: failureMessage) + return try beIdenticalTo(expected).satisfies(aExpr).toObjectiveC() } } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThan.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThan.swift index e1fbf1e..256f3a6 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThan.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThan.swift @@ -1,16 +1,20 @@ -import Foundation - /// A Nimble matcher that succeeds when the actual value is less than the expected value. public func beLessThan(_ expectedValue: T?) -> Predicate { let message = "be less than <\(stringify(expectedValue))>" return Predicate.simple(message) { actualExpression in - if let actual = try actualExpression.evaluate(), let expected = expectedValue { - return PredicateStatus(bool: actual < expected) - } - return .fail + guard let actual = try actualExpression.evaluate(), let expected = expectedValue else { return .fail } + + return PredicateStatus(bool: actual < expected) } } +public func <(lhs: Expectation, rhs: T) { + lhs.to(beLessThan(rhs)) +} + +#if canImport(Darwin) +import enum Foundation.ComparisonResult + /// A Nimble matcher that succeeds when the actual value is less than the expected value. public func beLessThan(_ expectedValue: NMBComparable?) -> Predicate { let message = "be less than <\(stringify(expectedValue))>" @@ -21,20 +25,15 @@ public func beLessThan(_ expectedValue: NMBComparable?) -> Predicate(lhs: Expectation, rhs: T) { - lhs.to(beLessThan(rhs)) -} - public func < (lhs: Expectation, rhs: NMBComparable?) { lhs.to(beLessThan(rhs)) } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { - @objc public class func beLessThanMatcher(_ expected: NMBComparable?) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in +extension NMBPredicate { + @objc public class func beLessThanMatcher(_ expected: NMBComparable?) -> NMBPredicate { + return NMBPredicate { actualExpression in let expr = actualExpression.cast { $0 as? NMBComparable } - return try beLessThan(expected).matches(expr, failureMessage: failureMessage) + return try beLessThan(expected).satisfies(expr).toObjectiveC() } } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift index c37cb16..6174be5 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift @@ -1,16 +1,20 @@ -import Foundation - /// A Nimble matcher that succeeds when the actual value is less than /// or equal to the expected value. public func beLessThanOrEqualTo(_ expectedValue: T?) -> Predicate { return Predicate.simple("be less than or equal to <\(stringify(expectedValue))>") { actualExpression in - if let actual = try actualExpression.evaluate(), let expected = expectedValue { - return PredicateStatus(bool: actual <= expected) - } - return .fail + guard let actual = try actualExpression.evaluate(), let expected = expectedValue else { return .fail } + + return PredicateStatus(bool: actual <= expected) } } +public func <=(lhs: Expectation, rhs: T) { + lhs.to(beLessThanOrEqualTo(rhs)) +} + +#if canImport(Darwin) +import enum Foundation.ComparisonResult + /// A Nimble matcher that succeeds when the actual value is less than /// or equal to the expected value. public func beLessThanOrEqualTo(_ expectedValue: T?) -> Predicate { @@ -21,20 +25,15 @@ public func beLessThanOrEqualTo(_ expectedValue: T?) -> Predic } } -public func <=(lhs: Expectation, rhs: T) { - lhs.to(beLessThanOrEqualTo(rhs)) -} - public func <=(lhs: Expectation, rhs: T) { lhs.to(beLessThanOrEqualTo(rhs)) } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { - @objc public class func beLessThanOrEqualToMatcher(_ expected: NMBComparable?) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in +extension NMBPredicate { + @objc public class func beLessThanOrEqualToMatcher(_ expected: NMBComparable?) -> NMBPredicate { + return NMBPredicate { actualExpression in let expr = actualExpression.cast { $0 as? NMBComparable } - return try beLessThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage) + return try beLessThanOrEqualTo(expected).satisfies(expr).toObjectiveC() } } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLogical.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLogical.swift index 035500e..1676ba4 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLogical.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLogical.swift @@ -100,14 +100,6 @@ public func beTruthy() -> Predicate< return Predicate.simpleNilable("be truthy") { actualExpression in let actualValue = try actualExpression.evaluate() if let actualValue = actualValue { - // FIXME: This is a workaround to SR-2290. - // See: - // - https://bugs.swift.org/browse/SR-2290 - // - https://github.com/norio-nomura/Nimble/pull/5#issuecomment-237835873 - if let number = actualValue as? NSNumber { - return PredicateStatus(bool: number.boolValue == true) - } - return PredicateStatus(bool: actualValue == (true as T)) } return PredicateStatus(bool: actualValue != nil) @@ -120,47 +112,42 @@ public func beFalsy() -> Predicate NMBObjCMatcher { - return NMBObjCMatcher { actualExpression, failureMessage in +#if canImport(Darwin) +extension NMBPredicate { + @objc public class func beTruthyMatcher() -> NMBPredicate { + return NMBPredicate { actualExpression in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false } - return try beTruthy().matches(expr, failureMessage: failureMessage) + return try beTruthy().satisfies(expr).toObjectiveC() } } - @objc public class func beFalsyMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher { actualExpression, failureMessage in + @objc public class func beFalsyMatcher() -> NMBPredicate { + return NMBPredicate { actualExpression in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false } - return try beFalsy().matches(expr, failureMessage: failureMessage) + return try beFalsy().satisfies(expr).toObjectiveC() } } - @objc public class func beTrueMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher { actualExpression, failureMessage in + @objc public class func beTrueMatcher() -> NMBPredicate { + return NMBPredicate { actualExpression in let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false } - return try beTrue().matches(expr, failureMessage: failureMessage) + return try beTrue().satisfies(expr).toObjectiveC() } } - @objc public class func beFalseMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false } - return try beFalse().matches(expr, failureMessage: failureMessage) + @objc public class func beFalseMatcher() -> NMBPredicate { + return NMBPredicate { actualExpression in + let expr = actualExpression.cast { value -> Bool? in + guard let value = value else { return nil } + return (value as? NSNumber)?.boolValue ?? false + } + return try beFalse().satisfies(expr).toObjectiveC() } } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeNil.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeNil.swift index 387420b..270bd35 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeNil.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeNil.swift @@ -1,5 +1,3 @@ -import Foundation - /// A Nimble matcher that succeeds when the actual value is nil. public func beNil() -> Predicate { return Predicate.simpleNilable("be nil") { actualExpression in @@ -8,11 +6,13 @@ public func beNil() -> Predicate { } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { - @objc public class func beNilMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher { actualExpression, failureMessage in - return try beNil().matches(actualExpression, failureMessage: failureMessage) +#if canImport(Darwin) +import Foundation + +extension NMBPredicate { + @objc public class func beNilMatcher() -> NMBPredicate { + return NMBPredicate { actualExpression in + return try beNil().satisfies(actualExpression).toObjectiveC() } } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeVoid.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeVoid.swift index a9dbc28..c4bbaf6 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeVoid.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeVoid.swift @@ -1,5 +1,3 @@ -import Foundation - /// A Nimble matcher that succeeds when the actual value is Void. public func beVoid() -> Predicate<()> { return Predicate.simpleNilable("be void") { actualExpression in @@ -8,10 +6,12 @@ public func beVoid() -> Predicate<()> { } } -public func == (lhs: Expectation<()>, rhs: ()) { - lhs.to(beVoid()) -} +extension Expectation where T == () { + public static func == (lhs: Expectation<()>, rhs: ()) { + lhs.to(beVoid()) + } -public func != (lhs: Expectation<()>, rhs: ()) { - lhs.toNot(beVoid()) + public static func != (lhs: Expectation<()>, rhs: ()) { + lhs.toNot(beVoid()) + } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeginWith.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeginWith.swift index cb3efe3..1da7818 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeginWith.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeginWith.swift @@ -2,14 +2,12 @@ import Foundation /// A Nimble matcher that succeeds when the actual sequence's first element /// is equal to the expected value. -public func beginWith(_ startingElement: T) -> Predicate - where S.Iterator.Element == T { +public func beginWith(_ startingElement: S.Element) -> Predicate where S.Element: Equatable { return Predicate.simple("begin with <\(startingElement)>") { actualExpression in - if let actualValue = try actualExpression.evaluate() { - var actualGenerator = actualValue.makeIterator() - return PredicateStatus(bool: actualGenerator.next() == startingElement) - } - return .fail + guard let actualValue = try actualExpression.evaluate() else { return .fail } + + var actualGenerator = actualValue.makeIterator() + return PredicateStatus(bool: actualGenerator.next() == startingElement) } } @@ -34,24 +32,24 @@ public func beginWith(_ startingElement: Any) -> Predicate /// where the expected substring's location is zero. public func beginWith(_ startingSubstring: String) -> Predicate { return Predicate.simple("begin with <\(startingSubstring)>") { actualExpression in - if let actual = try actualExpression.evaluate() { - return PredicateStatus(bool: actual.hasPrefix(startingSubstring)) - } - return .fail + guard let actual = try actualExpression.evaluate() else { return .fail } + + return PredicateStatus(bool: actual.hasPrefix(startingSubstring)) } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { - @objc public class func beginWithMatcher(_ expected: Any) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in +#if canImport(Darwin) +extension NMBPredicate { + @objc public class func beginWithMatcher(_ expected: Any) -> NMBPredicate { + return NMBPredicate { actualExpression in let actual = try actualExpression.evaluate() - if (actual as? String) != nil { + if actual is String { let expr = actualExpression.cast { $0 as? String } - return try beginWith(expected as! String).matches(expr, failureMessage: failureMessage) + // swiftlint:disable:next force_cast + return try beginWith(expected as! String).satisfies(expr).toObjectiveC() } else { let expr = actualExpression.cast { $0 as? NMBOrderedCollection } - return try beginWith(expected).matches(expr, failureMessage: failureMessage) + return try beginWith(expected).satisfies(expr).toObjectiveC() } } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeginWithPrefix.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeginWithPrefix.swift new file mode 100644 index 0000000..c3a79b1 --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeginWithPrefix.swift @@ -0,0 +1,39 @@ +/// A Nimble matcher that succeeds when the exepected sequence is a prefix of the actual sequence. +/// +/// This is a matcher abstraction for https://developer.apple.com/documentation/swift/sequence/2854218-starts +public func beginWith(prefix expectedPrefix: Seq2?) + -> Predicate where Seq1.Element: Equatable, Seq1.Element == Seq2.Element { + return Predicate.define("begin with <\(stringify(expectedPrefix))>") { (actualExpression, msg) in + let actualPrefix = try actualExpression.evaluate() + switch (expectedPrefix, actualPrefix) { + case (nil, _?): + return PredicateResult(status: .fail, message: msg.appendedBeNilHint()) + case (nil, nil), (_, nil): + return PredicateResult(status: .fail, message: msg) + case (let expected?, let actual?): + let matches = actual.starts(with: expected) + return PredicateResult(bool: matches, message: msg) + } + } +} + +/// A Nimble matcher that succeeds when the expected sequence is the prefix of the actual sequence, using the given predicate as the equivalence test. +/// +/// This is a matcher abstraction for https://developer.apple.com/documentation/swift/sequence/2996828-starts +public func beginWith( + prefix expectedPrefix: Seq2?, + by areEquivalent: @escaping (Seq1.Element, Seq2.Element) -> Bool +) -> Predicate { + return Predicate.define("begin with <\(stringify(expectedPrefix))>") { (actualExpression, msg) in + let actualPrefix = try actualExpression.evaluate() + switch (expectedPrefix, actualPrefix) { + case (nil, _?): + return PredicateResult(status: .fail, message: msg.appendedBeNilHint()) + case (nil, nil), (_, nil): + return PredicateResult(status: .fail, message: msg) + case (let expected?, let actual?): + let matches = actual.starts(with: expected, by: areEquivalent) + return PredicateResult(bool: matches, message: msg) + } + } +} diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/Contain.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/Contain.swift index 2c84c5c..c7fc15b 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/Contain.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/Contain.swift @@ -1,21 +1,55 @@ +#if canImport(Foundation) import Foundation +#endif -/// A Nimble matcher that succeeds when the actual sequence contains the expected value. -public func contain(_ items: T...) -> Predicate - where S.Iterator.Element == T { +/// A Nimble matcher that succeeds when the actual sequence contains the expected values. +public func contain(_ items: S.Element...) -> Predicate where S.Element: Equatable { return contain(items) } -public func contain(_ items: [T]) -> Predicate - where S.Iterator.Element == T { +/// A Nimble matcher that succeeds when the actual sequence contains the expected values. +public func contain(_ items: [S.Element]) -> Predicate where S.Element: Equatable { return Predicate.simple("contain <\(arrayAsString(items))>") { actualExpression in - if let actual = try actualExpression.evaluate() { - let matches = items.all { - return actual.contains($0) - } - return PredicateStatus(bool: matches) + guard let actual = try actualExpression.evaluate() else { return .fail } + + let matches = items.allSatisfy { + return actual.contains($0) + } + return PredicateStatus(bool: matches) + } +} + +/// A Nimble matcher that succeeds when the actual set contains the expected values. +public func contain(_ items: S.Element...) -> Predicate where S.Element: Equatable { + return contain(items) +} + +/// A Nimble matcher that succeeds when the actual set contains the expected values. +public func contain(_ items: [S.Element]) -> Predicate where S.Element: Equatable { + return Predicate.simple("contain <\(arrayAsString(items))>") { actualExpression in + guard let actual = try actualExpression.evaluate() else { return .fail } + + let matches = items.allSatisfy { + return actual.contains($0) } - return .fail + return PredicateStatus(bool: matches) + } +} + +/// A Nimble matcher that succeeds when the actual set contains the expected values. +public func contain(_ items: S.Element...) -> Predicate where S.Element: Equatable { + return contain(items) +} + +/// A Nimble matcher that succeeds when the actual set contains the expected values. +public func contain(_ items: [S.Element]) -> Predicate where S.Element: Equatable { + return Predicate.simple("contain <\(arrayAsString(items))>") { actualExpression in + guard let actual = try actualExpression.evaluate() else { return .fail } + + let matches = items.allSatisfy { + return actual.contains($0) + } + return PredicateStatus(bool: matches) } } @@ -26,17 +60,17 @@ public func contain(_ substrings: String...) -> Predicate { public func contain(_ substrings: [String]) -> Predicate { return Predicate.simple("contain <\(arrayAsString(substrings))>") { actualExpression in - if let actual = try actualExpression.evaluate() { - let matches = substrings.all { - let range = actual.range(of: $0) - return range != nil && !range!.isEmpty - } - return PredicateStatus(bool: matches) + guard let actual = try actualExpression.evaluate() else { return .fail } + + let matches = substrings.allSatisfy { + let range = actual.range(of: $0) + return range != nil && !range!.isEmpty } - return .fail + return PredicateStatus(bool: matches) } } +#if canImport(Foundation) /// A Nimble matcher that succeeds when the actual string contains the expected substring. public func contain(_ substrings: NSString...) -> Predicate { return contain(substrings) @@ -44,13 +78,13 @@ public func contain(_ substrings: NSString...) -> Predicate { public func contain(_ substrings: [NSString]) -> Predicate { return Predicate.simple("contain <\(arrayAsString(substrings))>") { actualExpression in - if let actual = try actualExpression.evaluate() { - let matches = substrings.all { actual.range(of: $0.description).length != 0 } - return PredicateStatus(bool: matches) - } - return .fail + guard let actual = try actualExpression.evaluate() else { return .fail } + + let matches = substrings.allSatisfy { actual.range(of: $0.description).length != 0 } + return PredicateStatus(bool: matches) } } +#endif /// A Nimble matcher that succeeds when the actual collection contains the expected object. public func contain(_ items: Any?...) -> Predicate { @@ -60,17 +94,18 @@ public func contain(_ items: Any?...) -> Predicate { public func contain(_ items: [Any?]) -> Predicate { return Predicate.simple("contain <\(arrayAsString(items))>") { actualExpression in guard let actual = try actualExpression.evaluate() else { return .fail } - let matches = items.all { item in + + let matches = items.allSatisfy { item in return item.map { actual.contains($0) } ?? false } return PredicateStatus(bool: matches) } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { - @objc public class func containMatcher(_ expected: [NSObject]) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in +#if canImport(Darwin) +extension NMBPredicate { + @objc public class func containMatcher(_ expected: [NSObject]) -> NMBPredicate { + return NMBPredicate { actualExpression in let location = actualExpression.location let actualValue = try actualExpression.evaluate() if let value = actualValue as? NMBContainer { @@ -78,17 +113,25 @@ extension NMBObjCMatcher { // A straightforward cast on the array causes this to crash, so we have to cast the individual items let expectedOptionals: [Any?] = expected.map({ $0 as Any? }) - return try contain(expectedOptionals).matches(expr, failureMessage: failureMessage) + return try contain(expectedOptionals).satisfies(expr).toObjectiveC() } else if let value = actualValue as? NSString { let expr = Expression(expression: ({ value as String }), location: location) - return try contain(expected as! [String]).matches(expr, failureMessage: failureMessage) - } else if actualValue != nil { - // swiftlint:disable:next line_length - failureMessage.postfixMessage = "contain <\(arrayAsString(expected))> (only works for NSArrays, NSSets, NSHashTables, and NSStrings)" + // swiftlint:disable:next force_cast + return try contain(expected as! [String]).satisfies(expr).toObjectiveC() + } + + let message: ExpectationMessage + if actualValue != nil { + message = ExpectationMessage.expectedActualValueTo( + // swiftlint:disable:next line_length + "contain <\(arrayAsString(expected))> (only works for NSArrays, NSSets, NSHashTables, and NSStrings)" + ) } else { - failureMessage.postfixMessage = "contain <\(arrayAsString(expected))>" + message = ExpectationMessage + .expectedActualValueTo("contain <\(arrayAsString(expected))>") + .appendedBeNilHint() } - return false + return NMBPredicateResult(status: .fail, message: message.toObjectiveC()) } } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/ContainElementSatisfying.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/ContainElementSatisfying.swift index 8a23a6c..2e7875b 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/ContainElementSatisfying.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/ContainElementSatisfying.swift @@ -1,7 +1,6 @@ -import Foundation - -public func containElementSatisfying(_ predicate: @escaping ((T) -> Bool), _ predicateDescription: String = "") -> Predicate where S.Iterator.Element == T { - +public func containElementSatisfying( + _ predicate: @escaping ((S.Element) -> Bool), _ predicateDescription: String = "" +) -> Predicate { return Predicate.define { actualExpression in let message: ExpectationMessage if predicateDescription == "" { @@ -24,35 +23,39 @@ public func containElementSatisfying(_ predicate: @escaping ((T) } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) - extension NMBObjCMatcher { - @objc public class func containElementSatisfyingMatcher(_ predicate: @escaping ((NSObject) -> Bool)) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let value = try actualExpression.evaluate() - guard let enumeration = value as? NSFastEnumeration else { - // swiftlint:disable:next line_length - failureMessage.postfixMessage = "containElementSatisfying must be provided an NSFastEnumeration object" - failureMessage.actualValue = nil - failureMessage.expected = "" - failureMessage.to = "" - return false - } +#if canImport(Darwin) +import class Foundation.NSObject +import struct Foundation.NSFastEnumerationIterator +import protocol Foundation.NSFastEnumeration + +extension NMBPredicate { + @objc public class func containElementSatisfyingMatcher(_ predicate: @escaping ((NSObject) -> Bool)) -> NMBPredicate { + return NMBPredicate { actualExpression in + let value = try actualExpression.evaluate() + guard let enumeration = value as? NSFastEnumeration else { + let message = ExpectationMessage.fail( + "containElementSatisfying must be provided an NSFastEnumeration object" + ) + return NMBPredicateResult(status: .fail, message: message.toObjectiveC()) + } - var iterator = NSFastEnumerationIterator(enumeration) - while let item = iterator.next() { - guard let object = item as? NSObject else { - continue - } + let message = ExpectationMessage + .expectedTo("find object in collection that satisfies predicate") + .toObjectiveC() - if predicate(object) { - return true - } + var iterator = NSFastEnumerationIterator(enumeration) + while let item = iterator.next() { + guard let object = item as? NSObject else { + continue } - failureMessage.actualValue = nil - failureMessage.postfixMessage = "find object in collection that satisfies predicate" - return false + if predicate(object) { + return NMBPredicateResult(status: .matches, message: message) + } } + + return NMBPredicateResult(status: .doesNotMatch, message: message) } } +} #endif diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/ElementsEqual.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/ElementsEqual.swift new file mode 100644 index 0000000..708cf1c --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/ElementsEqual.swift @@ -0,0 +1,42 @@ +/// A Nimble matcher that succeeds when the actual sequence and the exepected sequence contain the same elements in +/// the same order. +/// +/// This is a matcher abstraction for https://developer.apple.com/documentation/swift/sequence/2854213-elementsequal +public func elementsEqual( + _ expectedValue: Seq2? +) -> Predicate where Seq1.Element: Equatable, Seq1.Element == Seq2.Element { + return Predicate.define("elementsEqual <\(stringify(expectedValue))>") { (actualExpression, msg) in + let actualValue = try actualExpression.evaluate() + switch (expectedValue, actualValue) { + case (nil, _?): + return PredicateResult(status: .fail, message: msg.appendedBeNilHint()) + case (nil, nil), (_, nil): + return PredicateResult(status: .fail, message: msg) + case (let expected?, let actual?): + let matches = expected.elementsEqual(actual) + return PredicateResult(bool: matches, message: msg) + } + } +} + +/// A Nimble matcher that succeeds when the actual sequence and the exepected sequence contain equivalent elements in +/// the same order, using the given predicate as the equivalence test. +/// +/// This is a matcher abstraction for https://developer.apple.com/documentation/swift/sequence/2949668-elementsequal +public func elementsEqual( + _ expectedValue: Seq2?, + by areEquivalent: @escaping (Seq1.Element, Seq2.Element) -> Bool +) -> Predicate { + return Predicate.define("elementsEqual <\(stringify(expectedValue))>") { (actualExpression, msg) in + let actualValue = try actualExpression.evaluate() + switch (expectedValue, actualValue) { + case (nil, _?): + return PredicateResult(status: .fail, message: msg.appendedBeNilHint()) + case (nil, nil), (_, nil): + return PredicateResult(status: .fail, message: msg) + case (let expected?, let actual?): + let matches = actual.elementsEqual(expected, by: areEquivalent) + return PredicateResult(bool: matches, message: msg) + } + } +} diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/EndWith.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/EndWith.swift index 80a06ca..16c4d06 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/EndWith.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/EndWith.swift @@ -2,21 +2,19 @@ import Foundation /// A Nimble matcher that succeeds when the actual sequence's last element /// is equal to the expected value. -public func endWith(_ endingElement: T) -> Predicate - where S.Iterator.Element == T { +public func endWith(_ endingElement: S.Element) -> Predicate where S.Element: Equatable { return Predicate.simple("end with <\(endingElement)>") { actualExpression in - if let actualValue = try actualExpression.evaluate() { - var actualGenerator = actualValue.makeIterator() - var lastItem: T? - var item: T? - repeat { - lastItem = item - item = actualGenerator.next() - } while(item != nil) + guard let actualValue = try actualExpression.evaluate() else { return .fail } - return PredicateStatus(bool: lastItem == endingElement) - } - return .fail + var actualGenerator = actualValue.makeIterator() + var lastItem: S.Element? + var item: S.Element? + repeat { + lastItem = item + item = actualGenerator.next() + } while(item != nil) + + return PredicateStatus(bool: lastItem == endingElement) } } @@ -25,6 +23,7 @@ public func endWith(_ endingElement: T) -> Predicate< public func endWith(_ endingElement: Any) -> Predicate { return Predicate.simple("end with <\(endingElement)>") { actualExpression in guard let collection = try actualExpression.evaluate() else { return .fail } + guard collection.count > 0 else { return PredicateStatus(bool: false) } #if os(Linux) guard let collectionValue = collection.object(at: collection.count - 1) as? NSObject else { @@ -43,24 +42,24 @@ public func endWith(_ endingElement: Any) -> Predicate { /// expected substring's length. public func endWith(_ endingSubstring: String) -> Predicate { return Predicate.simple("end with <\(endingSubstring)>") { actualExpression in - if let collection = try actualExpression.evaluate() { - return PredicateStatus(bool: collection.hasSuffix(endingSubstring)) - } - return .fail + guard let collection = try actualExpression.evaluate() else { return .fail } + + return PredicateStatus(bool: collection.hasSuffix(endingSubstring)) } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { - @objc public class func endWithMatcher(_ expected: Any) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in +#if canImport(Darwin) +extension NMBPredicate { + @objc public class func endWithMatcher(_ expected: Any) -> NMBPredicate { + return NMBPredicate { actualExpression in let actual = try actualExpression.evaluate() - if (actual as? String) != nil { + if actual is String { let expr = actualExpression.cast { $0 as? String } - return try endWith(expected as! String).matches(expr, failureMessage: failureMessage) + // swiftlint:disable:next force_cast + return try endWith(expected as! String).satisfies(expr).toObjectiveC() } else { let expr = actualExpression.cast { $0 as? NMBOrderedCollection } - return try endWith(expected).matches(expr, failureMessage: failureMessage) + return try endWith(expected).satisfies(expr).toObjectiveC() } } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/Equal.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/Equal.swift index b8ac2c9..190edb4 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/Equal.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/Equal.swift @@ -1,5 +1,3 @@ -import Foundation - /// A Nimble matcher that succeeds when the actual value is equal to the expected value. /// Values can support equal by supporting the Equatable protocol. /// @@ -19,42 +17,6 @@ public func equal(_ expectedValue: T?) -> Predicate { } } -/// A Nimble matcher that succeeds when the actual value is equal to the expected value. -/// Values can support equal by supporting the Equatable protocol. -/// -/// @see beCloseTo if you want to match imprecise types (eg - floats, doubles). -public func equal(_ expectedValue: [T: C]?) -> Predicate<[T: C]> { - return Predicate.define("equal <\(stringify(expectedValue))>") { actualExpression, msg in - let actualValue = try actualExpression.evaluate() - switch (expectedValue, actualValue) { - case (nil, _?): - return PredicateResult(status: .fail, message: msg.appendedBeNilHint()) - case (nil, nil), (_, nil): - return PredicateResult(status: .fail, message: msg) - case (let expected?, let actual?): - let matches = expected == actual - return PredicateResult(bool: matches, message: msg) - } - } -} - -/// A Nimble matcher that succeeds when the actual collection is equal to the expected collection. -/// Items must implement the Equatable protocol. -public func equal(_ expectedValue: [T]?) -> Predicate<[T]> { - return Predicate.define("equal <\(stringify(expectedValue))>") { actualExpression, msg in - let actualValue = try actualExpression.evaluate() - switch (expectedValue, actualValue) { - case (nil, _?): - return PredicateResult(status: .fail, message: msg.appendedBeNilHint()) - case (nil, nil), (_, nil): - return PredicateResult(status: .fail, message: msg) - case (let expected?, let actual?): - let matches = expected == actual - return PredicateResult(bool: matches, message: msg) - } - } -} - /// A Nimble matcher allowing comparison of collection with optional type public func equal(_ expectedValue: [T?]) -> Predicate<[T?]> { return Predicate.define("equal <\(stringify(expectedValue))>") { actualExpression, msg in @@ -65,32 +27,8 @@ public func equal(_ expectedValue: [T?]) -> Predicate<[T?]> { ) } - let doesNotMatch = PredicateResult( - status: .doesNotMatch, - message: msg - ) - - if expectedValue.count != actualValue.count { - return doesNotMatch - } - - for (index, item) in actualValue.enumerated() { - let otherItem = expectedValue[index] - if item == nil && otherItem == nil { - continue - } else if item == nil && otherItem != nil { - return doesNotMatch - } else if item != nil && otherItem == nil { - return doesNotMatch - } else if item! != otherItem! { - return doesNotMatch - } - } - - return PredicateResult( - status: .matches, - message: msg - ) + let matches = expectedValue == actualValue + return PredicateResult(bool: matches, message: msg) } } @@ -131,7 +69,7 @@ private func equal(_ expectedValue: Set?, stringify: @escaping (Set?) - errorMessage = .expectedCustomValueTo( "equal <\(stringify(expectedValue))>", - "<\(stringify(actualValue))>" + actual: "<\(stringify(actualValue))>" ) if expectedValue == actualValue { @@ -197,9 +135,11 @@ public func !=(lhs: Expectation<[T: C]>, rhs: [T: C]?) { lhs.toNot(equal(rhs)) } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { - @objc public class func equalMatcher(_ expected: NSObject) -> NMBMatcher { +#if canImport(Darwin) +import class Foundation.NSObject + +extension NMBPredicate { + @objc public class func equalMatcher(_ expected: NSObject) -> NMBPredicate { return NMBPredicate { actualExpression in return try equal(expected).satisfies(actualExpression).toObjectiveC() } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/HaveCount.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/HaveCount.swift index 3529da8..20397f5 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/HaveCount.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/HaveCount.swift @@ -1,5 +1,3 @@ -import Foundation - // The `haveCount` matchers do not print the full string representation of the collection value, // instead they only print the type name and the expected count. This makes it easier to understand // the reason for failed expectations. See: https://github.com/Quick/Nimble/issues/308. @@ -7,13 +5,13 @@ import Foundation /// A Nimble matcher that succeeds when the actual Collection's count equals /// the expected value -public func haveCount(_ expectedValue: T.IndexDistance) -> Predicate { +public func haveCount(_ expectedValue: Int) -> Predicate { return Predicate.define { actualExpression in if let actualValue = try actualExpression.evaluate() { let message = ExpectationMessage .expectedCustomValueTo( "have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))", - "\(actualValue.count)" + actual: "\(actualValue.count)" ) .appended(details: "Actual Value: \(stringify(actualValue))") @@ -33,7 +31,7 @@ public func haveCount(_ expectedValue: Int) -> Predicate { let message = ExpectationMessage .expectedCustomValueTo( "have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))", - "\(actualValue.count)" + actual: "\(actualValue.count)" ) .appended(details: "Actual Value: \(stringify(actualValue))") @@ -45,20 +43,31 @@ public func haveCount(_ expectedValue: Int) -> Predicate { } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { - @objc public class func haveCountMatcher(_ expected: NSNumber) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in +#if canImport(Darwin) +import Foundation + +extension NMBPredicate { + @objc public class func haveCountMatcher(_ expected: NSNumber) -> NMBPredicate { + return NMBPredicate { actualExpression in let location = actualExpression.location let actualValue = try actualExpression.evaluate() if let value = actualValue as? NMBCollection { let expr = Expression(expression: ({ value as NMBCollection}), location: location) - return try haveCount(expected.intValue).matches(expr, failureMessage: failureMessage) - } else if let actualValue = actualValue { - failureMessage.postfixMessage = "get type of NSArray, NSSet, NSDictionary, or NSHashTable" - failureMessage.actualValue = "\(String(describing: type(of: actualValue)))" + return try haveCount(expected.intValue).satisfies(expr).toObjectiveC() + } + + let message: ExpectationMessage + if let actualValue = actualValue { + message = ExpectationMessage.expectedCustomValueTo( + "get type of NSArray, NSSet, NSDictionary, or NSHashTable", + actual: "\(String(describing: type(of: actualValue)))" + ) + } else { + message = ExpectationMessage + .expectedActualValueTo("have a collection with count \(stringify(expected.intValue))") + .appendedBeNilHint() } - return false + return NMBPredicateResult(status: .fail, message: message.toObjectiveC()) } } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/Match.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/Match.swift index f738daf..93363b3 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/Match.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/Match.swift @@ -1,29 +1,23 @@ -import Foundation - /// A Nimble matcher that succeeds when the actual string satisfies the regular expression /// described by the expected string. public func match(_ expectedValue: String?) -> Predicate { return Predicate.simple("match <\(stringify(expectedValue))>") { actualExpression in - if let actual = try actualExpression.evaluate() { - if let regexp = expectedValue { - let bool = actual.range(of: regexp, options: .regularExpression) != nil - return PredicateStatus(bool: bool) - } - } + guard let actual = try actualExpression.evaluate(), let regexp = expectedValue else { return .fail } - return .fail + let bool = actual.range(of: regexp, options: .regularExpression) != nil + return PredicateStatus(bool: bool) } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +#if canImport(Darwin) +import class Foundation.NSString -extension NMBObjCMatcher { - @objc public class func matchMatcher(_ expected: NSString) -> NMBMatcher { +extension NMBPredicate { + @objc public class func matchMatcher(_ expected: NSString) -> NMBPredicate { return NMBPredicate { actualExpression in let actual = actualExpression.cast { $0 as? String } return try match(expected.description).satisfies(actual).toObjectiveC() } } } - #endif diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/MatchError.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/MatchError.swift index 4ad71d4..3edc99b 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/MatchError.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/MatchError.swift @@ -1,5 +1,3 @@ -import Foundation - /// A Nimble matcher that succeeds when the actual expression evaluates to an /// error from the specified case. /// @@ -9,9 +7,7 @@ public func matchError(_ error: T) -> Predicate { return Predicate.define { actualExpression in let actualError = try actualExpression.evaluate() - let failureMessage = FailureMessage() - setFailureMessageForError( - failureMessage, + let message = messageForError( postfixMessageVerb: "match", actualError: actualError, error: error @@ -22,7 +18,7 @@ public func matchError(_ error: T) -> Predicate { matches = true } - return PredicateResult(bool: matches, message: failureMessage.toExpectationMessage()) + return PredicateResult(bool: matches, message: message) } } @@ -35,9 +31,7 @@ public func matchError(_ error: T) -> Predicate { return Predicate.define { actualExpression in let actualError = try actualExpression.evaluate() - let failureMessage = FailureMessage() - setFailureMessageForError( - failureMessage, + let message = messageForError( postfixMessageVerb: "match", actualError: actualError, error: error @@ -48,7 +42,7 @@ public func matchError(_ error: T) -> Predicate { matches = true } - return PredicateResult(bool: matches, message: failureMessage.toExpectationMessage()) + return PredicateResult(bool: matches, message: message) } } @@ -58,9 +52,7 @@ public func matchError(_ errorType: T.Type) -> Predicate { return Predicate.define { actualExpression in let actualError = try actualExpression.evaluate() - let failureMessage = FailureMessage() - setFailureMessageForError( - failureMessage, + let message = messageForError( postfixMessageVerb: "match", actualError: actualError, errorType: errorType @@ -71,6 +63,6 @@ public func matchError(_ errorType: T.Type) -> Predicate { matches = true } - return PredicateResult(bool: matches, message: failureMessage.toExpectationMessage()) + return PredicateResult(bool: matches, message: message) } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift index abcafa9..cba4d33 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift @@ -9,7 +9,7 @@ /// Use the Matcher protocol instead of this type to accept custom matchers as /// input parameters. /// @see allPass for an example that uses accepts other matchers as input. -@available(*, deprecated, message: "Use to Predicate instead") +@available(*, deprecated, message: "Use Predicate instead") public struct MatcherFunc: Matcher { public let matcher: (Expression, FailureMessage) throws -> Bool @@ -28,6 +28,7 @@ public struct MatcherFunc: Matcher { /// Compatibility layer to new Matcher API. Converts an old-style matcher to a new one. /// Note: You should definitely spend the time to convert to the new api as soon as possible /// since this struct type is deprecated. + @available(*, deprecated, message: "Use Predicate directly instead") public var predicate: Predicate { return Predicate.fromDeprecatedMatcher(self) } @@ -44,7 +45,7 @@ public struct MatcherFunc: Matcher { /// Use the Matcher protocol instead of this type to accept custom matchers as /// input parameters. /// @see allPass for an example that uses accepts other matchers as input. -@available(*, deprecated, message: "Use to Predicate instead") +@available(*, deprecated, message: "Use Predicate instead") public struct NonNilMatcherFunc: Matcher { public let matcher: (Expression, FailureMessage) throws -> Bool @@ -79,6 +80,7 @@ public struct NonNilMatcherFunc: Matcher { /// Compatibility layer to new Matcher API. Converts an old-style matcher to a new one. /// Note: You should definitely spend the time to convert to the new api as soon as possible /// since this struct type is deprecated. + @available(*, deprecated, message: "Use Predicate directly instead") public var predicate: Predicate { return Predicate.fromDeprecatedMatcher(self) } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift index 6f8f103..720ced0 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift @@ -1,6 +1,6 @@ import Foundation // `CGFloat` is in Foundation (swift-corelibs-foundation) on Linux. -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +#if canImport(Darwin) import CoreGraphics #endif @@ -12,23 +12,24 @@ public protocol Matcher { func doesNotMatch(_ actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool } +@available(*, deprecated) extension Matcher { var predicate: Predicate { return Predicate.fromDeprecatedMatcher(self) } var toClosure: (Expression, FailureMessage, Bool) throws -> Bool { - return ({ expr, msg, expectedResult in + return { expr, msg, expectedResult in if expectedResult { return try self.matches(expr, failureMessage: msg) } else { return try self.doesNotMatch(expr, failureMessage: msg) } - }) + } } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +#if canImport(Darwin) /// Objective-C interface to the Swift variant of Matcher. @objc public protocol NMBMatcher { func matches(_ actualBlock: @escaping () -> NSObject?, failureMessage: FailureMessage, location: SourceLocation) -> Bool @@ -41,7 +42,8 @@ public protocol NMBContainer { func contains(_ anObject: Any) -> Bool } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +#if canImport(Darwin) +// swiftlint:disable:next todo // FIXME: NSHashTable can not conform to NMBContainer since swift-DEVELOPMENT-SNAPSHOT-2016-04-25-a //extension NSHashTable : NMBContainer {} // Corelibs Foundation does not include this class yet #endif @@ -54,7 +56,7 @@ public protocol NMBCollection { var count: Int { get } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +#if canImport(Darwin) extension NSHashTable: NMBCollection {} // Corelibs Foundation does not include these classes yet extension NSMapTable: NMBCollection {} #endif @@ -127,28 +129,25 @@ extension NSDate: TestOutputStringConvertible { } } +#if canImport(Darwin) /// Protocol for types to support beLessThan(), beLessThanOrEqualTo(), /// beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers. /// /// Types that conform to Swift's Comparable protocol will work implicitly too -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) @objc public protocol NMBComparable { func NMB_compare(_ otherObject: NMBComparable!) -> ComparisonResult } -#else -// This should become obsolete once Corelibs Foundation adds Comparable conformance to NSNumber -public protocol NMBComparable { - func NMB_compare(_ otherObject: NMBComparable!) -> ComparisonResult -} -#endif extension NSNumber: NMBComparable { public func NMB_compare(_ otherObject: NMBComparable!) -> ComparisonResult { + // swiftlint:disable:next force_cast return compare(otherObject as! NSNumber) } } extension NSString: NMBComparable { public func NMB_compare(_ otherObject: NMBComparable!) -> ComparisonResult { + // swiftlint:disable:next force_cast return compare(otherObject as! String) } } +#endif diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/PostNotification.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/PostNotification.swift index 16af011..cf20186 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/PostNotification.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/PostNotification.swift @@ -1,75 +1,115 @@ +#if canImport(Foundation) import Foundation -// A workaround to SR-6419. -extension NotificationCenter { -#if !(os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) - #if swift(>=4.0) - #if swift(>=4.0.2) - #else - func addObserver(forName name: Notification.Name?, object obj: Any?, queue: OperationQueue?, using block: @escaping (Notification) -> Void) -> NSObjectProtocol { - return addObserver(forName: name, object: obj, queue: queue, usingBlock: block) - } - #endif - #elseif swift(>=3.2) - #if swift(>=3.2.2) - #else - // swiftlint:disable:next line_length - func addObserver(forName name: Notification.Name?, object obj: Any?, queue: OperationQueue?, using block: @escaping (Notification) -> Void) -> NSObjectProtocol { - return addObserver(forName: name, object: obj, queue: queue, usingBlock: block) - } - #endif - #else - // swiftlint:disable:next line_length - func addObserver(forName name: Notification.Name?, object obj: Any?, queue: OperationQueue?, using block: @escaping (Notification) -> Void) -> NSObjectProtocol { - return addObserver(forName: name, object: obj, queue: queue, usingBlock: block) - } - #endif -#endif -} - internal class NotificationCollector { private(set) var observedNotifications: [Notification] private let notificationCenter: NotificationCenter - #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) - private var token: AnyObject? - #else - private var token: NSObjectProtocol? - #endif + private let names: Set + private var tokens: [NSObjectProtocol] - required init(notificationCenter: NotificationCenter) { + required init(notificationCenter: NotificationCenter, names: Set = []) { self.notificationCenter = notificationCenter self.observedNotifications = [] + self.names = names + self.tokens = [] } func startObserving() { - // swiftlint:disable:next line_length - self.token = self.notificationCenter.addObserver(forName: nil, object: nil, queue: nil, using: { [weak self] n in - // linux-swift gets confused by .append(n) - self?.observedNotifications.append(n) - }) + func addObserver(forName name: Notification.Name?) -> NSObjectProtocol { + return notificationCenter.addObserver(forName: name, object: nil, queue: nil) { [weak self] notification in + // linux-swift gets confused by .append(n) + self?.observedNotifications.append(notification) + } + } + + if names.isEmpty { + tokens.append(addObserver(forName: nil)) + } else { + names.forEach { name in + tokens.append(addObserver(forName: name)) + } + } } deinit { - #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) - if let token = self.token { - self.notificationCenter.removeObserver(token) - } - #else - if let token = self.token as? AnyObject { - self.notificationCenter.removeObserver(token) - } - #endif + tokens.forEach { token in + notificationCenter.removeObserver(token) + } } } private let mainThread = pthread_self() +private func _postNotifications( + _ predicate: Predicate<[Notification]>, + from center: NotificationCenter, + names: Set = [] +) -> Predicate { + _ = mainThread // Force lazy-loading of this value + let collector = NotificationCollector(notificationCenter: center, names: names) + collector.startObserving() + var once: Bool = false + + return Predicate { actualExpression in + let collectorNotificationsExpression = Expression( + memoizedExpression: { _ in + return collector.observedNotifications + }, + location: actualExpression.location, + withoutCaching: true + ) + + assert(pthread_equal(mainThread, pthread_self()) != 0, "Only expecting closure to be evaluated on main thread.") + if !once { + once = true + _ = try actualExpression.evaluate() + } + + let actualValue: String + if collector.observedNotifications.isEmpty { + actualValue = "no notifications" + } else { + actualValue = "<\(stringify(collector.observedNotifications))>" + } + + var result = try predicate.satisfies(collectorNotificationsExpression) + result.message = result.message.replacedExpectation { message in + return .expectedCustomValueTo(message.expectedMessage, actual: actualValue) + } + return result + } +} + +public func postNotifications( + _ predicate: Predicate<[Notification]>, + from center: NotificationCenter = .default +) -> Predicate { + _postNotifications(predicate, from: center) +} + +@available(*, deprecated, renamed: "postNotifications(_:from:)") +public func postNotifications( + _ predicate: Predicate<[Notification]>, + fromNotificationCenter center: NotificationCenter +) -> Predicate { + postNotifications(predicate, from: center) +} + +#if os(macOS) +public func postDistributedNotifications( + _ predicate: Predicate<[Notification]>, + from center: DistributedNotificationCenter = .default(), + names: Set +) -> Predicate { + _postNotifications(predicate, from: center, names: names) +} +#endif + +@available(*, deprecated, message: "Use Predicate instead") public func postNotifications( _ notificationsMatcher: T, - fromNotificationCenter center: NotificationCenter = .default) - -> Predicate - where T: Matcher, T.ValueType == [Notification] -{ + from center: NotificationCenter = .default +) -> Predicate where T: Matcher, T.ValueType == [Notification] { _ = mainThread // Force lazy-loading of this value let collector = NotificationCollector(notificationCenter: center) collector.startObserving() @@ -96,3 +136,12 @@ public func postNotifications( return PredicateResult(bool: match, message: failureMessage.toExpectationMessage()) } } + +@available(*, deprecated, renamed: "postNotifications(_:from:)") +public func postNotifications( + _ notificationsMatcher: T, + fromNotificationCenter center: NotificationCenter +) -> Predicate where T: Matcher, T.ValueType == [Notification] { + return postNotifications(notificationsMatcher, from: center) +} +#endif diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/Predicate.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/Predicate.swift index 4810b9b..fa0128f 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/Predicate.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/Predicate.swift @@ -1,6 +1,5 @@ // New Matcher API // -import Foundation /// A Predicate is part of the new matcher API that provides assertions to expectations. /// @@ -45,17 +44,17 @@ extension Predicate { /// Defines a predicate with a default message that can be returned in the closure /// Also ensures the predicate's actual value cannot pass with `nil` given. - public static func define(_ msg: String, matcher: @escaping (Expression, ExpectationMessage) throws -> PredicateResult) -> Predicate { + public static func define(_ message: String = "match", matcher: @escaping (Expression, ExpectationMessage) throws -> PredicateResult) -> Predicate { return Predicate { actual in - return try matcher(actual, .expectedActualValueTo(msg)) + return try matcher(actual, .expectedActualValueTo(message)) }.requireNonNil } /// Defines a predicate with a default message that can be returned in the closure /// Unlike `define`, this allows nil values to succeed if the given closure chooses to. - public static func defineNilable(_ msg: String, matcher: @escaping (Expression, ExpectationMessage) throws -> PredicateResult) -> Predicate { + public static func defineNilable(_ message: String = "match", matcher: @escaping (Expression, ExpectationMessage) throws -> PredicateResult) -> Predicate { return Predicate { actual in - return try matcher(actual, .expectedActualValueTo(msg)) + return try matcher(actual, .expectedActualValueTo(message)) } } } @@ -65,9 +64,9 @@ extension Predicate { /// error message. /// /// Also ensures the predicate's actual value cannot pass with `nil` given. - public static func simple(_ msg: String, matcher: @escaping (Expression) throws -> PredicateStatus) -> Predicate { + public static func simple(_ message: String = "match", matcher: @escaping (Expression) throws -> PredicateStatus) -> Predicate { return Predicate { actual in - return PredicateResult(status: try matcher(actual), message: .expectedActualValueTo(msg)) + return PredicateResult(status: try matcher(actual), message: .expectedActualValueTo(message)) }.requireNonNil } @@ -75,9 +74,9 @@ extension Predicate { /// error message. /// /// Unlike `simple`, this allows nil values to succeed if the given closure chooses to. - public static func simpleNilable(_ msg: String, matcher: @escaping (Expression) throws -> PredicateStatus) -> Predicate { + public static func simpleNilable(_ message: String = "match", matcher: @escaping (Expression) throws -> PredicateStatus) -> Predicate { return Predicate { actual in - return PredicateResult(status: try matcher(actual), message: .expectedActualValueTo(msg)) + return PredicateResult(status: try matcher(actual), message: .expectedActualValueTo(message)) } } } @@ -166,32 +165,41 @@ public enum PredicateStatus { } } -// Backwards compatibility until Old Matcher API removal -extension Predicate: Matcher { - /// Compatibility layer for old Matcher API, deprecated - public static func fromDeprecatedFullClosure(_ matcher: @escaping (Expression, FailureMessage, Bool) throws -> Bool) -> Predicate { +extension Predicate { + /// Compatibility layer for old Matcher API, deprecated. + /// Emulates the MatcherFunc API + internal static func _fromDeprecatedClosure(_ matcher: @escaping (Expression, FailureMessage) throws -> Bool) -> Predicate { + // swiftlint:disable:previous identifier_name return Predicate { actual in let failureMessage = FailureMessage() - let result = try matcher(actual, failureMessage, true) + let result = try matcher(actual, failureMessage) return PredicateResult( status: PredicateStatus(bool: result), message: failureMessage.toExpectationMessage() ) } } +} - /// Compatibility layer for old Matcher API, deprecated. - /// Emulates the MatcherFunc API - public static func fromDeprecatedClosure(_ matcher: @escaping (Expression, FailureMessage) throws -> Bool) -> Predicate { +// Backwards compatibility until Old Matcher API removal +@available(*, deprecated, message: "Use Predicate directly instead") +extension Predicate: Matcher { + /// Compatibility layer for old Matcher API, deprecated + public static func fromDeprecatedFullClosure(_ matcher: @escaping (Expression, FailureMessage, Bool) throws -> Bool) -> Predicate { return Predicate { actual in let failureMessage = FailureMessage() - let result = try matcher(actual, failureMessage) + let result = try matcher(actual, failureMessage, true) return PredicateResult( status: PredicateStatus(bool: result), message: failureMessage.toExpectationMessage() ) } + } + /// Compatibility layer for old Matcher API, deprecated. + /// Emulates the MatcherFunc API + public static func fromDeprecatedClosure(_ matcher: @escaping (Expression, FailureMessage) throws -> Bool) -> Predicate { + return _fromDeprecatedClosure(matcher) } /// Compatibility layer for old Matcher API, deprecated. @@ -218,6 +226,7 @@ extension Predicate: Matcher { extension Predicate { // Someday, make this public? Needs documentation internal func after(f: @escaping (Expression, PredicateResult) throws -> PredicateResult) -> Predicate { + // swiftlint:disable:previous identifier_name return Predicate { actual -> PredicateResult in let result = try self.satisfies(actual) return try f(actual, result) @@ -241,7 +250,9 @@ extension Predicate { } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +#if canImport(Darwin) +import class Foundation.NSObject + public typealias PredicateBlock = (_ actualExpression: Expression) throws -> NMBPredicateResult public class NMBPredicate: NSObject { diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/RaisesException.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/RaisesException.swift index 459d2cd..7c1b2b2 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/RaisesException.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/RaisesException.swift @@ -1,7 +1,8 @@ -import Foundation - -// This matcher requires the Objective-C, and being built by Xcode rather than the Swift Package Manager -#if (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE +// This matcher requires the Objective-C, and being built by Xcode rather than the Swift Package Manager +#if canImport(Darwin) && !SWIFT_PACKAGE +import class Foundation.NSObject +import class Foundation.NSDictionary +import class Foundation.NSException /// A Nimble matcher that succeeds when the actual expression raises an /// exception with the specified name, reason, and/or userInfo. @@ -12,74 +13,97 @@ import Foundation /// /// nil arguments indicates that the matcher should not attempt to match against /// that parameter. -public func raiseException( - named: String? = nil, +public func raiseException( + named: NSExceptionName? = nil, reason: String? = nil, userInfo: NSDictionary? = nil, - closure: ((NSException) -> Void)? = nil) -> Predicate { - return Predicate { actualExpression in - var exception: NSException? - let capture = NMBExceptionCapture(handler: ({ e in - exception = e - }), finally: nil) - - capture.tryBlock { - _ = try! actualExpression.evaluate() - } + closure: ((NSException) -> Void)? = nil +) -> Predicate { + return raiseException(named: named?.rawValue, reason: reason, userInfo: userInfo, closure: closure) +} - let failureMessage = FailureMessage() - setFailureMessageForException( - failureMessage, - exception: exception, - named: named, - reason: reason, - userInfo: userInfo, - closure: closure - ) +/// A Nimble matcher that succeeds when the actual expression raises an +/// exception with the specified name, reason, and/or userInfo. +/// +/// Alternatively, you can pass a closure to do any arbitrary custom matching +/// to the raised exception. The closure only gets called when an exception +/// is raised. +/// +/// nil arguments indicates that the matcher should not attempt to match against +/// that parameter. +public func raiseException( + named: String?, + reason: String? = nil, + userInfo: NSDictionary? = nil, + closure: ((NSException) -> Void)? = nil +) -> Predicate { + return Predicate { actualExpression in + var exception: NSException? + let capture = NMBExceptionCapture(handler: ({ e in + exception = e + }), finally: nil) - let matches = exceptionMatchesNonNilFieldsOrClosure( - exception, - named: named, - reason: reason, - userInfo: userInfo, - closure: closure - ) - return PredicateResult(bool: matches, message: failureMessage.toExpectationMessage()) + do { + try capture.tryBlockThrows { + _ = try actualExpression.evaluate() + } + } catch { + return PredicateResult(status: .fail, message: .fail("unexpected error thrown: <\(error)>")) } + + let message = messageForException( + exception: exception, + named: named, + reason: reason, + userInfo: userInfo, + closure: closure + ) + + let matches = exceptionMatchesNonNilFieldsOrClosure( + exception, + named: named, + reason: reason, + userInfo: userInfo, + closure: closure + ) + return PredicateResult(bool: matches, message: message) + } } -// swiftlint:disable:next function_parameter_count -internal func setFailureMessageForException( - _ failureMessage: FailureMessage, +internal func messageForException( exception: NSException?, named: String?, reason: String?, userInfo: NSDictionary?, - closure: ((NSException) -> Void)?) { - failureMessage.postfixMessage = "raise exception" + closure: ((NSException) -> Void)? +) -> ExpectationMessage { + var rawMessage: String = "raise exception" - if let named = named { - failureMessage.postfixMessage += " with name <\(named)>" - } - if let reason = reason { - failureMessage.postfixMessage += " with reason <\(reason)>" - } - if let userInfo = userInfo { - failureMessage.postfixMessage += " with userInfo <\(userInfo)>" - } - if closure != nil { - failureMessage.postfixMessage += " that satisfies block" - } - if named == nil && reason == nil && userInfo == nil && closure == nil { - failureMessage.postfixMessage = "raise any exception" - } + if let named = named { + rawMessage += " with name <\(named)>" + } + if let reason = reason { + rawMessage += " with reason <\(reason)>" + } + if let userInfo = userInfo { + rawMessage += " with userInfo <\(userInfo)>" + } + if closure != nil { + rawMessage += " that satisfies block" + } + if named == nil && reason == nil && userInfo == nil && closure == nil { + rawMessage = "raise any exception" + } - if let exception = exception { - // swiftlint:disable:next line_length - failureMessage.actualValue = "\(String(describing: type(of: exception))) { name=\(exception.name), reason='\(stringify(exception.reason))', userInfo=\(stringify(exception.userInfo)) }" - } else { - failureMessage.actualValue = "no exception" - } + let actual: String + if let exception = exception { + // swiftlint:disable:next line_length + actual = "\(String(describing: type(of: exception))) { name=\(exception.name), reason='\(stringify(exception.reason))', userInfo=\(stringify(exception.userInfo)) }" + } else { + actual = "no exception" + } + + return .expectedCustomValueTo(rawMessage, actual: actual) } internal func exceptionMatchesNonNilFieldsOrClosure( @@ -117,88 +141,82 @@ internal func exceptionMatchesNonNilFieldsOrClosure( return matches } -public class NMBObjCRaiseExceptionMatcher: NSObject, NMBMatcher { - internal var _name: String? - internal var _reason: String? - internal var _userInfo: NSDictionary? - internal var _block: ((NSException) -> Void)? +public class NMBObjCRaiseExceptionPredicate: NMBPredicate { + private let _name: String? + private let _reason: String? + private let _userInfo: NSDictionary? + private let _block: ((NSException) -> Void)? - internal init(name: String?, reason: String?, userInfo: NSDictionary?, block: ((NSException) -> Void)?) { + fileprivate init(name: String?, reason: String?, userInfo: NSDictionary?, block: ((NSException) -> Void)?) { _name = name _reason = reason _userInfo = userInfo _block = block - } - @objc public func matches(_ actualBlock: @escaping () -> NSObject?, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - let block: () -> Any? = ({ _ = actualBlock(); return nil }) - let expr = Expression(expression: block, location: location) - - do { - return try raiseException( - named: _name, - reason: _reason, - userInfo: _userInfo, - closure: _block - ).matches(expr, failureMessage: failureMessage) - } catch let error { - failureMessage.stringValue = "unexpected error thrown: <\(error)>" - return false + let predicate: Predicate = raiseException( + named: name, + reason: reason, + userInfo: userInfo, + closure: block + ) + let predicateBlock: PredicateBlock = { actualExpression in + return try predicate.satisfies(actualExpression).toObjectiveC() } + super.init(predicate: predicateBlock) } - @objc public func doesNotMatch(_ actualBlock: @escaping () -> NSObject?, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - return !matches(actualBlock, failureMessage: failureMessage, location: location) - } - - @objc public var named: (_ name: String) -> NMBObjCRaiseExceptionMatcher { - return ({ name in - return NMBObjCRaiseExceptionMatcher( + @objc public var named: (_ name: String) -> NMBObjCRaiseExceptionPredicate { + let (reason, userInfo, block) = (_reason, _userInfo, _block) + return { name in + return NMBObjCRaiseExceptionPredicate( name: name, - reason: self._reason, - userInfo: self._userInfo, - block: self._block + reason: reason, + userInfo: userInfo, + block: block ) - }) + } } - @objc public var reason: (_ reason: String?) -> NMBObjCRaiseExceptionMatcher { - return ({ reason in - return NMBObjCRaiseExceptionMatcher( - name: self._name, + @objc public var reason: (_ reason: String?) -> NMBObjCRaiseExceptionPredicate { + let (name, userInfo, block) = (_name, _userInfo, _block) + return { reason in + return NMBObjCRaiseExceptionPredicate( + name: name, reason: reason, - userInfo: self._userInfo, - block: self._block + userInfo: userInfo, + block: block ) - }) + } } - @objc public var userInfo: (_ userInfo: NSDictionary?) -> NMBObjCRaiseExceptionMatcher { - return ({ userInfo in - return NMBObjCRaiseExceptionMatcher( - name: self._name, - reason: self._reason, + @objc public var userInfo: (_ userInfo: NSDictionary?) -> NMBObjCRaiseExceptionPredicate { + let (name, reason, block) = (_name, _reason, _block) + return { userInfo in + return NMBObjCRaiseExceptionPredicate( + name: name, + reason: reason, userInfo: userInfo, - block: self._block + block: block ) - }) + } } - @objc public var satisfyingBlock: (_ block: ((NSException) -> Void)?) -> NMBObjCRaiseExceptionMatcher { - return ({ block in - return NMBObjCRaiseExceptionMatcher( - name: self._name, - reason: self._reason, - userInfo: self._userInfo, + @objc public var satisfyingBlock: (_ block: ((NSException) -> Void)?) -> NMBObjCRaiseExceptionPredicate { + let (name, reason, userInfo) = (_name, _reason, _userInfo) + return { block in + return NMBObjCRaiseExceptionPredicate( + name: name, + reason: reason, + userInfo: userInfo, block: block ) - }) + } } } -extension NMBObjCMatcher { - @objc public class func raiseExceptionMatcher() -> NMBObjCRaiseExceptionMatcher { - return NMBObjCRaiseExceptionMatcher(name: nil, reason: nil, userInfo: nil, block: nil) +extension NMBPredicate { + @objc public class func raiseExceptionMatcher() -> NMBObjCRaiseExceptionPredicate { + return NMBObjCRaiseExceptionPredicate(name: nil, reason: nil, userInfo: nil, block: nil) } } #endif diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/SatisfyAllOf.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/SatisfyAllOf.swift index 2b9eb21..7fbeeef 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/SatisfyAllOf.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/SatisfyAllOf.swift @@ -1,7 +1,12 @@ -import Foundation +/// A Nimble matcher that succeeds when the actual value matches with all of the matchers +/// provided in the variable list of matchers. +public func satisfyAllOf(_ predicates: Predicate...) -> Predicate { + return satisfyAllOf(predicates) +} /// A Nimble matcher that succeeds when the actual value matches with all of the matchers /// provided in the variable list of matchers. +@available(*, deprecated, message: "Use Predicate instead") public func satisfyAllOf(_ matchers: U...) -> Predicate where U: Matcher, U.ValueType == T { return satisfyAllOf(matchers.map { $0.predicate }) @@ -23,7 +28,7 @@ internal func satisfyAllOf(_ predicates: [Predicate]) -> Predicate { if let actualValue = try actualExpression.evaluate() { msg = .expectedCustomValueTo( "match all of: " + postfixMessages.joined(separator: ", and "), - "\(actualValue)" + actual: "\(actualValue)" ) } else { msg = .expectedActualValueTo( @@ -39,8 +44,10 @@ public func && (left: Predicate, right: Predicate) -> Predicate { return satisfyAllOf(left, right) } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { +#if canImport(Darwin) +import class Foundation.NSObject + +extension NMBPredicate { @objc public class func satisfyAllOfMatcher(_ matchers: [NMBMatcher]) -> NMBPredicate { return NMBPredicate { actualExpression in if matchers.isEmpty { @@ -60,8 +67,12 @@ extension NMBObjCMatcher { return predicate.satisfies({ try expression.evaluate() }, location: actualExpression.location).toSwift() } else { let failureMessage = FailureMessage() - // swiftlint:disable:next line_length - let success = matcher.matches({ try! expression.evaluate() }, failureMessage: failureMessage, location: actualExpression.location) + let success = matcher.matches( + // swiftlint:disable:next force_try + { try! expression.evaluate() }, + failureMessage: failureMessage, + location: actualExpression.location + ) return PredicateResult(bool: success, message: failureMessage.toExpectationMessage()) } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift index 57b15fd..44615dc 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift @@ -1,7 +1,12 @@ -import Foundation +/// A Nimble matcher that succeeds when the actual value matches with any of the matchers +/// provided in the variable list of matchers. +public func satisfyAnyOf(_ predicates: Predicate...) -> Predicate { + return satisfyAnyOf(predicates) +} /// A Nimble matcher that succeeds when the actual value matches with any of the matchers /// provided in the variable list of matchers. +@available(*, deprecated, message: "Use Predicate instead") public func satisfyAnyOf(_ matchers: U...) -> Predicate where U: Matcher, U.ValueType == T { return satisfyAnyOf(matchers.map { $0.predicate }) @@ -23,7 +28,7 @@ internal func satisfyAnyOf(_ predicates: [Predicate]) -> Predicate { if let actualValue = try actualExpression.evaluate() { msg = .expectedCustomValueTo( "match one of: " + postfixMessages.joined(separator: ", or "), - "\(actualValue)" + actual: "\(actualValue)" ) } else { msg = .expectedActualValueTo( @@ -39,16 +44,20 @@ public func || (left: Predicate, right: Predicate) -> Predicate { return satisfyAnyOf(left, right) } +@available(*, deprecated, message: "Use Predicate instead") public func || (left: NonNilMatcherFunc, right: NonNilMatcherFunc) -> Predicate { return satisfyAnyOf(left, right) } +@available(*, deprecated, message: "Use Predicate instead") public func || (left: MatcherFunc, right: MatcherFunc) -> Predicate { return satisfyAnyOf(left, right) } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) -extension NMBObjCMatcher { +#if canImport(Darwin) +import class Foundation.NSObject + +extension NMBPredicate { @objc public class func satisfyAnyOfMatcher(_ matchers: [NMBMatcher]) -> NMBPredicate { return NMBPredicate { actualExpression in if matchers.isEmpty { @@ -68,8 +77,12 @@ extension NMBObjCMatcher { return predicate.satisfies({ try expression.evaluate() }, location: actualExpression.location).toSwift() } else { let failureMessage = FailureMessage() - // swiftlint:disable:next line_length - let success = matcher.matches({ try! expression.evaluate() }, failureMessage: failureMessage, location: actualExpression.location) + let success = matcher.matches( + // swiftlint:disable:next force_try + { try! expression.evaluate() }, + failureMessage: failureMessage, + location: actualExpression.location + ) return PredicateResult(bool: success, message: failureMessage.toExpectationMessage()) } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/ThrowAssertion.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/ThrowAssertion.swift index 035c744..5bbe96b 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/ThrowAssertion.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/ThrowAssertion.swift @@ -1,8 +1,12 @@ -import Foundation +#if canImport(CwlPreconditionTesting) && (os(macOS) || os(iOS)) +import CwlPreconditionTesting +#elseif canImport(CwlPosixPreconditionTesting) +import CwlPosixPreconditionTesting +#endif -public func throwAssertion() -> Predicate { +public func throwAssertion() -> Predicate { return Predicate { actualExpression in - #if arch(x86_64) && (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE + #if arch(x86_64) && canImport(Darwin) let message = ExpectationMessage.expectedTo("throw an assertion") var actualError: Error? @@ -24,7 +28,7 @@ public func throwAssertion() -> Predicate { } #endif do { - try actualExpression.evaluate() + _ = try actualExpression.evaluate() } catch { actualError = error } @@ -38,15 +42,10 @@ public func throwAssertion() -> Predicate { } else { return PredicateResult(bool: caughtException != nil, message: message) } - #elseif SWIFT_PACKAGE - fatalError("The throwAssertion Nimble matcher does not currently support Swift CLI." + - " You can silence this error by placing the test case inside an #if !SWIFT_PACKAGE" + - " conditional statement") #else fatalError("The throwAssertion Nimble matcher can only run on x86_64 platforms with " + - "Objective-C (e.g. Mac, iPhone 5s or later simulators). You can silence this error " + - "by placing the test case inside an #if arch(x86_64) or (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) conditional statement") - // swiftlint:disable:previous line_length + "Objective-C (e.g. macOS, iPhone 5s or later simulators). You can silence this error " + + "by placing the test case inside an #if arch(x86_64) or canImport(Darwin) conditional statement") #endif } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/ThrowError.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/ThrowError.swift index d294ba3..d5ac732 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/ThrowError.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/ThrowError.swift @@ -1,5 +1,3 @@ -import Foundation - /// A Nimble matcher that succeeds when the actual expression throws an /// error of the specified type or from the specified case. /// @@ -11,7 +9,7 @@ import Foundation /// /// nil arguments indicates that the matcher should not attempt to match against /// that parameter. -public func throwError() -> Predicate { +public func throwError() -> Predicate { return Predicate { actualExpression in var actualError: Error? do { @@ -21,9 +19,15 @@ public func throwError() -> Predicate { } if let actualError = actualError { - return PredicateResult(bool: true, message: .expectedCustomValueTo("throw any error", "<\(actualError)>")) + return PredicateResult( + bool: true, + message: .expectedCustomValueTo("throw any error", actual: "<\(actualError)>") + ) } else { - return PredicateResult(bool: false, message: .expectedCustomValueTo("throw any error", "no error")) + return PredicateResult( + bool: false, + message: .expectedCustomValueTo("throw any error", actual: "no error") + ) } } } @@ -39,7 +43,7 @@ public func throwError() -> Predicate { /// /// nil arguments indicates that the matcher should not attempt to match against /// that parameter. -public func throwError(_ error: T, closure: ((Error) -> Void)? = nil) -> Predicate { +public func throwError(_ error: T, closure: ((Error) -> Void)? = nil) -> Predicate { return Predicate { actualExpression in var actualError: Error? do { @@ -48,9 +52,7 @@ public func throwError(_ error: T, closure: ((Error) -> Void)? = nil) actualError = error } - let failureMessage = FailureMessage() - setFailureMessageForError( - failureMessage, + let message = messageForError( actualError: actualError, error: error, errorType: nil, @@ -72,7 +74,7 @@ public func throwError(_ error: T, closure: ((Error) -> Void)? = nil) } } - return PredicateResult(bool: matches, message: failureMessage.toExpectationMessage()) + return PredicateResult(bool: matches, message: message) } } @@ -87,7 +89,7 @@ public func throwError(_ error: T, closure: ((Error) -> Void)? = nil) /// /// nil arguments indicates that the matcher should not attempt to match against /// that parameter. -public func throwError(_ error: T, closure: ((T) -> Void)? = nil) -> Predicate { +public func throwError(_ error: T, closure: ((T) -> Void)? = nil) -> Predicate { return Predicate { actualExpression in var actualError: Error? do { @@ -96,9 +98,7 @@ public func throwError(_ error: T, closure: ((T) -> Void)? actualError = error } - let failureMessage = FailureMessage() - setFailureMessageForError( - failureMessage, + let message = messageForError( actualError: actualError, error: error, errorType: nil, @@ -120,7 +120,7 @@ public func throwError(_ error: T, closure: ((T) -> Void)? } } - return PredicateResult(bool: matches, message: failureMessage.toExpectationMessage()) + return PredicateResult(bool: matches, message: message) } } @@ -135,9 +135,10 @@ public func throwError(_ error: T, closure: ((T) -> Void)? /// /// nil arguments indicates that the matcher should not attempt to match against /// that parameter. -public func throwError( +public func throwError( errorType: T.Type, - closure: ((T) -> Void)? = nil) -> Predicate { + closure: ((T) -> Void)? = nil +) -> Predicate { return Predicate { actualExpression in var actualError: Error? do { @@ -146,9 +147,7 @@ public func throwError( actualError = error } - let failureMessage = FailureMessage() - setFailureMessageForError( - failureMessage, + let message = messageForError( actualError: actualError, error: nil, errorType: errorType, @@ -187,7 +186,7 @@ public func throwError( } } - return PredicateResult(bool: matches, message: failureMessage.toExpectationMessage()) + return PredicateResult(bool: matches, message: message) } } @@ -198,7 +197,7 @@ public func throwError( /// values of the existential type `Error` in the closure. /// /// The closure only gets called when an error was thrown. -public func throwError(closure: @escaping ((Error) -> Void)) -> Predicate { +public func throwError(closure: @escaping ((Error) -> Void)) -> Predicate { return Predicate { actualExpression in var actualError: Error? do { @@ -207,8 +206,7 @@ public func throwError(closure: @escaping ((Error) -> Void)) -> Predicate { actualError = error } - let failureMessage = FailureMessage() - setFailureMessageForError(failureMessage, actualError: actualError, closure: closure) + let message = messageForError(actualError: actualError, closure: closure) var matches = false if let actualError = actualError { @@ -223,7 +221,7 @@ public func throwError(closure: @escaping ((Error) -> Void)) -> Predicate { } } - return PredicateResult(bool: matches, message: failureMessage.toExpectationMessage()) + return PredicateResult(bool: matches, message: message) } } @@ -234,7 +232,7 @@ public func throwError(closure: @escaping ((Error) -> Void)) -> Predicate { /// values of the existential type `Error` in the closure. /// /// The closure only gets called when an error was thrown. -public func throwError(closure: @escaping ((T) -> Void)) -> Predicate { +public func throwError(closure: @escaping ((T) -> Void)) -> Predicate { return Predicate { actualExpression in var actualError: Error? do { @@ -243,8 +241,7 @@ public func throwError(closure: @escaping ((T) -> Void)) -> Predicate< actualError = error } - let failureMessage = FailureMessage() - setFailureMessageForError(failureMessage, actualError: actualError, closure: closure) + let message = messageForError(actualError: actualError, closure: closure) var matches = false if let actualError = actualError as? T { @@ -259,6 +256,6 @@ public func throwError(closure: @escaping ((T) -> Void)) -> Predicate< } } - return PredicateResult(bool: matches, message: failureMessage.toExpectationMessage()) + return PredicateResult(bool: matches, message: message) } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/ToSucceed.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/ToSucceed.swift index 01369bb..0b52ee9 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Matchers/ToSucceed.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/ToSucceed.swift @@ -25,12 +25,12 @@ public func succeed() -> Predicate<() -> ToSucceedResult> { case .succeeded: return PredicateResult( bool: true, - message: .expectedCustomValueTo("succeed", "") + message: .expectedCustomValueTo("succeed", actual: "") ) case .failed(let reason): return PredicateResult( bool: false, - message: .expectedCustomValueTo("succeed", " because <\(reason)>") + message: .expectedCustomValueTo("succeed", actual: " because <\(reason)>") ) } } diff --git a/Example/Pods/Nimble/Sources/Nimble/Nimble.h b/Example/Pods/Nimble/Sources/Nimble/Nimble.h index 2bbc693..d975a72 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Nimble.h +++ b/Example/Pods/Nimble/Sources/Nimble/Nimble.h @@ -3,10 +3,9 @@ #import "NMBStringify.h" #import "DSL.h" -#if TARGET_OS_TV - #import "CwlPreconditionTesting_POSIX.h" -#else - #import "CwlPreconditionTesting.h" +#if TARGET_OS_OSX || TARGET_OS_IOS + #import "CwlMachBadInstructionHandler.h" + #import "CwlCatchException.h" #endif FOUNDATION_EXPORT double NimbleVersionNumber; diff --git a/Example/Pods/Nimble/Sources/Nimble/Utils/Await.swift b/Example/Pods/Nimble/Sources/Nimble/Utils/Await.swift index ad7a6eb..ce1b823 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Utils/Await.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Utils/Await.swift @@ -2,10 +2,6 @@ import CoreFoundation import Dispatch import Foundation -#if !(os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) - import CDispatch -#endif - private let timeoutLeeway = DispatchTimeInterval.milliseconds(1) private let pollLeeway = DispatchTimeInterval.milliseconds(1) @@ -32,11 +28,7 @@ internal class AssertionWaitLock: WaitLock { func acquireWaitingLock(_ fnName: String, file: FileString, line: UInt) { let info = WaitingInfo(name: fnName, file: file, lineNumber: line) - #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) - let isMainThread = Thread.isMainThread - #else - let isMainThread = _CFIsMainThread() - #endif + let isMainThread = Thread.isMainThread nimblePrecondition( isMainThread, "InvalidNimbleAPIUsage", @@ -45,10 +37,15 @@ internal class AssertionWaitLock: WaitLock { nimblePrecondition( currentWaiter == nil, "InvalidNimbleAPIUsage", - "Nested async expectations are not allowed to avoid creating flaky tests.\n\n" + - "The call to\n\t\(info)\n" + - "triggered this exception because\n\t\(currentWaiter!)\n" + - "is currently managing the main run loop." + """ + Nested async expectations are not allowed to avoid creating flaky tests. + + The call to + \t\(info) + triggered this exception because + \t\(currentWaiter!) + is currently managing the main run loop. + """ ) currentWaiter = info } @@ -97,7 +94,7 @@ internal enum AwaitResult { /// Holds the resulting value from an asynchronous expectation. /// This class is thread-safe at receiving an "response" to this promise. -internal class AwaitPromise { +internal final class AwaitPromise { private(set) internal var asyncResult: AwaitResult = .incomplete private var signal: DispatchSemaphore @@ -151,7 +148,7 @@ internal class AwaitPromiseBuilder { self.trigger = trigger } - func timeout(_ timeoutInterval: TimeInterval, forcefullyAbortTimeout: TimeInterval) -> Self { + func timeout(_ timeoutInterval: DispatchTimeInterval, forcefullyAbortTimeout: DispatchTimeInterval) -> Self { // = Discussion = // // There's a lot of technical decisions here that is useful to elaborate on. This is @@ -180,25 +177,18 @@ internal class AwaitPromiseBuilder { // checked. // // In addition, stopping the run loop is used to halt code executed on the main run loop. - #if swift(>=4.0) trigger.timeoutSource.schedule( deadline: DispatchTime.now() + timeoutInterval, repeating: .never, leeway: timeoutLeeway ) - #else - trigger.timeoutSource.scheduleOneshot( - deadline: DispatchTime.now() + timeoutInterval, - leeway: timeoutLeeway - ) - #endif trigger.timeoutSource.setEventHandler { guard self.promise.asyncResult.isIncomplete() else { return } let timedOutSem = DispatchSemaphore(value: 0) let semTimedOutOrBlocked = DispatchSemaphore(value: 0) semTimedOutOrBlocked.signal() let runLoop = CFRunLoopGetMain() - #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) + #if canImport(Darwin) let runLoopMode = CFRunLoopMode.defaultMode.rawValue #else let runLoopMode = kCFRunLoopDefaultMode @@ -263,11 +253,7 @@ internal class AwaitPromiseBuilder { self.trigger.timeoutSource.resume() while self.promise.asyncResult.isIncomplete() { // Stopping the run loop does not work unless we run only 1 mode - #if swift(>=4.2) && (os(macOS) || os(iOS) || os(tvOS)) _ = RunLoop.current.run(mode: .default, before: .distantFuture) - #else - _ = RunLoop.current.run(mode: .defaultRunLoopMode, before: .distantFuture) - #endif } self.trigger.timeoutSource.cancel() @@ -307,11 +293,19 @@ internal class Awaiter { let timeoutSource = createTimerSource(timeoutQueue) var completionCount = 0 let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: nil) { - try closure { + try closure { result in completionCount += 1 if completionCount < 2 { - if promise.resolveResult(.completed($0)) { - CFRunLoopStop(CFRunLoopGetMain()) + func completeBlock() { + if promise.resolveResult(.completed(result)) { + CFRunLoopStop(CFRunLoopGetMain()) + } + } + + if Thread.isMainThread { + completeBlock() + } else { + DispatchQueue.main.async { completeBlock() } } } else { fail("waitUntil(..) expects its completion closure to be only called once", @@ -327,17 +321,13 @@ internal class Awaiter { trigger: trigger) } - func poll(_ pollInterval: TimeInterval, closure: @escaping () throws -> T?) -> AwaitPromiseBuilder { + func poll(_ pollInterval: DispatchTimeInterval, closure: @escaping () throws -> T?) -> AwaitPromiseBuilder { let promise = AwaitPromise() let timeoutSource = createTimerSource(timeoutQueue) let asyncSource = createTimerSource(asyncQueue) let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: asyncSource) { - let interval = DispatchTimeInterval.nanoseconds(Int(pollInterval * TimeInterval(NSEC_PER_SEC))) - #if swift(>=4.0) + let interval = pollInterval asyncSource.schedule(deadline: .now(), repeating: interval, leeway: pollLeeway) - #else - asyncSource.scheduleRepeating(deadline: .now(), interval: interval, leeway: pollLeeway) - #endif asyncSource.setEventHandler { do { if let result = try closure() { @@ -363,8 +353,8 @@ internal class Awaiter { } internal func pollBlock( - pollInterval: TimeInterval, - timeoutInterval: TimeInterval, + pollInterval: DispatchTimeInterval, + timeoutInterval: DispatchTimeInterval, file: FileString, line: UInt, fnName: String = #function, @@ -375,7 +365,7 @@ internal func pollBlock( return true } return nil - }.timeout(timeoutInterval, forcefullyAbortTimeout: timeoutInterval / 2.0).wait(fnName, file: file, line: line) + }.timeout(timeoutInterval, forcefullyAbortTimeout: timeoutInterval.divided).wait(fnName, file: file, line: line) return result } diff --git a/Example/Pods/Nimble/Sources/Nimble/Utils/DispatchTimeInterval.swift b/Example/Pods/Nimble/Sources/Nimble/Utils/DispatchTimeInterval.swift new file mode 100644 index 0000000..a4b1d65 --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Utils/DispatchTimeInterval.swift @@ -0,0 +1,41 @@ +import Dispatch + +#if canImport(CDispatch) +import CDispatch +#endif + +extension DispatchTimeInterval { + // ** Note: We cannot simply divide the time interval because DispatchTimeInterval associated value type is Int + var divided: DispatchTimeInterval { + switch self { + case let .seconds(val): return val < 2 ? .milliseconds(Int(Float(val)/2*1000)) : .seconds(val/2) + case let .milliseconds(val): return .milliseconds(val/2) + case let .microseconds(val): return .microseconds(val/2) + case let .nanoseconds(val): return .nanoseconds(val/2) + case .never: return .never + @unknown default: fatalError("Unknown DispatchTimeInterval value") + } + } + + var description: String { + switch self { + case let .seconds(val): return val == 1 ? "\(Float(val)) second" : "\(Float(val)) seconds" + case let .milliseconds(val): return "\(Float(val)/1_000) seconds" + case let .microseconds(val): return "\(Float(val)/1_000_000) seconds" + case let .nanoseconds(val): return "\(Float(val)/1_000_000_000) seconds" + default: fatalError("Unknown DispatchTimeInterval value") + } + } +} + +#if canImport(Foundation) +import typealias Foundation.TimeInterval + +extension TimeInterval { + var dispatchInterval: DispatchTimeInterval { + let microseconds = Int64(self * TimeInterval(USEC_PER_SEC)) + // perhaps use nanoseconds, though would more often be > Int.max + return microseconds < Int.max ? .microseconds(Int(microseconds)) : .seconds(Int(self)) + } +} +#endif diff --git a/Example/Pods/Nimble/Sources/Nimble/Utils/Errors.swift b/Example/Pods/Nimble/Sources/Nimble/Utils/Errors.swift index 074cb20..4c3e434 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Utils/Errors.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Utils/Errors.swift @@ -1,33 +1,34 @@ -import Foundation - // Generic -internal func setFailureMessageForError( - _ failureMessage: FailureMessage, +internal func messageForError( postfixMessageVerb: String = "throw", actualError: Error?, error: T? = nil, errorType: T.Type? = nil, - closure: ((T) -> Void)? = nil) { - failureMessage.postfixMessage = "\(postfixMessageVerb) error" + closure: ((T) -> Void)? = nil +) -> ExpectationMessage { + var rawMessage = "\(postfixMessageVerb) error" if let error = error { - failureMessage.postfixMessage += " <\(error)>" + rawMessage += " <\(error)>" } else if errorType != nil || closure != nil { - failureMessage.postfixMessage += " from type <\(T.self)>" + rawMessage += " from type <\(T.self)>" } if closure != nil { - failureMessage.postfixMessage += " that satisfies block" + rawMessage += " that satisfies block" } if error == nil && errorType == nil && closure == nil { - failureMessage.postfixMessage = "\(postfixMessageVerb) any error" + rawMessage = "\(postfixMessageVerb) any error" } + let actual: String if let actualError = actualError { - failureMessage.actualValue = "<\(actualError)>" + actual = "<\(actualError)>" } else { - failureMessage.actualValue = "no error" + actual = "no error" } + + return .expectedCustomValueTo(rawMessage, actual: actual) } internal func errorMatchesExpectedError( @@ -39,21 +40,24 @@ internal func errorMatchesExpectedError( // Non-generic -internal func setFailureMessageForError( - _ failureMessage: FailureMessage, +internal func messageForError( actualError: Error?, - closure: ((Error) -> Void)?) { - failureMessage.postfixMessage = "throw error" + closure: ((Error) -> Void)? +) -> ExpectationMessage { + var rawMessage = "throw error" if closure != nil { - failureMessage.postfixMessage += " that satisfies block" + rawMessage += " that satisfies block" } else { - failureMessage.postfixMessage = "throw any error" + rawMessage = "throw any error" } + let actual: String if let actualError = actualError { - failureMessage.actualValue = "<\(actualError)>" + actual = "<\(actualError)>" } else { - failureMessage.actualValue = "no error" + actual = "no error" } + + return .expectedCustomValueTo(rawMessage, actual: actual) } diff --git a/Example/Pods/Nimble/Sources/Nimble/Utils/Functional.swift b/Example/Pods/Nimble/Sources/Nimble/Utils/Functional.swift deleted file mode 100644 index 6c5126a..0000000 --- a/Example/Pods/Nimble/Sources/Nimble/Utils/Functional.swift +++ /dev/null @@ -1,12 +0,0 @@ -import Foundation - -extension Sequence { - internal func all(_ fn: (Iterator.Element) -> Bool) -> Bool { - for item in self { - if !fn(item) { - return false - } - } - return true - } -} diff --git a/Example/Pods/Nimble/Sources/Nimble/Utils/Stringers.swift b/Example/Pods/Nimble/Sources/Nimble/Utils/Stringers.swift index ce21eea..88e84bb 100644 --- a/Example/Pods/Nimble/Sources/Nimble/Utils/Stringers.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Utils/Stringers.swift @@ -1,24 +1,7 @@ import Foundation internal func identityAsString(_ value: Any?) -> String { - let anyObject: AnyObject? -#if os(Linux) - #if swift(>=4.0) - #if !swift(>=4.1.50) - anyObject = value as? AnyObject - #else - anyObject = value as AnyObject? - #endif - #else - #if !swift(>=3.4) - anyObject = value as? AnyObject - #else - anyObject = value as AnyObject? - #endif - #endif -#else - anyObject = value as AnyObject? -#endif + let anyObject = value as AnyObject? if let value = anyObject { return NSString(format: "<%p>", unsafeBitCast(value, to: Int.self)).description } else { @@ -57,32 +40,24 @@ extension Float: TestOutputStringConvertible { } extension NSNumber: TestOutputStringConvertible { - // This is using `NSString(format:)` instead of - // `String(format:)` because the latter somehow breaks - // the travis CI build on linux. public var testDescription: String { let description = self.description if description.contains(".") { - // Travis linux swiftpm build doesn't like casting String to NSString, - // which is why this annoying nested initializer thing is here. - // Maybe this will change in a future snapshot. - let decimalPlaces = NSString(string: NSString(string: description) - .components(separatedBy: ".")[1]) - - // SeeAlso: https://bugs.swift.org/browse/SR-1464 - switch decimalPlaces.length { + let decimalPlaces = description.split(separator: ".")[1] + switch decimalPlaces.count { case 1: - return NSString(format: "%0.1f", self.doubleValue).description + return String(format: "%0.1f", doubleValue) case 2: - return NSString(format: "%0.2f", self.doubleValue).description + return String(format: "%0.2f", doubleValue) case 3: - return NSString(format: "%0.3f", self.doubleValue).description + return String(format: "%0.3f", doubleValue) default: - return NSString(format: "%0.4f", self.doubleValue).description + return String(format: "%0.4f", doubleValue) } } - return self.description + + return description } } @@ -97,7 +72,7 @@ extension AnySequence: TestOutputStringConvertible { public var testDescription: String { let generator = self.makeIterator() var strings = [String]() - var value: AnySequence.Iterator.Element? + var value: AnySequence.Element? repeat { value = generator.next() @@ -133,12 +108,7 @@ extension String: TestOutputStringConvertible { extension Data: TestOutputStringConvertible { public var testDescription: String { - #if os(Linux) - // FIXME: Swift on Linux triggers a segfault when calling NSData's hash() (last checked on 03-11-16) - return "Data" - #else - return "Data" - #endif + return "Data" } } @@ -170,7 +140,7 @@ public func stringify(_ value: T?) -> String { return String(describing: value) } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +#if canImport(Darwin) @objc public class NMBStringer: NSObject { @objc public class func stringify(_ obj: Any?) -> String { return Nimble.stringify(obj) diff --git a/Example/Pods/Nimble/Sources/NimbleObjectiveC/DSL.h b/Example/Pods/Nimble/Sources/NimbleObjectiveC/DSL.h index 9170541..9ae06a4 100644 --- a/Example/Pods/Nimble/Sources/NimbleObjectiveC/DSL.h +++ b/Example/Pods/Nimble/Sources/NimbleObjectiveC/DSL.h @@ -1,9 +1,9 @@ #import @class NMBExpectation; -@class NMBObjCBeCloseToMatcher; -@class NMBObjCRaiseExceptionMatcher; -@protocol NMBMatcher; +@class NMBPredicate; +@class NMBObjCBeCloseToPredicate; +@class NMBObjCRaiseExceptionPredicate; NS_ASSUME_NONNULL_BEGIN @@ -66,16 +66,16 @@ NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(void), NSStrin #define DEFINE_OVERLOAD(TYPE, EXPR) \ NIMBLE_EXPORT_INLINE NIMBLE_OVERLOADABLE \ - id NMB_equal(TYPE expectedValue) { \ + NMBPredicate *NMB_equal(TYPE expectedValue) { \ return NMB_equal((EXPR)); \ } \ - NIMBLE_SHORT_OVERLOADED(id equal(TYPE expectedValue), NMB_equal(expectedValue)); + NIMBLE_SHORT_OVERLOADED(NMBPredicate *equal(TYPE expectedValue), NMB_equal(expectedValue)); NIMBLE_EXPORT NIMBLE_OVERLOADABLE - id NMB_equal(__nullable id expectedValue); + NMBPredicate *NMB_equal(__nullable id expectedValue); - NIMBLE_SHORT_OVERLOADED(id equal(__nullable id expectedValue), + NIMBLE_SHORT_OVERLOADED(NMBPredicate *equal(__nullable id expectedValue), NMB_equal(expectedValue)); // overloaded dispatch for nils - expect(nil) @@ -101,17 +101,17 @@ NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(void), NSStrin #define DEFINE_OVERLOAD(TYPE, EXPR) \ NIMBLE_EXPORT_INLINE NIMBLE_OVERLOADABLE \ - id NMB_haveCount(TYPE expectedValue) { \ + NMBPredicate *NMB_haveCount(TYPE expectedValue) { \ return NMB_haveCount((EXPR)); \ } \ - NIMBLE_SHORT_OVERLOADED(id haveCount(TYPE expectedValue), \ + NIMBLE_SHORT_OVERLOADED(NMBPredicate *haveCount(TYPE expectedValue), \ NMB_haveCount(expectedValue)); NIMBLE_EXPORT NIMBLE_OVERLOADABLE - id NMB_haveCount(id expectedValue); + NMBPredicate *NMB_haveCount(id expectedValue); - NIMBLE_SHORT_OVERLOADED(id haveCount(id expectedValue), + NIMBLE_SHORT_OVERLOADED(NMBPredicate *haveCount(id expectedValue), NMB_haveCount(expectedValue)); DEFINE_OVERLOAD(long, @(expectedValue)) @@ -127,14 +127,14 @@ NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(void), NSStrin #define DEFINE_OVERLOAD(TYPE, EXPR) \ NIMBLE_EXPORT_INLINE NIMBLE_OVERLOADABLE \ - NMBObjCBeCloseToMatcher *NMB_beCloseTo(TYPE expectedValue) { \ + NMBObjCBeCloseToPredicate *NMB_beCloseTo(TYPE expectedValue) { \ return NMB_beCloseTo((NSNumber *)(EXPR)); \ } \ - NIMBLE_SHORT_OVERLOADED(NMBObjCBeCloseToMatcher *beCloseTo(TYPE expectedValue), \ + NIMBLE_SHORT_OVERLOADED(NMBObjCBeCloseToPredicate *beCloseTo(TYPE expectedValue), \ NMB_beCloseTo(expectedValue)); - NIMBLE_EXPORT NIMBLE_OVERLOADABLE NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue); - NIMBLE_SHORT_OVERLOADED(NMBObjCBeCloseToMatcher *beCloseTo(NSNumber *expectedValue), + NIMBLE_EXPORT NIMBLE_OVERLOADABLE NMBObjCBeCloseToPredicate *NMB_beCloseTo(NSNumber *expectedValue); + NIMBLE_SHORT_OVERLOADED(NMBObjCBeCloseToPredicate *beCloseTo(NSNumber *expectedValue), NMB_beCloseTo(expectedValue)); // it would be better to only overload float & double, but zero becomes ambigious @@ -152,33 +152,33 @@ NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(void), NSStrin #undef DEFINE_OVERLOAD -NIMBLE_EXPORT id NMB_beAnInstanceOf(Class expectedClass); -NIMBLE_EXPORT_INLINE id beAnInstanceOf(Class expectedClass) { +NIMBLE_EXPORT NMBPredicate *NMB_beAnInstanceOf(Class expectedClass); +NIMBLE_EXPORT_INLINE NMBPredicate *beAnInstanceOf(Class expectedClass) { return NMB_beAnInstanceOf(expectedClass); } -NIMBLE_EXPORT id NMB_beAKindOf(Class expectedClass); -NIMBLE_EXPORT_INLINE id beAKindOf(Class expectedClass) { +NIMBLE_EXPORT NMBPredicate *NMB_beAKindOf(Class expectedClass); +NIMBLE_EXPORT_INLINE NMBPredicate *beAKindOf(Class expectedClass) { return NMB_beAKindOf(expectedClass); } -NIMBLE_EXPORT id NMB_beginWith(id itemElementOrSubstring); -NIMBLE_EXPORT_INLINE id beginWith(id itemElementOrSubstring) { +NIMBLE_EXPORT NMBPredicate *NMB_beginWith(id itemElementOrSubstring); +NIMBLE_EXPORT_INLINE NMBPredicate *beginWith(id itemElementOrSubstring) { return NMB_beginWith(itemElementOrSubstring); } #define DEFINE_OVERLOAD(TYPE, EXPR) \ NIMBLE_EXPORT_INLINE NIMBLE_OVERLOADABLE \ - id NMB_beGreaterThan(TYPE expectedValue) { \ + NMBPredicate *NMB_beGreaterThan(TYPE expectedValue) { \ return NMB_beGreaterThan((EXPR)); \ } \ - NIMBLE_SHORT_OVERLOADED(id beGreaterThan(TYPE expectedValue), NMB_beGreaterThan(expectedValue)); + NIMBLE_SHORT_OVERLOADED(NMBPredicate *beGreaterThan(TYPE expectedValue), NMB_beGreaterThan(expectedValue)); NIMBLE_EXPORT NIMBLE_OVERLOADABLE - id NMB_beGreaterThan(NSNumber *expectedValue); + NMBPredicate *NMB_beGreaterThan(NSNumber *expectedValue); NIMBLE_EXPORT_INLINE NIMBLE_OVERLOADABLE - id beGreaterThan(NSNumber *expectedValue) { + NMBPredicate *beGreaterThan(NSNumber *expectedValue) { return NMB_beGreaterThan(expectedValue); } @@ -197,17 +197,17 @@ NIMBLE_EXPORT_INLINE id beginWith(id itemElementOrSubstring) { #define DEFINE_OVERLOAD(TYPE, EXPR) \ NIMBLE_EXPORT_INLINE NIMBLE_OVERLOADABLE \ - id NMB_beGreaterThanOrEqualTo(TYPE expectedValue) { \ + NMBPredicate *NMB_beGreaterThanOrEqualTo(TYPE expectedValue) { \ return NMB_beGreaterThanOrEqualTo((EXPR)); \ } \ - NIMBLE_SHORT_OVERLOADED(id beGreaterThanOrEqualTo(TYPE expectedValue), \ + NIMBLE_SHORT_OVERLOADED(NMBPredicate *beGreaterThanOrEqualTo(TYPE expectedValue), \ NMB_beGreaterThanOrEqualTo(expectedValue)); NIMBLE_EXPORT NIMBLE_OVERLOADABLE - id NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue); + NMBPredicate *NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue); NIMBLE_EXPORT_INLINE NIMBLE_OVERLOADABLE - id beGreaterThanOrEqualTo(NSNumber *expectedValue) { + NMBPredicate *beGreaterThanOrEqualTo(NSNumber *expectedValue) { return NMB_beGreaterThanOrEqualTo(expectedValue); } @@ -225,28 +225,28 @@ NIMBLE_EXPORT_INLINE id beginWith(id itemElementOrSubstring) { #undef DEFINE_OVERLOAD -NIMBLE_EXPORT id NMB_beIdenticalTo(id expectedInstance); -NIMBLE_SHORT(id beIdenticalTo(id expectedInstance), +NIMBLE_EXPORT NMBPredicate *NMB_beIdenticalTo(id expectedInstance); +NIMBLE_SHORT(NMBPredicate *beIdenticalTo(id expectedInstance), NMB_beIdenticalTo(expectedInstance)); -NIMBLE_EXPORT id NMB_be(id expectedInstance); -NIMBLE_SHORT(id be(id expectedInstance), +NIMBLE_EXPORT NMBPredicate *NMB_be(id expectedInstance); +NIMBLE_SHORT(NMBPredicate *be(id expectedInstance), NMB_be(expectedInstance)); #define DEFINE_OVERLOAD(TYPE, EXPR) \ NIMBLE_EXPORT_INLINE NIMBLE_OVERLOADABLE \ - id NMB_beLessThan(TYPE expectedValue) { \ + NMBPredicate *NMB_beLessThan(TYPE expectedValue) { \ return NMB_beLessThan((EXPR)); \ } \ - NIMBLE_SHORT_OVERLOADED(id beLessThan(TYPE expectedValue), \ + NIMBLE_SHORT_OVERLOADED(NMBPredicate *beLessThan(TYPE expectedValue), \ NMB_beLessThan(expectedValue)); NIMBLE_EXPORT NIMBLE_OVERLOADABLE - id NMB_beLessThan(NSNumber *expectedValue); + NMBPredicate *NMB_beLessThan(NSNumber *expectedValue); NIMBLE_EXPORT_INLINE NIMBLE_OVERLOADABLE - id beLessThan(NSNumber *expectedValue) { + NMBPredicate *beLessThan(NSNumber *expectedValue) { return NMB_beLessThan(expectedValue); } @@ -266,18 +266,18 @@ NIMBLE_SHORT(id be(id expectedInstance), #define DEFINE_OVERLOAD(TYPE, EXPR) \ NIMBLE_EXPORT_INLINE NIMBLE_OVERLOADABLE \ - id NMB_beLessThanOrEqualTo(TYPE expectedValue) { \ + NMBPredicate *NMB_beLessThanOrEqualTo(TYPE expectedValue) { \ return NMB_beLessThanOrEqualTo((EXPR)); \ } \ - NIMBLE_SHORT_OVERLOADED(id beLessThanOrEqualTo(TYPE expectedValue), \ + NIMBLE_SHORT_OVERLOADED(NMBPredicate *beLessThanOrEqualTo(TYPE expectedValue), \ NMB_beLessThanOrEqualTo(expectedValue)); NIMBLE_EXPORT NIMBLE_OVERLOADABLE - id NMB_beLessThanOrEqualTo(NSNumber *expectedValue); + NMBPredicate *NMB_beLessThanOrEqualTo(NSNumber *expectedValue); NIMBLE_EXPORT_INLINE NIMBLE_OVERLOADABLE - id beLessThanOrEqualTo(NSNumber *expectedValue) { + NMBPredicate *beLessThanOrEqualTo(NSNumber *expectedValue) { return NMB_beLessThanOrEqualTo(expectedValue); } @@ -294,63 +294,63 @@ NIMBLE_SHORT(id be(id expectedInstance), #undef DEFINE_OVERLOAD -NIMBLE_EXPORT id NMB_beTruthy(void); -NIMBLE_SHORT(id beTruthy(void), +NIMBLE_EXPORT NMBPredicate *NMB_beTruthy(void); +NIMBLE_SHORT(NMBPredicate *beTruthy(void), NMB_beTruthy()); -NIMBLE_EXPORT id NMB_beFalsy(void); -NIMBLE_SHORT(id beFalsy(void), +NIMBLE_EXPORT NMBPredicate *NMB_beFalsy(void); +NIMBLE_SHORT(NMBPredicate *beFalsy(void), NMB_beFalsy()); -NIMBLE_EXPORT id NMB_beTrue(void); -NIMBLE_SHORT(id beTrue(void), +NIMBLE_EXPORT NMBPredicate *NMB_beTrue(void); +NIMBLE_SHORT(NMBPredicate *beTrue(void), NMB_beTrue()); -NIMBLE_EXPORT id NMB_beFalse(void); -NIMBLE_SHORT(id beFalse(void), +NIMBLE_EXPORT NMBPredicate *NMB_beFalse(void); +NIMBLE_SHORT(NMBPredicate *beFalse(void), NMB_beFalse()); -NIMBLE_EXPORT id NMB_beNil(void); -NIMBLE_SHORT(id beNil(void), +NIMBLE_EXPORT NMBPredicate *NMB_beNil(void); +NIMBLE_SHORT(NMBPredicate *beNil(void), NMB_beNil()); -NIMBLE_EXPORT id NMB_beEmpty(void); -NIMBLE_SHORT(id beEmpty(void), +NIMBLE_EXPORT NMBPredicate *NMB_beEmpty(void); +NIMBLE_SHORT(NMBPredicate *beEmpty(void), NMB_beEmpty()); -NIMBLE_EXPORT id NMB_containWithNilTermination(id itemOrSubstring, ...) NS_REQUIRES_NIL_TERMINATION; +NIMBLE_EXPORT NMBPredicate *NMB_containWithNilTermination(id itemOrSubstring, ...) NS_REQUIRES_NIL_TERMINATION; #define NMB_contain(...) NMB_containWithNilTermination(__VA_ARGS__, nil) #ifndef NIMBLE_DISABLE_SHORT_SYNTAX #define contain(...) NMB_contain(__VA_ARGS__) #endif -NIMBLE_EXPORT id NMB_containElementSatisfying(BOOL(^predicate)(id)); -NIMBLE_SHORT(id containElementSatisfying(BOOL(^predicate)(id)), +NIMBLE_EXPORT NMBPredicate *NMB_containElementSatisfying(BOOL(^predicate)(id)); +NIMBLE_SHORT(NMBPredicate *containElementSatisfying(BOOL(^predicate)(id)), NMB_containElementSatisfying(predicate)); -NIMBLE_EXPORT id NMB_endWith(id itemElementOrSubstring); -NIMBLE_SHORT(id endWith(id itemElementOrSubstring), +NIMBLE_EXPORT NMBPredicate *NMB_endWith(id itemElementOrSubstring); +NIMBLE_SHORT(NMBPredicate *endWith(id itemElementOrSubstring), NMB_endWith(itemElementOrSubstring)); -NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException(void); -NIMBLE_SHORT(NMBObjCRaiseExceptionMatcher *raiseException(void), +NIMBLE_EXPORT NMBObjCRaiseExceptionPredicate *NMB_raiseException(void); +NIMBLE_SHORT(NMBObjCRaiseExceptionPredicate *raiseException(void), NMB_raiseException()); -NIMBLE_EXPORT id NMB_match(id expectedValue); -NIMBLE_SHORT(id match(id expectedValue), +NIMBLE_EXPORT NMBPredicate *NMB_match(id expectedValue); +NIMBLE_SHORT(NMBPredicate *match(id expectedValue), NMB_match(expectedValue)); -NIMBLE_EXPORT id NMB_allPass(id matcher); -NIMBLE_SHORT(id allPass(id matcher), +NIMBLE_EXPORT NMBPredicate *NMB_allPass(id matcher); +NIMBLE_SHORT(NMBPredicate *allPass(id matcher), NMB_allPass(matcher)); -NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers); +NIMBLE_EXPORT NMBPredicate *NMB_satisfyAnyOfWithMatchers(id matchers); #define NMB_satisfyAnyOf(...) NMB_satisfyAnyOfWithMatchers(@[__VA_ARGS__]) #ifndef NIMBLE_DISABLE_SHORT_SYNTAX #define satisfyAnyOf(...) NMB_satisfyAnyOf(__VA_ARGS__) #endif -NIMBLE_EXPORT id NMB_satisfyAllOfWithMatchers(id matchers); +NIMBLE_EXPORT NMBPredicate *NMB_satisfyAllOfWithMatchers(id matchers); #define NMB_satisfyAllOf(...) NMB_satisfyAllOfWithMatchers(@[__VA_ARGS__]) #ifndef NIMBLE_DISABLE_SHORT_SYNTAX #define satisfyAllOf(...) NMB_satisfyAllOf(__VA_ARGS__) diff --git a/Example/Pods/Nimble/Sources/NimbleObjectiveC/DSL.m b/Example/Pods/Nimble/Sources/NimbleObjectiveC/DSL.m index 670415b..6f7572f 100644 --- a/Example/Pods/Nimble/Sources/NimbleObjectiveC/DSL.m +++ b/Example/Pods/Nimble/Sources/NimbleObjectiveC/DSL.m @@ -28,71 +28,71 @@ NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger return [NMBExpectation failWithMessage:msg file:file line:line]; } -NIMBLE_EXPORT id NMB_beAnInstanceOf(Class expectedClass) { - return [NMBObjCMatcher beAnInstanceOfMatcher:expectedClass]; +NIMBLE_EXPORT NMBPredicate *NMB_beAnInstanceOf(Class expectedClass) { + return [NMBPredicate beAnInstanceOfMatcher:expectedClass]; } -NIMBLE_EXPORT id NMB_beAKindOf(Class expectedClass) { - return [NMBObjCMatcher beAKindOfMatcher:expectedClass]; +NIMBLE_EXPORT NMBPredicate *NMB_beAKindOf(Class expectedClass) { + return [NMBPredicate beAKindOfMatcher:expectedClass]; } -NIMBLE_EXPORT NIMBLE_OVERLOADABLE NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue) { - return [NMBObjCMatcher beCloseToMatcher:expectedValue within:0.001]; +NIMBLE_EXPORT NIMBLE_OVERLOADABLE NMBObjCBeCloseToPredicate *NMB_beCloseTo(NSNumber *expectedValue) { + return [NMBPredicate beCloseToMatcher:expectedValue within:0.001]; } -NIMBLE_EXPORT id NMB_beginWith(id itemElementOrSubstring) { - return [NMBObjCMatcher beginWithMatcher:itemElementOrSubstring]; +NIMBLE_EXPORT NMBPredicate *NMB_beginWith(id itemElementOrSubstring) { + return [NMBPredicate beginWithMatcher:itemElementOrSubstring]; } -NIMBLE_EXPORT NIMBLE_OVERLOADABLE id NMB_beGreaterThan(NSNumber *expectedValue) { - return [NMBObjCMatcher beGreaterThanMatcher:expectedValue]; +NIMBLE_EXPORT NIMBLE_OVERLOADABLE NMBPredicate *NMB_beGreaterThan(NSNumber *expectedValue) { + return [NMBPredicate beGreaterThanMatcher:expectedValue]; } -NIMBLE_EXPORT NIMBLE_OVERLOADABLE id NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue) { - return [NMBObjCMatcher beGreaterThanOrEqualToMatcher:expectedValue]; +NIMBLE_EXPORT NIMBLE_OVERLOADABLE NMBPredicate *NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue) { + return [NMBPredicate beGreaterThanOrEqualToMatcher:expectedValue]; } -NIMBLE_EXPORT id NMB_beIdenticalTo(id expectedInstance) { - return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; +NIMBLE_EXPORT NMBPredicate *NMB_beIdenticalTo(id expectedInstance) { + return [NMBPredicate beIdenticalToMatcher:expectedInstance]; } -NIMBLE_EXPORT id NMB_be(id expectedInstance) { - return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; +NIMBLE_EXPORT NMBPredicate *NMB_be(id expectedInstance) { + return [NMBPredicate beIdenticalToMatcher:expectedInstance]; } -NIMBLE_EXPORT NIMBLE_OVERLOADABLE id NMB_beLessThan(NSNumber *expectedValue) { - return [NMBObjCMatcher beLessThanMatcher:expectedValue]; +NIMBLE_EXPORT NIMBLE_OVERLOADABLE NMBPredicate *NMB_beLessThan(NSNumber *expectedValue) { + return [NMBPredicate beLessThanMatcher:expectedValue]; } -NIMBLE_EXPORT NIMBLE_OVERLOADABLE id NMB_beLessThanOrEqualTo(NSNumber *expectedValue) { - return [NMBObjCMatcher beLessThanOrEqualToMatcher:expectedValue]; +NIMBLE_EXPORT NIMBLE_OVERLOADABLE NMBPredicate *NMB_beLessThanOrEqualTo(NSNumber *expectedValue) { + return [NMBPredicate beLessThanOrEqualToMatcher:expectedValue]; } -NIMBLE_EXPORT id NMB_beTruthy() { - return [NMBObjCMatcher beTruthyMatcher]; +NIMBLE_EXPORT NMBPredicate *NMB_beTruthy() { + return [NMBPredicate beTruthyMatcher]; } -NIMBLE_EXPORT id NMB_beFalsy() { - return [NMBObjCMatcher beFalsyMatcher]; +NIMBLE_EXPORT NMBPredicate *NMB_beFalsy() { + return [NMBPredicate beFalsyMatcher]; } -NIMBLE_EXPORT id NMB_beTrue() { - return [NMBObjCMatcher beTrueMatcher]; +NIMBLE_EXPORT NMBPredicate *NMB_beTrue() { + return [NMBPredicate beTrueMatcher]; } -NIMBLE_EXPORT id NMB_beFalse() { - return [NMBObjCMatcher beFalseMatcher]; +NIMBLE_EXPORT NMBPredicate *NMB_beFalse() { + return [NMBPredicate beFalseMatcher]; } -NIMBLE_EXPORT id NMB_beNil() { - return [NMBObjCMatcher beNilMatcher]; +NIMBLE_EXPORT NMBPredicate *NMB_beNil() { + return [NMBPredicate beNilMatcher]; } -NIMBLE_EXPORT id NMB_beEmpty() { - return [NMBObjCMatcher beEmptyMatcher]; +NIMBLE_EXPORT NMBPredicate *NMB_beEmpty() { + return [NMBPredicate beEmptyMatcher]; } -NIMBLE_EXPORT id NMB_containWithNilTermination(id itemOrSubstring, ...) { +NIMBLE_EXPORT NMBPredicate *NMB_containWithNilTermination(id itemOrSubstring, ...) { NSMutableArray *itemOrSubstringArray = [NSMutableArray array]; if (itemOrSubstring) { @@ -107,43 +107,43 @@ NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger va_end(args); } - return [NMBObjCMatcher containMatcher:itemOrSubstringArray]; + return [NMBPredicate containMatcher:itemOrSubstringArray]; } -NIMBLE_EXPORT id NMB_containElementSatisfying(BOOL(^predicate)(id)) { - return [NMBObjCMatcher containElementSatisfyingMatcher:predicate]; +NIMBLE_EXPORT NMBPredicate *NMB_containElementSatisfying(BOOL(^predicate)(id)) { + return [NMBPredicate containElementSatisfyingMatcher:predicate]; } -NIMBLE_EXPORT id NMB_endWith(id itemElementOrSubstring) { - return [NMBObjCMatcher endWithMatcher:itemElementOrSubstring]; +NIMBLE_EXPORT NMBPredicate *NMB_endWith(id itemElementOrSubstring) { + return [NMBPredicate endWithMatcher:itemElementOrSubstring]; } -NIMBLE_EXPORT NIMBLE_OVERLOADABLE id NMB_equal(__nullable id expectedValue) { - return [NMBObjCMatcher equalMatcher:expectedValue]; +NIMBLE_EXPORT NIMBLE_OVERLOADABLE NMBPredicate *NMB_equal(__nullable id expectedValue) { + return [NMBPredicate equalMatcher:expectedValue]; } -NIMBLE_EXPORT NIMBLE_OVERLOADABLE id NMB_haveCount(id expectedValue) { - return [NMBObjCMatcher haveCountMatcher:expectedValue]; +NIMBLE_EXPORT NIMBLE_OVERLOADABLE NMBPredicate *NMB_haveCount(id expectedValue) { + return [NMBPredicate haveCountMatcher:expectedValue]; } -NIMBLE_EXPORT id NMB_match(id expectedValue) { - return [NMBObjCMatcher matchMatcher:expectedValue]; +NIMBLE_EXPORT NMBPredicate *NMB_match(id expectedValue) { + return [NMBPredicate matchMatcher:expectedValue]; } -NIMBLE_EXPORT id NMB_allPass(id expectedValue) { - return [NMBObjCMatcher allPassMatcher:expectedValue]; +NIMBLE_EXPORT NMBPredicate *NMB_allPass(id expectedValue) { + return [NMBPredicate allPassMatcher:expectedValue]; } -NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers) { - return [NMBObjCMatcher satisfyAnyOfMatcher:matchers]; +NIMBLE_EXPORT NMBPredicate *NMB_satisfyAnyOfWithMatchers(id matchers) { + return [NMBPredicate satisfyAnyOfMatcher:matchers]; } -NIMBLE_EXPORT id NMB_satisfyAllOfWithMatchers(id matchers) { - return [NMBObjCMatcher satisfyAllOfMatcher:matchers]; +NIMBLE_EXPORT NMBPredicate *NMB_satisfyAllOfWithMatchers(id matchers) { + return [NMBPredicate satisfyAllOfMatcher:matchers]; } -NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException() { - return [NMBObjCMatcher raiseExceptionMatcher]; +NIMBLE_EXPORT NMBObjCRaiseExceptionPredicate *NMB_raiseException() { + return [NMBPredicate raiseExceptionMatcher]; } NIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line) { diff --git a/Example/Pods/Nimble/Sources/NimbleObjectiveC/XCTestObservationCenter+Register.m b/Example/Pods/Nimble/Sources/NimbleObjectiveC/XCTestObservationCenter+Register.m index fa5030a..3c1110b 100644 --- a/Example/Pods/Nimble/Sources/NimbleObjectiveC/XCTestObservationCenter+Register.m +++ b/Example/Pods/Nimble/Sources/NimbleObjectiveC/XCTestObservationCenter+Register.m @@ -1,5 +1,4 @@ #import -#import #if __has_include("Nimble-Swift.h") #import "Nimble-Swift.h" @@ -7,77 +6,12 @@ #import #endif -#pragma mark - Method Swizzling - -/// Swaps the implementations between two instance methods. -/// -/// @param class The class containing `originalSelector`. -/// @param originalSelector Original method to replace. -/// @param replacementSelector Replacement method. -void swizzleSelectors(Class class, SEL originalSelector, SEL replacementSelector) { - Method originalMethod = class_getInstanceMethod(class, originalSelector); - Method replacementMethod = class_getInstanceMethod(class, replacementSelector); - - BOOL didAddMethod = - class_addMethod(class, - originalSelector, - method_getImplementation(replacementMethod), - method_getTypeEncoding(replacementMethod)); - - if (didAddMethod) { - class_replaceMethod(class, - replacementSelector, - method_getImplementation(originalMethod), - method_getTypeEncoding(originalMethod)); - } else { - method_exchangeImplementations(originalMethod, replacementMethod); - } -} - #pragma mark - Private -@interface XCTestObservationCenter (Private) -- (void)_addLegacyTestObserver:(id)observer; -@end - @implementation XCTestObservationCenter (Register) -/// Uses objc method swizzling to register `CurrentTestCaseTracker` as a test observer. This is necessary -/// because Xcode 7.3 introduced timing issues where if a custom `XCTestObservation` is registered too early -/// it suppresses all console output (generated by `XCTestLog`), breaking any tools that depend on this output. -/// This approach waits to register our custom test observer until XCTest adds its first "legacy" observer, -/// falling back to registering after the first normal observer if this private method ever changes. + (void)load { - if (class_getInstanceMethod([self class], @selector(_addLegacyTestObserver:))) { - // Swizzle -_addLegacyTestObserver: - swizzleSelectors([self class], @selector(_addLegacyTestObserver:), @selector(NMB_original__addLegacyTestObserver:)); - } else { - // Swizzle -addTestObserver:, only if -_addLegacyTestObserver: is not implemented - swizzleSelectors([self class], @selector(addTestObserver:), @selector(NMB_original_addTestObserver:)); - } -} - -#pragma mark - Replacement Methods - -/// Registers `CurrentTestCaseTracker` as a test observer after `XCTestLog` has been added. -- (void)NMB_original__addLegacyTestObserver:(id)observer { - [self NMB_original__addLegacyTestObserver:observer]; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [self addTestObserver:[CurrentTestCaseTracker sharedInstance]]; - }); -} - -/// Registers `CurrentTestCaseTracker` as a test observer after `XCTestLog` has been added. -/// This method is only used if `-_addLegacyTestObserver:` is not impelemented. (added in Xcode 7.3) -- (void)NMB_original_addTestObserver:(id)observer { - [self NMB_original_addTestObserver:observer]; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [self NMB_original_addTestObserver:[CurrentTestCaseTracker sharedInstance]]; - }); + [[XCTestObservationCenter sharedTestObservationCenter] addTestObserver:[CurrentTestCaseTracker sharedInstance]]; } @end diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index e47f758..eeeec2c 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,177 +7,178 @@ objects = { /* Begin PBXBuildFile section */ - 01450F22B410BEC28B0E07E204C0805E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 033A36A29482FD32230FE0CA177F9BD3 /* Foundation.framework */; }; - 01904B0245AC2031E9ADD586BE7224C0 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 723E6B3079C0611ACCC3939031EDF200 /* EndWith.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 01DAA6DD1809A39129FF7C72DDF93054 /* mach_excServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2253F7742A6212245AF43054AA060B21 /* mach_excServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0683FC9DDCAB80660BD11E7159607DB6 /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 6929BA2ACC06C155E591A32332B957F6 /* World+DSL.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0725A6F6AF5A97F9D46B3188E135D5B2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1581729B7C5C85351FA7BD57E714B770 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0834E167066BF3659E39621F58F440A6 /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = C686B6EB8659B8D68F26E5F1C948F911 /* BeVoid.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 08DC8A46FE26DFF192FCAC752A66E620 /* CwlMachBadInstructionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 3049ACFF04304D5A69F83457B0C750D8 /* CwlMachBadInstructionHandler.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 0BC8351182276985B9C97446E9101EF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 51B84C7FFC08F42191ACE85342E7A391 /* NMBExceptionCapture.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 0FF082D1672DD06F291EEDE3FEB518CB /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F9A94CDCB33A101D63AA1765A1CFBDA3 /* XCTestObservationCenter+Register.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 11EDFDE1BC5494E14D6F81320FE3925F /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AE3F75A0F112EFC8DDEB96D01E90449 /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1291696393FFEA6F94FF1E0B79923B43 /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FC8042E1D361B2CB8A86EBCBE4C69AC /* HooksPhase.swift */; }; - 1662BEDD868AF1CD729C4269E69A3580 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43F14CE9E6AC959093CDE8B0C0B081D3 /* MatcherFunc.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 018228C4760DF4F8B80630BC9ACCB39E /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 594091E6966D51FDFA5ACE8A1D3F3102 /* DSL.swift */; }; + 038EC28EC00D757505F0932ABB15D518 /* CwlMachBadInstructionHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D7731D3D4DA90B3FB2056B2AB5B6C7E /* CwlMachBadInstructionHandler.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 06CFD5203E438B92629FE9A9D9012581 /* URLRequestBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = D54BADEA27FD77B3806CE9E4C8D316D3 /* URLRequestBuilder.swift */; }; + 0803D3A5C37AB1E7A7D327DC326C3F7F /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD80FCD46E015B974BB6871A50B72520 /* AdapterProtocols.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 0A0D5425DC364F19FF9FC4C2DDBA4990 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAD489D7427DB88729313ABD2C90AFFB /* DSL+Wait.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 0ADEC83846CB2257DD5F96459B335622 /* ExpectationMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65EE753B1C910259E5BE2E6CB846CD6D /* ExpectationMessage.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 0B6C72C5CE197E5D1FC5BAF2B38CD18D /* CwlDarwinDefinitions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 262C909BA8DAF2BC0DB1CDAFFC063E1B /* CwlDarwinDefinitions.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 10C8810E574F925B5CD3449B6DBE6EC0 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = A508FA505DD93EA63E80B33C57C3E77F /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 10D8EC65B5BD4AEE3934DED2BE508793 /* Nimble-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 844ABCB95C959E169B832C895AC7CA1B /* Nimble-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 114DFB67D17BD7BEF25CE042228C9D17 /* CwlBadInstructionException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F8DF7DA09AEDCBA06E2D8A1ED3DF37B /* CwlBadInstructionException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 1202AA151F1C4D1022CD13195DA2EE3C /* HTTPRequestMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BB2929812A8305A8664F7E657077884 /* HTTPRequestMessage.swift */; }; + 14ECE81218F5F5C9BEF00819A7C078EC /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 523F4123831772C0FEEBA7A82BBA31B6 /* Closures.swift */; }; 18A52553CCE721D5CC1BBD9561398A7F /* Pods-iONess_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A82AD683E8F5AD06B0BDADF25E869FA /* Pods-iONess_Tests-dummy.m */; }; - 1A7224F64623B1DD1F58F34976BB073C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 033A36A29482FD32230FE0CA177F9BD3 /* Foundation.framework */; }; - 1EA797B70F587D59DD66A07503CD95D7 /* CwlCatchException.m in Sources */ = {isa = PBXBuildFile; fileRef = D02DA36EF93AC36485B0695ED61559FD /* CwlCatchException.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 25B8696FF6F4BC3F90101C2B4A0BFFBE /* CwlDarwinDefinitions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F91C9989726FD623E3BC9D2301B93CB /* CwlDarwinDefinitions.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 2A94FACEA07096DDE05ACF58491DD963 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39BFFF064EE3856AA0EA960CEEA964CC /* World+DSL.swift */; }; - 2A95AD48CE160CCC59957E4F91EEC9B9 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 68D5C468265817905E8BB3D3C5F607D6 /* XCTestSuite+QuickTestSuiteBuilder.m */; }; - 2ADD7D3E0B94EF044CF3FFD2F8EA2C67 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C70EB7B5190D124F405BEC5994EAE88 /* DSL.swift */; }; - 2D57849BBE4DB509C70D6DC48E6E21B3 /* ToSucceed.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27C2E58D114AC181F6245906914BC378 /* ToSucceed.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 2EA6B2E10F38275D4CEB37B7ADDAE0E0 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BAE63F6C6E2795DA6CC74A86002A713 /* QuickConfiguration.m */; }; - 3722B93E1E8BF31C11CDF45AA815A767 /* QuickTestSuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C531FF657A43F5FB7364CC7CC10C016 /* QuickTestSuite.swift */; }; - 38B72051F26368B657ACE1CDEA474D88 /* mach_excServer.c in Sources */ = {isa = PBXBuildFile; fileRef = 01B00F5B76F8274E949CD00EC7199C0F /* mach_excServer.c */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 3B324746542B5868C6AA793F2EF93FEB /* Await.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4116551DDC267A0E3EEE55391513FBE /* Await.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 3CFD5091F02F30ADE4EEC622C7F487C8 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 001FF222EA83335C3B8DDC5074A862C7 /* Async.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 3D317145F0CA3D74E737AB0B919AB6E9 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D6663844FD8AC4A8EFE4F009F43DE62 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 405AB644E5E32AB19AE8697B4C0CE124 /* CwlMachBadInstructionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4255BD03AA0B39A2239DF75D25247ADB /* CwlMachBadInstructionHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 43BF42159F430B01CB7F94DFDA66F510 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C061463250766C9C05995AB8EE63E66 /* XCTest.framework */; }; - 4660867D6E616474D6B62FAF476CCAAD /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1AA38F91B7ADB5B66F84A4B4BB6F6D7 /* BeginWith.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 48F15AE2F06B8500AD60C39BB45280A3 /* NSBundle+CurrentTestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 385DC965717B91B8545D01CCC6A3E9C2 /* NSBundle+CurrentTestBundle.swift */; }; - 4A1B85AEDC3DB75FC35A3F5438B0AD81 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31E0B323EBDB86405D253135E2BE94B5 /* BeLessThan.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 4B97BD308458A93E1F03EF7A7D5D4DCE /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = F48BBC2EEA8A445932E1D47F6F40C1C7 /* RaisesException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 4CBB32046E3B8844FFA021ACFC57702F /* ExpectationMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D153164B47B1F8FD94B8C221767637 /* ExpectationMessage.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 4E5EE3187B48F60A0FBA4EB9ACB7FD76 /* NSString+C99ExtendedIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2C60B26F74F6D2DA929600E79CABA24 /* NSString+C99ExtendedIdentifier.swift */; }; - 5221433E6847800B0533CAADF9BABA04 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3C45B76797C3907FFE84432868F1793 /* BeCloseTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 53B30596B1EA5F0845A886843FB9E859 /* CwlCatchException.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4C466EC9BD9E202DBB245E03F1CF551 /* CwlCatchException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 543967CB633CDE86DFD53581EAE1A35D /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02A4FE529CA8F0C68998F6B39C603467 /* BeEmpty.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 54A61062B9FB72C6BA0054B2A685ED0E /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA058CE06688019DC35F7AE265E2EAE /* Equal.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 5A49B2C87AABFAED124DE8DDCC2FEAA1 /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = 53BBA0DB1D93CA5E0EAD9F1FBF23933D /* World.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5B8DC6716BDD04AF78AC8048F5BACF38 /* SatisfyAllOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8C9D1630C39B95D05A2A9BE6D24EDBC /* SatisfyAllOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 5CE5E8EA75E0B3DC5BE140B61DF37EFD /* Nimble-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B1E5488251C2E363A401738AE0B015D /* Nimble-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 62DFF94A7A777939C861EDA13627999B /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AB9EC60B6A92E5BC46FE86B1D776B9C /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 63B6EE789529A220E576A10E3356FBEE /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 890CA32B61E93A336C2575B6B9F52E53 /* NimbleEnvironment.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 65C7F5A043925A30B66024D146D70C0E /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C686E0397773839C0371395173CB42F /* SuiteHooks.swift */; }; - 663333C5E1449EB8487518A5FEAEF8AD /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FC29EE7A1E0E658CD92E88FDE7C0CE5 /* Configuration.swift */; }; - 67365D8C7D4AB95553BB274368DBCF1E /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BBFAE1C4DC8EB0BC8CEE93B7F258DE3 /* Example.swift */; }; - 67D16958DA7E0257BECE6ACD1EF0A176 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3B36151435E4AA5BC2A1EC1757F65FB /* MatcherProtocols.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 683798C6164A47491876EF6076F27CB9 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEAF0A570510EEA68E032FF8AFAD84A6 /* Functional.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 6BEA7B617028CECFCCF7E73DE1EFBC00 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB25ECAC21407AC062228EADC002E41 /* BeIdenticalTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 6CF8C877AF611E2E0C67EDD06618E63C /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DCC34278BA150666EB06169C1395D7C /* NimbleXCTestHandler.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 73562E9C253FD0070063EEC3 /* NetworkSessionError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562E9B253FD0070063EEC3 /* NetworkSessionError.swift */; }; - 73562EA8253FD0750063EEC3 /* HTTPMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562EA7253FD0750063EEC3 /* HTTPMessage.swift */; }; - 73562EAF253FD0930063EEC3 /* HTTPRequestMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562EAE253FD0930063EEC3 /* HTTPRequestMessage.swift */; }; - 73562EB6253FD0BF0063EEC3 /* HTTPResultMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562EB5253FD0BF0063EEC3 /* HTTPResultMessage.swift */; }; - 73562EBD253FD0DF0063EEC3 /* NetworkResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562EBC253FD0DF0063EEC3 /* NetworkResult.swift */; }; - 73562ECA253FD1150063EEC3 /* HTTPBodyEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562EC9253FD1150063EEC3 /* HTTPBodyEncoder.swift */; }; - 73562ED1253FD1320063EEC3 /* HTTPValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562ED0253FD1320063EEC3 /* HTTPValidator.swift */; }; - 73562ED8253FD1530063EEC3 /* NetworkSessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562ED7253FD1530063EEC3 /* NetworkSessionManager.swift */; }; - 73562EDF253FD1900063EEC3 /* RequestAggregator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562EDE253FD1900063EEC3 /* RequestAggregator.swift */; }; - 73562EE6253FD1BB0063EEC3 /* ResponseDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562EE5253FD1BB0063EEC3 /* ResponseDecoder.swift */; }; - 73562EED253FD1DD0063EEC3 /* RetryControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562EEC253FD1DD0063EEC3 /* RetryControl.swift */; }; - 73562EF4253FD2050063EEC3 /* URLCompatible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562EF3253FD2050063EEC3 /* URLCompatible.swift */; }; - 73562EFB253FD2310063EEC3 /* URLRequestBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562EFA253FD2310063EEC3 /* URLRequestBuilder.swift */; }; - 73562F02253FD2580063EEC3 /* URLValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562F01253FD2580063EEC3 /* URLValidator.swift */; }; - 73562F0A253FD3710063EEC3 /* Thenable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562F09253FD3710063EEC3 /* Thenable.swift */; }; - 73562F11253FD3880063EEC3 /* URLRequestPromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562F10253FD3880063EEC3 /* URLRequestPromise.swift */; }; - 73562F18253FD3BB0063EEC3 /* URLThenableRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562F17253FD3BB0063EEC3 /* URLThenableRequest.swift */; }; - 73562F1F253FD3F50063EEC3 /* DataRequestPromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562F1E253FD3F50063EEC3 /* DataRequestPromise.swift */; }; - 73562F26253FD43A0063EEC3 /* DownloadRequestPromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562F25253FD43A0063EEC3 /* DownloadRequestPromise.swift */; }; - 73562F2D253FD4570063EEC3 /* UploadRequestPromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562F2C253FD4570063EEC3 /* UploadRequestPromise.swift */; }; - 73562F35253FD4910063EEC3 /* DropableAndResumable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562F34253FD4910063EEC3 /* DropableAndResumable.swift */; }; - 73562F3C253FD4A60063EEC3 /* DropableDataRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562F3B253FD4A60063EEC3 /* DropableDataRequest.swift */; }; - 73562F43253FD4BF0063EEC3 /* DropableUploadRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562F42253FD4BF0063EEC3 /* DropableUploadRequest.swift */; }; - 73562F4A253FD4DC0063EEC3 /* DropableURLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562F49253FD4DC0063EEC3 /* DropableURLRequest.swift */; }; - 73562F51253FD4F90063EEC3 /* ResumableDownloadRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73562F50253FD4F90063EEC3 /* ResumableDownloadRequest.swift */; }; - 739AB89F25402F3700EFB629 /* NetworkSessionManager+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739AB89E25402F3700EFB629 /* NetworkSessionManager+Extensions.swift */; }; - 739AB8B22540525300EFB629 /* NetworkRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739AB8B12540525300EFB629 /* NetworkRequest.swift */; }; - 739AB8B92540529600EFB629 /* DuplicatedHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739AB8B82540529600EFB629 /* DuplicatedHandler.swift */; }; - 73F38E1825482D05005D9644 /* LockRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73F38E1725482D05005D9644 /* LockRunner.swift */; }; - 7460C7CD0497AAE90DA55B895F47DEC4 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 560E5610625EB24314B48FCA0575670A /* DSL.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 76049DE81EB1E2B6C436086630F77CA0 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 5270361224437AC02141E27EB379DABF /* NMBStringify.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 7A5B1CC9274B3E4E10EE1561F3AFD58E /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15C89B2DC4D79FB8F6A690175A35A6DF /* Callsite.swift */; }; - 7A66539DD738BE28A057CA37AAF8F829 /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 483E03815233C312602C93E24992735A /* ExampleHooks.swift */; }; - 7ACF7943A939837532BB53A73F01CE63 /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD5D2196B1829A3EDBFB102126D560EF /* Match.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 1A7668F50FBD77A351AD34A740622F12 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 129C7578C2D64066E96CE067FC9B8270 /* Stringers.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 1A8DF79F5EF3D69864A84173E7C9810E /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AB5021AED5A79789DB0F55EBB7D8BF9 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1BC2062B92E38F3B307940E87306BA27 /* ResponseDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = D84BEDBB7950F823B9079EF7662A7855 /* ResponseDecoder.swift */; }; + 203EB7800CD07F218B25AE20FA8EFECB /* iONess-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 19F4FB956163964DB83518651050D8AA /* iONess-dummy.m */; }; + 209F98BB7B328893FB64BA0393B4BD57 /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9F174D27705CD0D5B6F171827327860 /* HooksPhase.swift */; }; + 22B5B4ED0824E7BAF2091AAD6238A73F /* QuickSpecBase.m in Sources */ = {isa = PBXBuildFile; fileRef = B4CB748969F898E8B2D944D91048B9E7 /* QuickSpecBase.m */; }; + 230B95D35E0D844194E7D60EA53375F9 /* CwlMachBadInstructionHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 03767F1A987613A95B2676A72B0B84EA /* CwlMachBadInstructionHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 23B1189E6BC5DFFE64CA88632EDE11BB /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBA0612628F0DADD5762A6A21339DA83 /* NMBObjCMatcher.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 2500828606876003366E11BA07AC937F /* RequestAggregator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DB31DB6E530C583FC107D7054399452 /* RequestAggregator.swift */; }; + 26655D8B7ABBC59035AF80295D2E8187 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA3D9DF8285942237E49C794E214A4FE /* BeIdenticalTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 275F3EABB03768D6AB675F2452A3AE23 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73BBDE3DC4E0B9D44E388D0F15EFAE49 /* MatchError.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 280EF156D4B95C3E4F7C877D113756C9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA8B94E9D3B433157168D1EECCEC11CD /* Foundation.framework */; }; + 2A3F1E2C701876668EBF1FE1A7825995 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAC9E5AF3B73131DD27CE98906A6ED4B /* ThrowError.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 2D01CFC489EE16DB6F945D84C4E0CD04 /* Nimble-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 774253CF3C1584FD0368CACF48D1A0A9 /* Nimble-dummy.m */; }; + 2F0B5199CDB717CA9F680579900ABF15 /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = C9DB303F07D27158CB8EC0B8E56B7642 /* QuickSpec.m */; }; + 327B838EF661BC49AC99190873F5DD95 /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = A83B46185F327212F381C57522C0BC72 /* BeVoid.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 3759C6A46C530C10CE2D39F08261239A /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 155B1F7CFE0EE4F984EAA8436E4824BE /* Expectation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 39382B0A1EF090D15BA6C89FC3DCB099 /* QuickTestObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D98EC2B9A6E8D71516EEE113E30C815 /* QuickTestObservation.swift */; }; + 3B85C195B5EC040E5C16B8451E2DC9EB /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D15E197B10116D55B001AA7A20621F7 /* NMBExceptionCapture.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 3D6A581E79FD9EAC1A948D8BC53F1EB0 /* QuickConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1806132AB751DBCAEF39424E99FF7E48 /* QuickConfiguration.swift */; }; + 3D76CD4A04044B00D7AB752D91A24EEC /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = A32B4D4671D06A5EA59461B01C7699AD /* MatcherFunc.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 3DBEFDA275364CBBC008E9CA7222DED0 /* CwlCatchException.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4790E4CF72DA4FB22AC59B342143498 /* CwlCatchException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 3EAC62922E79B33C61C6629BD08D5CD1 /* Thenable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69F66F346A5CDF67BA740DF991DDE261 /* Thenable.swift */; }; + 407C5FE6DA0142069EB17E92F8DDBD61 /* UploadRequestPromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF30F090CE8F0DA6FFC1C3856899D1E9 /* UploadRequestPromise.swift */; }; + 43EB6D8B2DF972A7629EB87CD4CEFC77 /* Predicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BC0A3FF6FD477B0C7F6F02B27CE77AF /* Predicate.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 44F78A9C4B73BB615F9F0EAE1548A20F /* CwlCatchBadInstruction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 954A60D7DD2C36BDA03141DF7B261C79 /* CwlCatchBadInstruction.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 46B431FBB6BAD4C08ABD088A4C6DB07B /* NetworkSessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FA74C7D1D3B41955E99C6799111B138 /* NetworkSessionManager.swift */; }; + 4ADE5FC9505A3BF7DF17AF9756585116 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 542E00A09ADF6969002F294486379CA5 /* QCKDSL.m */; }; + 4CE610F4A3E6CA3C085F05381E2121FD /* URLValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71917CB5393C9037C2A5CF5B76627A3F /* URLValidator.swift */; }; + 4E1DBC9FF76D6AD924D1356260438074 /* QuickSelectedTestSuiteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 637766238BDCE72CD1391DC53DAD2A35 /* QuickSelectedTestSuiteBuilder.swift */; }; + 4E8E1C7F509F19AABADE390607914DA6 /* NetworkSessionManager+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EAE118F9AECDFE686F419D6323DCFCF /* NetworkSessionManager+Extensions.swift */; }; + 5004989FF230763FBA51808AA9EE49AD /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F01D742DEEDDA47C9171459299570BB /* BeAKindOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 512AAF465EE936155DD9BBA92368928E /* Quick-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003A0919C1520027218C3524274F5CC /* Quick-dummy.m */; }; + 52C19F8F7C365A559FC9A2C686F9CED4 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = F5EA97E7F375D6D5781BE5475371223E /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 543A0F1350859A17BDBC32632492CB1C /* mach_excServer.h in Headers */ = {isa = PBXBuildFile; fileRef = E3192DE012FF5B4B5D23C64386F26545 /* mach_excServer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 54822D8662A32DE339917DF78A580DFD /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67EF98BCCBF20C8BF14E5AB84E03ED5A /* Match.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 57DBB752E4F40C0D960842554F747986 /* HTTPMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1331887AC07CA259F954B8DF0437325D /* HTTPMessage.swift */; }; + 58A884856B7E64EE3C204D9EDAA14045 /* Behavior.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86640C5D85CC40B3A5EEB28B78D43642 /* Behavior.swift */; }; + 599BD5FE9D1D2B17E8733D32B413EA8A /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = C3A5E32678667321A20666216C219D73 /* NMBStringify.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 59BF9ABA8BB14E0E4E345D13AB6D49FB /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = E53AAC35DDA6405D32FA0526DEB205E9 /* ExampleMetadata.swift */; }; + 610D686198B3BBB3906FD2DC859BAEA6 /* ContainElementSatisfying.swift in Sources */ = {isa = PBXBuildFile; fileRef = D87CD3CC712D348E239A9F594890089D /* ContainElementSatisfying.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 626A3DE1DAE9310FF840DDD2AD2A2C9B /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 951C612D0DAADD71CAE1A9D064EAD6BB /* BeNil.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 65AFB883DC33E616E6102F5AEAE9D706 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EBC8F300895E39EA0DF6D6B2B5E6BCD /* XCTest.framework */; }; + 65D41C8FDA768DF81796B22875979AF2 /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9A16C1C9A9183E692C8566829CB5601 /* PostNotification.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 66216D244381865ECAE874C132D4E7AE /* DataRequestPromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C6C49CFE52F969B617227718E8B11B2 /* DataRequestPromise.swift */; }; + 6BBE446491DB1CBD8C4EC0A54660565E /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0D172863C0BDAECFD14B9393CA5D938 /* BeGreaterThan.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 6D6FEE5DE48C29438DBD66D1066453D5 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEF5355479A963A012FA7139232424DA /* EndWith.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 6FE24D3C678494510F31FE91DD627A99 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA8B94E9D3B433157168D1EECCEC11CD /* Foundation.framework */; }; + 7536DD99ACEDE673713161E597B7B447 /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA15B5F498774DBFDCA9497B7821D6E /* ExampleHooks.swift */; }; + 76E7C7CDAA543C791A714B991F595F2B /* QuickSpecBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 847ED05B262AD8DA1B5869820F489113 /* QuickSpecBase.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7756FA7ED7F556FE496573BC9EB2FD8F /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F648DADAC9096138EECB5202EEC226FB /* SourceLocation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 77701F5CA6F8DB9091F8B9B8420FEC23 /* ToSucceed.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B2A477EFB76965FADF1E3DF09B86DA4 /* ToSucceed.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 786439E9ED23A7945AF105B6D6182C13 /* DropableUploadRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C4B4C63FC2F2F7EA5DF17305A4C34DB /* DropableUploadRequest.swift */; }; + 79945940AD580338225CD02DE971036B /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ED519DD3DDEAF69DB9366FACF241CE5 /* BeLessThanOrEqual.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 7CE6049975894E447F2D4071C74F6F8F /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 618493BCA98C0773B1245A2F563A6E8E /* Callsite.swift */; }; + 7EB28FEC3D0ABA1A2A6CFE57C400F74D /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 80EBC760E3C412597254F73E451DFEFC /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 823B3ADB43A6860187A61D7B108A2207 /* URLThenableRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 589F8B7F1F9BAC5982C24D82AA0A26BA /* URLThenableRequest.swift */; }; 8603DD337EFC8B7969CE5439725B1050 /* Pods-iONess_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 003B62ADE04EBDE3B07D21DEA21F9AA6 /* Pods-iONess_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B32C823A5263884ACC364067EFADA22 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE71444AF68F4EBBA952372DDC99BEC5 /* MatchError.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 8B729C7257E0E5C7F86E3597D460E212 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB4E7CFAA39A4413B7BA4EFFE8FE264 /* BeGreaterThanOrEqualTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 8C3F5E7FF0571B63D4DAA2825C9705D1 /* QuickSelectedTestSuiteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED2B49B18E0B080BA1256DEB2C1A7522 /* QuickSelectedTestSuiteBuilder.swift */; }; - 8CB9325284A6E8E782D34AF833480CA3 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 120569E985260497BE5BE039F8EA6DC1 /* BeGreaterThan.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 8D16EAB20CD849E7DC1B1EDCEF61067D /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 701070485650A8DEFEDB605DDB008707 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96C4F7349BB0B624490075CB4F37F2B4 /* CwlCatchBadInstruction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21AD60BB0DDB897810A61AD8D6C45CB0 /* CwlCatchBadInstruction.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 981D9FBF09890E4E20DF889B2AD514F0 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E14314C688B5AF0B465EE2700A160B6 /* BeLessThanOrEqual.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 99B2BFD67568B9953B86113CF7D1290C /* ThrowAssertion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54CA500398C5E855B7CAA4E6F1BA32FC /* ThrowAssertion.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 9BA4E7F68AE9967DE324C686E6DDF1A9 /* Predicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B112ADA7639157CE3DAB3EDD09464DFE /* Predicate.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - 9DB13659CA8F9BF54942DEDAE9F5E858 /* QuickSpecBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 72D12F832B12199869EC2812B758E446 /* QuickSpecBase.m */; }; - 9E82E59647C2E9653D2E5BAA5D15CF3D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 033A36A29482FD32230FE0CA177F9BD3 /* Foundation.framework */; }; - A02F4AB85BBBEBA608F33B3EA07C0CF9 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF60A06FE3A0FF28EF98697B78A7B672 /* BeNil.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - A38A1BAB9DC7FB158426F2791D2BDB9B /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0B18F336F1499758C07DFEEA18A844D /* BeAKindOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - A3A25739D8FCB7A4FE17C8C5A6C7BE72 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = D586A374E6D4951E9F6AC3E5FB2E1372 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A787308C5CA0BCA2B3A706F44CD5F7B4 /* ErrorUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA573BBB695A39BB5A1E8B501A391379 /* ErrorUtility.swift */; }; + 887AF8C809D60140319DE71D6427F370 /* NSBundle+CurrentTestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B5488DC431E4914985C4BE0A337A8B0 /* NSBundle+CurrentTestBundle.swift */; }; + 89414D5228B7117D80C9412389FC400B /* mach_excServer.c in Sources */ = {isa = PBXBuildFile; fileRef = B582450242BD4D1622124E0FE431D586 /* mach_excServer.c */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 8983FE0BC9271728ABB395DF206431AB /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0625478AD65E7A386D95A7FAEED72A71 /* HaveCount.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 89DFED261F449E70AF9DB5FE5ADF7DAA /* CwlCatchException.m in Sources */ = {isa = PBXBuildFile; fileRef = BC27C93DA6791BC5665A06610DA6B0B7 /* CwlCatchException.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 8A2DDA2570D63EA79E63B3711BFDDDBA /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91DE43D5C1D6F40802925D9782ED229E /* NMBExpectation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 8E14077A2BAECEB2E927511B199DA4D9 /* URLRequestPromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD9A8A416B13710625335F7BEB268D2F /* URLRequestPromise.swift */; }; + 8E4A2F4A1EF16B63817A516CC2743619 /* Quick-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 71519851BE602952F6A8B7F1BD49C47E /* Quick-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8E6C52E521C7213CC27000CEDF156F8F /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3352A14F53657FCD8794579036274CA1 /* RaisesException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 9231B70907F130F31CF5717C502B780C /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B9FF41D5900AD165160731F2C227F18 /* ExampleGroup.swift */; }; + 9231C59F68ED4A9A5EA944224F71C954 /* BeginWithPrefix.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89902C004A0C8EE2AB63BADDFF8B6BD8 /* BeginWithPrefix.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 94B18F2CFF543F6B2E43E84630C337E2 /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A4C13D3E16F5CC104B4F9E6E0509CE1 /* SuiteHooks.swift */; }; + 9B3277057E6C2128AAF1264F0EF8B9FC /* DropableDataRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEBDC3A28ADA4330629CEEDF0E08ACAE /* DropableDataRequest.swift */; }; + 9C96123C115327FBDCF2F3F7432348CC /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = A9F62A0EE4703C223EEA259AF8EEA0BB /* XCTestObservationCenter+Register.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 9D7B1AFB65DC11E69C3EB1CB41DC1EBA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA8B94E9D3B433157168D1EECCEC11CD /* Foundation.framework */; }; + 9DF8F4034624C4D4B6130B377ACBCCA5 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9575CB3C5E2D262B3BEC4C8E2AA7B96F /* Async.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + 9E874C00792FA983399C03EC00AE326D /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 05F7CB7F460539B70D21A7B3E3A3E6A0 /* XCTestSuite+QuickTestSuiteBuilder.m */; }; + 9FB5F3B3AAF3103848313FACD0CACBCD /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = D3632C388A7C67235660658982B4FB98 /* QuickConfiguration.m */; }; + A2E860821BA0EE14911D3F9EA55C0B9F /* HTTPBodyEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78F76079A463027429C6FA7DDA71EAF9 /* HTTPBodyEncoder.swift */; }; + A35159AD5A7A49BA9093F29B63DBD30D /* String+C99ExtendedIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E951F812A424CE407FEB85DA8B2C545 /* String+C99ExtendedIdentifier.swift */; }; + A3CD90F92E7E63331CDD6D45BDF98CC1 /* DispatchTimeInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76F28025DBEDA13B31570D5FD39DE5B6 /* DispatchTimeInterval.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + A590E76A80283B9FB9A3AB36E021723F /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A84B902903D23F24BA35D1FE28BFCCD /* AssertionDispatcher.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + A5CFEBC5DF03893FB27D37831A8BE8E8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA8B94E9D3B433157168D1EECCEC11CD /* Foundation.framework */; }; + A68B4D916EA7393819C6A64E15F2E61E /* ResumableDownloadRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE66BB900E7F2C2DAD2484113996437E /* ResumableDownloadRequest.swift */; }; + A6CE2E672C8EB4DF57485428AFD64A3C /* URL+FileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 088187977DB634D609449A6273B74B0D /* URL+FileName.swift */; }; + A7F5B07BF96955EFDC9106335235EDB2 /* QuickTestSuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = F785A9D92F5403AECF938E620FD0DA61 /* QuickTestSuite.swift */; }; + A85403E9F906C2E74B26DFB29F83C484 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77EC1764F800A0EDC4C05956522C26E7 /* AllPass.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + A92B3AAEDFE17B7A68FF4FDEEDC2CF54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA8B94E9D3B433157168D1EECCEC11CD /* Foundation.framework */; }; A9BEB604EF4D5F5A4FC23EBEC7294F4D /* Pods-iONess_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B2563F2A2300CCB16FECB338E79E6C09 /* Pods-iONess_Example-dummy.m */; }; - AB2F79D3BF6F4CB33383BDBA189AA12B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB445D0D789E457AF2CB5BD9FBFF1A6 /* AssertionDispatcher.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - AD1ABD5ADD73F47E6DF31F91EA4A0FF8 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5908E892477D532DCCDDB8C80794BAF8 /* NMBObjCMatcher.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - AE99DE37027335451FFD42AD0017BF12 /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976474E7D7496B4A4E5D33D4C8BF5A02 /* SatisfyAnyOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - B17CEF5ECE9BA91DC07E7208AECB567F /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E596FAB084FB38BAA6E6154A8948D07F /* Filter.swift */; }; - B5491A88571862A1B914E6BE3CFCA5BD /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 41D3FB34F99E74E262BF73B51DA1A5CB /* QuickSpec.m */; }; - B662FB934B08450530A1A521489732B3 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FA531194861D0A8FFC1CE57D9B68E31 /* FailureMessage.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - B7A0119D88C1DF43AFD25FB3A0B6E842 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 932DF3D983AE0988CFD283477A28FCAB /* Expectation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - BAEAB2ADD34955EE77CBA4B43994B6F7 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9446A65840B908911DFEFADA2D17AAA /* NMBExpectation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - BB1619BCE35A078A932C56B2519CCB6C /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC32ADD4781C6B7B0998E52BA3E7EBA1 /* BeLogical.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - BD8AB3699C483B11671A85C72CE92B50 /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC011028EF971C9BF3E6EDCB74D8E2F7 /* ExampleGroup.swift */; }; - BE2E0A9AC5E2019BFD31452E96ED83D9 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A3949B2D0A443BF3E4F9702DD93325A /* AssertionRecorder.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - BEDC36DEA21352A0F346A2513EE0540E /* QuickSpecBase.h in Headers */ = {isa = PBXBuildFile; fileRef = B8C5F64D03075691404D76199140494B /* QuickSpecBase.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BF162FE488440AC9824E22EF6BD760FC /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4264F5636D0F4709F681C45F30B874E4 /* DSL+Wait.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - C098C153F2988A344EAD8EE4C0CDF882 /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C506A3350F263C8D84B9BBEAFE4773F /* PostNotification.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - C29B80485F3ACF3181C93C0E7830E5E8 /* iONess-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C279CC42E2D488B131EDFE5A45F5A4F6 /* iONess-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C42E25AEAE4758760D9239D25E88FEAF /* CwlCatchException.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A62D0C97CA01FB568E53F30CC5E60BB /* CwlCatchException.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C52D4F6B0EEB06EFD47A2391AE2C4965 /* iONess-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C0298995678655F3D5D074ADECEB1682 /* iONess-dummy.m */; }; - C6B1FF2DCF039C964A6986847A6758D1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 033A36A29482FD32230FE0CA177F9BD3 /* Foundation.framework */; }; - C971A8D42C7C043DC4970A69B81546A7 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = B93F204C6DD5BC20D1D410594A73E463 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA9A2D74A41B640925B521CEC8BBEACE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 033A36A29482FD32230FE0CA177F9BD3 /* Foundation.framework */; }; - CCA41EC992E6CFEC5367FE79E843240D /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DD39B35C6EA5095805404AA3E1B7799 /* AllPass.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - CEB0B57C65304E1E2A8C70B2A3FC7A6B /* Quick-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0094A06AD6DA53D8221A6A3894EBE456 /* Quick-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D01B8CB271F18C9B70586679F0C2E747 /* Nimble-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E89BC3567E15EF156798F100A73DC84 /* Nimble-dummy.m */; }; - D21313F2B8BF3443B4CF02864578C13E /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 55A3F3667E08ECF4444E9EB398924D2B /* DSL.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - D2BE111AE3950E47C5603F7EE3456107 /* Behavior.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFFD7B0E50351498423EAE4217BE316B /* Behavior.swift */; }; - DA0DA6C2D7C6235862E9A6929144EBA5 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3CC2893FCD5E6F763A904A6B79BD94E /* SourceLocation.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - DC5219DBE9A6FFCC45A5A78F09E63A22 /* URL+FileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E7403F153A2DB3185254A03B3EACD20 /* URL+FileName.swift */; }; - DCC243D2AEC18F6FD827742DCBCC4D1E /* ContainElementSatisfying.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BC0A4AB79443BE37AC1290DB3B49D9E /* ContainElementSatisfying.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + AA30AF4811BF289F891D60B772ABC7F6 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48030673D1C6A4142D109D569DAE8BBF /* Equal.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + AA467E728F5A9158EB0969A84108E87B /* RetryControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5725F8B7947A7099A297F7496D6F4600 /* RetryControl.swift */; }; + AD3F3DEA678B9C0A1C4F0EF79BFB7505 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DD4C5D377663254ACAC35F9513AEAD2 /* MatcherProtocols.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + AF60C00928A7AFE04E374B620EEA5F49 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A6BBF570610A2A47EAD3F82A0BEBD6F /* Filter.swift */; }; + B1E068EFD6AC94A27522405C9062C62F /* NetworkResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2120B93428B47B7BF839446F07F47D4 /* NetworkResult.swift */; }; + B2F69D8691E68FACE1F389CAA632159C /* HTTPValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B16C36858C1B0D92F8318B50AA424C0 /* HTTPValidator.swift */; }; + B3A14E7D18C64299488164C04FD75E83 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1485FFA48DDDEF5CBED6D8F731001AA /* BeEmpty.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + B48508EB39EE315F5A00429EEA69DD63 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE1576E984B3DAAB4DC55E32F57AFDF3 /* Configuration.swift */; }; + B4990E8D4FFAEF51DA68F7B195158FF8 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2277A9C3E35FA63A791006323805267A /* DSL.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + B58F9D05085142D2BF0CC6E1772ED9FA /* NetworkRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499A8242A91DE9D8D76CC3AE69829841 /* NetworkRequest.swift */; }; + B6CDF4C9B27A5DE16F4823B6DEF99869 /* LockRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6944263748751C8CA6AD5D0F7B1C8165 /* LockRunner.swift */; }; + B791BCADC64C0308254FE6BEE9ADBFBA /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = F64A12FA1786AF917CC2E92AF2C2F245 /* BeginWith.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + B7A132AB2E3920D99510C0A7C9DC6A3C /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA1CBAE7D4312D2C2076A11F4D700D7B /* NimbleXCTestHandler.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + BAE453A15CC93D9864577A1FEDE4E0E7 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96C27EE7E44371B589841046617BC4EA /* Contain.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + BE56C54CD29F23A1C631645390E8569D /* ErrorUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 330449905CBD0256B295240608C83E2E /* ErrorUtility.swift */; }; + BFEBC90223F66B0FF770B92B1C670BCF /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = D92C57D471EE3A427AB823E625B39311 /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C17FBE7E5CD95992F58D6B9042872C12 /* NetworkSessionError.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE24CDE885BA88F0B033C285E7AB6D36 /* NetworkSessionError.swift */; }; + C52FB32088F23958D2D96F67B0A30AA3 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C320C373A320C92A1C7804D15D10CC4B /* BeCloseTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + C71EF251675CD5EE60D66978DBB5B2D1 /* iONess-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 70BA9C350E5395B8D486A1E15050EA25 /* iONess-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C96C1A7F6894C38A5BB0EF16A41C2A1B /* CwlCatchException.h in Headers */ = {isa = PBXBuildFile; fileRef = 4334355ECD1734C74102783E5CC9B13F /* CwlCatchException.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C9E716023868A97D2F5B19934D93045E /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 721033FB74EBCC58DA3D43D45B053734 /* World+DSL.swift */; }; + CC87EF1E8E515447BCFCBC6F019EE057 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53DEE99375D700D1AD46AE0812AB5DE1 /* Expression.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + D175D29A5DB6B6ECFF966BC035985AB4 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = A296F876C791F3E71AE0E8FE2E2FFA84 /* BeAnInstanceOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + D2C041844A0EB4EB2E8C7B9DAA748EEB /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29464526915A7F01A5F16D211105A01E /* Example.swift */; }; + D6C7E3D6B8C5D7C73664FEAC6F37EFB4 /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DDEEAB70DDB63F8570BB00D5D90A69E /* SatisfyAnyOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + D7F330FD8821513B4878BA0CD769F64E /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1AFC694E073E5C44A84DE4B7B5BF135 /* BeLessThan.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + D8373760129155D098FF7A0F29AF36EE /* DownloadRequestPromise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D391BE90C2152C24FB677E6833FAD74 /* DownloadRequestPromise.swift */; }; + D9280F42D370B7A50BE491101C79E80E /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 8095DD80EF381DCCE3A7A850BA74CA97 /* DSL.m */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + DC1A7C98613B411576BC3474CBD69EC2 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 506FA9A2647E47797A58EEF429EDCBED /* BeGreaterThanOrEqualTo.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + DCFA0DF25FA7F46D4DB544C6CD7ACB1B /* DropableAndResumable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A82441B46AF5BF8529C136FB00587EB /* DropableAndResumable.swift */; }; DD6286E21D3D2F94C3A1490023AD5698 /* Pods-iONess_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BEB9A7F28572FE865BC07428478E765 /* Pods-iONess_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DEF6305C7FCCD86B037E3811551D16E6 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 356EEADE01162812C51149E790045EB1 /* Errors.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - E1216911C249E3FC383CE5EE1E1066F3 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = B769F788770838BE89AE4415DB08C45D /* Contain.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - E2A3FF8FBAC2E21C91E8C5EE009E0FCD /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 94AC09AF9058C6238D2FDE862C40A26C /* QCKDSL.m */; }; - E594306BF52C899BCE23A4BA56CD0DD0 /* CwlPreconditionTesting.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F074E9D624A6B99EC5D31DC5AF5A75B /* CwlPreconditionTesting.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E6C11C009FC4EEB972E5175E3D2EDCA5 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 067C823065EF1CF3D619453B1CD12184 /* ThrowError.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - E84A4ED0B63C48CC6E4571784BF070F9 /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 443710DF869945EC3BF2E518468FC4B3 /* HaveCount.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - EB13561E71736E81399CB85419419570 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6BECF06FCB5840C35EC40C188D47F8C /* AdapterProtocols.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - EDD6F0CB0C4A0FBF470FF1FA37E28FCC /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EC524120F8A4964A08ED03B1E129238 /* BeAnInstanceOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - EFC160CE0D8BD88499BACB45706186B4 /* Quick-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E1BDCAD60312625744438EFC3CFBFCB /* Quick-dummy.m */; }; - F0EC1E8DF64700838C1BC79AFEC93A1C /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BF04F4FD5FCD4631F104CE9DB393AD2 /* World.swift */; }; - F2879D2ED08204999EAB760DE2A2E200 /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FAA80FF2C63B9886F4440CCDB308DCB /* Closures.swift */; }; - F630B376ABE2B76BD06716E25EC25606 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBEC5CCE7BEDDE5F9088F1B6E292F746 /* Expression.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - F8EA3B6B23173D51461F920F77B3C6BE /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3326DE447DD9522EC2436AFCFE32F3E7 /* Stringers.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - F93310609CA1D35157D85EFAB3808763 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = CEFA9CCAA5DEFECA4FE699122BF21EDF /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA5A1BA48BC7F11F18E7EB2C61FB2054 /* CwlBadInstructionException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24961798DB3B3EE088E1F42C3C64E158 /* CwlBadInstructionException.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; - FAB210037DEE6DDF3679C07D48D9E8DD /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4F5B6B441B570E71901FC406551E34B /* ExampleMetadata.swift */; }; + DD9B2D62BC7B8527A6CC05D2737674B4 /* Await.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E7198DA99DA64121B4A83417B8988D9 /* Await.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + DE0779882546221C74428CAA44290FE1 /* HTTPResultMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03367386DCD9A4C81D9D46EA3FF19AA2 /* HTTPResultMessage.swift */; }; + DE3657A6A7DAF55EDDC583D060CEA51C /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0078677BCD78708833ADBA9C3347799B /* Errors.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + DF40457B66380958B843F26597F99E8B /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 135FCD4CD79C5AE6C8C6E0907E48028B /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E1B3B56A2B3791E9363D8E5CEFB31B49 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE72959DEFBE5754F55D6C2C1981F953 /* FailureMessage.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + E4DB2D264762C451472546D5A896292D /* DropableURLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5B0A40F2D85E7DD593ECB26B9A62075 /* DropableURLRequest.swift */; }; + E5420ACB746E9206169606C5C9352E50 /* ThrowAssertion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A78AFEE2B5CEA7AA28EFD5A7131A5D1 /* ThrowAssertion.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + E6919764B414357B20730085E46D021F /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1F25444F0CF00CE3990215A54EF1F8A /* BeLogical.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + E69E0B1C65745907C675D4106BBDC3C7 /* URLCompatible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33C19E4A470BC351E348048CDF836D86 /* URLCompatible.swift */; }; + E9B55E6C43FB7AB6DD2823698F782B87 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = FA63ED3CFE4F4F6C676D373D876025F6 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EBF0D67208D37255308A31F00DD4198F /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = F7DF8251B6461222D7B4BCCD9616E983 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F01995755687FA91F51A15ED8FD9D125 /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDA602A1771389806AD7B90FEE90CC89 /* World.swift */; }; + F32BD8F634D9F82B0EE791262FEFC59C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2787233B1D89BCD45FCD46C792E3A89F /* NimbleEnvironment.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + F4980302BB992AECA18EB5CD294A8069 /* SatisfyAllOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE459B5976A49CD66EBA05C2DC284B38 /* SatisfyAllOf.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + F6B5D5E3FCD639EE750DE6F2ED6FF4FD /* ElementsEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6B9D4976C8BADD4D4AD4DD861D38AF4 /* ElementsEqual.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + FAF2D94B80ADF206BDE14D4FB5C70939 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C806048D533C178B6EEFC71A7D9BD0B /* AssertionRecorder.swift */; settings = {COMPILER_FLAGS = "-DPRODUCT_NAME=Nimble/Nimble"; }; }; + FB31C3DFB39C623D706448441B4DA663 /* DuplicatedHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11BA6188341661F72C3A9DA4585B0DE /* DuplicatedHandler.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 2CD4DE0234DC29AF71ABB69258E7CBC8 /* PBXContainerItemProxy */ = { + 5892008C2384061B62FA79F2D6978885 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = C82891EAB7293DBEE916B21F57E8474D; - remoteInfo = Quick; + remoteGlobalIDString = 7D1596B120EF0C1736A66C4A428348C0; + remoteInfo = iONess; }; - 9752F6FEFA8103A08CA59E75A4FDE422 /* PBXContainerItemProxy */ = { + 7C6BFA20E2AE90DF890F4AF01030469A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 33540E88CF4DEA116CA304FCD0971485; remoteInfo = "Pods-iONess_Example"; }; - E1903516A889B45B7E704626E8AE0BB8 /* PBXContainerItemProxy */ = { + ADE02453731DD658B1C53528D69DC29F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 7D1596B120EF0C1736A66C4A428348C0; - remoteInfo = iONess; + remoteGlobalIDString = C82891EAB7293DBEE916B21F57E8474D; + remoteInfo = Quick; }; - EE20D3CAF5B5FF2308419D1F6584C93F /* PBXContainerItemProxy */ = { + E824DA457F1B69707E0E58DF1C66BF2C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; @@ -187,219 +188,220 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 001FF222EA83335C3B8DDC5074A862C7 /* Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Async.swift; path = Sources/Nimble/Matchers/Async.swift; sourceTree = ""; }; 003B62ADE04EBDE3B07D21DEA21F9AA6 /* Pods-iONess_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-iONess_Example-umbrella.h"; sourceTree = ""; }; - 0094A06AD6DA53D8221A6A3894EBE456 /* Quick-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Quick-umbrella.h"; sourceTree = ""; }; - 01B00F5B76F8274E949CD00EC7199C0F /* mach_excServer.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = mach_excServer.c; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.c; sourceTree = ""; }; - 0253B80BADDF2A90BB83C535530606BA /* iONess.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = iONess.release.xcconfig; sourceTree = ""; }; - 02A4FE529CA8F0C68998F6B39C603467 /* BeEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeEmpty.swift; path = Sources/Nimble/Matchers/BeEmpty.swift; sourceTree = ""; }; - 033A36A29482FD32230FE0CA177F9BD3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 041DA3A9E60888E81EDC407BBDE87312 /* Nimble.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nimble.debug.xcconfig; sourceTree = ""; }; - 067C823065EF1CF3D619453B1CD12184 /* ThrowError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThrowError.swift; path = Sources/Nimble/Matchers/ThrowError.swift; sourceTree = ""; }; - 09D153164B47B1F8FD94B8C221767637 /* ExpectationMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpectationMessage.swift; path = Sources/Nimble/ExpectationMessage.swift; sourceTree = ""; }; - 0B8B0D02B3F14D0C4DDF6368764D8EC4 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - 0D631E9908483F9525A6B3F36F16CC61 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0F027235B72DB1D8068F1E1CA3567545 /* Quick.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Quick.modulemap; sourceTree = ""; }; - 120569E985260497BE5BE039F8EA6DC1 /* BeGreaterThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThan.swift; path = Sources/Nimble/Matchers/BeGreaterThan.swift; sourceTree = ""; }; - 1581729B7C5C85351FA7BD57E714B770 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBExceptionCapture.h; path = Sources/NimbleObjectiveC/NMBExceptionCapture.h; sourceTree = ""; }; - 15C89B2DC4D79FB8F6A690175A35A6DF /* Callsite.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Callsite.swift; path = Sources/Quick/Callsite.swift; sourceTree = ""; }; + 0078677BCD78708833ADBA9C3347799B /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = Sources/Nimble/Utils/Errors.swift; sourceTree = ""; }; + 03367386DCD9A4C81D9D46EA3FF19AA2 /* HTTPResultMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HTTPResultMessage.swift; sourceTree = ""; }; + 03767F1A987613A95B2676A72B0B84EA /* CwlMachBadInstructionHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CwlMachBadInstructionHandler.h; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/include/CwlMachBadInstructionHandler.h; sourceTree = ""; }; + 05F7CB7F460539B70D21A7B3E3A3E6A0 /* XCTestSuite+QuickTestSuiteBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "XCTestSuite+QuickTestSuiteBuilder.m"; path = "Sources/QuickObjectiveC/XCTestSuite+QuickTestSuiteBuilder.m"; sourceTree = ""; }; + 0625478AD65E7A386D95A7FAEED72A71 /* HaveCount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HaveCount.swift; path = Sources/Nimble/Matchers/HaveCount.swift; sourceTree = ""; }; + 088187977DB634D609449A6273B74B0D /* URL+FileName.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+FileName.swift"; path = "Sources/Quick/URL+FileName.swift"; sourceTree = ""; }; + 0B5488DC431E4914985C4BE0A337A8B0 /* NSBundle+CurrentTestBundle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSBundle+CurrentTestBundle.swift"; path = "Sources/Quick/NSBundle+CurrentTestBundle.swift"; sourceTree = ""; }; + 0D631E9908483F9525A6B3F36F16CC61 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Quick.framework; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0F01D742DEEDDA47C9171459299570BB /* BeAKindOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAKindOf.swift; path = Sources/Nimble/Matchers/BeAKindOf.swift; sourceTree = ""; }; + 11443933AB4510E1C0CE752FBB19294D /* iONess.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = iONess.release.xcconfig; sourceTree = ""; }; + 129C7578C2D64066E96CE067FC9B8270 /* Stringers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stringers.swift; path = Sources/Nimble/Utils/Stringers.swift; sourceTree = ""; }; + 1331887AC07CA259F954B8DF0437325D /* HTTPMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HTTPMessage.swift; sourceTree = ""; }; + 135FCD4CD79C5AE6C8C6E0907E48028B /* NMBStringify.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBStringify.h; path = Sources/NimbleObjectiveC/NMBStringify.h; sourceTree = ""; }; + 155B1F7CFE0EE4F984EAA8436E4824BE /* Expectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expectation.swift; path = Sources/Nimble/Expectation.swift; sourceTree = ""; }; 16D6D21C3D6F72DF58C30940A69E6F27 /* Pods-iONess_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-iONess_Example-Info.plist"; sourceTree = ""; }; - 1E14314C688B5AF0B465EE2700A160B6 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThanOrEqual.swift; path = Sources/Nimble/Matchers/BeLessThanOrEqual.swift; sourceTree = ""; }; - 1E89BC3567E15EF156798F100A73DC84 /* Nimble-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Nimble-dummy.m"; sourceTree = ""; }; - 21AD60BB0DDB897810A61AD8D6C45CB0 /* CwlCatchBadInstruction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlCatchBadInstruction.swift; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlCatchBadInstruction.swift; sourceTree = ""; }; - 22425C07C59D2CF4D1B1C4E5632D8FB0 /* Nimble-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nimble-prefix.pch"; sourceTree = ""; }; - 2253F7742A6212245AF43054AA060B21 /* mach_excServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mach_excServer.h; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.h; sourceTree = ""; }; - 24961798DB3B3EE088E1F42C3C64E158 /* CwlBadInstructionException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlBadInstructionException.swift; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlBadInstructionException.swift; sourceTree = ""; }; + 1806132AB751DBCAEF39424E99FF7E48 /* QuickConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickConfiguration.swift; path = Sources/Quick/Configuration/QuickConfiguration.swift; sourceTree = ""; }; + 19F4FB956163964DB83518651050D8AA /* iONess-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "iONess-dummy.m"; sourceTree = ""; }; + 1A4C13D3E16F5CC104B4F9E6E0509CE1 /* SuiteHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuiteHooks.swift; path = Sources/Quick/Hooks/SuiteHooks.swift; sourceTree = ""; }; + 1B2A477EFB76965FADF1E3DF09B86DA4 /* ToSucceed.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToSucceed.swift; path = Sources/Nimble/Matchers/ToSucceed.swift; sourceTree = ""; }; + 1B5DE0BACD9C50DBF2BF9B7132E00C2C /* Quick.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Quick.modulemap; sourceTree = ""; }; + 1BB2929812A8305A8664F7E657077884 /* HTTPRequestMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HTTPRequestMessage.swift; sourceTree = ""; }; + 1D3D771746E4E1457988A3715DC25E8B /* iONess-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "iONess-Info.plist"; sourceTree = ""; }; + 1D7731D3D4DA90B3FB2056B2AB5B6C7E /* CwlMachBadInstructionHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CwlMachBadInstructionHandler.m; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/CwlMachBadInstructionHandler.m; sourceTree = ""; }; + 1EAE118F9AECDFE686F419D6323DCFCF /* NetworkSessionManager+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NetworkSessionManager+Extensions.swift"; sourceTree = ""; }; + 1F8DF7DA09AEDCBA06E2D8A1ED3DF37B /* CwlBadInstructionException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlBadInstructionException.swift; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlBadInstructionException.swift; sourceTree = ""; }; + 2277A9C3E35FA63A791006323805267A /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Sources/Nimble/DSL.swift; sourceTree = ""; }; 25D125830D04A2830B837B1022197E61 /* Pods-iONess_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-iONess_Tests-acknowledgements.markdown"; sourceTree = ""; }; - 27C2E58D114AC181F6245906914BC378 /* ToSucceed.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToSucceed.swift; path = Sources/Nimble/Matchers/ToSucceed.swift; sourceTree = ""; }; + 262C909BA8DAF2BC0DB1CDAFFC063E1B /* CwlDarwinDefinitions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlDarwinDefinitions.swift; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlDarwinDefinitions.swift; sourceTree = ""; }; + 2787233B1D89BCD45FCD46C792E3A89F /* NimbleEnvironment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleEnvironment.swift; path = Sources/Nimble/Adapters/NimbleEnvironment.swift; sourceTree = ""; }; + 29464526915A7F01A5F16D211105A01E /* Example.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Example.swift; path = Sources/Quick/Example.swift; sourceTree = ""; }; 2A82AD683E8F5AD06B0BDADF25E869FA /* Pods-iONess_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-iONess_Tests-dummy.m"; sourceTree = ""; }; - 2B1E5488251C2E363A401738AE0B015D /* Nimble-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nimble-umbrella.h"; sourceTree = ""; }; - 2C061463250766C9C05995AB8EE63E66 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - 2DAD0EF93295EDD828099D39AA688FA7 /* iONess-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "iONess-Info.plist"; sourceTree = ""; }; - 3049ACFF04304D5A69F83457B0C750D8 /* CwlMachBadInstructionHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CwlMachBadInstructionHandler.m; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/CwlMachBadInstructionHandler.m; sourceTree = ""; }; + 2C4B4C63FC2F2F7EA5DF17305A4C34DB /* DropableUploadRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DropableUploadRequest.swift; sourceTree = ""; }; + 2D9BFC41B761DDAB5C1BE811146D806A /* Quick.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Quick.release.xcconfig; sourceTree = ""; }; + 2DA15B5F498774DBFDCA9497B7821D6E /* ExampleHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleHooks.swift; path = Sources/Quick/Hooks/ExampleHooks.swift; sourceTree = ""; }; 3167663490A06B2783006BEBA9236306 /* Pods-iONess_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iONess_Example.debug.xcconfig"; sourceTree = ""; }; - 31E0B323EBDB86405D253135E2BE94B5 /* BeLessThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThan.swift; path = Sources/Nimble/Matchers/BeLessThan.swift; sourceTree = ""; }; - 3326DE447DD9522EC2436AFCFE32F3E7 /* Stringers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stringers.swift; path = Sources/Nimble/Utils/Stringers.swift; sourceTree = ""; }; - 356EEADE01162812C51149E790045EB1 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = Sources/Nimble/Utils/Errors.swift; sourceTree = ""; }; - 36371F722071E6DCF53883900EDFECF5 /* Pods_iONess_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_iONess_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 385DC965717B91B8545D01CCC6A3E9C2 /* NSBundle+CurrentTestBundle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSBundle+CurrentTestBundle.swift"; path = "Sources/Quick/NSBundle+CurrentTestBundle.swift"; sourceTree = ""; }; - 39BFFF064EE3856AA0EA960CEEA964CC /* World+DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "World+DSL.swift"; path = "Sources/Quick/DSL/World+DSL.swift"; sourceTree = ""; }; - 3E7403F153A2DB3185254A03B3EACD20 /* URL+FileName.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+FileName.swift"; path = "Sources/Quick/URL+FileName.swift"; sourceTree = ""; }; - 41D3FB34F99E74E262BF73B51DA1A5CB /* QuickSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickSpec.m; path = Sources/QuickObjectiveC/QuickSpec.m; sourceTree = ""; }; - 4255BD03AA0B39A2239DF75D25247ADB /* CwlMachBadInstructionHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CwlMachBadInstructionHandler.h; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/include/CwlMachBadInstructionHandler.h; sourceTree = ""; }; - 4264F5636D0F4709F681C45F30B874E4 /* DSL+Wait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DSL+Wait.swift"; path = "Sources/Nimble/DSL+Wait.swift"; sourceTree = ""; }; - 43F14CE9E6AC959093CDE8B0C0B081D3 /* MatcherFunc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherFunc.swift; path = Sources/Nimble/Matchers/MatcherFunc.swift; sourceTree = ""; }; - 443710DF869945EC3BF2E518468FC4B3 /* HaveCount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HaveCount.swift; path = Sources/Nimble/Matchers/HaveCount.swift; sourceTree = ""; }; - 4748ED286DAE82AB42FA817D122FA7F8 /* iONess.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = iONess.debug.xcconfig; sourceTree = ""; }; - 483E03815233C312602C93E24992735A /* ExampleHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleHooks.swift; path = Sources/Quick/Hooks/ExampleHooks.swift; sourceTree = ""; }; - 49A76AD53A23DF1F3B57AB63C9862044 /* Quick-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Quick-Info.plist"; sourceTree = ""; }; - 4AB9EC60B6A92E5BC46FE86B1D776B9C /* Nimble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nimble.h; path = Sources/Nimble/Nimble.h; sourceTree = ""; }; - 4BC0A4AB79443BE37AC1290DB3B49D9E /* ContainElementSatisfying.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContainElementSatisfying.swift; path = Sources/Nimble/Matchers/ContainElementSatisfying.swift; sourceTree = ""; }; - 4BF04F4FD5FCD4631F104CE9DB393AD2 /* World.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = World.swift; path = Sources/Quick/World.swift; sourceTree = ""; }; - 4DD39B35C6EA5095805404AA3E1B7799 /* AllPass.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllPass.swift; path = Sources/Nimble/Matchers/AllPass.swift; sourceTree = ""; }; - 4EB4E7CFAA39A4413B7BA4EFFE8FE264 /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThanOrEqualTo.swift; path = Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift; sourceTree = ""; }; - 4EC524120F8A4964A08ED03B1E129238 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAnInstanceOf.swift; path = Sources/Nimble/Matchers/BeAnInstanceOf.swift; sourceTree = ""; }; - 4FC8042E1D361B2CB8A86EBCBE4C69AC /* HooksPhase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HooksPhase.swift; path = Sources/Quick/Hooks/HooksPhase.swift; sourceTree = ""; }; - 514D598924DC7B72B1BD60B9BF9DD433 /* Quick-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Quick-prefix.pch"; sourceTree = ""; }; + 330449905CBD0256B295240608C83E2E /* ErrorUtility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ErrorUtility.swift; path = Sources/Quick/ErrorUtility.swift; sourceTree = ""; }; + 3352A14F53657FCD8794579036274CA1 /* RaisesException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RaisesException.swift; path = Sources/Nimble/Matchers/RaisesException.swift; sourceTree = ""; }; + 33C19E4A470BC351E348048CDF836D86 /* URLCompatible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = URLCompatible.swift; sourceTree = ""; }; + 36371F722071E6DCF53883900EDFECF5 /* Pods_iONess_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_iONess_Example.framework; path = "Pods-iONess_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B16C36858C1B0D92F8318B50AA424C0 /* HTTPValidator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HTTPValidator.swift; sourceTree = ""; }; + 3BC0A3FF6FD477B0C7F6F02B27CE77AF /* Predicate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Predicate.swift; path = Sources/Nimble/Matchers/Predicate.swift; sourceTree = ""; }; + 3C806048D533C178B6EEFC71A7D9BD0B /* AssertionRecorder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionRecorder.swift; path = Sources/Nimble/Adapters/AssertionRecorder.swift; sourceTree = ""; }; + 3D0869DCEC853A6D1ADFABDC5A4DC76D /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + 3FA74C7D1D3B41955E99C6799111B138 /* NetworkSessionManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkSessionManager.swift; sourceTree = ""; }; + 4334355ECD1734C74102783E5CC9B13F /* CwlCatchException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CwlCatchException.h; path = Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/include/CwlCatchException.h; sourceTree = ""; }; + 45760156C76427D742F58587059CEA7F /* iONess-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iONess-prefix.pch"; sourceTree = ""; }; + 458ED94BFE55E706B3A28E48B9C291E5 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; + 48030673D1C6A4142D109D569DAE8BBF /* Equal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Equal.swift; path = Sources/Nimble/Matchers/Equal.swift; sourceTree = ""; }; + 499A8242A91DE9D8D76CC3AE69829841 /* NetworkRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkRequest.swift; sourceTree = ""; }; + 4B9FF41D5900AD165160731F2C227F18 /* ExampleGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleGroup.swift; path = Sources/Quick/ExampleGroup.swift; sourceTree = ""; }; + 506FA9A2647E47797A58EEF429EDCBED /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThanOrEqualTo.swift; path = Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift; sourceTree = ""; }; 515C9E23F072C7CF569B88FE1BB3B1DA /* Pods-iONess_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-iONess_Tests-acknowledgements.plist"; sourceTree = ""; }; - 51B84C7FFC08F42191ACE85342E7A391 /* NMBExceptionCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBExceptionCapture.m; path = Sources/NimbleObjectiveC/NMBExceptionCapture.m; sourceTree = ""; }; - 5270361224437AC02141E27EB379DABF /* NMBStringify.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBStringify.m; path = Sources/NimbleObjectiveC/NMBStringify.m; sourceTree = ""; }; - 52D883CF0DBE115C0AEFAD20EBF697A0 /* iONess.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; path = iONess.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 53BBA0DB1D93CA5E0EAD9F1FBF23933D /* World.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = World.h; path = Sources/QuickObjectiveC/World.h; sourceTree = ""; }; - 54CA500398C5E855B7CAA4E6F1BA32FC /* ThrowAssertion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThrowAssertion.swift; path = Sources/Nimble/Matchers/ThrowAssertion.swift; sourceTree = ""; }; + 523F4123831772C0FEEBA7A82BBA31B6 /* Closures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Closures.swift; path = Sources/Quick/Hooks/Closures.swift; sourceTree = ""; }; + 53DEE99375D700D1AD46AE0812AB5DE1 /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/Nimble/Expression.swift; sourceTree = ""; }; + 542E00A09ADF6969002F294486379CA5 /* QCKDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QCKDSL.m; path = Sources/QuickObjectiveC/DSL/QCKDSL.m; sourceTree = ""; }; 54CC3410571FDDF958432C6947F1A228 /* Pods-iONess_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-iONess_Tests-frameworks.sh"; sourceTree = ""; }; - 55A3F3667E08ECF4444E9EB398924D2B /* DSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DSL.m; path = Sources/NimbleObjectiveC/DSL.m; sourceTree = ""; }; - 560E5610625EB24314B48FCA0575670A /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Sources/Nimble/DSL.swift; sourceTree = ""; }; - 5908E892477D532DCCDDB8C80794BAF8 /* NMBObjCMatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NMBObjCMatcher.swift; path = Sources/Nimble/Adapters/NMBObjCMatcher.swift; sourceTree = ""; }; - 5AE3F75A0F112EFC8DDEB96D01E90449 /* QuickConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickConfiguration.h; path = Sources/QuickObjectiveC/Configuration/QuickConfiguration.h; sourceTree = ""; }; - 5C686E0397773839C0371395173CB42F /* SuiteHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuiteHooks.swift; path = Sources/Quick/Hooks/SuiteHooks.swift; sourceTree = ""; }; - 5D6663844FD8AC4A8EFE4F009F43DE62 /* QuickSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickSpec.h; path = Sources/QuickObjectiveC/QuickSpec.h; sourceTree = ""; }; - 5FAA80FF2C63B9886F4440CCDB308DCB /* Closures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Closures.swift; path = Sources/Quick/Hooks/Closures.swift; sourceTree = ""; }; - 5FC29EE7A1E0E658CD92E88FDE7C0CE5 /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = Sources/Quick/Configuration/Configuration.swift; sourceTree = ""; }; - 68D5C468265817905E8BB3D3C5F607D6 /* XCTestSuite+QuickTestSuiteBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "XCTestSuite+QuickTestSuiteBuilder.m"; path = "Sources/QuickObjectiveC/XCTestSuite+QuickTestSuiteBuilder.m"; sourceTree = ""; }; - 6929BA2ACC06C155E591A32332B957F6 /* World+DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "World+DSL.h"; path = "Sources/QuickObjectiveC/DSL/World+DSL.h"; sourceTree = ""; }; - 6A3949B2D0A443BF3E4F9702DD93325A /* AssertionRecorder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionRecorder.swift; path = Sources/Nimble/Adapters/AssertionRecorder.swift; sourceTree = ""; }; - 6BBFAE1C4DC8EB0BC8CEE93B7F258DE3 /* Example.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Example.swift; path = Sources/Quick/Example.swift; sourceTree = ""; }; - 6DCC34278BA150666EB06169C1395D7C /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleXCTestHandler.swift; path = Sources/Nimble/Adapters/NimbleXCTestHandler.swift; sourceTree = ""; }; + 5725F8B7947A7099A297F7496D6F4600 /* RetryControl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RetryControl.swift; sourceTree = ""; }; + 589F8B7F1F9BAC5982C24D82AA0A26BA /* URLThenableRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = URLThenableRequest.swift; sourceTree = ""; }; + 594091E6966D51FDFA5ACE8A1D3F3102 /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Sources/Quick/DSL/DSL.swift; sourceTree = ""; }; + 5A84B902903D23F24BA35D1FE28BFCCD /* AssertionDispatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionDispatcher.swift; path = Sources/Nimble/Adapters/AssertionDispatcher.swift; sourceTree = ""; }; + 5CC564DD63D1EE704DE56B9E2A96BC74 /* iONess.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = iONess.modulemap; sourceTree = ""; }; + 5EBC8F300895E39EA0DF6D6B2B5E6BCD /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 6003A0919C1520027218C3524274F5CC /* Quick-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Quick-dummy.m"; sourceTree = ""; }; + 618493BCA98C0773B1245A2F563A6E8E /* Callsite.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Callsite.swift; path = Sources/Quick/Callsite.swift; sourceTree = ""; }; + 637766238BDCE72CD1391DC53DAD2A35 /* QuickSelectedTestSuiteBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickSelectedTestSuiteBuilder.swift; path = Sources/Quick/QuickSelectedTestSuiteBuilder.swift; sourceTree = ""; }; + 65EE753B1C910259E5BE2E6CB846CD6D /* ExpectationMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpectationMessage.swift; path = Sources/Nimble/ExpectationMessage.swift; sourceTree = ""; }; + 67EF98BCCBF20C8BF14E5AB84E03ED5A /* Match.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Match.swift; path = Sources/Nimble/Matchers/Match.swift; sourceTree = ""; }; + 6944263748751C8CA6AD5D0F7B1C8165 /* LockRunner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LockRunner.swift; sourceTree = ""; }; + 69F66F346A5CDF67BA740DF991DDE261 /* Thenable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Thenable.swift; sourceTree = ""; }; + 6A82441B46AF5BF8529C136FB00587EB /* DropableAndResumable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DropableAndResumable.swift; sourceTree = ""; }; + 6C6C49CFE52F969B617227718E8B11B2 /* DataRequestPromise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DataRequestPromise.swift; sourceTree = ""; }; + 6D391BE90C2152C24FB677E6833FAD74 /* DownloadRequestPromise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DownloadRequestPromise.swift; sourceTree = ""; }; + 6DDEEAB70DDB63F8570BB00D5D90A69E /* SatisfyAnyOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SatisfyAnyOf.swift; path = Sources/Nimble/Matchers/SatisfyAnyOf.swift; sourceTree = ""; }; + 6E951F812A424CE407FEB85DA8B2C545 /* String+C99ExtendedIdentifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+C99ExtendedIdentifier.swift"; path = "Sources/Quick/String+C99ExtendedIdentifier.swift"; sourceTree = ""; }; + 6ED519DD3DDEAF69DB9366FACF241CE5 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThanOrEqual.swift; path = Sources/Nimble/Matchers/BeLessThanOrEqual.swift; sourceTree = ""; }; 6F66D910E67358B7513B3B0C7B778FDE /* Pods-iONess_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-iONess_Tests-Info.plist"; sourceTree = ""; }; - 701070485650A8DEFEDB605DDB008707 /* QCKDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QCKDSL.h; path = Sources/QuickObjectiveC/DSL/QCKDSL.h; sourceTree = ""; }; - 723E6B3079C0611ACCC3939031EDF200 /* EndWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EndWith.swift; path = Sources/Nimble/Matchers/EndWith.swift; sourceTree = ""; }; - 72D12F832B12199869EC2812B758E446 /* QuickSpecBase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickSpecBase.m; path = Sources/QuickSpecBase/QuickSpecBase.m; sourceTree = ""; }; - 73562E9B253FD0070063EEC3 /* NetworkSessionError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkSessionError.swift; sourceTree = ""; }; - 73562EA7253FD0750063EEC3 /* HTTPMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPMessage.swift; sourceTree = ""; }; - 73562EAE253FD0930063EEC3 /* HTTPRequestMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPRequestMessage.swift; sourceTree = ""; }; - 73562EB5253FD0BF0063EEC3 /* HTTPResultMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPResultMessage.swift; sourceTree = ""; }; - 73562EBC253FD0DF0063EEC3 /* NetworkResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkResult.swift; sourceTree = ""; }; - 73562EC9253FD1150063EEC3 /* HTTPBodyEncoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPBodyEncoder.swift; sourceTree = ""; }; - 73562ED0253FD1320063EEC3 /* HTTPValidator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPValidator.swift; sourceTree = ""; }; - 73562ED7253FD1530063EEC3 /* NetworkSessionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkSessionManager.swift; sourceTree = ""; }; - 73562EDE253FD1900063EEC3 /* RequestAggregator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestAggregator.swift; sourceTree = ""; }; - 73562EE5253FD1BB0063EEC3 /* ResponseDecoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResponseDecoder.swift; sourceTree = ""; }; - 73562EEC253FD1DD0063EEC3 /* RetryControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RetryControl.swift; sourceTree = ""; }; - 73562EF3253FD2050063EEC3 /* URLCompatible.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLCompatible.swift; sourceTree = ""; }; - 73562EFA253FD2310063EEC3 /* URLRequestBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLRequestBuilder.swift; sourceTree = ""; }; - 73562F01253FD2580063EEC3 /* URLValidator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLValidator.swift; sourceTree = ""; }; - 73562F09253FD3710063EEC3 /* Thenable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Thenable.swift; sourceTree = ""; }; - 73562F10253FD3880063EEC3 /* URLRequestPromise.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLRequestPromise.swift; sourceTree = ""; }; - 73562F17253FD3BB0063EEC3 /* URLThenableRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLThenableRequest.swift; sourceTree = ""; }; - 73562F1E253FD3F50063EEC3 /* DataRequestPromise.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataRequestPromise.swift; sourceTree = ""; }; - 73562F25253FD43A0063EEC3 /* DownloadRequestPromise.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DownloadRequestPromise.swift; sourceTree = ""; }; - 73562F2C253FD4570063EEC3 /* UploadRequestPromise.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UploadRequestPromise.swift; sourceTree = ""; }; - 73562F34253FD4910063EEC3 /* DropableAndResumable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropableAndResumable.swift; sourceTree = ""; }; - 73562F3B253FD4A60063EEC3 /* DropableDataRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropableDataRequest.swift; sourceTree = ""; }; - 73562F42253FD4BF0063EEC3 /* DropableUploadRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropableUploadRequest.swift; sourceTree = ""; }; - 73562F49253FD4DC0063EEC3 /* DropableURLRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropableURLRequest.swift; sourceTree = ""; }; - 73562F50253FD4F90063EEC3 /* ResumableDownloadRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResumableDownloadRequest.swift; sourceTree = ""; }; - 739AB89E25402F3700EFB629 /* NetworkSessionManager+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NetworkSessionManager+Extensions.swift"; sourceTree = ""; }; - 739AB8B12540525300EFB629 /* NetworkRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkRequest.swift; sourceTree = ""; }; - 739AB8B82540529600EFB629 /* DuplicatedHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DuplicatedHandler.swift; sourceTree = ""; }; - 73F38E1725482D05005D9644 /* LockRunner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockRunner.swift; sourceTree = ""; }; - 7C506A3350F263C8D84B9BBEAFE4773F /* PostNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PostNotification.swift; path = Sources/Nimble/Matchers/PostNotification.swift; sourceTree = ""; }; - 7C70EB7B5190D124F405BEC5994EAE88 /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Sources/Quick/DSL/DSL.swift; sourceTree = ""; }; - 7F91C9989726FD623E3BC9D2301B93CB /* CwlDarwinDefinitions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlDarwinDefinitions.swift; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlDarwinDefinitions.swift; sourceTree = ""; }; - 7FA531194861D0A8FFC1CE57D9B68E31 /* FailureMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FailureMessage.swift; path = Sources/Nimble/FailureMessage.swift; sourceTree = ""; }; - 7FB445D0D789E457AF2CB5BD9FBFF1A6 /* AssertionDispatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionDispatcher.swift; path = Sources/Nimble/Adapters/AssertionDispatcher.swift; sourceTree = ""; }; - 82AA79B38ED13FD8695CCF2879D4EF1A /* Nimble-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Nimble-Info.plist"; sourceTree = ""; }; - 890CA32B61E93A336C2575B6B9F52E53 /* NimbleEnvironment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleEnvironment.swift; path = Sources/Nimble/Adapters/NimbleEnvironment.swift; sourceTree = ""; }; - 8BAE63F6C6E2795DA6CC74A86002A713 /* QuickConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickConfiguration.m; path = Sources/QuickObjectiveC/Configuration/QuickConfiguration.m; sourceTree = ""; }; + 70BA9C350E5395B8D486A1E15050EA25 /* iONess-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iONess-umbrella.h"; sourceTree = ""; }; + 71519851BE602952F6A8B7F1BD49C47E /* Quick-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Quick-umbrella.h"; sourceTree = ""; }; + 71917CB5393C9037C2A5CF5B76627A3F /* URLValidator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = URLValidator.swift; sourceTree = ""; }; + 721033FB74EBCC58DA3D43D45B053734 /* World+DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "World+DSL.swift"; path = "Sources/Quick/DSL/World+DSL.swift"; sourceTree = ""; }; + 73BBDE3DC4E0B9D44E388D0F15EFAE49 /* MatchError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatchError.swift; path = Sources/Nimble/Matchers/MatchError.swift; sourceTree = ""; }; + 76F28025DBEDA13B31570D5FD39DE5B6 /* DispatchTimeInterval.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DispatchTimeInterval.swift; path = Sources/Nimble/Utils/DispatchTimeInterval.swift; sourceTree = ""; }; + 774253CF3C1584FD0368CACF48D1A0A9 /* Nimble-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Nimble-dummy.m"; sourceTree = ""; }; + 77EC1764F800A0EDC4C05956522C26E7 /* AllPass.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllPass.swift; path = Sources/Nimble/Matchers/AllPass.swift; sourceTree = ""; }; + 78F76079A463027429C6FA7DDA71EAF9 /* HTTPBodyEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = HTTPBodyEncoder.swift; sourceTree = ""; }; + 7D15E197B10116D55B001AA7A20621F7 /* NMBExceptionCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBExceptionCapture.m; path = Sources/NimbleObjectiveC/NMBExceptionCapture.m; sourceTree = ""; }; + 7D4450EC62688E30BF290CED1C5180E8 /* iONess.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = iONess.debug.xcconfig; sourceTree = ""; }; + 7D4F9E424465A4CB7478FEDCE518D5B2 /* Nimble-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Nimble-Info.plist"; sourceTree = ""; }; + 7E7198DA99DA64121B4A83417B8988D9 /* Await.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Await.swift; path = Sources/Nimble/Utils/Await.swift; sourceTree = ""; }; + 8095DD80EF381DCCE3A7A850BA74CA97 /* DSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DSL.m; path = Sources/NimbleObjectiveC/DSL.m; sourceTree = ""; }; + 80EBC760E3C412597254F73E451DFEFC /* QuickSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickSpec.h; path = Sources/QuickObjectiveC/QuickSpec.h; sourceTree = ""; }; + 844ABCB95C959E169B832C895AC7CA1B /* Nimble-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nimble-umbrella.h"; sourceTree = ""; }; + 847ED05B262AD8DA1B5869820F489113 /* QuickSpecBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickSpecBase.h; path = Sources/QuickObjCRuntime/include/QuickSpecBase.h; sourceTree = ""; }; + 86640C5D85CC40B3A5EEB28B78D43642 /* Behavior.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Behavior.swift; path = Sources/Quick/Behavior.swift; sourceTree = ""; }; + 89902C004A0C8EE2AB63BADDFF8B6BD8 /* BeginWithPrefix.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeginWithPrefix.swift; path = Sources/Nimble/Matchers/BeginWithPrefix.swift; sourceTree = ""; }; + 8A6BBF570610A2A47EAD3F82A0BEBD6F /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Sources/Quick/Filter.swift; sourceTree = ""; }; + 8A78AFEE2B5CEA7AA28EFD5A7131A5D1 /* ThrowAssertion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThrowAssertion.swift; path = Sources/Nimble/Matchers/ThrowAssertion.swift; sourceTree = ""; }; + 8D98EC2B9A6E8D71516EEE113E30C815 /* QuickTestObservation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickTestObservation.swift; path = Sources/Quick/QuickTestObservation.swift; sourceTree = ""; }; 8E0ACEFF8987F1528B35E12445D1C8BB /* Pods-iONess_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-iONess_Tests.modulemap"; sourceTree = ""; }; 902AF92F8B7DF902860EF67EC8A03CE7 /* Pods-iONess_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-iONess_Example.modulemap"; sourceTree = ""; }; 9033B198ACA866E908088A39008E4DB5 /* Pods-iONess_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-iONess_Example-acknowledgements.markdown"; sourceTree = ""; }; - 91A658DE6D69E4D78F0D6D99BF906A86 /* iONess-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iONess-prefix.pch"; sourceTree = ""; }; - 932DF3D983AE0988CFD283477A28FCAB /* Expectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expectation.swift; path = Sources/Nimble/Expectation.swift; sourceTree = ""; }; - 94AC09AF9058C6238D2FDE862C40A26C /* QCKDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QCKDSL.m; path = Sources/QuickObjectiveC/DSL/QCKDSL.m; sourceTree = ""; }; - 976474E7D7496B4A4E5D33D4C8BF5A02 /* SatisfyAnyOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SatisfyAnyOf.swift; path = Sources/Nimble/Matchers/SatisfyAnyOf.swift; sourceTree = ""; }; + 91DE43D5C1D6F40802925D9782ED229E /* NMBExpectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NMBExpectation.swift; path = Sources/Nimble/Adapters/NMBExpectation.swift; sourceTree = ""; }; + 951C612D0DAADD71CAE1A9D064EAD6BB /* BeNil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeNil.swift; path = Sources/Nimble/Matchers/BeNil.swift; sourceTree = ""; }; + 954A60D7DD2C36BDA03141DF7B261C79 /* CwlCatchBadInstruction.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlCatchBadInstruction.swift; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/CwlCatchBadInstruction.swift; sourceTree = ""; }; + 9575CB3C5E2D262B3BEC4C8E2AA7B96F /* Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Async.swift; path = Sources/Nimble/Matchers/Async.swift; sourceTree = ""; }; + 96C27EE7E44371B589841046617BC4EA /* Contain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Contain.swift; path = Sources/Nimble/Matchers/Contain.swift; sourceTree = ""; }; 98434442CBEBA688CDA1B3A065C97F10 /* Pods-iONess_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iONess_Example.release.xcconfig"; sourceTree = ""; }; - 9A62D0C97CA01FB568E53F30CC5E60BB /* CwlCatchException.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CwlCatchException.h; path = Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/include/CwlCatchException.h; sourceTree = ""; }; + 9AB5021AED5A79789DB0F55EBB7D8BF9 /* QCKDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QCKDSL.h; path = Sources/QuickObjectiveC/DSL/QCKDSL.h; sourceTree = ""; }; 9BEB9A7F28572FE865BC07428478E765 /* Pods-iONess_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-iONess_Tests-umbrella.h"; sourceTree = ""; }; 9BFBF96A1DCE18D303B03F9E93E57826 /* Pods-iONess_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-iONess_Example-frameworks.sh"; sourceTree = ""; }; - 9C531FF657A43F5FB7364CC7CC10C016 /* QuickTestSuite.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickTestSuite.swift; path = Sources/Quick/QuickTestSuite.swift; sourceTree = ""; }; - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9E1BDCAD60312625744438EFC3CFBFCB /* Quick-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Quick-dummy.m"; sourceTree = ""; }; - 9F074E9D624A6B99EC5D31DC5AF5A75B /* CwlPreconditionTesting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CwlPreconditionTesting.h; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlPreconditionTesting/Mach/CwlPreconditionTesting.h; sourceTree = ""; }; - A3B36151435E4AA5BC2A1EC1757F65FB /* MatcherProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherProtocols.swift; path = Sources/Nimble/Matchers/MatcherProtocols.swift; sourceTree = ""; }; - A4C466EC9BD9E202DBB245E03F1CF551 /* CwlCatchException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlCatchException.swift; path = Carthage/Checkouts/CwlCatchException/Sources/CwlCatchException/CwlCatchException.swift; sourceTree = ""; }; - A4DB4A0B60EAB33AAC5308C15FC6F747 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - A7C7510B645CB07B19621386BDDEFAEF /* Quick.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Quick.debug.xcconfig; sourceTree = ""; }; - AA573BBB695A39BB5A1E8B501A391379 /* ErrorUtility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ErrorUtility.swift; path = Sources/Quick/ErrorUtility.swift; sourceTree = ""; }; - AAE695EA5A7DEDEBD267446E4F8AC54E /* Pods_iONess_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_iONess_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AE71444AF68F4EBBA952372DDC99BEC5 /* MatchError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatchError.swift; path = Sources/Nimble/Matchers/MatchError.swift; sourceTree = ""; }; - AED1A9A08D3EC0D0A6D6E7A500C6743E /* Nimble.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nimble.release.xcconfig; sourceTree = ""; }; - AF0F2B1E0995EFEE125C788E40850F10 /* iONess.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = iONess.modulemap; sourceTree = ""; }; - AFFD7B0E50351498423EAE4217BE316B /* Behavior.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Behavior.swift; path = Sources/Quick/Behavior.swift; sourceTree = ""; }; - B112ADA7639157CE3DAB3EDD09464DFE /* Predicate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Predicate.swift; path = Sources/Nimble/Matchers/Predicate.swift; sourceTree = ""; }; + 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9DB31DB6E530C583FC107D7054399452 /* RequestAggregator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RequestAggregator.swift; sourceTree = ""; }; + 9DD4C5D377663254ACAC35F9513AEAD2 /* MatcherProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherProtocols.swift; path = Sources/Nimble/Matchers/MatcherProtocols.swift; sourceTree = ""; }; + 9F123B585EEA6B62B885BCD54FAB94D1 /* Nimble.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Nimble.modulemap; sourceTree = ""; }; + 9F4F388C1E944FE064E5A0D8D803ABDF /* Nimble-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nimble-prefix.pch"; sourceTree = ""; }; + A1485FFA48DDDEF5CBED6D8F731001AA /* BeEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeEmpty.swift; path = Sources/Nimble/Matchers/BeEmpty.swift; sourceTree = ""; }; + A296F876C791F3E71AE0E8FE2E2FFA84 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAnInstanceOf.swift; path = Sources/Nimble/Matchers/BeAnInstanceOf.swift; sourceTree = ""; }; + A32B4D4671D06A5EA59461B01C7699AD /* MatcherFunc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherFunc.swift; path = Sources/Nimble/Matchers/MatcherFunc.swift; sourceTree = ""; }; + A508FA505DD93EA63E80B33C57C3E77F /* Quick.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Quick.h; path = Sources/QuickObjectiveC/Quick.h; sourceTree = ""; }; + A5B0A40F2D85E7DD593ECB26B9A62075 /* DropableURLRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DropableURLRequest.swift; sourceTree = ""; }; + A83B46185F327212F381C57522C0BC72 /* BeVoid.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeVoid.swift; path = Sources/Nimble/Matchers/BeVoid.swift; sourceTree = ""; }; + A9F62A0EE4703C223EEA259AF8EEA0BB /* XCTestObservationCenter+Register.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "XCTestObservationCenter+Register.m"; path = "Sources/NimbleObjectiveC/XCTestObservationCenter+Register.m"; sourceTree = ""; }; + AA3D9DF8285942237E49C794E214A4FE /* BeIdenticalTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeIdenticalTo.swift; path = Sources/Nimble/Matchers/BeIdenticalTo.swift; sourceTree = ""; }; + AAC9E5AF3B73131DD27CE98906A6ED4B /* ThrowError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThrowError.swift; path = Sources/Nimble/Matchers/ThrowError.swift; sourceTree = ""; }; + AAE695EA5A7DEDEBD267446E4F8AC54E /* Pods_iONess_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_iONess_Tests.framework; path = "Pods-iONess_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + AE66BB900E7F2C2DAD2484113996437E /* ResumableDownloadRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ResumableDownloadRequest.swift; sourceTree = ""; }; + AEBDC3A28ADA4330629CEEDF0E08ACAE /* DropableDataRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DropableDataRequest.swift; sourceTree = ""; }; + AEF5355479A963A012FA7139232424DA /* EndWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EndWith.swift; path = Sources/Nimble/Matchers/EndWith.swift; sourceTree = ""; }; + B0D172863C0BDAECFD14B9393CA5D938 /* BeGreaterThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThan.swift; path = Sources/Nimble/Matchers/BeGreaterThan.swift; sourceTree = ""; }; + B1AFC694E073E5C44A84DE4B7B5BF135 /* BeLessThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThan.swift; path = Sources/Nimble/Matchers/BeLessThan.swift; sourceTree = ""; }; B2563F2A2300CCB16FECB338E79E6C09 /* Pods-iONess_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-iONess_Example-dummy.m"; sourceTree = ""; }; - B769F788770838BE89AE4415DB08C45D /* Contain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Contain.swift; path = Sources/Nimble/Matchers/Contain.swift; sourceTree = ""; }; - B8C5F64D03075691404D76199140494B /* QuickSpecBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickSpecBase.h; path = Sources/QuickSpecBase/include/QuickSpecBase.h; sourceTree = ""; }; - B93F204C6DD5BC20D1D410594A73E463 /* DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DSL.h; path = Sources/NimbleObjectiveC/DSL.h; sourceTree = ""; }; - BAE263041362D074978BB3B577DF0A05 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BBEC5CCE7BEDDE5F9088F1B6E292F746 /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/Nimble/Expression.swift; sourceTree = ""; }; - BC32ADD4781C6B7B0998E52BA3E7EBA1 /* BeLogical.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLogical.swift; path = Sources/Nimble/Matchers/BeLogical.swift; sourceTree = ""; }; - BD5D2196B1829A3EDBFB102126D560EF /* Match.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Match.swift; path = Sources/Nimble/Matchers/Match.swift; sourceTree = ""; }; - BEAF0A570510EEA68E032FF8AFAD84A6 /* Functional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Functional.swift; path = Sources/Nimble/Utils/Functional.swift; sourceTree = ""; }; - BFA058CE06688019DC35F7AE265E2EAE /* Equal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Equal.swift; path = Sources/Nimble/Matchers/Equal.swift; sourceTree = ""; }; - C0298995678655F3D5D074ADECEB1682 /* iONess-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "iONess-dummy.m"; sourceTree = ""; }; + B4CB748969F898E8B2D944D91048B9E7 /* QuickSpecBase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickSpecBase.m; path = Sources/QuickObjCRuntime/QuickSpecBase.m; sourceTree = ""; }; + B582450242BD4D1622124E0FE431D586 /* mach_excServer.c */ = {isa = PBXFileReference; includeInIndex = 1; name = mach_excServer.c; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.c; sourceTree = ""; }; + BA1CBAE7D4312D2C2076A11F4D700D7B /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleXCTestHandler.swift; path = Sources/Nimble/Adapters/NimbleXCTestHandler.swift; sourceTree = ""; }; + BAE263041362D074978BB3B577DF0A05 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Nimble.framework; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BC27C93DA6791BC5665A06610DA6B0B7 /* CwlCatchException.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CwlCatchException.m; path = Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/CwlCatchException.m; sourceTree = ""; }; + C0141526DC69D1961DD345A499664266 /* Quick-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Quick-prefix.pch"; sourceTree = ""; }; C0B09478B2CCB6AC08CA40CD131802F7 /* Pods-iONess_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-iONess_Example-acknowledgements.plist"; sourceTree = ""; }; - C0B18F336F1499758C07DFEEA18A844D /* BeAKindOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAKindOf.swift; path = Sources/Nimble/Matchers/BeAKindOf.swift; sourceTree = ""; }; - C1AA38F91B7ADB5B66F84A4B4BB6F6D7 /* BeginWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeginWith.swift; path = Sources/Nimble/Matchers/BeginWith.swift; sourceTree = ""; }; - C279CC42E2D488B131EDFE5A45F5A4F6 /* iONess-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iONess-umbrella.h"; sourceTree = ""; }; - C3C45B76797C3907FFE84432868F1793 /* BeCloseTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeCloseTo.swift; path = Sources/Nimble/Matchers/BeCloseTo.swift; sourceTree = ""; }; - C686B6EB8659B8D68F26E5F1C948F911 /* BeVoid.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeVoid.swift; path = Sources/Nimble/Matchers/BeVoid.swift; sourceTree = ""; }; - C9446A65840B908911DFEFADA2D17AAA /* NMBExpectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NMBExpectation.swift; path = Sources/Nimble/Adapters/NMBExpectation.swift; sourceTree = ""; }; + C320C373A320C92A1C7804D15D10CC4B /* BeCloseTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeCloseTo.swift; path = Sources/Nimble/Matchers/BeCloseTo.swift; sourceTree = ""; }; + C3A5E32678667321A20666216C219D73 /* NMBStringify.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBStringify.m; path = Sources/NimbleObjectiveC/NMBStringify.m; sourceTree = ""; }; + C4790E4CF72DA4FB22AC59B342143498 /* CwlCatchException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlCatchException.swift; path = Carthage/Checkouts/CwlCatchException/Sources/CwlCatchException/CwlCatchException.swift; sourceTree = ""; }; + C9A16C1C9A9183E692C8566829CB5601 /* PostNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PostNotification.swift; path = Sources/Nimble/Matchers/PostNotification.swift; sourceTree = ""; }; + C9DB303F07D27158CB8EC0B8E56B7642 /* QuickSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickSpec.m; path = Sources/QuickObjectiveC/QuickSpec.m; sourceTree = ""; }; + CA8B94E9D3B433157168D1EECCEC11CD /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; CD0E85528D342B3E732EC6DC17ED0CD3 /* Pods-iONess_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iONess_Tests.debug.xcconfig"; sourceTree = ""; }; + CE72959DEFBE5754F55D6C2C1981F953 /* FailureMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FailureMessage.swift; path = Sources/Nimble/FailureMessage.swift; sourceTree = ""; }; CEA410F3136117236E840BB7F45D668B /* Pods-iONess_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-iONess_Tests.release.xcconfig"; sourceTree = ""; }; - CEFA9CCAA5DEFECA4FE699122BF21EDF /* Quick.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Quick.h; path = Sources/QuickObjectiveC/Quick.h; sourceTree = ""; }; - CF60A06FE3A0FF28EF98697B78A7B672 /* BeNil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeNil.swift; path = Sources/Nimble/Matchers/BeNil.swift; sourceTree = ""; }; - D02DA36EF93AC36485B0695ED61559FD /* CwlCatchException.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CwlCatchException.m; path = Carthage/Checkouts/CwlCatchException/Sources/CwlCatchExceptionSupport/CwlCatchException.m; sourceTree = ""; }; - D2C60B26F74F6D2DA929600E79CABA24 /* NSString+C99ExtendedIdentifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSString+C99ExtendedIdentifier.swift"; path = "Sources/Quick/NSString+C99ExtendedIdentifier.swift"; sourceTree = ""; }; - D4116551DDC267A0E3EEE55391513FBE /* Await.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Await.swift; path = Sources/Nimble/Utils/Await.swift; sourceTree = ""; }; - D4F5B6B441B570E71901FC406551E34B /* ExampleMetadata.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleMetadata.swift; path = Sources/Quick/ExampleMetadata.swift; sourceTree = ""; }; - D586A374E6D4951E9F6AC3E5FB2E1372 /* NMBStringify.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBStringify.h; path = Sources/NimbleObjectiveC/NMBStringify.h; sourceTree = ""; }; - D667B90B8BA83D1FBB1683F8C892AD88 /* Quick.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Quick.release.xcconfig; sourceTree = ""; }; - DC011028EF971C9BF3E6EDCB74D8E2F7 /* ExampleGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleGroup.swift; path = Sources/Quick/ExampleGroup.swift; sourceTree = ""; }; - DC38C51690D5AE2D21AD14140ED9CF11 /* Nimble.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Nimble.modulemap; sourceTree = ""; }; - DDB25ECAC21407AC062228EADC002E41 /* BeIdenticalTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeIdenticalTo.swift; path = Sources/Nimble/Matchers/BeIdenticalTo.swift; sourceTree = ""; }; - E3CC2893FCD5E6F763A904A6B79BD94E /* SourceLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SourceLocation.swift; path = Sources/Nimble/Utils/SourceLocation.swift; sourceTree = ""; }; - E596FAB084FB38BAA6E6154A8948D07F /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Sources/Quick/Filter.swift; sourceTree = ""; }; - E6BECF06FCB5840C35EC40C188D47F8C /* AdapterProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AdapterProtocols.swift; path = Sources/Nimble/Adapters/AdapterProtocols.swift; sourceTree = ""; }; - E8C9D1630C39B95D05A2A9BE6D24EDBC /* SatisfyAllOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SatisfyAllOf.swift; path = Sources/Nimble/Matchers/SatisfyAllOf.swift; sourceTree = ""; }; - ED2B49B18E0B080BA1256DEB2C1A7522 /* QuickSelectedTestSuiteBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickSelectedTestSuiteBuilder.swift; path = Sources/Quick/QuickSelectedTestSuiteBuilder.swift; sourceTree = ""; }; - F1C4E8509D9DC5B390E0BCE990D91EF7 /* iONess.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = iONess.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F48BBC2EEA8A445932E1D47F6F40C1C7 /* RaisesException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RaisesException.swift; path = Sources/Nimble/Matchers/RaisesException.swift; sourceTree = ""; }; - F9A94CDCB33A101D63AA1765A1CFBDA3 /* XCTestObservationCenter+Register.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "XCTestObservationCenter+Register.m"; path = "Sources/NimbleObjectiveC/XCTestObservationCenter+Register.m"; sourceTree = ""; }; + D3632C388A7C67235660658982B4FB98 /* QuickConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickConfiguration.m; path = Sources/QuickObjectiveC/Configuration/QuickConfiguration.m; sourceTree = ""; }; + D54BADEA27FD77B3806CE9E4C8D316D3 /* URLRequestBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = URLRequestBuilder.swift; sourceTree = ""; }; + D7380DE0051D096F22FB6E14FBCFD413 /* Quick.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Quick.debug.xcconfig; sourceTree = ""; }; + D84BEDBB7950F823B9079EF7662A7855 /* ResponseDecoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ResponseDecoder.swift; sourceTree = ""; }; + D87CD3CC712D348E239A9F594890089D /* ContainElementSatisfying.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContainElementSatisfying.swift; path = Sources/Nimble/Matchers/ContainElementSatisfying.swift; sourceTree = ""; }; + D92C57D471EE3A427AB823E625B39311 /* QuickConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickConfiguration.h; path = Sources/QuickObjectiveC/Configuration/QuickConfiguration.h; sourceTree = ""; }; + DAB19E5A57E594A3C958A7DF0DF95AD6 /* Nimble.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nimble.release.xcconfig; sourceTree = ""; }; + DAD489D7427DB88729313ABD2C90AFFB /* DSL+Wait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DSL+Wait.swift"; path = "Sources/Nimble/DSL+Wait.swift"; sourceTree = ""; }; + DE1576E984B3DAAB4DC55E32F57AFDF3 /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = Sources/Quick/Configuration/Configuration.swift; sourceTree = ""; }; + DE459B5976A49CD66EBA05C2DC284B38 /* SatisfyAllOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SatisfyAllOf.swift; path = Sources/Nimble/Matchers/SatisfyAllOf.swift; sourceTree = ""; }; + E0E6D0B83EC397C4C58738241A24A278 /* Nimble.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nimble.debug.xcconfig; sourceTree = ""; }; + E2120B93428B47B7BF839446F07F47D4 /* NetworkResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkResult.swift; sourceTree = ""; }; + E3192DE012FF5B4B5D23C64386F26545 /* mach_excServer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mach_excServer.h; path = Carthage/Checkouts/CwlPreconditionTesting/Sources/CwlMachBadInstructionHandler/mach_excServer.h; sourceTree = ""; }; + E53AAC35DDA6405D32FA0526DEB205E9 /* ExampleMetadata.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleMetadata.swift; path = Sources/Quick/ExampleMetadata.swift; sourceTree = ""; }; + E9F174D27705CD0D5B6F171827327860 /* HooksPhase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HooksPhase.swift; path = Sources/Quick/Hooks/HooksPhase.swift; sourceTree = ""; }; + EDA602A1771389806AD7B90FEE90CC89 /* World.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = World.swift; path = Sources/Quick/World.swift; sourceTree = ""; }; + F11BA6188341661F72C3A9DA4585B0DE /* DuplicatedHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DuplicatedHandler.swift; sourceTree = ""; }; + F1C4E8509D9DC5B390E0BCE990D91EF7 /* iONess.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = iONess.framework; path = iONess.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F1F25444F0CF00CE3990215A54EF1F8A /* BeLogical.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLogical.swift; path = Sources/Nimble/Matchers/BeLogical.swift; sourceTree = ""; }; + F2E52FC544661EEB91EB7A0864A3B284 /* Quick-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Quick-Info.plist"; sourceTree = ""; }; + F5EA97E7F375D6D5781BE5475371223E /* Nimble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nimble.h; path = Sources/Nimble/Nimble.h; sourceTree = ""; }; + F648DADAC9096138EECB5202EEC226FB /* SourceLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SourceLocation.swift; path = Sources/Nimble/Utils/SourceLocation.swift; sourceTree = ""; }; + F64A12FA1786AF917CC2E92AF2C2F245 /* BeginWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeginWith.swift; path = Sources/Nimble/Matchers/BeginWith.swift; sourceTree = ""; }; + F6B9D4976C8BADD4D4AD4DD861D38AF4 /* ElementsEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ElementsEqual.swift; path = Sources/Nimble/Matchers/ElementsEqual.swift; sourceTree = ""; }; + F785A9D92F5403AECF938E620FD0DA61 /* QuickTestSuite.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickTestSuite.swift; path = Sources/Quick/QuickTestSuite.swift; sourceTree = ""; }; + F7DF8251B6461222D7B4BCCD9616E983 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBExceptionCapture.h; path = Sources/NimbleObjectiveC/NMBExceptionCapture.h; sourceTree = ""; }; + FA63ED3CFE4F4F6C676D373D876025F6 /* DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DSL.h; path = Sources/NimbleObjectiveC/DSL.h; sourceTree = ""; }; + FBA0612628F0DADD5762A6A21339DA83 /* NMBObjCMatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NMBObjCMatcher.swift; path = Sources/Nimble/Adapters/NMBObjCMatcher.swift; sourceTree = ""; }; + FCE89ECDD46EE3C7C7F051634D5E869D /* iONess.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = iONess.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + FD80FCD46E015B974BB6871A50B72520 /* AdapterProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AdapterProtocols.swift; path = Sources/Nimble/Adapters/AdapterProtocols.swift; sourceTree = ""; }; + FD9A8A416B13710625335F7BEB268D2F /* URLRequestPromise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = URLRequestPromise.swift; sourceTree = ""; }; + FE24CDE885BA88F0B033C285E7AB6D36 /* NetworkSessionError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkSessionError.swift; sourceTree = ""; }; + FF30F090CE8F0DA6FFC1C3856899D1E9 /* UploadRequestPromise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UploadRequestPromise.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 4F7CCDE571CE6AF563671836E654CE1E /* Frameworks */ = { + 1FB41F3B817F50C08A530AB486E92A06 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9E82E59647C2E9653D2E5BAA5D15CF3D /* Foundation.framework in Frameworks */, - 43BF42159F430B01CB7F94DFDA66F510 /* XCTest.framework in Frameworks */, + 9D7B1AFB65DC11E69C3EB1CB41DC1EBA /* Foundation.framework in Frameworks */, + 65AFB883DC33E616E6102F5AEAE9D706 /* XCTest.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6BAF79ADBBB8134188F0B264D35F8385 /* Frameworks */ = { + 51E40E8536E2064486F54A495745494F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C6B1FF2DCF039C964A6986847A6758D1 /* Foundation.framework in Frameworks */, + A92B3AAEDFE17B7A68FF4FDEEDC2CF54 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6CD6A3F320FF91E5D2B13161B22189CC /* Frameworks */ = { + 6BAF79ADBBB8134188F0B264D35F8385 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1A7224F64623B1DD1F58F34976BB073C /* Foundation.framework in Frameworks */, + A5CFEBC5DF03893FB27D37831A8BE8E8 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - A7EDD7975CD88AD39BAE0D6484C32803 /* Frameworks */ = { + D40B00FDA224397B7CB9D78C95B79730 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - CA9A2D74A41B640925B521CEC8BBEACE /* Foundation.framework in Frameworks */, + 280EF156D4B95C3E4F7C877D113756C9 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -407,13 +409,28 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 01450F22B410BEC28B0E07E204C0805E /* Foundation.framework in Frameworks */, + 6FE24D3C678494510F31FE91DD627A99 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 08AAA3E94217C200C73A050884D7E313 /* Support Files */ = { + isa = PBXGroup; + children = ( + 5CC564DD63D1EE704DE56B9E2A96BC74 /* iONess.modulemap */, + 19F4FB956163964DB83518651050D8AA /* iONess-dummy.m */, + 1D3D771746E4E1457988A3715DC25E8B /* iONess-Info.plist */, + 45760156C76427D742F58587059CEA7F /* iONess-prefix.pch */, + 70BA9C350E5395B8D486A1E15050EA25 /* iONess-umbrella.h */, + 7D4450EC62688E30BF290CED1C5180E8 /* iONess.debug.xcconfig */, + 11443933AB4510E1C0CE752FBB19294D /* iONess.release.xcconfig */, + ); + name = "Support Files"; + path = "Example/Pods/Target Support Files/iONess"; + sourceTree = ""; + }; 0D1BCDF95B2267F04E48C22A816D673C /* Targets Support Files */ = { isa = PBXGroup; children = ( @@ -426,272 +443,223 @@ 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */ = { isa = PBXGroup; children = ( - 3E285571EF144F8DACCF451128B351DD /* iOS */, + 974814B39C0012DECD183BBB91B32103 /* iOS */, ); name = Frameworks; sourceTree = ""; }; - 1980ADCBADE1EE797C54B038399DA45E /* Pods */ = { - isa = PBXGroup; - children = ( - 89540B627E3947FDC853219CF4388427 /* Nimble */, - 890B2D15947DEB5F6B8EFDDB9C82B198 /* Quick */, - ); - name = Pods; - sourceTree = ""; - }; - 278B699E0245FFFA3AD0FD68BF277F70 /* Support Files */ = { + 34EC16E823AB62BD7FA53BE67C406887 /* Nimble */ = { isa = PBXGroup; children = ( - DC38C51690D5AE2D21AD14140ED9CF11 /* Nimble.modulemap */, - 1E89BC3567E15EF156798F100A73DC84 /* Nimble-dummy.m */, - 82AA79B38ED13FD8695CCF2879D4EF1A /* Nimble-Info.plist */, - 22425C07C59D2CF4D1B1C4E5632D8FB0 /* Nimble-prefix.pch */, - 2B1E5488251C2E363A401738AE0B015D /* Nimble-umbrella.h */, - 041DA3A9E60888E81EDC407BBDE87312 /* Nimble.debug.xcconfig */, - AED1A9A08D3EC0D0A6D6E7A500C6743E /* Nimble.release.xcconfig */, + FD80FCD46E015B974BB6871A50B72520 /* AdapterProtocols.swift */, + 77EC1764F800A0EDC4C05956522C26E7 /* AllPass.swift */, + 5A84B902903D23F24BA35D1FE28BFCCD /* AssertionDispatcher.swift */, + 3C806048D533C178B6EEFC71A7D9BD0B /* AssertionRecorder.swift */, + 9575CB3C5E2D262B3BEC4C8E2AA7B96F /* Async.swift */, + 7E7198DA99DA64121B4A83417B8988D9 /* Await.swift */, + 0F01D742DEEDDA47C9171459299570BB /* BeAKindOf.swift */, + A296F876C791F3E71AE0E8FE2E2FFA84 /* BeAnInstanceOf.swift */, + C320C373A320C92A1C7804D15D10CC4B /* BeCloseTo.swift */, + A1485FFA48DDDEF5CBED6D8F731001AA /* BeEmpty.swift */, + F64A12FA1786AF917CC2E92AF2C2F245 /* BeginWith.swift */, + 89902C004A0C8EE2AB63BADDFF8B6BD8 /* BeginWithPrefix.swift */, + B0D172863C0BDAECFD14B9393CA5D938 /* BeGreaterThan.swift */, + 506FA9A2647E47797A58EEF429EDCBED /* BeGreaterThanOrEqualTo.swift */, + AA3D9DF8285942237E49C794E214A4FE /* BeIdenticalTo.swift */, + B1AFC694E073E5C44A84DE4B7B5BF135 /* BeLessThan.swift */, + 6ED519DD3DDEAF69DB9366FACF241CE5 /* BeLessThanOrEqual.swift */, + F1F25444F0CF00CE3990215A54EF1F8A /* BeLogical.swift */, + 951C612D0DAADD71CAE1A9D064EAD6BB /* BeNil.swift */, + A83B46185F327212F381C57522C0BC72 /* BeVoid.swift */, + 96C27EE7E44371B589841046617BC4EA /* Contain.swift */, + D87CD3CC712D348E239A9F594890089D /* ContainElementSatisfying.swift */, + 1F8DF7DA09AEDCBA06E2D8A1ED3DF37B /* CwlBadInstructionException.swift */, + 954A60D7DD2C36BDA03141DF7B261C79 /* CwlCatchBadInstruction.swift */, + 4334355ECD1734C74102783E5CC9B13F /* CwlCatchException.h */, + BC27C93DA6791BC5665A06610DA6B0B7 /* CwlCatchException.m */, + C4790E4CF72DA4FB22AC59B342143498 /* CwlCatchException.swift */, + 262C909BA8DAF2BC0DB1CDAFFC063E1B /* CwlDarwinDefinitions.swift */, + 03767F1A987613A95B2676A72B0B84EA /* CwlMachBadInstructionHandler.h */, + 1D7731D3D4DA90B3FB2056B2AB5B6C7E /* CwlMachBadInstructionHandler.m */, + 76F28025DBEDA13B31570D5FD39DE5B6 /* DispatchTimeInterval.swift */, + FA63ED3CFE4F4F6C676D373D876025F6 /* DSL.h */, + 8095DD80EF381DCCE3A7A850BA74CA97 /* DSL.m */, + 2277A9C3E35FA63A791006323805267A /* DSL.swift */, + DAD489D7427DB88729313ABD2C90AFFB /* DSL+Wait.swift */, + F6B9D4976C8BADD4D4AD4DD861D38AF4 /* ElementsEqual.swift */, + AEF5355479A963A012FA7139232424DA /* EndWith.swift */, + 48030673D1C6A4142D109D569DAE8BBF /* Equal.swift */, + 0078677BCD78708833ADBA9C3347799B /* Errors.swift */, + 155B1F7CFE0EE4F984EAA8436E4824BE /* Expectation.swift */, + 65EE753B1C910259E5BE2E6CB846CD6D /* ExpectationMessage.swift */, + 53DEE99375D700D1AD46AE0812AB5DE1 /* Expression.swift */, + CE72959DEFBE5754F55D6C2C1981F953 /* FailureMessage.swift */, + 0625478AD65E7A386D95A7FAEED72A71 /* HaveCount.swift */, + B582450242BD4D1622124E0FE431D586 /* mach_excServer.c */, + E3192DE012FF5B4B5D23C64386F26545 /* mach_excServer.h */, + 67EF98BCCBF20C8BF14E5AB84E03ED5A /* Match.swift */, + A32B4D4671D06A5EA59461B01C7699AD /* MatcherFunc.swift */, + 9DD4C5D377663254ACAC35F9513AEAD2 /* MatcherProtocols.swift */, + 73BBDE3DC4E0B9D44E388D0F15EFAE49 /* MatchError.swift */, + F5EA97E7F375D6D5781BE5475371223E /* Nimble.h */, + 2787233B1D89BCD45FCD46C792E3A89F /* NimbleEnvironment.swift */, + BA1CBAE7D4312D2C2076A11F4D700D7B /* NimbleXCTestHandler.swift */, + F7DF8251B6461222D7B4BCCD9616E983 /* NMBExceptionCapture.h */, + 7D15E197B10116D55B001AA7A20621F7 /* NMBExceptionCapture.m */, + 91DE43D5C1D6F40802925D9782ED229E /* NMBExpectation.swift */, + FBA0612628F0DADD5762A6A21339DA83 /* NMBObjCMatcher.swift */, + 135FCD4CD79C5AE6C8C6E0907E48028B /* NMBStringify.h */, + C3A5E32678667321A20666216C219D73 /* NMBStringify.m */, + C9A16C1C9A9183E692C8566829CB5601 /* PostNotification.swift */, + 3BC0A3FF6FD477B0C7F6F02B27CE77AF /* Predicate.swift */, + 3352A14F53657FCD8794579036274CA1 /* RaisesException.swift */, + DE459B5976A49CD66EBA05C2DC284B38 /* SatisfyAllOf.swift */, + 6DDEEAB70DDB63F8570BB00D5D90A69E /* SatisfyAnyOf.swift */, + F648DADAC9096138EECB5202EEC226FB /* SourceLocation.swift */, + 129C7578C2D64066E96CE067FC9B8270 /* Stringers.swift */, + 8A78AFEE2B5CEA7AA28EFD5A7131A5D1 /* ThrowAssertion.swift */, + AAC9E5AF3B73131DD27CE98906A6ED4B /* ThrowError.swift */, + 1B2A477EFB76965FADF1E3DF09B86DA4 /* ToSucceed.swift */, + A9F62A0EE4703C223EEA259AF8EEA0BB /* XCTestObservationCenter+Register.m */, + 5DD17EFD336C359AD9039DB67708E5E2 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/Nimble"; + name = Nimble; + path = Nimble; sourceTree = ""; }; - 2DD6C747DD302715451B7B628F9DCA78 /* Pod */ = { + 3C89C20B0F42CBCFED74F2F95B985F29 /* Pod */ = { isa = PBXGroup; children = ( - 52D883CF0DBE115C0AEFAD20EBF697A0 /* iONess.podspec */, - 0B8B0D02B3F14D0C4DDF6368764D8EC4 /* LICENSE */, - A4DB4A0B60EAB33AAC5308C15FC6F747 /* README.md */, + FCE89ECDD46EE3C7C7F051634D5E869D /* iONess.podspec */, + 458ED94BFE55E706B3A28E48B9C291E5 /* LICENSE */, + 3D0869DCEC853A6D1ADFABDC5A4DC76D /* README.md */, ); name = Pod; sourceTree = ""; }; - 3E285571EF144F8DACCF451128B351DD /* iOS */ = { + 53B2DBCB8ECE9754B675EBF5DFE76012 /* Pods */ = { isa = PBXGroup; children = ( - 033A36A29482FD32230FE0CA177F9BD3 /* Foundation.framework */, - 2C061463250766C9C05995AB8EE63E66 /* XCTest.framework */, + 34EC16E823AB62BD7FA53BE67C406887 /* Nimble */, + 6C859955489371D95E65FB1C097813F2 /* Quick */, ); - name = iOS; - sourceTree = ""; - }; - 73562E94253FCFA70063EEC3 /* Classes */ = { - isa = PBXGroup; - children = ( - 73562EC8253FD1020063EEC3 /* Common */, - 73562F33253FD46A0063EEC3 /* DropableAndResumable */, - 73562E9A253FCFDA0063EEC3 /* Model */, - 73562F08253FD2670063EEC3 /* Thenable */, - ); - name = Classes; - path = iONess/Classes; - sourceTree = ""; - }; - 73562E9A253FCFDA0063EEC3 /* Model */ = { - isa = PBXGroup; - children = ( - 73562EA7253FD0750063EEC3 /* HTTPMessage.swift */, - 73562EAE253FD0930063EEC3 /* HTTPRequestMessage.swift */, - 73562EB5253FD0BF0063EEC3 /* HTTPResultMessage.swift */, - 739AB8B12540525300EFB629 /* NetworkRequest.swift */, - 73562EBC253FD0DF0063EEC3 /* NetworkResult.swift */, - 73562E9B253FD0070063EEC3 /* NetworkSessionError.swift */, - ); - path = Model; - sourceTree = ""; - }; - 73562EC8253FD1020063EEC3 /* Common */ = { - isa = PBXGroup; - children = ( - 739AB8B82540529600EFB629 /* DuplicatedHandler.swift */, - 73562EC9253FD1150063EEC3 /* HTTPBodyEncoder.swift */, - 73562ED0253FD1320063EEC3 /* HTTPValidator.swift */, - 73562ED7253FD1530063EEC3 /* NetworkSessionManager.swift */, - 739AB89E25402F3700EFB629 /* NetworkSessionManager+Extensions.swift */, - 73562EDE253FD1900063EEC3 /* RequestAggregator.swift */, - 73562EE5253FD1BB0063EEC3 /* ResponseDecoder.swift */, - 73562EEC253FD1DD0063EEC3 /* RetryControl.swift */, - 73562EF3253FD2050063EEC3 /* URLCompatible.swift */, - 73562EFA253FD2310063EEC3 /* URLRequestBuilder.swift */, - 73562F01253FD2580063EEC3 /* URLValidator.swift */, - 73F38E1725482D05005D9644 /* LockRunner.swift */, - ); - path = Common; + name = Pods; sourceTree = ""; }; - 73562F08253FD2670063EEC3 /* Thenable */ = { + 5DD17EFD336C359AD9039DB67708E5E2 /* Support Files */ = { isa = PBXGroup; children = ( - 73562F1E253FD3F50063EEC3 /* DataRequestPromise.swift */, - 73562F25253FD43A0063EEC3 /* DownloadRequestPromise.swift */, - 73562F09253FD3710063EEC3 /* Thenable.swift */, - 73562F2C253FD4570063EEC3 /* UploadRequestPromise.swift */, - 73562F10253FD3880063EEC3 /* URLRequestPromise.swift */, - 73562F17253FD3BB0063EEC3 /* URLThenableRequest.swift */, + 9F123B585EEA6B62B885BCD54FAB94D1 /* Nimble.modulemap */, + 774253CF3C1584FD0368CACF48D1A0A9 /* Nimble-dummy.m */, + 7D4F9E424465A4CB7478FEDCE518D5B2 /* Nimble-Info.plist */, + 9F4F388C1E944FE064E5A0D8D803ABDF /* Nimble-prefix.pch */, + 844ABCB95C959E169B832C895AC7CA1B /* Nimble-umbrella.h */, + E0E6D0B83EC397C4C58738241A24A278 /* Nimble.debug.xcconfig */, + DAB19E5A57E594A3C958A7DF0DF95AD6 /* Nimble.release.xcconfig */, ); - path = Thenable; + name = "Support Files"; + path = "../Target Support Files/Nimble"; sourceTree = ""; }; - 73562F33253FD46A0063EEC3 /* DropableAndResumable */ = { + 5EDC67705ED64B4319992A5BA10EFCDD /* iONess */ = { isa = PBXGroup; children = ( - 73562F34253FD4910063EEC3 /* DropableAndResumable.swift */, - 73562F3B253FD4A60063EEC3 /* DropableDataRequest.swift */, - 73562F42253FD4BF0063EEC3 /* DropableUploadRequest.swift */, - 73562F49253FD4DC0063EEC3 /* DropableURLRequest.swift */, - 73562F50253FD4F90063EEC3 /* ResumableDownloadRequest.swift */, + D2A874F393BC79A1CF2BFD782EA5AFB0 /* Common */, + DD39D0420A37B587E70DEBE1A4226BB6 /* DropableAndResumable */, + EB9119F689D5D18D5E4C84B1C57B71AA /* Model */, + 3C89C20B0F42CBCFED74F2F95B985F29 /* Pod */, + 08AAA3E94217C200C73A050884D7E313 /* Support Files */, + 74524E1FF9CD13B3C7CB37163B223D28 /* Thenable */, ); - path = DropableAndResumable; + name = iONess; + path = ../..; sourceTree = ""; }; - 7407A3717E6D45EBE63CFA23F301F78F /* iONess */ = { + 6C859955489371D95E65FB1C097813F2 /* Quick */ = { isa = PBXGroup; children = ( - 73562E94253FCFA70063EEC3 /* Classes */, - 2DD6C747DD302715451B7B628F9DCA78 /* Pod */, - 78155463DED5F50C4795DE23E5756D27 /* Support Files */, + 86640C5D85CC40B3A5EEB28B78D43642 /* Behavior.swift */, + 618493BCA98C0773B1245A2F563A6E8E /* Callsite.swift */, + 523F4123831772C0FEEBA7A82BBA31B6 /* Closures.swift */, + DE1576E984B3DAAB4DC55E32F57AFDF3 /* Configuration.swift */, + 594091E6966D51FDFA5ACE8A1D3F3102 /* DSL.swift */, + 330449905CBD0256B295240608C83E2E /* ErrorUtility.swift */, + 29464526915A7F01A5F16D211105A01E /* Example.swift */, + 4B9FF41D5900AD165160731F2C227F18 /* ExampleGroup.swift */, + 2DA15B5F498774DBFDCA9497B7821D6E /* ExampleHooks.swift */, + E53AAC35DDA6405D32FA0526DEB205E9 /* ExampleMetadata.swift */, + 8A6BBF570610A2A47EAD3F82A0BEBD6F /* Filter.swift */, + E9F174D27705CD0D5B6F171827327860 /* HooksPhase.swift */, + 0B5488DC431E4914985C4BE0A337A8B0 /* NSBundle+CurrentTestBundle.swift */, + 9AB5021AED5A79789DB0F55EBB7D8BF9 /* QCKDSL.h */, + 542E00A09ADF6969002F294486379CA5 /* QCKDSL.m */, + A508FA505DD93EA63E80B33C57C3E77F /* Quick.h */, + D92C57D471EE3A427AB823E625B39311 /* QuickConfiguration.h */, + D3632C388A7C67235660658982B4FB98 /* QuickConfiguration.m */, + 1806132AB751DBCAEF39424E99FF7E48 /* QuickConfiguration.swift */, + 637766238BDCE72CD1391DC53DAD2A35 /* QuickSelectedTestSuiteBuilder.swift */, + 80EBC760E3C412597254F73E451DFEFC /* QuickSpec.h */, + C9DB303F07D27158CB8EC0B8E56B7642 /* QuickSpec.m */, + 847ED05B262AD8DA1B5869820F489113 /* QuickSpecBase.h */, + B4CB748969F898E8B2D944D91048B9E7 /* QuickSpecBase.m */, + 8D98EC2B9A6E8D71516EEE113E30C815 /* QuickTestObservation.swift */, + F785A9D92F5403AECF938E620FD0DA61 /* QuickTestSuite.swift */, + 6E951F812A424CE407FEB85DA8B2C545 /* String+C99ExtendedIdentifier.swift */, + 1A4C13D3E16F5CC104B4F9E6E0509CE1 /* SuiteHooks.swift */, + 088187977DB634D609449A6273B74B0D /* URL+FileName.swift */, + EDA602A1771389806AD7B90FEE90CC89 /* World.swift */, + 721033FB74EBCC58DA3D43D45B053734 /* World+DSL.swift */, + 05F7CB7F460539B70D21A7B3E3A3E6A0 /* XCTestSuite+QuickTestSuiteBuilder.m */, + 89EB507C584628BF3624BD0BEAA18A87 /* Support Files */, ); - name = iONess; - path = ../..; + name = Quick; + path = Quick; sourceTree = ""; }; - 78155463DED5F50C4795DE23E5756D27 /* Support Files */ = { + 74524E1FF9CD13B3C7CB37163B223D28 /* Thenable */ = { isa = PBXGroup; children = ( - AF0F2B1E0995EFEE125C788E40850F10 /* iONess.modulemap */, - C0298995678655F3D5D074ADECEB1682 /* iONess-dummy.m */, - 2DAD0EF93295EDD828099D39AA688FA7 /* iONess-Info.plist */, - 91A658DE6D69E4D78F0D6D99BF906A86 /* iONess-prefix.pch */, - C279CC42E2D488B131EDFE5A45F5A4F6 /* iONess-umbrella.h */, - 4748ED286DAE82AB42FA817D122FA7F8 /* iONess.debug.xcconfig */, - 0253B80BADDF2A90BB83C535530606BA /* iONess.release.xcconfig */, - ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/iONess"; + 6C6C49CFE52F969B617227718E8B11B2 /* DataRequestPromise.swift */, + 6D391BE90C2152C24FB677E6833FAD74 /* DownloadRequestPromise.swift */, + 69F66F346A5CDF67BA740DF991DDE261 /* Thenable.swift */, + FF30F090CE8F0DA6FFC1C3856899D1E9 /* UploadRequestPromise.swift */, + FD9A8A416B13710625335F7BEB268D2F /* URLRequestPromise.swift */, + 589F8B7F1F9BAC5982C24D82AA0A26BA /* URLThenableRequest.swift */, + ); + name = Thenable; + path = iONess/Classes/Thenable; sourceTree = ""; }; - 7EC38848DDE577313CEB4FD17676488A /* Development Pods */ = { + 78C2A272E7333473D153E5E378D08377 /* Development Pods */ = { isa = PBXGroup; children = ( - 7407A3717E6D45EBE63CFA23F301F78F /* iONess */, + 5EDC67705ED64B4319992A5BA10EFCDD /* iONess */, ); name = "Development Pods"; sourceTree = ""; }; - 890B2D15947DEB5F6B8EFDDB9C82B198 /* Quick */ = { + 89EB507C584628BF3624BD0BEAA18A87 /* Support Files */ = { isa = PBXGroup; children = ( - AFFD7B0E50351498423EAE4217BE316B /* Behavior.swift */, - 15C89B2DC4D79FB8F6A690175A35A6DF /* Callsite.swift */, - 5FAA80FF2C63B9886F4440CCDB308DCB /* Closures.swift */, - 5FC29EE7A1E0E658CD92E88FDE7C0CE5 /* Configuration.swift */, - 7C70EB7B5190D124F405BEC5994EAE88 /* DSL.swift */, - AA573BBB695A39BB5A1E8B501A391379 /* ErrorUtility.swift */, - 6BBFAE1C4DC8EB0BC8CEE93B7F258DE3 /* Example.swift */, - DC011028EF971C9BF3E6EDCB74D8E2F7 /* ExampleGroup.swift */, - 483E03815233C312602C93E24992735A /* ExampleHooks.swift */, - D4F5B6B441B570E71901FC406551E34B /* ExampleMetadata.swift */, - E596FAB084FB38BAA6E6154A8948D07F /* Filter.swift */, - 4FC8042E1D361B2CB8A86EBCBE4C69AC /* HooksPhase.swift */, - 385DC965717B91B8545D01CCC6A3E9C2 /* NSBundle+CurrentTestBundle.swift */, - D2C60B26F74F6D2DA929600E79CABA24 /* NSString+C99ExtendedIdentifier.swift */, - 701070485650A8DEFEDB605DDB008707 /* QCKDSL.h */, - 94AC09AF9058C6238D2FDE862C40A26C /* QCKDSL.m */, - CEFA9CCAA5DEFECA4FE699122BF21EDF /* Quick.h */, - 5AE3F75A0F112EFC8DDEB96D01E90449 /* QuickConfiguration.h */, - 8BAE63F6C6E2795DA6CC74A86002A713 /* QuickConfiguration.m */, - ED2B49B18E0B080BA1256DEB2C1A7522 /* QuickSelectedTestSuiteBuilder.swift */, - 5D6663844FD8AC4A8EFE4F009F43DE62 /* QuickSpec.h */, - 41D3FB34F99E74E262BF73B51DA1A5CB /* QuickSpec.m */, - B8C5F64D03075691404D76199140494B /* QuickSpecBase.h */, - 72D12F832B12199869EC2812B758E446 /* QuickSpecBase.m */, - 9C531FF657A43F5FB7364CC7CC10C016 /* QuickTestSuite.swift */, - 5C686E0397773839C0371395173CB42F /* SuiteHooks.swift */, - 3E7403F153A2DB3185254A03B3EACD20 /* URL+FileName.swift */, - 53BBA0DB1D93CA5E0EAD9F1FBF23933D /* World.h */, - 4BF04F4FD5FCD4631F104CE9DB393AD2 /* World.swift */, - 6929BA2ACC06C155E591A32332B957F6 /* World+DSL.h */, - 39BFFF064EE3856AA0EA960CEEA964CC /* World+DSL.swift */, - 68D5C468265817905E8BB3D3C5F607D6 /* XCTestSuite+QuickTestSuiteBuilder.m */, - E6E0896F2F7ED20107992264FA24EF49 /* Support Files */, + 1B5DE0BACD9C50DBF2BF9B7132E00C2C /* Quick.modulemap */, + 6003A0919C1520027218C3524274F5CC /* Quick-dummy.m */, + F2E52FC544661EEB91EB7A0864A3B284 /* Quick-Info.plist */, + C0141526DC69D1961DD345A499664266 /* Quick-prefix.pch */, + 71519851BE602952F6A8B7F1BD49C47E /* Quick-umbrella.h */, + D7380DE0051D096F22FB6E14FBCFD413 /* Quick.debug.xcconfig */, + 2D9BFC41B761DDAB5C1BE811146D806A /* Quick.release.xcconfig */, ); - path = Quick; + name = "Support Files"; + path = "../Target Support Files/Quick"; sourceTree = ""; }; - 89540B627E3947FDC853219CF4388427 /* Nimble */ = { + 974814B39C0012DECD183BBB91B32103 /* iOS */ = { isa = PBXGroup; children = ( - E6BECF06FCB5840C35EC40C188D47F8C /* AdapterProtocols.swift */, - 4DD39B35C6EA5095805404AA3E1B7799 /* AllPass.swift */, - 7FB445D0D789E457AF2CB5BD9FBFF1A6 /* AssertionDispatcher.swift */, - 6A3949B2D0A443BF3E4F9702DD93325A /* AssertionRecorder.swift */, - 001FF222EA83335C3B8DDC5074A862C7 /* Async.swift */, - D4116551DDC267A0E3EEE55391513FBE /* Await.swift */, - C0B18F336F1499758C07DFEEA18A844D /* BeAKindOf.swift */, - 4EC524120F8A4964A08ED03B1E129238 /* BeAnInstanceOf.swift */, - C3C45B76797C3907FFE84432868F1793 /* BeCloseTo.swift */, - 02A4FE529CA8F0C68998F6B39C603467 /* BeEmpty.swift */, - C1AA38F91B7ADB5B66F84A4B4BB6F6D7 /* BeginWith.swift */, - 120569E985260497BE5BE039F8EA6DC1 /* BeGreaterThan.swift */, - 4EB4E7CFAA39A4413B7BA4EFFE8FE264 /* BeGreaterThanOrEqualTo.swift */, - DDB25ECAC21407AC062228EADC002E41 /* BeIdenticalTo.swift */, - 31E0B323EBDB86405D253135E2BE94B5 /* BeLessThan.swift */, - 1E14314C688B5AF0B465EE2700A160B6 /* BeLessThanOrEqual.swift */, - BC32ADD4781C6B7B0998E52BA3E7EBA1 /* BeLogical.swift */, - CF60A06FE3A0FF28EF98697B78A7B672 /* BeNil.swift */, - C686B6EB8659B8D68F26E5F1C948F911 /* BeVoid.swift */, - B769F788770838BE89AE4415DB08C45D /* Contain.swift */, - 4BC0A4AB79443BE37AC1290DB3B49D9E /* ContainElementSatisfying.swift */, - 24961798DB3B3EE088E1F42C3C64E158 /* CwlBadInstructionException.swift */, - 21AD60BB0DDB897810A61AD8D6C45CB0 /* CwlCatchBadInstruction.swift */, - 9A62D0C97CA01FB568E53F30CC5E60BB /* CwlCatchException.h */, - D02DA36EF93AC36485B0695ED61559FD /* CwlCatchException.m */, - A4C466EC9BD9E202DBB245E03F1CF551 /* CwlCatchException.swift */, - 7F91C9989726FD623E3BC9D2301B93CB /* CwlDarwinDefinitions.swift */, - 4255BD03AA0B39A2239DF75D25247ADB /* CwlMachBadInstructionHandler.h */, - 3049ACFF04304D5A69F83457B0C750D8 /* CwlMachBadInstructionHandler.m */, - 9F074E9D624A6B99EC5D31DC5AF5A75B /* CwlPreconditionTesting.h */, - B93F204C6DD5BC20D1D410594A73E463 /* DSL.h */, - 55A3F3667E08ECF4444E9EB398924D2B /* DSL.m */, - 560E5610625EB24314B48FCA0575670A /* DSL.swift */, - 4264F5636D0F4709F681C45F30B874E4 /* DSL+Wait.swift */, - 723E6B3079C0611ACCC3939031EDF200 /* EndWith.swift */, - BFA058CE06688019DC35F7AE265E2EAE /* Equal.swift */, - 356EEADE01162812C51149E790045EB1 /* Errors.swift */, - 932DF3D983AE0988CFD283477A28FCAB /* Expectation.swift */, - 09D153164B47B1F8FD94B8C221767637 /* ExpectationMessage.swift */, - BBEC5CCE7BEDDE5F9088F1B6E292F746 /* Expression.swift */, - 7FA531194861D0A8FFC1CE57D9B68E31 /* FailureMessage.swift */, - BEAF0A570510EEA68E032FF8AFAD84A6 /* Functional.swift */, - 443710DF869945EC3BF2E518468FC4B3 /* HaveCount.swift */, - 01B00F5B76F8274E949CD00EC7199C0F /* mach_excServer.c */, - 2253F7742A6212245AF43054AA060B21 /* mach_excServer.h */, - BD5D2196B1829A3EDBFB102126D560EF /* Match.swift */, - 43F14CE9E6AC959093CDE8B0C0B081D3 /* MatcherFunc.swift */, - A3B36151435E4AA5BC2A1EC1757F65FB /* MatcherProtocols.swift */, - AE71444AF68F4EBBA952372DDC99BEC5 /* MatchError.swift */, - 4AB9EC60B6A92E5BC46FE86B1D776B9C /* Nimble.h */, - 890CA32B61E93A336C2575B6B9F52E53 /* NimbleEnvironment.swift */, - 6DCC34278BA150666EB06169C1395D7C /* NimbleXCTestHandler.swift */, - 1581729B7C5C85351FA7BD57E714B770 /* NMBExceptionCapture.h */, - 51B84C7FFC08F42191ACE85342E7A391 /* NMBExceptionCapture.m */, - C9446A65840B908911DFEFADA2D17AAA /* NMBExpectation.swift */, - 5908E892477D532DCCDDB8C80794BAF8 /* NMBObjCMatcher.swift */, - D586A374E6D4951E9F6AC3E5FB2E1372 /* NMBStringify.h */, - 5270361224437AC02141E27EB379DABF /* NMBStringify.m */, - 7C506A3350F263C8D84B9BBEAFE4773F /* PostNotification.swift */, - B112ADA7639157CE3DAB3EDD09464DFE /* Predicate.swift */, - F48BBC2EEA8A445932E1D47F6F40C1C7 /* RaisesException.swift */, - E8C9D1630C39B95D05A2A9BE6D24EDBC /* SatisfyAllOf.swift */, - 976474E7D7496B4A4E5D33D4C8BF5A02 /* SatisfyAnyOf.swift */, - E3CC2893FCD5E6F763A904A6B79BD94E /* SourceLocation.swift */, - 3326DE447DD9522EC2436AFCFE32F3E7 /* Stringers.swift */, - 54CA500398C5E855B7CAA4E6F1BA32FC /* ThrowAssertion.swift */, - 067C823065EF1CF3D619453B1CD12184 /* ThrowError.swift */, - 27C2E58D114AC181F6245906914BC378 /* ToSucceed.swift */, - F9A94CDCB33A101D63AA1765A1CFBDA3 /* XCTestObservationCenter+Register.m */, - 278B699E0245FFFA3AD0FD68BF277F70 /* Support Files */, + CA8B94E9D3B433157168D1EECCEC11CD /* Foundation.framework */, + 5EBC8F300895E39EA0DF6D6B2B5E6BCD /* XCTest.framework */, ); - path = Nimble; + name = iOS; sourceTree = ""; }; A7B7D5D6BCEDF2321A9E9D3C8CD2ED1B /* Pods-iONess_Example */ = { @@ -744,27 +712,59 @@ isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 7EC38848DDE577313CEB4FD17676488A /* Development Pods */, + 78C2A272E7333473D153E5E378D08377 /* Development Pods */, 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */, - 1980ADCBADE1EE797C54B038399DA45E /* Pods */, + 53B2DBCB8ECE9754B675EBF5DFE76012 /* Pods */, B7FAD12F0B4E3273E582D7617B3AE349 /* Products */, 0D1BCDF95B2267F04E48C22A816D673C /* Targets Support Files */, ); sourceTree = ""; }; - E6E0896F2F7ED20107992264FA24EF49 /* Support Files */ = { + D2A874F393BC79A1CF2BFD782EA5AFB0 /* Common */ = { isa = PBXGroup; children = ( - 0F027235B72DB1D8068F1E1CA3567545 /* Quick.modulemap */, - 9E1BDCAD60312625744438EFC3CFBFCB /* Quick-dummy.m */, - 49A76AD53A23DF1F3B57AB63C9862044 /* Quick-Info.plist */, - 514D598924DC7B72B1BD60B9BF9DD433 /* Quick-prefix.pch */, - 0094A06AD6DA53D8221A6A3894EBE456 /* Quick-umbrella.h */, - A7C7510B645CB07B19621386BDDEFAEF /* Quick.debug.xcconfig */, - D667B90B8BA83D1FBB1683F8C892AD88 /* Quick.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Quick"; + F11BA6188341661F72C3A9DA4585B0DE /* DuplicatedHandler.swift */, + 78F76079A463027429C6FA7DDA71EAF9 /* HTTPBodyEncoder.swift */, + 3B16C36858C1B0D92F8318B50AA424C0 /* HTTPValidator.swift */, + 6944263748751C8CA6AD5D0F7B1C8165 /* LockRunner.swift */, + 3FA74C7D1D3B41955E99C6799111B138 /* NetworkSessionManager.swift */, + 1EAE118F9AECDFE686F419D6323DCFCF /* NetworkSessionManager+Extensions.swift */, + 9DB31DB6E530C583FC107D7054399452 /* RequestAggregator.swift */, + D84BEDBB7950F823B9079EF7662A7855 /* ResponseDecoder.swift */, + 5725F8B7947A7099A297F7496D6F4600 /* RetryControl.swift */, + 33C19E4A470BC351E348048CDF836D86 /* URLCompatible.swift */, + D54BADEA27FD77B3806CE9E4C8D316D3 /* URLRequestBuilder.swift */, + 71917CB5393C9037C2A5CF5B76627A3F /* URLValidator.swift */, + ); + name = Common; + path = iONess/Classes/Common; + sourceTree = ""; + }; + DD39D0420A37B587E70DEBE1A4226BB6 /* DropableAndResumable */ = { + isa = PBXGroup; + children = ( + 6A82441B46AF5BF8529C136FB00587EB /* DropableAndResumable.swift */, + AEBDC3A28ADA4330629CEEDF0E08ACAE /* DropableDataRequest.swift */, + 2C4B4C63FC2F2F7EA5DF17305A4C34DB /* DropableUploadRequest.swift */, + A5B0A40F2D85E7DD593ECB26B9A62075 /* DropableURLRequest.swift */, + AE66BB900E7F2C2DAD2484113996437E /* ResumableDownloadRequest.swift */, + ); + name = DropableAndResumable; + path = iONess/Classes/DropableAndResumable; + sourceTree = ""; + }; + EB9119F689D5D18D5E4C84B1C57B71AA /* Model */ = { + isa = PBXGroup; + children = ( + 1331887AC07CA259F954B8DF0437325D /* HTTPMessage.swift */, + 1BB2929812A8305A8664F7E657077884 /* HTTPRequestMessage.swift */, + 03367386DCD9A4C81D9D46EA3FF19AA2 /* HTTPResultMessage.swift */, + 499A8242A91DE9D8D76CC3AE69829841 /* NetworkRequest.swift */, + E2120B93428B47B7BF839446F07F47D4 /* NetworkResult.swift */, + FE24CDE885BA88F0B033C285E7AB6D36 /* NetworkSessionError.swift */, + ); + name = Model; + path = iONess/Classes/Model; sourceTree = ""; }; /* End PBXGroup section */ @@ -786,42 +786,39 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 374F07EA1942679546AB2B657C60C1AD /* Headers */ = { + 478240DD95C6CEFDD39B9899271B0564 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C42E25AEAE4758760D9239D25E88FEAF /* CwlCatchException.h in Headers */, - 405AB644E5E32AB19AE8697B4C0CE124 /* CwlMachBadInstructionHandler.h in Headers */, - E594306BF52C899BCE23A4BA56CD0DD0 /* CwlPreconditionTesting.h in Headers */, - C971A8D42C7C043DC4970A69B81546A7 /* DSL.h in Headers */, - 01DAA6DD1809A39129FF7C72DDF93054 /* mach_excServer.h in Headers */, - 5CE5E8EA75E0B3DC5BE140B61DF37EFD /* Nimble-umbrella.h in Headers */, - 62DFF94A7A777939C861EDA13627999B /* Nimble.h in Headers */, - 0725A6F6AF5A97F9D46B3188E135D5B2 /* NMBExceptionCapture.h in Headers */, - A3A25739D8FCB7A4FE17C8C5A6C7BE72 /* NMBStringify.h in Headers */, + C71EF251675CD5EE60D66978DBB5B2D1 /* iONess-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 67B7E45EF26DA17E8A8B670023D6107A /* Headers */ = { + 55CD468A8004898CA7EB70D7071A9A7C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 8D16EAB20CD849E7DC1B1EDCEF61067D /* QCKDSL.h in Headers */, - CEB0B57C65304E1E2A8C70B2A3FC7A6B /* Quick-umbrella.h in Headers */, - F93310609CA1D35157D85EFAB3808763 /* Quick.h in Headers */, - 11EDFDE1BC5494E14D6F81320FE3925F /* QuickConfiguration.h in Headers */, - 3D317145F0CA3D74E737AB0B919AB6E9 /* QuickSpec.h in Headers */, - BEDC36DEA21352A0F346A2513EE0540E /* QuickSpecBase.h in Headers */, - 0683FC9DDCAB80660BD11E7159607DB6 /* World+DSL.h in Headers */, - 5A49B2C87AABFAED124DE8DDCC2FEAA1 /* World.h in Headers */, + C96C1A7F6894C38A5BB0EF16A41C2A1B /* CwlCatchException.h in Headers */, + 230B95D35E0D844194E7D60EA53375F9 /* CwlMachBadInstructionHandler.h in Headers */, + E9B55E6C43FB7AB6DD2823698F782B87 /* DSL.h in Headers */, + 543A0F1350859A17BDBC32632492CB1C /* mach_excServer.h in Headers */, + 10D8EC65B5BD4AEE3934DED2BE508793 /* Nimble-umbrella.h in Headers */, + 52C19F8F7C365A559FC9A2C686F9CED4 /* Nimble.h in Headers */, + EBF0D67208D37255308A31F00DD4198F /* NMBExceptionCapture.h in Headers */, + DF40457B66380958B843F26597F99E8B /* NMBStringify.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 74B08E8C8464DD5FB42F138BFA5C39A5 /* Headers */ = { + 789BF2A9515D75DE2B2453A4B5637A9D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C29B80485F3ACF3181C93C0E7830E5E8 /* iONess-umbrella.h in Headers */, + 1A8DF79F5EF3D69864A84173E7C9810E /* QCKDSL.h in Headers */, + 8E4A2F4A1EF16B63817A516CC2743619 /* Quick-umbrella.h in Headers */, + 10C8810E574F925B5CD3449B6DBE6EC0 /* Quick.h in Headers */, + BFEBC90223F66B0FF770B92B1C670BCF /* QuickConfiguration.h in Headers */, + 7EB28FEC3D0ABA1A2A6CFE57C400F74D /* QuickSpec.h in Headers */, + 76E7C7CDAA543C791A714B991F595F2B /* QuickSpecBase.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -840,7 +837,7 @@ buildRules = ( ); dependencies = ( - DB547647FA804C2496C4323BC03FFB73 /* PBXTargetDependency */, + 4C58F0BB9FA30C45AA0D7C2447A0CA12 /* PBXTargetDependency */, ); name = "Pods-iONess_Example"; productName = "Pods-iONess_Example"; @@ -859,9 +856,9 @@ buildRules = ( ); dependencies = ( - 6C57D8507F2189A076440DC0F1D159E2 /* PBXTargetDependency */, - A12BF0907087E2F2A174B5812A8E100E /* PBXTargetDependency */, - C2DA64E00834866F6D482CD169BE4279 /* PBXTargetDependency */, + DB90EA4C5B8022E7A0A3D36159A165AB /* PBXTargetDependency */, + DC954914E24F51D16FC89015973C4D96 /* PBXTargetDependency */, + E7F964DA66D07C3C1120183803BBBE78 /* PBXTargetDependency */, ); name = "Pods-iONess_Tests"; productName = "Pods-iONess_Tests"; @@ -870,12 +867,12 @@ }; 6F13695E06195A78EA8A95F8C7ED0D2F /* Nimble */ = { isa = PBXNativeTarget; - buildConfigurationList = 0EDE00A0AE7F2ACDA112F853133A5D2F /* Build configuration list for PBXNativeTarget "Nimble" */; + buildConfigurationList = E2DD7DB7143E990DAB72377E755E612F /* Build configuration list for PBXNativeTarget "Nimble" */; buildPhases = ( - 374F07EA1942679546AB2B657C60C1AD /* Headers */, - D0F25952859BD2ED17A7177A46922A25 /* Sources */, - A7EDD7975CD88AD39BAE0D6484C32803 /* Frameworks */, - C937BE3138C5339919754BC30CA46DE7 /* Resources */, + 55CD468A8004898CA7EB70D7071A9A7C /* Headers */, + 7903E287553F36350DBFD8973BC77FB0 /* Sources */, + 51E40E8536E2064486F54A495745494F /* Frameworks */, + 069C955520292BD6747392DB0F09D4B1 /* Resources */, ); buildRules = ( ); @@ -888,12 +885,12 @@ }; 7D1596B120EF0C1736A66C4A428348C0 /* iONess */ = { isa = PBXNativeTarget; - buildConfigurationList = 3930DEC0567C95FF9633ECF3101A7AC7 /* Build configuration list for PBXNativeTarget "iONess" */; + buildConfigurationList = 28C1252DEFDF6FE60A4052C9BBCBF00C /* Build configuration list for PBXNativeTarget "iONess" */; buildPhases = ( - 74B08E8C8464DD5FB42F138BFA5C39A5 /* Headers */, - 16F38122A138C358D2A8B5BF818DA3E8 /* Sources */, - 6CD6A3F320FF91E5D2B13161B22189CC /* Frameworks */, - 6F9090562F4CBB52339D50F6B27AEBA8 /* Resources */, + 478240DD95C6CEFDD39B9899271B0564 /* Headers */, + 8D76AB1CFD80DF3E562869EFB8743EC9 /* Sources */, + D40B00FDA224397B7CB9D78C95B79730 /* Frameworks */, + 1EFF313D8AE9822C447A409F1ACEBCFD /* Resources */, ); buildRules = ( ); @@ -906,12 +903,12 @@ }; C82891EAB7293DBEE916B21F57E8474D /* Quick */ = { isa = PBXNativeTarget; - buildConfigurationList = 7F8539845BD41E830F4E38F3A0390C9D /* Build configuration list for PBXNativeTarget "Quick" */; + buildConfigurationList = 189D56F652B0345CC3E1073543C1B391 /* Build configuration list for PBXNativeTarget "Quick" */; buildPhases = ( - 67B7E45EF26DA17E8A8B670023D6107A /* Headers */, - AFA0452AEF5742A03D9EA8C455BD689B /* Sources */, - 4F7CCDE571CE6AF563671836E654CE1E /* Frameworks */, - 5CD5EF1D5BA26D55B6D8A78B140C2916 /* Resources */, + 789BF2A9515D75DE2B2453A4B5637A9D /* Headers */, + 694205E4C1C5652ABC91AB6B8D119A52 /* Sources */, + 1FB41F3B817F50C08A530AB486E92A06 /* Frameworks */, + 295DA4774C40DBFC844D2E7BA312DE5F /* Resources */, ); buildRules = ( ); @@ -954,28 +951,28 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 5CD5EF1D5BA26D55B6D8A78B140C2916 /* Resources */ = { + 069C955520292BD6747392DB0F09D4B1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 6F9090562F4CBB52339D50F6B27AEBA8 /* Resources */ = { + 1EFF313D8AE9822C447A409F1ACEBCFD /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - A0F736D0C9C54BD56C4C5A9624EF52D9 /* Resources */ = { + 295DA4774C40DBFC844D2E7BA312DE5F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - C937BE3138C5339919754BC30CA46DE7 /* Resources */ = { + A0F736D0C9C54BD56C4C5A9624EF52D9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -992,150 +989,154 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 16F38122A138C358D2A8B5BF818DA3E8 /* Sources */ = { + 694205E4C1C5652ABC91AB6B8D119A52 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C52D4F6B0EEB06EFD47A2391AE2C4965 /* iONess-dummy.m in Sources */, - 73562EE6253FD1BB0063EEC3 /* ResponseDecoder.swift in Sources */, - 73562EA8253FD0750063EEC3 /* HTTPMessage.swift in Sources */, - 73562ED8253FD1530063EEC3 /* NetworkSessionManager.swift in Sources */, - 73562F35253FD4910063EEC3 /* DropableAndResumable.swift in Sources */, - 73562E9C253FD0070063EEC3 /* NetworkSessionError.swift in Sources */, - 73F38E1825482D05005D9644 /* LockRunner.swift in Sources */, - 73562EF4253FD2050063EEC3 /* URLCompatible.swift in Sources */, - 73562F02253FD2580063EEC3 /* URLValidator.swift in Sources */, - 73562F51253FD4F90063EEC3 /* ResumableDownloadRequest.swift in Sources */, - 739AB89F25402F3700EFB629 /* NetworkSessionManager+Extensions.swift in Sources */, - 73562F4A253FD4DC0063EEC3 /* DropableURLRequest.swift in Sources */, - 73562F18253FD3BB0063EEC3 /* URLThenableRequest.swift in Sources */, - 73562EBD253FD0DF0063EEC3 /* NetworkResult.swift in Sources */, - 73562EAF253FD0930063EEC3 /* HTTPRequestMessage.swift in Sources */, - 739AB8B22540525300EFB629 /* NetworkRequest.swift in Sources */, - 73562EB6253FD0BF0063EEC3 /* HTTPResultMessage.swift in Sources */, - 73562F26253FD43A0063EEC3 /* DownloadRequestPromise.swift in Sources */, - 73562ECA253FD1150063EEC3 /* HTTPBodyEncoder.swift in Sources */, - 73562EFB253FD2310063EEC3 /* URLRequestBuilder.swift in Sources */, - 73562F43253FD4BF0063EEC3 /* DropableUploadRequest.swift in Sources */, - 73562F3C253FD4A60063EEC3 /* DropableDataRequest.swift in Sources */, - 73562EED253FD1DD0063EEC3 /* RetryControl.swift in Sources */, - 73562ED1253FD1320063EEC3 /* HTTPValidator.swift in Sources */, - 73562F11253FD3880063EEC3 /* URLRequestPromise.swift in Sources */, - 73562F1F253FD3F50063EEC3 /* DataRequestPromise.swift in Sources */, - 73562EDF253FD1900063EEC3 /* RequestAggregator.swift in Sources */, - 73562F2D253FD4570063EEC3 /* UploadRequestPromise.swift in Sources */, - 739AB8B92540529600EFB629 /* DuplicatedHandler.swift in Sources */, - 73562F0A253FD3710063EEC3 /* Thenable.swift in Sources */, + 58A884856B7E64EE3C204D9EDAA14045 /* Behavior.swift in Sources */, + 7CE6049975894E447F2D4071C74F6F8F /* Callsite.swift in Sources */, + 14ECE81218F5F5C9BEF00819A7C078EC /* Closures.swift in Sources */, + B48508EB39EE315F5A00429EEA69DD63 /* Configuration.swift in Sources */, + 018228C4760DF4F8B80630BC9ACCB39E /* DSL.swift in Sources */, + BE56C54CD29F23A1C631645390E8569D /* ErrorUtility.swift in Sources */, + D2C041844A0EB4EB2E8C7B9DAA748EEB /* Example.swift in Sources */, + 9231B70907F130F31CF5717C502B780C /* ExampleGroup.swift in Sources */, + 7536DD99ACEDE673713161E597B7B447 /* ExampleHooks.swift in Sources */, + 59BF9ABA8BB14E0E4E345D13AB6D49FB /* ExampleMetadata.swift in Sources */, + AF60C00928A7AFE04E374B620EEA5F49 /* Filter.swift in Sources */, + 209F98BB7B328893FB64BA0393B4BD57 /* HooksPhase.swift in Sources */, + 887AF8C809D60140319DE71D6427F370 /* NSBundle+CurrentTestBundle.swift in Sources */, + 4ADE5FC9505A3BF7DF17AF9756585116 /* QCKDSL.m in Sources */, + 512AAF465EE936155DD9BBA92368928E /* Quick-dummy.m in Sources */, + 9FB5F3B3AAF3103848313FACD0CACBCD /* QuickConfiguration.m in Sources */, + 3D6A581E79FD9EAC1A948D8BC53F1EB0 /* QuickConfiguration.swift in Sources */, + 4E1DBC9FF76D6AD924D1356260438074 /* QuickSelectedTestSuiteBuilder.swift in Sources */, + 2F0B5199CDB717CA9F680579900ABF15 /* QuickSpec.m in Sources */, + 22B5B4ED0824E7BAF2091AAD6238A73F /* QuickSpecBase.m in Sources */, + 39382B0A1EF090D15BA6C89FC3DCB099 /* QuickTestObservation.swift in Sources */, + A7F5B07BF96955EFDC9106335235EDB2 /* QuickTestSuite.swift in Sources */, + A35159AD5A7A49BA9093F29B63DBD30D /* String+C99ExtendedIdentifier.swift in Sources */, + 94B18F2CFF543F6B2E43E84630C337E2 /* SuiteHooks.swift in Sources */, + A6CE2E672C8EB4DF57485428AFD64A3C /* URL+FileName.swift in Sources */, + C9E716023868A97D2F5B19934D93045E /* World+DSL.swift in Sources */, + F01995755687FA91F51A15ED8FD9D125 /* World.swift in Sources */, + 9E874C00792FA983399C03EC00AE326D /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - AFA0452AEF5742A03D9EA8C455BD689B /* Sources */ = { + 7903E287553F36350DBFD8973BC77FB0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D2BE111AE3950E47C5603F7EE3456107 /* Behavior.swift in Sources */, - 7A5B1CC9274B3E4E10EE1561F3AFD58E /* Callsite.swift in Sources */, - F2879D2ED08204999EAB760DE2A2E200 /* Closures.swift in Sources */, - 663333C5E1449EB8487518A5FEAEF8AD /* Configuration.swift in Sources */, - 2ADD7D3E0B94EF044CF3FFD2F8EA2C67 /* DSL.swift in Sources */, - A787308C5CA0BCA2B3A706F44CD5F7B4 /* ErrorUtility.swift in Sources */, - 67365D8C7D4AB95553BB274368DBCF1E /* Example.swift in Sources */, - BD8AB3699C483B11671A85C72CE92B50 /* ExampleGroup.swift in Sources */, - 7A66539DD738BE28A057CA37AAF8F829 /* ExampleHooks.swift in Sources */, - FAB210037DEE6DDF3679C07D48D9E8DD /* ExampleMetadata.swift in Sources */, - B17CEF5ECE9BA91DC07E7208AECB567F /* Filter.swift in Sources */, - 1291696393FFEA6F94FF1E0B79923B43 /* HooksPhase.swift in Sources */, - 48F15AE2F06B8500AD60C39BB45280A3 /* NSBundle+CurrentTestBundle.swift in Sources */, - 4E5EE3187B48F60A0FBA4EB9ACB7FD76 /* NSString+C99ExtendedIdentifier.swift in Sources */, - E2A3FF8FBAC2E21C91E8C5EE009E0FCD /* QCKDSL.m in Sources */, - EFC160CE0D8BD88499BACB45706186B4 /* Quick-dummy.m in Sources */, - 2EA6B2E10F38275D4CEB37B7ADDAE0E0 /* QuickConfiguration.m in Sources */, - 8C3F5E7FF0571B63D4DAA2825C9705D1 /* QuickSelectedTestSuiteBuilder.swift in Sources */, - B5491A88571862A1B914E6BE3CFCA5BD /* QuickSpec.m in Sources */, - 9DB13659CA8F9BF54942DEDAE9F5E858 /* QuickSpecBase.m in Sources */, - 3722B93E1E8BF31C11CDF45AA815A767 /* QuickTestSuite.swift in Sources */, - 65C7F5A043925A30B66024D146D70C0E /* SuiteHooks.swift in Sources */, - DC5219DBE9A6FFCC45A5A78F09E63A22 /* URL+FileName.swift in Sources */, - 2A94FACEA07096DDE05ACF58491DD963 /* World+DSL.swift in Sources */, - F0EC1E8DF64700838C1BC79AFEC93A1C /* World.swift in Sources */, - 2A95AD48CE160CCC59957E4F91EEC9B9 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */, + 0803D3A5C37AB1E7A7D327DC326C3F7F /* AdapterProtocols.swift in Sources */, + A85403E9F906C2E74B26DFB29F83C484 /* AllPass.swift in Sources */, + A590E76A80283B9FB9A3AB36E021723F /* AssertionDispatcher.swift in Sources */, + FAF2D94B80ADF206BDE14D4FB5C70939 /* AssertionRecorder.swift in Sources */, + 9DF8F4034624C4D4B6130B377ACBCCA5 /* Async.swift in Sources */, + DD9B2D62BC7B8527A6CC05D2737674B4 /* Await.swift in Sources */, + 5004989FF230763FBA51808AA9EE49AD /* BeAKindOf.swift in Sources */, + D175D29A5DB6B6ECFF966BC035985AB4 /* BeAnInstanceOf.swift in Sources */, + C52FB32088F23958D2D96F67B0A30AA3 /* BeCloseTo.swift in Sources */, + B3A14E7D18C64299488164C04FD75E83 /* BeEmpty.swift in Sources */, + B791BCADC64C0308254FE6BEE9ADBFBA /* BeginWith.swift in Sources */, + 9231C59F68ED4A9A5EA944224F71C954 /* BeginWithPrefix.swift in Sources */, + 6BBE446491DB1CBD8C4EC0A54660565E /* BeGreaterThan.swift in Sources */, + DC1A7C98613B411576BC3474CBD69EC2 /* BeGreaterThanOrEqualTo.swift in Sources */, + 26655D8B7ABBC59035AF80295D2E8187 /* BeIdenticalTo.swift in Sources */, + D7F330FD8821513B4878BA0CD769F64E /* BeLessThan.swift in Sources */, + 79945940AD580338225CD02DE971036B /* BeLessThanOrEqual.swift in Sources */, + E6919764B414357B20730085E46D021F /* BeLogical.swift in Sources */, + 626A3DE1DAE9310FF840DDD2AD2A2C9B /* BeNil.swift in Sources */, + 327B838EF661BC49AC99190873F5DD95 /* BeVoid.swift in Sources */, + BAE453A15CC93D9864577A1FEDE4E0E7 /* Contain.swift in Sources */, + 610D686198B3BBB3906FD2DC859BAEA6 /* ContainElementSatisfying.swift in Sources */, + 114DFB67D17BD7BEF25CE042228C9D17 /* CwlBadInstructionException.swift in Sources */, + 44F78A9C4B73BB615F9F0EAE1548A20F /* CwlCatchBadInstruction.swift in Sources */, + 89DFED261F449E70AF9DB5FE5ADF7DAA /* CwlCatchException.m in Sources */, + 3DBEFDA275364CBBC008E9CA7222DED0 /* CwlCatchException.swift in Sources */, + 0B6C72C5CE197E5D1FC5BAF2B38CD18D /* CwlDarwinDefinitions.swift in Sources */, + 038EC28EC00D757505F0932ABB15D518 /* CwlMachBadInstructionHandler.m in Sources */, + A3CD90F92E7E63331CDD6D45BDF98CC1 /* DispatchTimeInterval.swift in Sources */, + 0A0D5425DC364F19FF9FC4C2DDBA4990 /* DSL+Wait.swift in Sources */, + D9280F42D370B7A50BE491101C79E80E /* DSL.m in Sources */, + B4990E8D4FFAEF51DA68F7B195158FF8 /* DSL.swift in Sources */, + F6B5D5E3FCD639EE750DE6F2ED6FF4FD /* ElementsEqual.swift in Sources */, + 6D6FEE5DE48C29438DBD66D1066453D5 /* EndWith.swift in Sources */, + AA30AF4811BF289F891D60B772ABC7F6 /* Equal.swift in Sources */, + DE3657A6A7DAF55EDDC583D060CEA51C /* Errors.swift in Sources */, + 3759C6A46C530C10CE2D39F08261239A /* Expectation.swift in Sources */, + 0ADEC83846CB2257DD5F96459B335622 /* ExpectationMessage.swift in Sources */, + CC87EF1E8E515447BCFCBC6F019EE057 /* Expression.swift in Sources */, + E1B3B56A2B3791E9363D8E5CEFB31B49 /* FailureMessage.swift in Sources */, + 8983FE0BC9271728ABB395DF206431AB /* HaveCount.swift in Sources */, + 89414D5228B7117D80C9412389FC400B /* mach_excServer.c in Sources */, + 54822D8662A32DE339917DF78A580DFD /* Match.swift in Sources */, + 3D76CD4A04044B00D7AB752D91A24EEC /* MatcherFunc.swift in Sources */, + AD3F3DEA678B9C0A1C4F0EF79BFB7505 /* MatcherProtocols.swift in Sources */, + 275F3EABB03768D6AB675F2452A3AE23 /* MatchError.swift in Sources */, + 2D01CFC489EE16DB6F945D84C4E0CD04 /* Nimble-dummy.m in Sources */, + F32BD8F634D9F82B0EE791262FEFC59C /* NimbleEnvironment.swift in Sources */, + B7A132AB2E3920D99510C0A7C9DC6A3C /* NimbleXCTestHandler.swift in Sources */, + 3B85C195B5EC040E5C16B8451E2DC9EB /* NMBExceptionCapture.m in Sources */, + 8A2DDA2570D63EA79E63B3711BFDDDBA /* NMBExpectation.swift in Sources */, + 23B1189E6BC5DFFE64CA88632EDE11BB /* NMBObjCMatcher.swift in Sources */, + 599BD5FE9D1D2B17E8733D32B413EA8A /* NMBStringify.m in Sources */, + 65D41C8FDA768DF81796B22875979AF2 /* PostNotification.swift in Sources */, + 43EB6D8B2DF972A7629EB87CD4CEFC77 /* Predicate.swift in Sources */, + 8E6C52E521C7213CC27000CEDF156F8F /* RaisesException.swift in Sources */, + F4980302BB992AECA18EB5CD294A8069 /* SatisfyAllOf.swift in Sources */, + D6C7E3D6B8C5D7C73664FEAC6F37EFB4 /* SatisfyAnyOf.swift in Sources */, + 7756FA7ED7F556FE496573BC9EB2FD8F /* SourceLocation.swift in Sources */, + 1A7668F50FBD77A351AD34A740622F12 /* Stringers.swift in Sources */, + E5420ACB746E9206169606C5C9352E50 /* ThrowAssertion.swift in Sources */, + 2A3F1E2C701876668EBF1FE1A7825995 /* ThrowError.swift in Sources */, + 77701F5CA6F8DB9091F8B9B8420FEC23 /* ToSucceed.swift in Sources */, + 9C96123C115327FBDCF2F3F7432348CC /* XCTestObservationCenter+Register.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - AFF861F9E48140A2C6EC3C0AB2D61EBD /* Sources */ = { + 8D76AB1CFD80DF3E562869EFB8743EC9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 18A52553CCE721D5CC1BBD9561398A7F /* Pods-iONess_Tests-dummy.m in Sources */, + 66216D244381865ECAE874C132D4E7AE /* DataRequestPromise.swift in Sources */, + D8373760129155D098FF7A0F29AF36EE /* DownloadRequestPromise.swift in Sources */, + DCFA0DF25FA7F46D4DB544C6CD7ACB1B /* DropableAndResumable.swift in Sources */, + 9B3277057E6C2128AAF1264F0EF8B9FC /* DropableDataRequest.swift in Sources */, + 786439E9ED23A7945AF105B6D6182C13 /* DropableUploadRequest.swift in Sources */, + E4DB2D264762C451472546D5A896292D /* DropableURLRequest.swift in Sources */, + FB31C3DFB39C623D706448441B4DA663 /* DuplicatedHandler.swift in Sources */, + A2E860821BA0EE14911D3F9EA55C0B9F /* HTTPBodyEncoder.swift in Sources */, + 57DBB752E4F40C0D960842554F747986 /* HTTPMessage.swift in Sources */, + 1202AA151F1C4D1022CD13195DA2EE3C /* HTTPRequestMessage.swift in Sources */, + DE0779882546221C74428CAA44290FE1 /* HTTPResultMessage.swift in Sources */, + B2F69D8691E68FACE1F389CAA632159C /* HTTPValidator.swift in Sources */, + 203EB7800CD07F218B25AE20FA8EFECB /* iONess-dummy.m in Sources */, + B6CDF4C9B27A5DE16F4823B6DEF99869 /* LockRunner.swift in Sources */, + B58F9D05085142D2BF0CC6E1772ED9FA /* NetworkRequest.swift in Sources */, + B1E068EFD6AC94A27522405C9062C62F /* NetworkResult.swift in Sources */, + C17FBE7E5CD95992F58D6B9042872C12 /* NetworkSessionError.swift in Sources */, + 4E8E1C7F509F19AABADE390607914DA6 /* NetworkSessionManager+Extensions.swift in Sources */, + 46B431FBB6BAD4C08ABD088A4C6DB07B /* NetworkSessionManager.swift in Sources */, + 2500828606876003366E11BA07AC937F /* RequestAggregator.swift in Sources */, + 1BC2062B92E38F3B307940E87306BA27 /* ResponseDecoder.swift in Sources */, + A68B4D916EA7393819C6A64E15F2E61E /* ResumableDownloadRequest.swift in Sources */, + AA467E728F5A9158EB0969A84108E87B /* RetryControl.swift in Sources */, + 3EAC62922E79B33C61C6629BD08D5CD1 /* Thenable.swift in Sources */, + 407C5FE6DA0142069EB17E92F8DDBD61 /* UploadRequestPromise.swift in Sources */, + E69E0B1C65745907C675D4106BBDC3C7 /* URLCompatible.swift in Sources */, + 06CFD5203E438B92629FE9A9D9012581 /* URLRequestBuilder.swift in Sources */, + 8E14077A2BAECEB2E927511B199DA4D9 /* URLRequestPromise.swift in Sources */, + 823B3ADB43A6860187A61D7B108A2207 /* URLThenableRequest.swift in Sources */, + 4CE610F4A3E6CA3C085F05381E2121FD /* URLValidator.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - D0F25952859BD2ED17A7177A46922A25 /* Sources */ = { + AFF861F9E48140A2C6EC3C0AB2D61EBD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - EB13561E71736E81399CB85419419570 /* AdapterProtocols.swift in Sources */, - CCA41EC992E6CFEC5367FE79E843240D /* AllPass.swift in Sources */, - AB2F79D3BF6F4CB33383BDBA189AA12B /* AssertionDispatcher.swift in Sources */, - BE2E0A9AC5E2019BFD31452E96ED83D9 /* AssertionRecorder.swift in Sources */, - 3CFD5091F02F30ADE4EEC622C7F487C8 /* Async.swift in Sources */, - 3B324746542B5868C6AA793F2EF93FEB /* Await.swift in Sources */, - A38A1BAB9DC7FB158426F2791D2BDB9B /* BeAKindOf.swift in Sources */, - EDD6F0CB0C4A0FBF470FF1FA37E28FCC /* BeAnInstanceOf.swift in Sources */, - 5221433E6847800B0533CAADF9BABA04 /* BeCloseTo.swift in Sources */, - 543967CB633CDE86DFD53581EAE1A35D /* BeEmpty.swift in Sources */, - 4660867D6E616474D6B62FAF476CCAAD /* BeginWith.swift in Sources */, - 8CB9325284A6E8E782D34AF833480CA3 /* BeGreaterThan.swift in Sources */, - 8B729C7257E0E5C7F86E3597D460E212 /* BeGreaterThanOrEqualTo.swift in Sources */, - 6BEA7B617028CECFCCF7E73DE1EFBC00 /* BeIdenticalTo.swift in Sources */, - 4A1B85AEDC3DB75FC35A3F5438B0AD81 /* BeLessThan.swift in Sources */, - 981D9FBF09890E4E20DF889B2AD514F0 /* BeLessThanOrEqual.swift in Sources */, - BB1619BCE35A078A932C56B2519CCB6C /* BeLogical.swift in Sources */, - A02F4AB85BBBEBA608F33B3EA07C0CF9 /* BeNil.swift in Sources */, - 0834E167066BF3659E39621F58F440A6 /* BeVoid.swift in Sources */, - E1216911C249E3FC383CE5EE1E1066F3 /* Contain.swift in Sources */, - DCC243D2AEC18F6FD827742DCBCC4D1E /* ContainElementSatisfying.swift in Sources */, - FA5A1BA48BC7F11F18E7EB2C61FB2054 /* CwlBadInstructionException.swift in Sources */, - 96C4F7349BB0B624490075CB4F37F2B4 /* CwlCatchBadInstruction.swift in Sources */, - 1EA797B70F587D59DD66A07503CD95D7 /* CwlCatchException.m in Sources */, - 53B30596B1EA5F0845A886843FB9E859 /* CwlCatchException.swift in Sources */, - 25B8696FF6F4BC3F90101C2B4A0BFFBE /* CwlDarwinDefinitions.swift in Sources */, - 08DC8A46FE26DFF192FCAC752A66E620 /* CwlMachBadInstructionHandler.m in Sources */, - BF162FE488440AC9824E22EF6BD760FC /* DSL+Wait.swift in Sources */, - D21313F2B8BF3443B4CF02864578C13E /* DSL.m in Sources */, - 7460C7CD0497AAE90DA55B895F47DEC4 /* DSL.swift in Sources */, - 01904B0245AC2031E9ADD586BE7224C0 /* EndWith.swift in Sources */, - 54A61062B9FB72C6BA0054B2A685ED0E /* Equal.swift in Sources */, - DEF6305C7FCCD86B037E3811551D16E6 /* Errors.swift in Sources */, - B7A0119D88C1DF43AFD25FB3A0B6E842 /* Expectation.swift in Sources */, - 4CBB32046E3B8844FFA021ACFC57702F /* ExpectationMessage.swift in Sources */, - F630B376ABE2B76BD06716E25EC25606 /* Expression.swift in Sources */, - B662FB934B08450530A1A521489732B3 /* FailureMessage.swift in Sources */, - 683798C6164A47491876EF6076F27CB9 /* Functional.swift in Sources */, - E84A4ED0B63C48CC6E4571784BF070F9 /* HaveCount.swift in Sources */, - 38B72051F26368B657ACE1CDEA474D88 /* mach_excServer.c in Sources */, - 7ACF7943A939837532BB53A73F01CE63 /* Match.swift in Sources */, - 1662BEDD868AF1CD729C4269E69A3580 /* MatcherFunc.swift in Sources */, - 67D16958DA7E0257BECE6ACD1EF0A176 /* MatcherProtocols.swift in Sources */, - 8B32C823A5263884ACC364067EFADA22 /* MatchError.swift in Sources */, - D01B8CB271F18C9B70586679F0C2E747 /* Nimble-dummy.m in Sources */, - 63B6EE789529A220E576A10E3356FBEE /* NimbleEnvironment.swift in Sources */, - 6CF8C877AF611E2E0C67EDD06618E63C /* NimbleXCTestHandler.swift in Sources */, - 0BC8351182276985B9C97446E9101EF2 /* NMBExceptionCapture.m in Sources */, - BAEAB2ADD34955EE77CBA4B43994B6F7 /* NMBExpectation.swift in Sources */, - AD1ABD5ADD73F47E6DF31F91EA4A0FF8 /* NMBObjCMatcher.swift in Sources */, - 76049DE81EB1E2B6C436086630F77CA0 /* NMBStringify.m in Sources */, - C098C153F2988A344EAD8EE4C0CDF882 /* PostNotification.swift in Sources */, - 9BA4E7F68AE9967DE324C686E6DDF1A9 /* Predicate.swift in Sources */, - 4B97BD308458A93E1F03EF7A7D5D4DCE /* RaisesException.swift in Sources */, - 5B8DC6716BDD04AF78AC8048F5BACF38 /* SatisfyAllOf.swift in Sources */, - AE99DE37027335451FFD42AD0017BF12 /* SatisfyAnyOf.swift in Sources */, - DA0DA6C2D7C6235862E9A6929144EBA5 /* SourceLocation.swift in Sources */, - F8EA3B6B23173D51461F920F77B3C6BE /* Stringers.swift in Sources */, - 99B2BFD67568B9953B86113CF7D1290C /* ThrowAssertion.swift in Sources */, - E6C11C009FC4EEB972E5175E3D2EDCA5 /* ThrowError.swift in Sources */, - 2D57849BBE4DB509C70D6DC48E6E21B3 /* ToSucceed.swift in Sources */, - 0FF082D1672DD06F291EEDE3FEB518CB /* XCTestObservationCenter+Register.m in Sources */, + 18A52553CCE721D5CC1BBD9561398A7F /* Pods-iONess_Tests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1150,38 +1151,38 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 6C57D8507F2189A076440DC0F1D159E2 /* PBXTargetDependency */ = { + 4C58F0BB9FA30C45AA0D7C2447A0CA12 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = iONess; + target = 7D1596B120EF0C1736A66C4A428348C0 /* iONess */; + targetProxy = 5892008C2384061B62FA79F2D6978885 /* PBXContainerItemProxy */; + }; + DB90EA4C5B8022E7A0A3D36159A165AB /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Nimble; target = 6F13695E06195A78EA8A95F8C7ED0D2F /* Nimble */; - targetProxy = EE20D3CAF5B5FF2308419D1F6584C93F /* PBXContainerItemProxy */; + targetProxy = E824DA457F1B69707E0E58DF1C66BF2C /* PBXContainerItemProxy */; }; - A12BF0907087E2F2A174B5812A8E100E /* PBXTargetDependency */ = { + DC954914E24F51D16FC89015973C4D96 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "Pods-iONess_Example"; target = 33540E88CF4DEA116CA304FCD0971485 /* Pods-iONess_Example */; - targetProxy = 9752F6FEFA8103A08CA59E75A4FDE422 /* PBXContainerItemProxy */; + targetProxy = 7C6BFA20E2AE90DF890F4AF01030469A /* PBXContainerItemProxy */; }; - C2DA64E00834866F6D482CD169BE4279 /* PBXTargetDependency */ = { + E7F964DA66D07C3C1120183803BBBE78 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Quick; target = C82891EAB7293DBEE916B21F57E8474D /* Quick */; - targetProxy = 2CD4DE0234DC29AF71ABB69258E7CBC8 /* PBXContainerItemProxy */; - }; - DB547647FA804C2496C4323BC03FFB73 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = iONess; - target = 7D1596B120EF0C1736A66C4A428348C0 /* iONess */; - targetProxy = E1903516A889B45B7E704626E8AE0BB8 /* PBXContainerItemProxy */; + targetProxy = ADE02453731DD658B1C53528D69DC29F /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 0BB2B50075FEC9A4156C6BECF11B4615 /* Release */ = { + 073219467EC17EAEC55324E91DFF38CB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AED1A9A08D3EC0D0A6D6E7A500C6743E /* Nimble.release.xcconfig */; + baseConfigurationReference = CD0E85528D342B3E732EC6DC17ED0CD3 /* Pods-iONess_Tests.debug.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1190,155 +1191,29 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Nimble/Nimble-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Nimble/Nimble-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-iONess_Tests/Pods-iONess_Tests-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Nimble/Nimble.modulemap"; - PRODUCT_MODULE_NAME = Nimble; - PRODUCT_NAME = Nimble; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-iONess_Tests/Pods-iONess_Tests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; - }; - 264A9F638BB029C9415E7128794E01AD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - 31059FC4CDCFE28D42E245A795B024B8 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; name = Debug; }; - 4C9ACC68574BAAEBA626D2082AC16667 /* Debug */ = { + 106508B421B049657F560207CCAE420E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A7C7510B645CB07B19621386BDDEFAEF /* Quick.debug.xcconfig */; + baseConfigurationReference = 11443933AB4510E1C0CE752FBB19294D /* iONess.release.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1347,62 +1222,60 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Quick/Quick-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Quick/Quick-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/iONess/iONess-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/iONess/iONess-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Quick/Quick.modulemap"; - PRODUCT_MODULE_NAME = Quick; - PRODUCT_NAME = Quick; + MODULEMAP_FILE = "Target Support Files/iONess/iONess.modulemap"; + PRODUCT_MODULE_NAME = iONess; + PRODUCT_NAME = iONess; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 65A762FE3F331CFB191BF6A6AAC81B93 /* Debug */ = { + 18A99FB7852769F5141CD804A6F76E79 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CD0E85528D342B3E732EC6DC17ED0CD3 /* Pods-iONess_Tests.debug.xcconfig */; + baseConfigurationReference = DAB19E5A57E594A3C958A7DF0DF95AD6 /* Nimble.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-iONess_Tests/Pods-iONess_Tests-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Nimble/Nimble-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Nimble/Nimble-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-iONess_Tests/Pods-iONess_Tests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/Nimble/Nimble.modulemap"; + PRODUCT_MODULE_NAME = Nimble; + PRODUCT_NAME = Nimble; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 6D6E2D0CA6E66BF511E01A4D9077371A /* Debug */ = { + 1A4DA6DBBA89D60CAF2D84BFFFE3FC9F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 041DA3A9E60888E81EDC407BBDE87312 /* Nimble.debug.xcconfig */; + baseConfigurationReference = 98434442CBEBA688CDA1B3A065C97F10 /* Pods-iONess_Example.release.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1411,30 +1284,31 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Nimble/Nimble-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Nimble/Nimble-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-iONess_Example/Pods-iONess_Example-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Nimble/Nimble.modulemap"; - PRODUCT_MODULE_NAME = Nimble; - PRODUCT_NAME = Nimble; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-iONess_Example/Pods-iONess_Example.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - ABCCE84B8871BD230B1AE5E807365031 /* Debug */ = { + 2BBBFF4F9C5E8E9E260B33691BE0323E /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 3167663490A06B2783006BEBA9236306 /* Pods-iONess_Example.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1462,11 +1336,10 @@ }; name = Debug; }; - ADED45E5B1775B8B17DF6A8E1B3684E0 /* Debug */ = { + 301D0A18ED044ACFA2074523B0DF1463 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4748ED286DAE82AB42FA817D122FA7F8 /* iONess.debug.xcconfig */; + baseConfigurationReference = 7D4450EC62688E30BF290CED1C5180E8 /* iONess.debug.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1486,57 +1359,112 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - C88FC7B165A285C83993351292E2B25A /* Release */ = { + 42FB4F6853AD63D2F418BD3426F47BDB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 98434442CBEBA688CDA1B3A065C97F10 /* Pods-iONess_Example.release.xcconfig */; + baseConfigurationReference = E0E6D0B83EC397C4C58738241A24A278 /* Nimble.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-iONess_Example/Pods-iONess_Example-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Nimble/Nimble-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Nimble/Nimble-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-iONess_Example/Pods-iONess_Example.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/Nimble/Nimble.modulemap"; + PRODUCT_MODULE_NAME = Nimble; + PRODUCT_NAME = Nimble; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; + name = Debug; + }; + 431BA2B8298F0EE71735B9E0114E1955 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; name = Release; }; - D786D4838DDE7FF84FD603B90BD016C2 /* Release */ = { + 5BD7DF6FC27AD284AF350D3B23323F5C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D667B90B8BA83D1FBB1683F8C892AD88 /* Quick.release.xcconfig */; + baseConfigurationReference = 2D9BFC41B761DDAB5C1BE811146D806A /* Quick.release.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; @@ -1551,7 +1479,7 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -1559,11 +1487,77 @@ }; name = Release; }; - F407338DD7E5BD6B0E9DD268FE12F6C1 /* Release */ = { + 79759604D78320E712558F49DF19AA9F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0253B80BADDF2A90BB83C535530606BA /* iONess.release.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Debug; + }; + D8B9D8F48E26E5252A28F8A28CE2CCE4 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CEA410F3136117236E840BB7F45D668B /* Pods-iONess_Tests.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; @@ -1572,18 +1566,19 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/iONess/iONess-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/iONess/iONess-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-iONess_Tests/Pods-iONess_Tests-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/iONess/iONess.modulemap"; - PRODUCT_MODULE_NAME = iONess; - PRODUCT_NAME = iONess; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-iONess_Tests/Pods-iONess_Tests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -1591,57 +1586,52 @@ }; name = Release; }; - FD8BB11E7AE85A64CCD73869FA362FBE /* Release */ = { + F18BFDF4D55EEEA5E40084B7F7DD58E7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CEA410F3136117236E840BB7F45D668B /* Pods-iONess_Tests.release.xcconfig */; + baseConfigurationReference = D7380DE0051D096F22FB6E14FBCFD413 /* Quick.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-iONess_Tests/Pods-iONess_Tests-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Quick/Quick-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Quick/Quick-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-iONess_Tests/Pods-iONess_Tests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/Quick/Quick.modulemap"; + PRODUCT_MODULE_NAME = Quick; + PRODUCT_NAME = Quick; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0EDE00A0AE7F2ACDA112F853133A5D2F /* Build configuration list for PBXNativeTarget "Nimble" */ = { + 189D56F652B0345CC3E1073543C1B391 /* Build configuration list for PBXNativeTarget "Quick" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6D6E2D0CA6E66BF511E01A4D9077371A /* Debug */, - 0BB2B50075FEC9A4156C6BECF11B4615 /* Release */, + F18BFDF4D55EEEA5E40084B7F7DD58E7 /* Debug */, + 5BD7DF6FC27AD284AF350D3B23323F5C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3930DEC0567C95FF9633ECF3101A7AC7 /* Build configuration list for PBXNativeTarget "iONess" */ = { + 28C1252DEFDF6FE60A4052C9BBCBF00C /* Build configuration list for PBXNativeTarget "iONess" */ = { isa = XCConfigurationList; buildConfigurations = ( - ADED45E5B1775B8B17DF6A8E1B3684E0 /* Debug */, - F407338DD7E5BD6B0E9DD268FE12F6C1 /* Release */, + 301D0A18ED044ACFA2074523B0DF1463 /* Debug */, + 106508B421B049657F560207CCAE420E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1649,8 +1639,8 @@ 4689256775E2FC5EE6F96CB18749EF71 /* Build configuration list for PBXNativeTarget "Pods-iONess_Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 65A762FE3F331CFB191BF6A6AAC81B93 /* Debug */, - FD8BB11E7AE85A64CCD73869FA362FBE /* Release */, + 073219467EC17EAEC55324E91DFF38CB /* Debug */, + D8B9D8F48E26E5252A28F8A28CE2CCE4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1658,26 +1648,26 @@ 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 31059FC4CDCFE28D42E245A795B024B8 /* Debug */, - 264A9F638BB029C9415E7128794E01AD /* Release */, + 79759604D78320E712558F49DF19AA9F /* Debug */, + 431BA2B8298F0EE71735B9E0114E1955 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7F8539845BD41E830F4E38F3A0390C9D /* Build configuration list for PBXNativeTarget "Quick" */ = { + A57E4412E4F889C900461545F0CE974F /* Build configuration list for PBXNativeTarget "Pods-iONess_Example" */ = { isa = XCConfigurationList; buildConfigurations = ( - 4C9ACC68574BAAEBA626D2082AC16667 /* Debug */, - D786D4838DDE7FF84FD603B90BD016C2 /* Release */, + 2BBBFF4F9C5E8E9E260B33691BE0323E /* Debug */, + 1A4DA6DBBA89D60CAF2D84BFFFE3FC9F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - A57E4412E4F889C900461545F0CE974F /* Build configuration list for PBXNativeTarget "Pods-iONess_Example" */ = { + E2DD7DB7143E990DAB72377E755E612F /* Build configuration list for PBXNativeTarget "Nimble" */ = { isa = XCConfigurationList; buildConfigurations = ( - ABCCE84B8871BD230B1AE5E807365031 /* Debug */, - C88FC7B165A285C83993351292E2B25A /* Release */, + 42FB4F6853AD63D2F418BD3426F47BDB /* Debug */, + 18A99FB7852769F5141CD804A6F76E79 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/Pods/Quick/README.md b/Example/Pods/Quick/README.md index e6dc0ad..fc257da 100644 --- a/Example/Pods/Quick/README.md +++ b/Example/Pods/Quick/README.md @@ -3,6 +3,7 @@ [![Build Status](https://travis-ci.org/Quick/Quick.svg?branch=master)](https://travis-ci.org/Quick/Quick) [![CocoaPods](https://img.shields.io/cocoapods/v/Quick.svg)](https://cocoapods.org/pods/Quick) [![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) +[![Accio supported](https://img.shields.io/badge/Accio-supported-0A7CF5.svg?style=flat)](https://github.com/JamitLabs/Accio) [![Platforms](https://img.shields.io/cocoapods/p/Quick.svg)](https://cocoapods.org/pods/Quick) Quick is a behavior-driven development framework for Swift and Objective-C. @@ -44,7 +45,9 @@ Certain versions of Quick and Nimble only support certain versions of Swift. Dep |Swift version |Quick version |Nimble version | |:--------------------|:---------------|:--------------| -|Swift 3 |v1.0.0 or later |v5.0.0 or later| +|Swift 5.2 |v3.0.0 or later |v9.0.0 or later| +|Swift 4.2 / Swift 5 |v1.3.2 or later |v7.3.2 or later| +|Swift 3 / Swift 4 |v1.0.0 or later |v5.0.0 or later| |Swift 2.2 / Swift 2.3|v0.9.3 |v4.1.0 | ## Documentation diff --git a/Example/Pods/Quick/Sources/Quick/Behavior.swift b/Example/Pods/Quick/Sources/Quick/Behavior.swift index 1d98702..7a25a36 100644 --- a/Example/Pods/Quick/Sources/Quick/Behavior.swift +++ b/Example/Pods/Quick/Sources/Quick/Behavior.swift @@ -1,12 +1,14 @@ -/** - A `Behavior` encapsulates a set of examples that can be re-used in several locations using the `itBehavesLike` function with a context instance of the generic type. - */ - +/// A `Behavior` encapsulates a set of examples that can be re-used in several locations using the `itBehavesLike` +/// function with a context instance of the generic type. open class Behavior { - open static var name: String { return String(describing: self) } /** - override this method in your behavior to define a set of reusable examples. + Override this variable if you want to provide custom name for this example group. + */ + open class var name: String { return String(describing: self) } + + /** + Override this method in your behavior to define a set of reusable examples. This behaves just like an example group defines using `describe` or `context`--it may contain any number of `beforeEach` and `afterEach` closures, as well as any number of examples (defined using `it`). diff --git a/Example/Pods/Quick/Sources/Quick/Callsite.swift b/Example/Pods/Quick/Sources/Quick/Callsite.swift index f5e3711..33e732c 100644 --- a/Example/Pods/Quick/Sources/Quick/Callsite.swift +++ b/Example/Pods/Quick/Sources/Quick/Callsite.swift @@ -1,16 +1,23 @@ import Foundation -// `#if swift(>=3.2) && (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE` -// does not work as expected. -#if swift(>=3.2) - #if (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE - @objcMembers - public class _CallsiteBase: NSObject {} - #else - public class _CallsiteBase: NSObject {} - #endif +#if canImport(Darwin) +// swiftlint:disable type_name +@objcMembers +public class _CallsiteBase: NSObject {} #else public class _CallsiteBase: NSObject {} +// swiftlint:enable type_name +#endif + +// Ideally we would always use `StaticString` as the type for tracking the file name +// in which an example is defined, for consistency with `assert` etc. from the +// stdlib, and because recent versions of the XCTest overlay require `StaticString` +// when calling `XCTFail`. Under the Objective-C runtime (i.e. building on macOS), we +// have to use `String` instead because StaticString can't be generated from Objective-C +#if SWIFT_PACKAGE +public typealias FileString = StaticString +#else +public typealias FileString = String #endif /** @@ -21,14 +28,14 @@ final public class Callsite: _CallsiteBase { /** The absolute path of the file in which an example is defined. */ - public let file: String + public let file: FileString /** The line number on which an example is defined. */ public let line: UInt - internal init(file: String, line: UInt) { + internal init(file: FileString, line: UInt) { self.file = file self.line = line } @@ -40,6 +47,6 @@ extension Callsite { If two callsites are in the same file and on the same line, they must be equal. */ @nonobjc public static func == (lhs: Callsite, rhs: Callsite) -> Bool { - return lhs.file == rhs.file && lhs.line == rhs.line + return String(describing: lhs.file) == String(describing: rhs.file) && lhs.line == rhs.line } } diff --git a/Example/Pods/Quick/Sources/Quick/Configuration/Configuration.swift b/Example/Pods/Quick/Sources/Quick/Configuration/Configuration.swift index dbb95f1..71b263b 100644 --- a/Example/Pods/Quick/Sources/Quick/Configuration/Configuration.swift +++ b/Example/Pods/Quick/Sources/Quick/Configuration/Configuration.swift @@ -19,20 +19,24 @@ public typealias ExampleFilter = (_ example: Example) -> Bool final public class Configuration: NSObject { internal let exampleHooks = ExampleHooks() internal let suiteHooks = SuiteHooks() - internal var exclusionFilters: [ExampleFilter] = [ { example in - if let pending = example.filterFlags[Filter.pending] { - return pending - } else { - return false - } - }] - internal var inclusionFilters: [ExampleFilter] = [ { example in - if let focused = example.filterFlags[Filter.focused] { - return focused - } else { - return false - } - }] + internal var exclusionFilters: [ExampleFilter] = [ + { example in // swiftlint:disable:this opening_brace + if let pending = example.filterFlags[Filter.pending] { + return pending + } else { + return false + } + }, + ] + internal var inclusionFilters: [ExampleFilter] = [ + { example in // swiftlint:disable:this opening_brace + if let focused = example.filterFlags[Filter.focused] { + return focused + } else { + return false + } + }, + ] /** Run all examples if none match the configured filters. True by default. @@ -72,7 +76,7 @@ final public class Configuration: NSObject { provided with metadata on the example that the closure is being run prior to. */ -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +#if canImport(Darwin) @objc(beforeEachWithMetadata:) public func beforeEach(_ closure: @escaping BeforeExampleWithMetadataClosure) { exampleHooks.appendBefore(closure) @@ -88,13 +92,13 @@ final public class Configuration: NSObject { given closure before each example that is run. The closure passed to this method is executed before each example Quick runs, globally across the test suite. You may call this method multiple - times across mulitple +[QuickConfigure configure:] methods in order + times across multiple +[QuickConfigure configure:] methods in order to define several closures to run before each example. Note that, since Quick makes no guarantee as to the order in which +[QuickConfiguration configure:] methods are evaluated, there is no guarantee as to the order in which beforeEach closures are evaluated - either. Mulitple beforeEach defined on a single configuration, however, + either. Multiple beforeEach defined on a single configuration, however, will be executed in the order they're defined. - parameter closure: The closure to be executed before each example @@ -109,7 +113,7 @@ final public class Configuration: NSObject { is provided with metadata on the example that the closure is being run after. */ -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +#if canImport(Darwin) @objc(afterEachWithMetadata:) public func afterEach(_ closure: @escaping AfterExampleWithMetadataClosure) { exampleHooks.appendAfter(closure) @@ -125,13 +129,13 @@ final public class Configuration: NSObject { given closure after each example that is run. The closure passed to this method is executed after each example Quick runs, globally across the test suite. You may call this method multiple - times across mulitple +[QuickConfigure configure:] methods in order + times across multiple +[QuickConfigure configure:] methods in order to define several closures to run after each example. Note that, since Quick makes no guarantee as to the order in which +[QuickConfiguration configure:] methods are evaluated, there is no guarantee as to the order in which afterEach closures are evaluated - either. Mulitple afterEach defined on a single configuration, however, + either. Multiple afterEach defined on a single configuration, however, will be executed in the order they're defined. - parameter closure: The closure to be executed before each example diff --git a/Example/Pods/Quick/Sources/Quick/Configuration/QuickConfiguration.swift b/Example/Pods/Quick/Sources/Quick/Configuration/QuickConfiguration.swift new file mode 100644 index 0000000..d807bfe --- /dev/null +++ b/Example/Pods/Quick/Sources/Quick/Configuration/QuickConfiguration.swift @@ -0,0 +1,78 @@ +import Foundation +import XCTest + +#if SWIFT_PACKAGE + +open class QuickConfiguration: NSObject { + open class func configure(_ configuration: Configuration) {} +} + +#endif + +extension QuickConfiguration { + #if !canImport(Darwin) + private static var configurationSubclasses: [QuickConfiguration.Type] = [] + #endif + + /// Finds all direct subclasses of QuickConfiguration and passes them to the block provided. + /// The classes are iterated over in the order that objc_getClassList returns them. + /// + /// - parameter block: A block that takes a QuickConfiguration.Type. + /// This block will be executed once for each subclass of QuickConfiguration. + private static func enumerateSubclasses(_ block: (QuickConfiguration.Type) -> Void) { + #if canImport(Darwin) + let classesCount = objc_getClassList(nil, 0) + + guard classesCount > 0 else { + return + } + + let classes = UnsafeMutablePointer.allocate(capacity: Int(classesCount)) + defer { free(classes) } + + objc_getClassList(AutoreleasingUnsafeMutablePointer(classes), classesCount) + + var configurationSubclasses: [QuickConfiguration.Type] = [] + for index in 0.. Void) { +public func it(_ description: String, flags: FilterFlags = [:], file: FileString = #file, line: UInt = #line, closure: @escaping () throws -> Void) { World.sharedWorld.it(description, flags: flags, file: file, line: line, closure: closure) } @@ -143,7 +145,7 @@ public func it(_ description: String, flags: FilterFlags = [:], file: String = # - parameter file: The absolute path to the file containing the current example group. A sensible default is provided. - parameter line: The line containing the current example group. A sensible default is provided. */ -public func itBehavesLike(_ name: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line) { +public func itBehavesLike(_ name: String, flags: FilterFlags = [:], file: FileString = #file, line: UInt = #line) { itBehavesLike(name, flags: flags, file: file, line: line, sharedExampleContext: { return [:] }) } @@ -163,7 +165,7 @@ public func itBehavesLike(_ name: String, flags: FilterFlags = [:], file: String - parameter file: The absolute path to the file containing the current example group. A sensible default is provided. - parameter line: The line containing the current example group. A sensible default is provided. */ -public func itBehavesLike(_ name: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, sharedExampleContext: @escaping SharedExampleContext) { +public func itBehavesLike(_ name: String, flags: FilterFlags = [:], file: FileString = #file, line: UInt = #line, sharedExampleContext: @escaping SharedExampleContext) { World.sharedWorld.itBehavesLike(name, sharedExampleContext: sharedExampleContext, flags: flags, file: file, line: line) } @@ -179,7 +181,7 @@ public func itBehavesLike(_ name: String, flags: FilterFlags = [:], file: String - parameter file: The absolute path to the file containing the current example group. A sensible default is provided. - parameter line: The line containing the current example group. A sensible default is provided. */ -public func itBehavesLike(_ behavior: Behavior.Type, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, context: @escaping () -> C) { +public func itBehavesLike(_ behavior: Behavior.Type, flags: FilterFlags = [:], file: FileString = #file, line: UInt = #line, context: @escaping () -> C) { World.sharedWorld.itBehavesLike(behavior, context: context, flags: flags, file: file, line: line) } @@ -198,7 +200,7 @@ public func pending(_ description: String, closure: () -> Void) { Use this to quickly mark a `describe` closure as pending. This disables all examples within the closure. */ -public func xdescribe(_ description: String, flags: FilterFlags, closure: () -> Void) { +public func xdescribe(_ description: String, flags: FilterFlags = [:], closure: () -> Void) { World.sharedWorld.xdescribe(description, flags: flags, closure: closure) } @@ -206,7 +208,7 @@ public func xdescribe(_ description: String, flags: FilterFlags, closure: () -> Use this to quickly mark a `context` closure as pending. This disables all examples within the closure. */ -public func xcontext(_ description: String, flags: FilterFlags, closure: () -> Void) { +public func xcontext(_ description: String, flags: FilterFlags = [:], closure: () -> Void) { xdescribe(description, flags: flags, closure: closure) } @@ -214,7 +216,7 @@ public func xcontext(_ description: String, flags: FilterFlags, closure: () -> V Use this to quickly mark an `it` closure as pending. This disables the example and ensures the code within the closure is never run. */ -public func xit(_ description: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, closure: @escaping () -> Void) { +public func xit(_ description: String, flags: FilterFlags = [:], file: FileString = #file, line: UInt = #line, closure: @escaping () throws -> Void) { World.sharedWorld.xit(description, flags: flags, file: file, line: line, closure: closure) } @@ -222,7 +224,7 @@ public func xit(_ description: String, flags: FilterFlags = [:], file: String = Use this to quicklu mark an `itBehavesLike` closure as pending. This disables the example group defined by this behavior and ensures the code within is never run. */ -public func xitBehavesLike(_ behavior: Behavior.Type, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, context: @escaping () -> C) { +public func xitBehavesLike(_ behavior: Behavior.Type, flags: FilterFlags = [:], file: FileString = #file, line: UInt = #line, context: @escaping () -> C) { World.sharedWorld.xitBehavesLike(behavior, context: context, flags: flags, file: file, line: line) } /** @@ -245,27 +247,29 @@ public func fcontext(_ description: String, flags: FilterFlags = [:], closure: ( Use this to quickly focus an `it` closure, focusing the example. If any examples in the test suite are focused, only those examples are executed. */ -public func fit(_ description: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, closure: @escaping () -> Void) { +public func fit(_ description: String, flags: FilterFlags = [:], file: FileString = #file, line: UInt = #line, closure: @escaping () throws -> Void) { World.sharedWorld.fit(description, flags: flags, file: file, line: line, closure: closure) } /** Use this to quickly focus an `itBehavesLike` closure. */ -public func fitBehavesLike(_ name: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line) { +public func fitBehavesLike(_ name: String, flags: FilterFlags = [:], file: FileString = #file, line: UInt = #line) { fitBehavesLike(name, flags: flags, file: file, line: line, sharedExampleContext: { return [:] }) } /** Use this to quickly focus an `itBehavesLike` closure. */ -public func fitBehavesLike(_ name: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, sharedExampleContext: @escaping SharedExampleContext) { +public func fitBehavesLike(_ name: String, flags: FilterFlags = [:], file: FileString = #file, line: UInt = #line, sharedExampleContext: @escaping SharedExampleContext) { World.sharedWorld.fitBehavesLike(name, sharedExampleContext: sharedExampleContext, flags: flags, file: file, line: line) } /** Use this to quickly focus on `itBehavesLike` closure. */ -public func fitBehavesLike(_ behavior: Behavior.Type, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, context: @escaping () -> C) { +public func fitBehavesLike(_ behavior: Behavior.Type, flags: FilterFlags = [:], file: FileString = #file, line: UInt = #line, context: @escaping () -> C) { World.sharedWorld.fitBehavesLike(behavior, context: context, flags: flags, file: file, line: line) } + +// swiftlint:enable line_length diff --git a/Example/Pods/Quick/Sources/Quick/DSL/World+DSL.swift b/Example/Pods/Quick/Sources/Quick/DSL/World+DSL.swift index 5249027..7b4edf3 100644 --- a/Example/Pods/Quick/Sources/Quick/DSL/World+DSL.swift +++ b/Example/Pods/Quick/Sources/Quick/DSL/World+DSL.swift @@ -20,9 +20,10 @@ extension World { internal func describe(_ description: String, flags: FilterFlags, closure: () -> Void) { guard currentExampleMetadata == nil else { - raiseError("'describe' cannot be used inside '\(currentPhase)', 'describe' may only be used inside 'context' or 'describe'. ") + raiseError("'describe' cannot be used inside '\(currentPhase)', 'describe' may only be used inside 'context' or 'describe'.") } guard currentExampleGroup != nil else { + // swiftlint:disable:next line_length raiseError("Error: example group was not created by its parent QuickSpec spec. Check that describe() or context() was used in QuickSpec.spec() and not a more general context (i.e. an XCTestCase test)") } let group = ExampleGroup(description: description, flags: flags) @@ -32,7 +33,7 @@ extension World { internal func context(_ description: String, flags: FilterFlags, closure: () -> Void) { guard currentExampleMetadata == nil else { - raiseError("'context' cannot be used inside '\(currentPhase)', 'context' may only be used inside 'context' or 'describe'. ") + raiseError("'context' cannot be used inside '\(currentPhase)', 'context' may only be used inside 'context' or 'describe'.") } self.describe(description, flags: flags, closure: closure) } @@ -51,12 +52,12 @@ extension World { internal func beforeEach(_ closure: @escaping BeforeExampleClosure) { guard currentExampleMetadata == nil else { - raiseError("'beforeEach' cannot be used inside '\(currentPhase)', 'beforeEach' may only be used inside 'context' or 'describe'. ") + raiseError("'beforeEach' cannot be used inside '\(currentPhase)', 'beforeEach' may only be used inside 'context' or 'describe'.") } currentExampleGroup.hooks.appendBefore(closure) } -#if (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE +#if canImport(Darwin) @objc(beforeEachWithMetadata:) internal func beforeEach(closure: @escaping BeforeExampleWithMetadataClosure) { currentExampleGroup.hooks.appendBefore(closure) @@ -69,12 +70,12 @@ extension World { internal func afterEach(_ closure: @escaping AfterExampleClosure) { guard currentExampleMetadata == nil else { - raiseError("'afterEach' cannot be used inside '\(currentPhase)', 'afterEach' may only be used inside 'context' or 'describe'. ") + raiseError("'afterEach' cannot be used inside '\(currentPhase)', 'afterEach' may only be used inside 'context' or 'describe'.") } currentExampleGroup.hooks.appendAfter(closure) } -#if (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE +#if canImport(Darwin) @objc(afterEachWithMetadata:) internal func afterEach(closure: @escaping AfterExampleWithMetadataClosure) { currentExampleGroup.hooks.appendAfter(closure) @@ -85,36 +86,40 @@ extension World { } #endif - internal func it(_ description: String, flags: FilterFlags, file: String, line: UInt, closure: @escaping () -> Void) { + @nonobjc + internal func it(_ description: String, flags: FilterFlags, file: FileString, line: UInt, closure: @escaping () throws -> Void) { if beforesCurrentlyExecuting { - raiseError("'it' cannot be used inside 'beforeEach', 'it' may only be used inside 'context' or 'describe'. ") + raiseError("'it' cannot be used inside 'beforeEach', 'it' may only be used inside 'context' or 'describe'.") } if aftersCurrentlyExecuting { - raiseError("'it' cannot be used inside 'afterEach', 'it' may only be used inside 'context' or 'describe'. ") + raiseError("'it' cannot be used inside 'afterEach', 'it' may only be used inside 'context' or 'describe'.") } guard currentExampleMetadata == nil else { - raiseError("'it' cannot be used inside 'it', 'it' may only be used inside 'context' or 'describe'. ") + raiseError("'it' cannot be used inside 'it', 'it' may only be used inside 'context' or 'describe'.") } let callsite = Callsite(file: file, line: line) let example = Example(description: description, callsite: callsite, flags: flags, closure: closure) currentExampleGroup.appendExample(example) } - internal func fit(_ description: String, flags: FilterFlags, file: String, line: UInt, closure: @escaping () -> Void) { + @nonobjc + internal func fit(_ description: String, flags: FilterFlags, file: FileString, line: UInt, closure: @escaping () throws -> Void) { var focusedFlags = flags focusedFlags[Filter.focused] = true self.it(description, flags: focusedFlags, file: file, line: line, closure: closure) } - internal func xit(_ description: String, flags: FilterFlags, file: String, line: UInt, closure: @escaping () -> Void) { + @nonobjc + internal func xit(_ description: String, flags: FilterFlags, file: FileString, line: UInt, closure: @escaping () throws -> Void) { var pendingFlags = flags pendingFlags[Filter.pending] = true self.it(description, flags: pendingFlags, file: file, line: line, closure: closure) } - internal func itBehavesLike(_ name: String, sharedExampleContext: @escaping SharedExampleContext, flags: FilterFlags, file: String, line: UInt) { + @nonobjc + internal func itBehavesLike(_ name: String, sharedExampleContext: @escaping SharedExampleContext, flags: FilterFlags, file: FileString, line: UInt) { guard currentExampleMetadata == nil else { - raiseError("'itBehavesLike' cannot be used inside '\(currentPhase)', 'itBehavesLike' may only be used inside 'context' or 'describe'. ") + raiseError("'itBehavesLike' cannot be used inside '\(currentPhase)', 'itBehavesLike' may only be used inside 'context' or 'describe'.") } let callsite = Callsite(file: file, line: line) let closure = World.sharedWorld.sharedExample(name) @@ -131,15 +136,16 @@ extension World { } } - internal func fitBehavesLike(_ name: String, sharedExampleContext: @escaping SharedExampleContext, flags: FilterFlags, file: String, line: UInt) { + @nonobjc + internal func fitBehavesLike(_ name: String, sharedExampleContext: @escaping SharedExampleContext, flags: FilterFlags, file: FileString, line: UInt) { var focusedFlags = flags focusedFlags[Filter.focused] = true self.itBehavesLike(name, sharedExampleContext: sharedExampleContext, flags: focusedFlags, file: file, line: line) } - internal func itBehavesLike(_ behavior: Behavior.Type, context: @escaping () -> C, flags: FilterFlags, file: String, line: UInt) { + internal func itBehavesLike(_ behavior: Behavior.Type, context: @escaping () -> C, flags: FilterFlags, file: FileString, line: UInt) { guard currentExampleMetadata == nil else { - raiseError("'itBehavesLike' cannot be used inside '\(currentPhase)', 'itBehavesLike' may only be used inside 'context' or 'describe'. ") + raiseError("'itBehavesLike' cannot be used inside '\(currentPhase)', 'itBehavesLike' may only be used inside 'context' or 'describe'.") } let callsite = Callsite(file: file, line: line) let closure = behavior.spec @@ -155,36 +161,36 @@ extension World { } } - internal func fitBehavesLike(_ behavior: Behavior.Type, context: @escaping () -> C, flags: FilterFlags, file: String, line: UInt) { + internal func fitBehavesLike(_ behavior: Behavior.Type, context: @escaping () -> C, flags: FilterFlags, file: FileString, line: UInt) { var focusedFlags = flags focusedFlags[Filter.focused] = true self.itBehavesLike(behavior, context: context, flags: focusedFlags, file: file, line: line) } - internal func xitBehavesLike(_ behavior: Behavior.Type, context: @escaping () -> C, flags: FilterFlags, file: String, line: UInt) { + internal func xitBehavesLike(_ behavior: Behavior.Type, context: @escaping () -> C, flags: FilterFlags, file: FileString, line: UInt) { var pendingFlags = flags pendingFlags[Filter.pending] = true self.itBehavesLike(behavior, context: context, flags: pendingFlags, file: file, line: line) } -#if (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE +#if canImport(Darwin) && !SWIFT_PACKAGE @objc(itWithDescription:flags:file:line:closure:) - private func objc_it(_ description: String, flags: FilterFlags, file: String, line: UInt, closure: @escaping () -> Void) { + internal func objc_it(_ description: String, flags: FilterFlags, file: FileString, line: UInt, closure: @escaping () -> Void) { it(description, flags: flags, file: file, line: line, closure: closure) } @objc(fitWithDescription:flags:file:line:closure:) - private func objc_fit(_ description: String, flags: FilterFlags, file: String, line: UInt, closure: @escaping () -> Void) { + internal func objc_fit(_ description: String, flags: FilterFlags, file: FileString, line: UInt, closure: @escaping () -> Void) { fit(description, flags: flags, file: file, line: line, closure: closure) } @objc(xitWithDescription:flags:file:line:closure:) - private func objc_xit(_ description: String, flags: FilterFlags, file: String, line: UInt, closure: @escaping () -> Void) { + internal func objc_xit(_ description: String, flags: FilterFlags, file: FileString, line: UInt, closure: @escaping () -> Void) { xit(description, flags: flags, file: file, line: line, closure: closure) } @objc(itBehavesLikeSharedExampleNamed:sharedExampleContext:flags:file:line:) - private func objc_itBehavesLike(_ name: String, sharedExampleContext: @escaping SharedExampleContext, flags: FilterFlags, file: String, line: UInt) { + internal func objc_itBehavesLike(_ name: String, sharedExampleContext: @escaping SharedExampleContext, flags: FilterFlags, file: FileString, line: UInt) { itBehavesLike(name, sharedExampleContext: sharedExampleContext, flags: flags, file: file, line: line) } #endif diff --git a/Example/Pods/Quick/Sources/Quick/ErrorUtility.swift b/Example/Pods/Quick/Sources/Quick/ErrorUtility.swift index 155fefd..f13f43a 100644 --- a/Example/Pods/Quick/Sources/Quick/ErrorUtility.swift +++ b/Example/Pods/Quick/Sources/Quick/ErrorUtility.swift @@ -1,7 +1,7 @@ import Foundation internal func raiseError(_ message: String) -> Never { -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +#if canImport(Darwin) NSException(name: .internalInconsistencyException, reason: message, userInfo: nil).raise() #endif diff --git a/Example/Pods/Quick/Sources/Quick/Example.swift b/Example/Pods/Quick/Sources/Quick/Example.swift index c15b31a..7cef7c5 100644 --- a/Example/Pods/Quick/Sources/Quick/Example.swift +++ b/Example/Pods/Quick/Sources/Quick/Example.swift @@ -1,19 +1,12 @@ import Foundation -private var numberOfExamplesRun = 0 -private var numberOfIncludedExamples = 0 - -// `#if swift(>=3.2) && (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE` -// does not work as expected. -#if swift(>=3.2) - #if (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE - @objcMembers - public class _ExampleBase: NSObject {} - #else - public class _ExampleBase: NSObject {} - #endif +#if canImport(Darwin) +// swiftlint:disable type_name +@objcMembers +public class _ExampleBase: NSObject {} #else public class _ExampleBase: NSObject {} +// swiftlint:enable type_name #endif /** @@ -37,10 +30,10 @@ final public class Example: _ExampleBase { weak internal var group: ExampleGroup? private let internalDescription: String - private let closure: () -> Void + private let closure: () throws -> Void private let flags: FilterFlags - internal init(description: String, callsite: Callsite, flags: FilterFlags, closure: @escaping () -> Void) { + internal init(description: String, callsite: Callsite, flags: FilterFlags, closure: @escaping () throws -> Void) { self.internalDescription = description self.closure = closure self.callsite = callsite @@ -71,16 +64,15 @@ final public class Example: _ExampleBase { public func run() { let world = World.sharedWorld - if numberOfIncludedExamples == 0 { - numberOfIncludedExamples = world.includedExampleCount - } - - if numberOfExamplesRun == 0 { + if world.numberOfExamplesRun == 0 { world.suiteHooks.executeBefores() } - let exampleMetadata = ExampleMetadata(example: self, exampleIndex: numberOfExamplesRun) + let exampleMetadata = ExampleMetadata(example: self, exampleIndex: world.numberOfExamplesRun) world.currentExampleMetadata = exampleMetadata + defer { + world.currentExampleMetadata = nil + } world.exampleHooks.executeBefores(exampleMetadata) group!.phase = .beforesExecuting @@ -89,7 +81,22 @@ final public class Example: _ExampleBase { } group!.phase = .beforesFinished - closure() + do { + try closure() + } catch { + let description = "Test \(name) threw unexpected error: \(error.localizedDescription)" + #if SWIFT_PACKAGE + let file = callsite.file.description + #else + let file = callsite.file + #endif + QuickSpec.current.recordFailure( + withDescription: description, + inFile: file, + atLine: Int(callsite.line), + expected: false + ) + } group!.phase = .aftersExecuting for after in group!.afters { @@ -98,9 +105,9 @@ final public class Example: _ExampleBase { group!.phase = .aftersFinished world.exampleHooks.executeAfters(exampleMetadata) - numberOfExamplesRun += 1 + world.numberOfExamplesRun += 1 - if !world.isRunningAdditionalSuites && numberOfExamplesRun >= numberOfIncludedExamples { + if !world.isRunningAdditionalSuites && world.numberOfExamplesRun >= world.cachedIncludedExampleCount { world.suiteHooks.executeAfters() } } diff --git a/Example/Pods/Quick/Sources/Quick/ExampleGroup.swift b/Example/Pods/Quick/Sources/Quick/ExampleGroup.swift index 129bed0..5fbfadb 100644 --- a/Example/Pods/Quick/Sources/Quick/ExampleGroup.swift +++ b/Example/Pods/Quick/Sources/Quick/ExampleGroup.swift @@ -31,9 +31,16 @@ final public class ExampleGroup: NSObject { Returns a list of examples that belong to this example group, or to any of its descendant example groups. */ + #if canImport(Darwin) + @objc public var examples: [Example] { return childExamples + childGroups.flatMap { $0.examples } } + #else + public var examples: [Example] { + return childExamples + childGroups.flatMap { $0.examples } + } + #endif internal var name: String? { guard let parent = parent else { diff --git a/Example/Pods/Quick/Sources/Quick/ExampleMetadata.swift b/Example/Pods/Quick/Sources/Quick/ExampleMetadata.swift index 3dd28ab..a8f0d77 100644 --- a/Example/Pods/Quick/Sources/Quick/ExampleMetadata.swift +++ b/Example/Pods/Quick/Sources/Quick/ExampleMetadata.swift @@ -1,16 +1,12 @@ import Foundation -// `#if swift(>=3.2) && (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE` -// does not work as expected. -#if swift(>=3.2) - #if (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE - @objcMembers - public class _ExampleMetadataBase: NSObject {} - #else - public class _ExampleMetadataBase: NSObject {} - #endif +#if canImport(Darwin) +// swiftlint:disable type_name +@objcMembers +public class _ExampleMetadataBase: NSObject {} #else public class _ExampleMetadataBase: NSObject {} +// swiftlint:enable type_name #endif /** diff --git a/Example/Pods/Quick/Sources/Quick/Filter.swift b/Example/Pods/Quick/Sources/Quick/Filter.swift index da137f8..d7fbe8d 100644 --- a/Example/Pods/Quick/Sources/Quick/Filter.swift +++ b/Example/Pods/Quick/Sources/Quick/Filter.swift @@ -1,16 +1,12 @@ import Foundation -// `#if swift(>=3.2) && (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE` -// does not work as expected. -#if swift(>=3.2) - #if (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE - @objcMembers - public class _FilterBase: NSObject {} - #else - public class _FilterBase: NSObject {} - #endif +#if canImport(Darwin) +// swiftlint:disable type_name +@objcMembers +public class _FilterBase: NSObject {} #else public class _FilterBase: NSObject {} +// swiftlint:enable type_name #endif /** diff --git a/Example/Pods/Quick/Sources/Quick/NSBundle+CurrentTestBundle.swift b/Example/Pods/Quick/Sources/Quick/NSBundle+CurrentTestBundle.swift index d7a1442..f5596cc 100644 --- a/Example/Pods/Quick/Sources/Quick/NSBundle+CurrentTestBundle.swift +++ b/Example/Pods/Quick/Sources/Quick/NSBundle+CurrentTestBundle.swift @@ -1,4 +1,4 @@ -#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) +#if canImport(Darwin) import Foundation @@ -17,7 +17,7 @@ extension Bundle { Module name has to be a valid "C99 extended identifier". */ internal var moduleName: String { - let fileName = bundleURL.fileName as NSString + let fileName = bundleURL.fileName return fileName.c99ExtendedIdentifier } } diff --git a/Example/Pods/Quick/Sources/Quick/NSString+C99ExtendedIdentifier.swift b/Example/Pods/Quick/Sources/Quick/NSString+C99ExtendedIdentifier.swift deleted file mode 100644 index ef73762..0000000 --- a/Example/Pods/Quick/Sources/Quick/NSString+C99ExtendedIdentifier.swift +++ /dev/null @@ -1,33 +0,0 @@ -#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) -import Foundation - -public extension NSString { - - private static var invalidCharacters: CharacterSet = { - var invalidCharacters = CharacterSet() - - let invalidCharacterSets: [CharacterSet] = [ - .whitespacesAndNewlines, - .illegalCharacters, - .controlCharacters, - .punctuationCharacters, - .nonBaseCharacters, - .symbols - ] - - for invalidSet in invalidCharacterSets { - invalidCharacters.formUnion(invalidSet) - } - - return invalidCharacters - }() - - @objc(qck_c99ExtendedIdentifier) - var c99ExtendedIdentifier: String { - let validComponents = components(separatedBy: NSString.invalidCharacters) - let result = validComponents.joined(separator: "_") - - return result.isEmpty ? "_" : result - } -} -#endif diff --git a/Example/Pods/Quick/Sources/Quick/QuickSelectedTestSuiteBuilder.swift b/Example/Pods/Quick/Sources/Quick/QuickSelectedTestSuiteBuilder.swift index 415b680..865c3ae 100644 --- a/Example/Pods/Quick/Sources/Quick/QuickSelectedTestSuiteBuilder.swift +++ b/Example/Pods/Quick/Sources/Quick/QuickSelectedTestSuiteBuilder.swift @@ -1,4 +1,4 @@ -#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) +#if canImport(Darwin) import Foundation /** diff --git a/Example/Pods/Quick/Sources/Quick/QuickTestObservation.swift b/Example/Pods/Quick/Sources/Quick/QuickTestObservation.swift new file mode 100644 index 0000000..e508566 --- /dev/null +++ b/Example/Pods/Quick/Sources/Quick/QuickTestObservation.swift @@ -0,0 +1,69 @@ +#if !SWIFT_PACKAGE + +import Foundation +import XCTest + +/// A dummy protocol for calling the internal `+[QuickSpec buildExamplesIfNeeded]` method +/// which is defined in Objective-C from Swift. +@objc internal protocol _QuickSpecInternal { + static func buildExamplesIfNeeded() +} + +@objc internal final class QuickTestObservation: NSObject, XCTestObservation { + @objc(sharedInstance) + static let shared = QuickTestObservation() + + // Quick hooks into this event to compile example groups for each QuickSpec subclasses. + // + // If an exception occurs when compiling examples, report it to the user. Chances are they + // included an expectation outside of a "it", "describe", or "context" block. + func testBundleWillStart(_ testBundle: Bundle) { + QuickSpec.enumerateSubclasses { specClass in + // This relies on `_QuickSpecInternal`. + (specClass as AnyClass).buildExamplesIfNeeded() + } + } +} + +// swiftlint:disable:next todo +// TODO: Unify this with QuickConfiguration's equivalent +extension QuickSpec { + internal static func enumerateSubclasses( + subclasses: [QuickSpec.Type]? = nil, + _ block: (QuickSpec.Type) -> Void + ) { + let subjects: [QuickSpec.Type] + if let subclasses = subclasses { + subjects = subclasses + } else { + let classesCount = objc_getClassList(nil, 0) + + guard classesCount > 0 else { + return + } + + let classes = UnsafeMutablePointer.allocate(capacity: Int(classesCount)) + defer { free(classes) } + + objc_getClassList(AutoreleasingUnsafeMutablePointer(classes), classesCount) + + var specSubclasses: [QuickSpec.Type] = [] + for index in 0.. String { + return string.c99ExtendedIdentifier + } +} +#endif diff --git a/Example/Pods/Quick/Sources/Quick/World.swift b/Example/Pods/Quick/Sources/Quick/World.swift index 127239a..5b11436 100644 --- a/Example/Pods/Quick/Sources/Quick/World.swift +++ b/Example/Pods/Quick/Sources/Quick/World.swift @@ -12,17 +12,13 @@ public typealias SharedExampleContext = () -> [String: Any] */ public typealias SharedExampleClosure = (@escaping SharedExampleContext) -> Void -// `#if swift(>=3.2) && (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE` -// does not work as expected. -#if swift(>=3.2) - #if (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && !SWIFT_PACKAGE - @objcMembers - internal class _WorldBase: NSObject {} - #else - internal class _WorldBase: NSObject {} - #endif +#if canImport(Darwin) +// swiftlint:disable type_name +@objcMembers +internal class _WorldBase: NSObject {} #else internal class _WorldBase: NSObject {} +// swiftlint:enable type_name #endif /** @@ -52,12 +48,14 @@ final internal class World: _WorldBase { internal var currentExampleMetadata: ExampleMetadata? + internal var numberOfExamplesRun = 0 + /** A flag that indicates whether additional test suites are being run within this test suite. This is only true within the context of Quick functional tests. */ -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) +#if canImport(Darwin) // Convention of generating Objective-C selector has been changed on Swift 3 @objc(isRunningAdditionalSuites) internal var isRunningAdditionalSuites = false @@ -78,7 +76,16 @@ final internal class World: _WorldBase { private override init() {} - static let sharedWorld = World() + static private(set) var sharedWorld = World() + + static func anotherWorld(block: (World) -> T) -> T { + let previous = sharedWorld + defer { sharedWorld = previous } + + let newWorld = World() + sharedWorld = newWorld + return block(newWorld) + } // MARK: Public Interface @@ -91,8 +98,11 @@ final internal class World: _WorldBase { be mutated to change Quick's behavior. */ internal func configure(_ closure: QuickConfigurer) { - assert(!isConfigurationFinalized, - "Quick cannot be configured outside of a +[QuickConfiguration configure:] method. You should not call -[World configure:] directly. Instead, subclass QuickConfiguration and override the +[QuickConfiguration configure:] method.") + assert( + !isConfigurationFinalized, + // swiftlint:disable:next line_length + "Quick cannot be configured outside of a +[QuickConfiguration configure:] method. You should not call -[World configure:] directly. Instead, subclass QuickConfiguration and override the +[QuickConfiguration configure:] method." + ) closure(configuration) } @@ -104,6 +114,17 @@ final internal class World: _WorldBase { isConfigurationFinalized = true } + /** + Returns `true` if the root example group for the given spec class has been already initialized. + + - parameter specClass: The QuickSpec class for which is checked for the existing root example group. + - returns: Whether the root example group for the given spec class has been already initialized or not. + */ + internal func isRootExampleGroupInitialized(forSpecClass specClass: QuickSpec.Type) -> Bool { + let name = String(describing: specClass) + return specs.keys.contains(name) + } + /** Returns an internally constructed root example group for the given QuickSpec class. @@ -119,11 +140,11 @@ final internal class World: _WorldBase { it("is at the top level") {} } - - parameter cls: The QuickSpec class for which to retrieve the root example group. + - parameter specClass: The QuickSpec class for which to retrieve the root example group. - returns: The root example group for the class. */ - internal func rootExampleGroupForSpecClass(_ cls: AnyClass) -> ExampleGroup { - let name = String(describing: cls) + internal func rootExampleGroup(forSpecClass specClass: QuickSpec.Type) -> ExampleGroup { + let name = String(describing: specClass) if let group = specs[name] { return group @@ -147,24 +168,17 @@ final internal class World: _WorldBase { - parameter specClass: The QuickSpec subclass for which examples are to be returned. - returns: A list of examples to be run as test invocations. */ - internal func examples(_ specClass: AnyClass) -> [Example] { + internal func examples(forSpecClass specClass: QuickSpec.Type) -> [Example] { // 1. Grab all included examples. let included = includedExamples // 2. Grab the intersection of (a) examples for this spec, and (b) included examples. - let spec = rootExampleGroupForSpecClass(specClass).examples.filter { included.contains($0) } + let spec = rootExampleGroup(forSpecClass: specClass).examples.filter { included.contains($0) } // 3. Remove all excluded examples. return spec.filter { example in - !self.configuration.exclusionFilters.reduce(false) { $0 || $1(example) } + !self.configuration.exclusionFilters.contains { $0(example) } } } -#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) - @objc(examplesForSpecClass:) - private func objc_examples(_ specClass: AnyClass) -> [Example] { - return examples(specClass) - } -#endif - // MARK: Internal internal func registerSharedExample(_ name: String, closure: @escaping SharedExampleClosure) { @@ -181,6 +195,8 @@ final internal class World: _WorldBase { return includedExamples.count } + internal lazy var cachedIncludedExampleCount: Int = self.includedExampleCount + internal var beforesCurrentlyExecuting: Bool { let suiteBeforesExecuting = suiteHooks.phase == .beforesExecuting let exampleBeforesExecuting = exampleHooks.phase == .beforesExecuting @@ -223,7 +239,7 @@ final internal class World: _WorldBase { private var includedExamples: [Example] { let all = allExamples let included = all.filter { example in - return self.configuration.inclusionFilters.reduce(false) { $0 || $1(example) } + return self.configuration.inclusionFilters.contains { $0(example) } } if included.isEmpty && configuration.runAllWhenEverythingFiltered { diff --git a/Example/Pods/Quick/Sources/QuickSpecBase/QuickSpecBase.m b/Example/Pods/Quick/Sources/QuickObjCRuntime/QuickSpecBase.m similarity index 60% rename from Example/Pods/Quick/Sources/QuickSpecBase/QuickSpecBase.m rename to Example/Pods/Quick/Sources/QuickObjCRuntime/QuickSpecBase.m index 10b6f7e..e452e65 100644 --- a/Example/Pods/Quick/Sources/QuickSpecBase/QuickSpecBase.m +++ b/Example/Pods/Quick/Sources/QuickObjCRuntime/QuickSpecBase.m @@ -1,22 +1,5 @@ #import "QuickSpecBase.h" -#pragma mark - _QuickSelectorWrapper - -@interface _QuickSelectorWrapper () -@property(nonatomic, assign) SEL selector; -@end - -@implementation _QuickSelectorWrapper - -- (instancetype)initWithSelector:(SEL)selector { - self = [super init]; - _selector = selector; - return self; -} - -@end - - #pragma mark - _QuickSpecBase @implementation _QuickSpecBase @@ -33,11 +16,11 @@ - (instancetype)init { @return An array of invocations that execute the newly defined example methods. */ + (NSArray *)testInvocations { - NSArray<_QuickSelectorWrapper *> *wrappers = [self _qck_testMethodSelectors]; - NSMutableArray *invocations = [NSMutableArray arrayWithCapacity:wrappers.count]; + NSArray *selectors = [self _qck_testMethodSelectors]; + NSMutableArray *invocations = [NSMutableArray arrayWithCapacity:selectors.count]; - for (_QuickSelectorWrapper *wrapper in wrappers) { - SEL selector = wrapper.selector; + for (NSString *selectorString in selectors) { + SEL selector = NSSelectorFromString(selectorString); NSMethodSignature *signature = [self instanceMethodSignatureForSelector:selector]; NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; invocation.selector = selector; @@ -48,7 +31,7 @@ - (instancetype)init { return invocations; } -+ (NSArray<_QuickSelectorWrapper *> *)_qck_testMethodSelectors { ++ (NSArray *)_qck_testMethodSelectors { return @[]; } diff --git a/Example/Pods/Quick/Sources/QuickObjCRuntime/include/QuickSpecBase.h b/Example/Pods/Quick/Sources/QuickObjCRuntime/include/QuickSpecBase.h new file mode 100644 index 0000000..2ee00e7 --- /dev/null +++ b/Example/Pods/Quick/Sources/QuickObjCRuntime/include/QuickSpecBase.h @@ -0,0 +1,7 @@ +#import +#import + +@interface _QuickSpecBase : XCTestCase ++ (NSArray *)_qck_testMethodSelectors; +- (instancetype)init NS_DESIGNATED_INITIALIZER; +@end diff --git a/Example/Pods/Quick/Sources/QuickObjectiveC/Configuration/QuickConfiguration.m b/Example/Pods/Quick/Sources/QuickObjectiveC/Configuration/QuickConfiguration.m index 937b818..a51a8bd 100644 --- a/Example/Pods/Quick/Sources/QuickObjectiveC/Configuration/QuickConfiguration.m +++ b/Example/Pods/Quick/Sources/QuickObjectiveC/Configuration/QuickConfiguration.m @@ -1,36 +1,11 @@ #import "QuickConfiguration.h" -#import "World.h" #import -typedef void (^QCKClassEnumerationBlock)(Class klass); - -/** - Finds all direct subclasses of the given class and passes them to the block provided. - The classes are iterated over in the order that objc_getClassList returns them. - - @param klass The base class to find subclasses of. - @param block A block that takes a Class. This block will be executed once for each subclass of klass. - */ -void qck_enumerateSubclasses(Class klass, QCKClassEnumerationBlock block) { - Class *classes = NULL; - int classesCount = objc_getClassList(NULL, 0); - - if (classesCount > 0) { - classes = (Class *)calloc(sizeof(Class), classesCount); - classesCount = objc_getClassList(classes, classesCount); - - Class subclass, superclass; - for(int i = 0; i < classesCount; i++) { - subclass = classes[i]; - superclass = class_getSuperclass(subclass); - if (superclass == klass && block) { - block(subclass); - } - } - - free(classes); - } -} +#if __has_include("Quick-Swift.h") +#import "Quick-Swift.h" +#else +#import +#endif @implementation QuickConfiguration @@ -60,19 +35,8 @@ - (instancetype)init { + (void)initialize { // Only enumerate over the subclasses of QuickConfiguration, not any of its subclasses. if ([self class] == [QuickConfiguration class]) { - - // Only enumerate over subclasses once, even if +[QuickConfiguration initialize] - // were to be called several times. This is necessary because +[QuickSpec initialize] - // manually calls +[QuickConfiguration initialize]. - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - qck_enumerateSubclasses([QuickConfiguration class], ^(__unsafe_unretained Class klass) { - [[World sharedWorld] configure:^(Configuration *configuration) { - [klass configure:configuration]; - }]; - }); - [[World sharedWorld] finalizeConfiguration]; - }); + World *world = [World sharedWorld]; + [self configureSubclassesIfNeededWithWorld:world]; } } diff --git a/Example/Pods/Quick/Sources/QuickObjectiveC/DSL/QCKDSL.m b/Example/Pods/Quick/Sources/QuickObjectiveC/DSL/QCKDSL.m index 10e8a3d..624832e 100644 --- a/Example/Pods/Quick/Sources/QuickObjectiveC/DSL/QCKDSL.m +++ b/Example/Pods/Quick/Sources/QuickObjectiveC/DSL/QCKDSL.m @@ -1,6 +1,10 @@ #import "QCKDSL.h" -#import "World.h" -#import "World+DSL.h" + +#if __has_include("Quick-Swift.h") +#import "Quick-Swift.h" +#else +#import +#endif void qck_beforeSuite(QCKDSLEmptyBlock closure) { [[World sharedWorld] beforeSuite:closure]; diff --git a/Example/Pods/Quick/Sources/QuickObjectiveC/DSL/World+DSL.h b/Example/Pods/Quick/Sources/QuickObjectiveC/DSL/World+DSL.h deleted file mode 100644 index a3b8524..0000000 --- a/Example/Pods/Quick/Sources/QuickObjectiveC/DSL/World+DSL.h +++ /dev/null @@ -1,20 +0,0 @@ -#import - -@interface World (SWIFT_EXTENSION(Quick)) -- (void)beforeSuite:(void (^ __nonnull)(void))closure; -- (void)afterSuite:(void (^ __nonnull)(void))closure; -- (void)sharedExamples:(NSString * __nonnull)name closure:(void (^ __nonnull)(NSDictionary * __nonnull (^ __nonnull)(void)))closure; -- (void)describe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; -- (void)context:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; -- (void)fdescribe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; -- (void)xdescribe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; -- (void)beforeEach:(void (^ __nonnull)(void))closure; -- (void)beforeEachWithMetadata:(void (^ __nonnull)(ExampleMetadata * __nonnull))closure; -- (void)afterEach:(void (^ __nonnull)(void))closure; -- (void)afterEachWithMetadata:(void (^ __nonnull)(ExampleMetadata * __nonnull))closure; -- (void)itWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure; -- (void)fitWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure; -- (void)xitWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure; -- (void)itBehavesLikeSharedExampleNamed:(NSString * __nonnull)name sharedExampleContext:(NSDictionary * __nonnull (^ __nonnull)(void))sharedExampleContext flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line; -- (void)pending:(NSString * __nonnull)description closure:(void (^ __nonnull)(void))closure; -@end diff --git a/Example/Pods/Quick/Sources/QuickObjectiveC/QuickSpec.h b/Example/Pods/Quick/Sources/QuickObjectiveC/QuickSpec.h index 105a97e..ccf006e 100644 --- a/Example/Pods/Quick/Sources/QuickObjectiveC/QuickSpec.h +++ b/Example/Pods/Quick/Sources/QuickObjectiveC/QuickSpec.h @@ -47,4 +47,10 @@ */ - (void)spec; +/** + Returns the currently executing spec. Use in specs that require XCTestCase + methods, e.g. expectationWithDescription. +*/ +@property (class, nonatomic, readonly) QuickSpec *current; + @end diff --git a/Example/Pods/Quick/Sources/QuickObjectiveC/QuickSpec.m b/Example/Pods/Quick/Sources/QuickObjectiveC/QuickSpec.m index 4891679..90ac7c6 100644 --- a/Example/Pods/Quick/Sources/QuickObjectiveC/QuickSpec.m +++ b/Example/Pods/Quick/Sources/QuickObjectiveC/QuickSpec.m @@ -1,7 +1,11 @@ #import "QuickSpec.h" #import "QuickConfiguration.h" -#import "World.h" + +#if __has_include("Quick-Swift.h") +#import "Quick-Swift.h" +#else #import +#endif static QuickSpec *currentSpec = nil; @@ -13,39 +17,6 @@ @implementation QuickSpec #pragma mark - XCTestCase Overrides -/** - The runtime sends initialize to each class in a program just before the class, or any class - that inherits from it, is sent its first message from within the program. QuickSpec hooks into - this event to compile the example groups for this spec subclass. - - If an exception occurs when compiling the examples, report it to the user. Chances are they - included an expectation outside of a "it", "describe", or "context" block. - */ -+ (void)initialize { - [QuickConfiguration initialize]; - - World *world = [World sharedWorld]; - [world performWithCurrentExampleGroup:[world rootExampleGroupForSpecClass:self] closure:^{ - QuickSpec *spec = [self new]; - - @try { - [spec spec]; - } - @catch (NSException *exception) { - [NSException raise:NSInternalInconsistencyException - format:@"An exception occurred when building Quick's example groups.\n" - @"Some possible reasons this might happen include:\n\n" - @"- An 'expect(...).to' expectation was evaluated outside of " - @"an 'it', 'context', or 'describe' block\n" - @"- 'sharedExamples' was called twice with the same name\n" - @"- 'itBehavesLike' was called with a name that is not registered as a shared example\n\n" - @"Here's the original exception: '%@', reason: '%@', userInfo: '%@'", - exception.name, exception.reason, exception.userInfo]; - } - [self testInvocations]; - }]; -} - /** Invocations for each test method in the test case. QuickSpec overrides this method to define a new method for each example defined in +[QuickSpec spec]. @@ -75,8 +46,48 @@ + (NSArray *)testInvocations { - (void)spec { } ++ (QuickSpec*) current { + return currentSpec; +} + #pragma mark - Internal Methods +/** + Runs the `spec` method and builds the examples for this class. + + It's safe to call this method multiple times. If the examples for the class have been built, invocation + of this method has no effect. + */ ++ (void)buildExamplesIfNeeded { + [QuickConfiguration class]; + World *world = [World sharedWorld]; + + if ([world isRootExampleGroupInitializedForSpecClass:[self class]]) { + // The examples fot this subclass have been already built. Skipping. + return; + } + + ExampleGroup *rootExampleGroup = [world rootExampleGroupForSpecClass:[self class]]; + [world performWithCurrentExampleGroup:rootExampleGroup closure:^{ + QuickSpec *spec = [self new]; + + @try { + [spec spec]; + } + @catch (NSException *exception) { + [NSException raise:NSInternalInconsistencyException + format:@"An exception occurred when building Quick's example groups.\n" + @"Some possible reasons this might happen include:\n\n" + @"- An 'expect(...).to' expectation was evaluated outside of " + @"an 'it', 'context', or 'describe' block\n" + @"- 'sharedExamples' was called twice with the same name\n" + @"- 'itBehavesLike' was called with a name that is not registered as a shared example\n\n" + @"Here's the original exception: '%@', reason: '%@', userInfo: '%@'", + exception.name, exception.reason, exception.userInfo]; + } + }]; +} + /** QuickSpec uses this method to dynamically define a new instance method for the given example. The instance method runs the example, catching any exceptions. @@ -101,8 +112,8 @@ + (SEL)addInstanceMethodForExample:(Example *)example classSelectorNames:(NSMuta }); const char *types = [[NSString stringWithFormat:@"%s%s%s", @encode(void), @encode(id), @encode(SEL)] UTF8String]; - - NSString *originalName = example.name.qck_c99ExtendedIdentifier; + + NSString *originalName = [QCKObjCStringUtils c99ExtendedIdentifierFrom:example.name]; NSString *selectorName = originalName; NSUInteger i = 2; @@ -128,14 +139,29 @@ - (void)recordFailureWithDescription:(NSString *)description inFile:(NSString *)filePath atLine:(NSUInteger)lineNumber expected:(BOOL)expected { + if (self != [QuickSpec current]) { + [[QuickSpec current] recordFailureWithDescription:description + inFile:filePath + atLine:lineNumber + expected:expected]; + return; + } + if (self.example.isSharedExample) { filePath = self.example.callsite.file; lineNumber = self.example.callsite.line; } - [currentSpec.testRun recordFailureWithDescription:description - inFile:filePath - atLine:lineNumber - expected:expected]; + [super recordFailureWithDescription:description + inFile:filePath + atLine:lineNumber + expected:expected]; } @end + +#pragma mark - Test Observation + +__attribute__((constructor)) +static void registerQuickTestObservation(void) { + [[XCTestObservationCenter sharedTestObservationCenter] addTestObserver:[QuickTestObservation sharedInstance]]; +} diff --git a/Example/Pods/Quick/Sources/QuickObjectiveC/World.h b/Example/Pods/Quick/Sources/QuickObjectiveC/World.h deleted file mode 100644 index e638cf6..0000000 --- a/Example/Pods/Quick/Sources/QuickObjectiveC/World.h +++ /dev/null @@ -1,18 +0,0 @@ -#import - -@class ExampleGroup; -@class ExampleMetadata; - -SWIFT_CLASS("_TtC5Quick5World") -@interface World - -@property (nonatomic) ExampleGroup * __nullable currentExampleGroup; -@property (nonatomic) ExampleMetadata * __nullable currentExampleMetadata; -@property (nonatomic) BOOL isRunningAdditionalSuites; -+ (World * __nonnull)sharedWorld; -- (void)configure:(void (^ __nonnull)(Configuration * __nonnull))closure; -- (void)finalizeConfiguration; -- (ExampleGroup * __nonnull)rootExampleGroupForSpecClass:(Class __nonnull)cls; -- (NSArray * __nonnull)examplesForSpecClass:(Class __nonnull)specClass; -- (void)performWithCurrentExampleGroup:(ExampleGroup * __nonnull)group closure:(void (^ __nonnull)(void))closure; -@end diff --git a/Example/Pods/Quick/Sources/QuickObjectiveC/XCTestSuite+QuickTestSuiteBuilder.m b/Example/Pods/Quick/Sources/QuickObjectiveC/XCTestSuite+QuickTestSuiteBuilder.m index e49939e..ae63036 100644 --- a/Example/Pods/Quick/Sources/QuickObjectiveC/XCTestSuite+QuickTestSuiteBuilder.m +++ b/Example/Pods/Quick/Sources/QuickObjectiveC/XCTestSuite+QuickTestSuiteBuilder.m @@ -1,6 +1,11 @@ #import #import + +#if __has_include("Quick-Swift.h") +#import "Quick-Swift.h" +#else #import +#endif @interface XCTestSuite (QuickTestSuiteBuilder) @end diff --git a/Example/Pods/Quick/Sources/QuickSpecBase/include/QuickSpecBase.h b/Example/Pods/Quick/Sources/QuickSpecBase/include/QuickSpecBase.h deleted file mode 100644 index 8881ca0..0000000 --- a/Example/Pods/Quick/Sources/QuickSpecBase/include/QuickSpecBase.h +++ /dev/null @@ -1,11 +0,0 @@ -#import -#import - -@interface _QuickSelectorWrapper : NSObject -- (instancetype)initWithSelector:(SEL)selector; -@end - -@interface _QuickSpecBase : XCTestCase -+ (NSArray<_QuickSelectorWrapper *> *)_qck_testMethodSelectors; -- (instancetype)init NS_DESIGNATED_INITIALIZER; -@end diff --git a/Example/Pods/Target Support Files/Nimble/Nimble-Info.plist b/Example/Pods/Target Support Files/Nimble/Nimble-Info.plist index 5e150f8..ee83e4d 100644 --- a/Example/Pods/Target Support Files/Nimble/Nimble-Info.plist +++ b/Example/Pods/Target Support Files/Nimble/Nimble-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 7.3.4 + 9.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Pods/Target Support Files/Nimble/Nimble-umbrella.h b/Example/Pods/Target Support Files/Nimble/Nimble-umbrella.h index 3a2c2c8..15ed932 100644 --- a/Example/Pods/Target Support Files/Nimble/Nimble-umbrella.h +++ b/Example/Pods/Target Support Files/Nimble/Nimble-umbrella.h @@ -17,7 +17,6 @@ #import "CwlCatchException.h" #import "CwlMachBadInstructionHandler.h" #import "mach_excServer.h" -#import "CwlPreconditionTesting.h" FOUNDATION_EXPORT double NimbleVersionNumber; FOUNDATION_EXPORT const unsigned char NimbleVersionString[]; diff --git a/Example/Pods/Target Support Files/Nimble/Nimble.debug.xcconfig b/Example/Pods/Target Support Files/Nimble/Nimble.debug.xcconfig index a1a7da8..28af896 100644 --- a/Example/Pods/Target Support Files/Nimble/Nimble.debug.xcconfig +++ b/Example/Pods/Target Support Files/Nimble/Nimble.debug.xcconfig @@ -1,7 +1,9 @@ APPLICATION_EXTENSION_API_ONLY = YES CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Nimble +DEFINES_MODULE = YES ENABLE_BITCODE = NO +ENABLE_TESTING_SEARCH_PATHS = YES FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LIBRARY_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/usr/lib" diff --git a/Example/Pods/Target Support Files/Nimble/Nimble.release.xcconfig b/Example/Pods/Target Support Files/Nimble/Nimble.release.xcconfig index a1a7da8..28af896 100644 --- a/Example/Pods/Target Support Files/Nimble/Nimble.release.xcconfig +++ b/Example/Pods/Target Support Files/Nimble/Nimble.release.xcconfig @@ -1,7 +1,9 @@ APPLICATION_EXTENSION_API_ONLY = YES CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Nimble +DEFINES_MODULE = YES ENABLE_BITCODE = NO +ENABLE_TESTING_SEARCH_PATHS = YES FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LIBRARY_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/usr/lib" diff --git a/Example/Pods/Target Support Files/Quick/Quick-Info.plist b/Example/Pods/Target Support Files/Quick/Quick-Info.plist index 2a9158a..4522675 100644 --- a/Example/Pods/Target Support Files/Quick/Quick-Info.plist +++ b/Example/Pods/Target Support Files/Quick/Quick-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.2.0 + 3.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Pods/Target Support Files/Quick/Quick.debug.xcconfig b/Example/Pods/Target Support Files/Quick/Quick.debug.xcconfig index 7ba14f5..a817ee0 100644 --- a/Example/Pods/Target Support Files/Quick/Quick.debug.xcconfig +++ b/Example/Pods/Target Support Files/Quick/Quick.debug.xcconfig @@ -1,10 +1,12 @@ +APPLICATION_EXTENSION_API_ONLY = YES CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Quick +DEFINES_MODULE = YES ENABLE_BITCODE = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LIBRARY_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/usr/lib" -OTHER_LDFLAGS = $(inherited) -framework "XCTest" +OTHER_LDFLAGS = $(inherited) -Xlinker -no_application_extension -framework "XCTest" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Example/Pods/Target Support Files/Quick/Quick.release.xcconfig b/Example/Pods/Target Support Files/Quick/Quick.release.xcconfig index 7ba14f5..a817ee0 100644 --- a/Example/Pods/Target Support Files/Quick/Quick.release.xcconfig +++ b/Example/Pods/Target Support Files/Quick/Quick.release.xcconfig @@ -1,10 +1,12 @@ +APPLICATION_EXTENSION_API_ONLY = YES CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Quick +DEFINES_MODULE = YES ENABLE_BITCODE = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LIBRARY_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/usr/lib" -OTHER_LDFLAGS = $(inherited) -framework "XCTest" +OTHER_LDFLAGS = $(inherited) -Xlinker -no_application_extension -framework "XCTest" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Example/Pods/Target Support Files/iONess/iONess-Info.plist b/Example/Pods/Target Support Files/iONess/iONess-Info.plist index 161a9d3..e433362 100644 --- a/Example/Pods/Target Support Files/iONess/iONess-Info.plist +++ b/Example/Pods/Target Support Files/iONess/iONess-Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.1.0 + 1.2.2 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Tests/IntegratedTest.swift b/Example/Tests/IntegratedTest.swift index 82ffd50..5026f29 100644 --- a/Example/Tests/IntegratedTest.swift +++ b/Example/Tests/IntegratedTest.swift @@ -24,7 +24,7 @@ class IntegratedTestSpec: QuickSpec { request.then { result in firstResult = result } - waitUntil(timeout: 15) { done in + waitUntil(timeout: .seconds(15)) { done in request.then { result in secondResult = result done() @@ -53,7 +53,7 @@ class IntegratedTestSpec: QuickSpec { request.then { result in firstResult = result } - waitUntil(timeout: 15) { done in + waitUntil(timeout: .seconds(15)) { done in request.then { result in secondResult = result done() @@ -74,7 +74,7 @@ class IntegratedTestSpec: QuickSpec { .httpRequest(.get, withUrl: "https://jsonplaceholder.typicode.com/todos/\(randomNumber)") .prepareDataRequest(with: CounterRetryControl(maxRetryCount: 3)) .validate(statusCodes: 200..<300) - waitUntil(timeout: 15) { done in + waitUntil(timeout: .seconds(15)) { done in request.then { result in firstResult = result done() @@ -97,7 +97,7 @@ class IntegratedTestSpec: QuickSpec { .httpRequest(.get, withUrl: "https://jsonplaceholder.typicode.com/todos/\(randomNumber)") .prepareDataRequest(with: CounterRetryControl(maxRetryCount: 3)) .validate(statusCodes: 200..<300) - waitUntil(timeout: 15) { done in + waitUntil(timeout: .seconds(15)) { done in request.then { _ in fail("This completion should not be executed") done() @@ -116,7 +116,7 @@ class IntegratedTestSpec: QuickSpec { it("should get json data") { let randomNumber: Int = .random(in: 40..<50) var requestResult: URLResult? - waitUntil(timeout: 15) { done in + waitUntil(timeout: .seconds(15)) { done in Ness.default .httpRequest(.get, withUrl: "https://jsonplaceholder.typicode.com/todos/\(randomNumber)") .prepareDataRequest(with: CounterRetryControl(maxRetryCount: 3)) @@ -156,7 +156,7 @@ class IntegratedTestSpec: QuickSpec { } it("should get array data") { var requestResult: URLResult? - waitUntil(timeout: 15) { done in + waitUntil(timeout: .seconds(15)) { done in Ness.default .httpRequest(.get, withUrl: "https://jsonplaceholder.typicode.com/posts") .prepareDataRequest(with: CounterRetryControl(maxRetryCount: 3)) @@ -201,7 +201,7 @@ class IntegratedTestSpec: QuickSpec { it("should post data") { var requestResult: URLResult? let randomNumber: Int = .random(in: 0..<10) - waitUntil(timeout: 15) { done in + waitUntil(timeout: .seconds(15)) { done in Ness.default .httpRequest(.post, withUrl: "https://jsonplaceholder.typicode.com/posts") .set(jsonEncodable: JSONPlaceholder(title: "foo", body: "bar", userId: randomNumber)) @@ -253,7 +253,7 @@ class IntegratedTestSpec: QuickSpec { .validate(statusCodes: 200..<300) var firstResult: URLResult? var secondResult: URLResult? - waitUntil(timeout: 15) { done in + waitUntil(timeout: .seconds(15)) { done in firstRequest.aggregate(with: secondRequest).then { result in expect(result.areCompleted).to(beTrue()) expect(result.results.count).to(equal(2)) diff --git a/Example/Tests/ResponseDecoderSpec.swift b/Example/Tests/ResponseDecoderSpec.swift index 95981f4..64558ef 100644 --- a/Example/Tests/ResponseDecoderSpec.swift +++ b/Example/Tests/ResponseDecoderSpec.swift @@ -79,52 +79,45 @@ class ResponseDecoderSpec: QuickSpec { let mock = RandomJSON() let data = try! JSONEncoder().encode(mock) expect { - let decoded = try JSONDecodableDecoder().decode(from: data) - return decoded + try JSONDecodableDecoder().decode(from: data) }.to(throwError()) } it("should fail decode json array from data") { let mocks: [RandomJSON] = [.init(), .init(), .init(), .init(), .init()] let data = try! JSONEncoder().encode(mocks) expect { - let decoded = try ArrayJSONDecodableDecoder().decode(from: data) - return decoded + try ArrayJSONDecodableDecoder().decode(from: data) }.to(throwError()) } it("should fail decode json from data") { let data = String.random().data(using: .utf8)! expect { - let decoded = try JSONResponseDecoder().decode(from: data) - return decoded + try JSONResponseDecoder().decode(from: data) }.to(throwError()) } it("should fail decode array json from data") { let data = String.random().data(using: .utf8)! expect { - let decoded = try ArrayJSONResponseDecoder().decode(from: data) - return decoded + try ArrayJSONResponseDecoder().decode(from: data) }.to(throwError()) } it("should fail decode json from data") { let data = String.random().data(using: .utf8)! expect { - let decoded = try PlaceholderJSONDecoder().decode(from: data) - return decoded + try PlaceholderJSONDecoder().decode(from: data) }.to(throwError()) } it("should fail decode json from string") { let data = String.random().data(using: .utf8)! expect { - let decoded = try PlaceholderStringDecoder().decode(from: data) - return decoded + try PlaceholderStringDecoder().decode(from: data) }.to(throwError()) } it("should fail decode array json from data") { let data = String.random().data(using: .utf8)! let decoder = ArrayedJSONDecoder(singleDecoder: PlaceholderJSONDecoder()) expect { - let decodeds = try decoder.decode(from: data) - return decodeds + try decoder.decode(from: data) }.to(throwError()) } } diff --git a/README.md b/README.md index aef6c3f..344c150 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ iONess (iOS Network Session) is HTTP Request Helper for iOS platform used by Home Credit Indonesia iOS App ![build](https://github.com/oss-homecredit-id/iONess/workflows/build/badge.svg) +![test](https://github.com/oss-homecredit-id/iONess/workflows/test/badge.svg) [![Version](https://img.shields.io/cocoapods/v/iONess.svg?style=flat)](https://cocoapods.org/pods/iONess) [![License](https://img.shields.io/cocoapods/l/iONess.svg?style=flat)](https://cocoapods.org/pods/iONess) [![Platform](https://img.shields.io/cocoapods/p/iONess.svg?style=flat)](https://cocoapods.org/pods/iONess)