From c579d2b87b15ddc9bf9d968e3622956844e501df Mon Sep 17 00:00:00 2001 From: Natalia Terlecka Date: Tue, 12 May 2015 10:17:17 +0100 Subject: [PATCH] Removed quick. --- Podfile | 5 +- Podfile.lock | 27 +- .../Private/Quick/NSString+QCKSelectorName.h | 1 - Pods/Headers/Private/Quick/QCKDSL.h | 1 - Pods/Headers/Private/Quick/Quick.h | 1 - .../Private/Quick/QuickConfiguration.h | 1 - Pods/Headers/Private/Quick/QuickSpec.h | 1 - .../Public/Quick/NSString+QCKSelectorName.h | 1 - Pods/Headers/Public/Quick/QCKDSL.h | 1 - Pods/Headers/Public/Quick/Quick.h | 1 - .../Headers/Public/Quick/QuickConfiguration.h | 1 - Pods/Headers/Public/Quick/QuickSpec.h | 1 - Pods/Local Podspecs/Quick.podspec.json | 26 - Pods/Manifest.lock | 27 +- .../Nimble/Adapters/AdapterProtocols.swift | 3 +- .../Nimble/Adapters/AssertionRecorder.swift | 6 +- .../Nimble/Adapters/NimbleXCTestHandler.swift | 12 + .../Nimble/Adapters/XCTestHandler.swift | 10 - Pods/Nimble/Nimble/DSL+Wait.swift | 14 +- Pods/Nimble/Nimble/DSL.swift | 10 +- Pods/Nimble/Nimble/Expectation.swift | 2 +- Pods/Nimble/Nimble/Expression.swift | 11 +- Pods/Nimble/Nimble/FailureMessage.swift | 2 +- Pods/Nimble/Nimble/Matchers/AllPass.swift | 99 ++ .../Nimble/Matchers/BeGreaterThan.swift | 2 +- .../Matchers/BeGreaterThanOrEqualTo.swift | 2 +- Pods/Nimble/Nimble/Matchers/BeLessThan.swift | 2 +- Pods/Nimble/Nimble/Matchers/BeginWith.swift | 2 +- Pods/Nimble/Nimble/Matchers/Contain.swift | 15 +- Pods/Nimble/Nimble/Matchers/EndWith.swift | 2 +- Pods/Nimble/Nimble/Matchers/Equal.swift | 62 + Pods/Nimble/Nimble/Matchers/Match.swift | 2 +- .../Nimble/Matchers/MatcherProtocols.swift | 4 +- .../Nimble/Matchers/RaisesException.swift | 191 ++- Pods/Nimble/Nimble/Utils/Stringers.swift | 6 +- .../Nimble/Wrappers/AsyncMatcherWrapper.swift | 49 +- Pods/Nimble/Nimble/objc/DSL.h | 4 + Pods/Nimble/Nimble/objc/DSL.m | 8 +- Pods/Nimble/README.md | 102 +- Pods/Pods.xcodeproj/project.pbxproj | 1072 ++++++--------- .../Pods-cameraTests-Nimble.xcscheme | 4 +- .../xcschemes/Pods-cameraTests-Quick.xcscheme | 59 - .../xcschemes/Pods-cameraTests.xcscheme | 4 +- .../xcschemes/xcschememanagement.plist | 14 +- Pods/Quick/LICENSE | 201 --- Pods/Quick/Quick/Callsite.swift | 28 - .../Quick/Configuration/Configuration.swift | 147 --- .../Quick/Configuration/QuickConfiguration.h | 30 - .../Quick/Configuration/QuickConfiguration.m | 83 -- Pods/Quick/Quick/DSL/DSL.swift | 227 ---- Pods/Quick/Quick/DSL/QCKDSL.h | 211 --- Pods/Quick/Quick/DSL/QCKDSL.m | 70 - Pods/Quick/Quick/DSL/World+DSL.swift | 100 -- Pods/Quick/Quick/Example.swift | 103 -- Pods/Quick/Quick/ExampleGroup.swift | 97 -- Pods/Quick/Quick/ExampleMetadata.swift | 22 - Pods/Quick/Quick/Failure.swift | 16 - Pods/Quick/Quick/Filter.swift | 29 - Pods/Quick/Quick/Hooks/Closures.swift | 35 - Pods/Quick/Quick/Hooks/ExampleHooks.swift | 36 - Pods/Quick/Quick/Hooks/SuiteHooks.swift | 34 - Pods/Quick/Quick/NSString+QCKSelectorName.h | 17 - Pods/Quick/Quick/NSString+QCKSelectorName.m | 33 - Pods/Quick/Quick/Quick.h | 13 - Pods/Quick/Quick/QuickSpec.h | 48 - Pods/Quick/Quick/QuickSpec.m | 142 -- Pods/Quick/Quick/World.swift | 197 --- Pods/Quick/README.md | 1165 ----------------- .../Pods-cameraTests-Nimble/Info.plist | 2 +- .../Pods-cameraTests-Nimble-Private.xcconfig | 2 +- .../Pods-cameraTests-Quick/Info.plist | 26 - .../Pods-cameraTests-Quick-Private.xcconfig | 10 - .../Pods-cameraTests-Quick-dummy.m | 5 - .../Pods-cameraTests-Quick-prefix.pch | 5 - .../Pods-cameraTests-Quick-umbrella.h | 11 - .../Pods-cameraTests-Quick.modulemap | 6 - .../Pods-cameraTests-Quick.xcconfig | 2 - ...Pods-cameraTests-acknowledgements.markdown | 205 --- .../Pods-cameraTests-acknowledgements.plist | 209 --- .../Pods-cameraTests-environment.h | 10 +- .../Pods-cameraTests-frameworks.sh | 6 +- .../Pods-cameraTests-resources.sh | 24 +- .../Pods-cameraTests.debug.xcconfig | 6 +- .../Pods-cameraTests.release.xcconfig | 6 +- .../UserInterfaceState.xcuserstate | Bin 91354 -> 92572 bytes cameraTests/cameraTests.swift | 9 - 86 files changed, 963 insertions(+), 4535 deletions(-) delete mode 120000 Pods/Headers/Private/Quick/NSString+QCKSelectorName.h delete mode 120000 Pods/Headers/Private/Quick/QCKDSL.h delete mode 120000 Pods/Headers/Private/Quick/Quick.h delete mode 120000 Pods/Headers/Private/Quick/QuickConfiguration.h delete mode 120000 Pods/Headers/Private/Quick/QuickSpec.h delete mode 120000 Pods/Headers/Public/Quick/NSString+QCKSelectorName.h delete mode 120000 Pods/Headers/Public/Quick/QCKDSL.h delete mode 120000 Pods/Headers/Public/Quick/Quick.h delete mode 120000 Pods/Headers/Public/Quick/QuickConfiguration.h delete mode 120000 Pods/Headers/Public/Quick/QuickSpec.h delete mode 100644 Pods/Local Podspecs/Quick.podspec.json create mode 100644 Pods/Nimble/Nimble/Adapters/NimbleXCTestHandler.swift delete mode 100644 Pods/Nimble/Nimble/Adapters/XCTestHandler.swift create mode 100644 Pods/Nimble/Nimble/Matchers/AllPass.swift delete mode 100644 Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/Pods-cameraTests-Quick.xcscheme delete mode 100644 Pods/Quick/LICENSE delete mode 100644 Pods/Quick/Quick/Callsite.swift delete mode 100644 Pods/Quick/Quick/Configuration/Configuration.swift delete mode 100644 Pods/Quick/Quick/Configuration/QuickConfiguration.h delete mode 100644 Pods/Quick/Quick/Configuration/QuickConfiguration.m delete mode 100644 Pods/Quick/Quick/DSL/DSL.swift delete mode 100644 Pods/Quick/Quick/DSL/QCKDSL.h delete mode 100644 Pods/Quick/Quick/DSL/QCKDSL.m delete mode 100644 Pods/Quick/Quick/DSL/World+DSL.swift delete mode 100644 Pods/Quick/Quick/Example.swift delete mode 100644 Pods/Quick/Quick/ExampleGroup.swift delete mode 100644 Pods/Quick/Quick/ExampleMetadata.swift delete mode 100644 Pods/Quick/Quick/Failure.swift delete mode 100644 Pods/Quick/Quick/Filter.swift delete mode 100644 Pods/Quick/Quick/Hooks/Closures.swift delete mode 100644 Pods/Quick/Quick/Hooks/ExampleHooks.swift delete mode 100644 Pods/Quick/Quick/Hooks/SuiteHooks.swift delete mode 100644 Pods/Quick/Quick/NSString+QCKSelectorName.h delete mode 100644 Pods/Quick/Quick/NSString+QCKSelectorName.m delete mode 100644 Pods/Quick/Quick/Quick.h delete mode 100644 Pods/Quick/Quick/QuickSpec.h delete mode 100644 Pods/Quick/Quick/QuickSpec.m delete mode 100644 Pods/Quick/Quick/World.swift delete mode 100644 Pods/Quick/README.md delete mode 100644 Pods/Target Support Files/Pods-cameraTests-Quick/Info.plist delete mode 100644 Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-Private.xcconfig delete mode 100644 Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-dummy.m delete mode 100644 Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-prefix.pch delete mode 100644 Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-umbrella.h delete mode 100644 Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick.modulemap delete mode 100644 Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick.xcconfig diff --git a/Podfile b/Podfile index 5151449..7001bf6 100644 --- a/Podfile +++ b/Podfile @@ -4,6 +4,7 @@ platform :ios, '8.0' target 'cameraTests' do use_frameworks! -pod 'Quick', :git => 'https://github.com/Quick/Quick.git', :commit => 'f8c9ff9f499fc5ea72ff55c1c5eed32e1ff303ea' -pod 'Nimble', :git => 'https://github.com/Quick/Nimble.git', :commit => '9538a301d5320fd607f01c931dc282868b0e827a' + +pod 'Nimble' + end diff --git a/Podfile.lock b/Podfile.lock index a228755..a2ae8a6 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,29 +1,10 @@ PODS: - - Nimble (0.3.0) - - Quick (0.2.2) + - Nimble (0.4.2) DEPENDENCIES: - - Nimble (from `https://github.com/Quick/Nimble.git`, commit `9538a301d5320fd607f01c931dc282868b0e827a`) - - Quick (from `https://github.com/Quick/Quick.git`, commit `f8c9ff9f499fc5ea72ff55c1c5eed32e1ff303ea`) - -EXTERNAL SOURCES: - Nimble: - :commit: 9538a301d5320fd607f01c931dc282868b0e827a - :git: https://github.com/Quick/Nimble.git - Quick: - :commit: f8c9ff9f499fc5ea72ff55c1c5eed32e1ff303ea - :git: https://github.com/Quick/Quick.git - -CHECKOUT OPTIONS: - Nimble: - :commit: 9538a301d5320fd607f01c931dc282868b0e827a - :git: https://github.com/Quick/Nimble.git - Quick: - :commit: f8c9ff9f499fc5ea72ff55c1c5eed32e1ff303ea - :git: https://github.com/Quick/Quick.git + - Nimble SPEC CHECKSUMS: - Nimble: 55fef248ef3703024ce431db817160ad24d89ba3 - Quick: 1bda8b4c8d43f6b4dd69ca001918b1767b3c9c93 + Nimble: 49b7a7da8919f42823d37c6d68cc6d15a7009f32 -COCOAPODS: 0.36.0 +COCOAPODS: 0.37.1 diff --git a/Pods/Headers/Private/Quick/NSString+QCKSelectorName.h b/Pods/Headers/Private/Quick/NSString+QCKSelectorName.h deleted file mode 120000 index 0c5df21..0000000 --- a/Pods/Headers/Private/Quick/NSString+QCKSelectorName.h +++ /dev/null @@ -1 +0,0 @@ -../../../Quick/Quick/NSString+QCKSelectorName.h \ No newline at end of file diff --git a/Pods/Headers/Private/Quick/QCKDSL.h b/Pods/Headers/Private/Quick/QCKDSL.h deleted file mode 120000 index 08e04e9..0000000 --- a/Pods/Headers/Private/Quick/QCKDSL.h +++ /dev/null @@ -1 +0,0 @@ -../../../Quick/Quick/DSL/QCKDSL.h \ No newline at end of file diff --git a/Pods/Headers/Private/Quick/Quick.h b/Pods/Headers/Private/Quick/Quick.h deleted file mode 120000 index 16c22c2..0000000 --- a/Pods/Headers/Private/Quick/Quick.h +++ /dev/null @@ -1 +0,0 @@ -../../../Quick/Quick/Quick.h \ No newline at end of file diff --git a/Pods/Headers/Private/Quick/QuickConfiguration.h b/Pods/Headers/Private/Quick/QuickConfiguration.h deleted file mode 120000 index 2ae958e..0000000 --- a/Pods/Headers/Private/Quick/QuickConfiguration.h +++ /dev/null @@ -1 +0,0 @@ -../../../Quick/Quick/Configuration/QuickConfiguration.h \ No newline at end of file diff --git a/Pods/Headers/Private/Quick/QuickSpec.h b/Pods/Headers/Private/Quick/QuickSpec.h deleted file mode 120000 index 50bd82e..0000000 --- a/Pods/Headers/Private/Quick/QuickSpec.h +++ /dev/null @@ -1 +0,0 @@ -../../../Quick/Quick/QuickSpec.h \ No newline at end of file diff --git a/Pods/Headers/Public/Quick/NSString+QCKSelectorName.h b/Pods/Headers/Public/Quick/NSString+QCKSelectorName.h deleted file mode 120000 index 0c5df21..0000000 --- a/Pods/Headers/Public/Quick/NSString+QCKSelectorName.h +++ /dev/null @@ -1 +0,0 @@ -../../../Quick/Quick/NSString+QCKSelectorName.h \ No newline at end of file diff --git a/Pods/Headers/Public/Quick/QCKDSL.h b/Pods/Headers/Public/Quick/QCKDSL.h deleted file mode 120000 index 08e04e9..0000000 --- a/Pods/Headers/Public/Quick/QCKDSL.h +++ /dev/null @@ -1 +0,0 @@ -../../../Quick/Quick/DSL/QCKDSL.h \ No newline at end of file diff --git a/Pods/Headers/Public/Quick/Quick.h b/Pods/Headers/Public/Quick/Quick.h deleted file mode 120000 index 16c22c2..0000000 --- a/Pods/Headers/Public/Quick/Quick.h +++ /dev/null @@ -1 +0,0 @@ -../../../Quick/Quick/Quick.h \ No newline at end of file diff --git a/Pods/Headers/Public/Quick/QuickConfiguration.h b/Pods/Headers/Public/Quick/QuickConfiguration.h deleted file mode 120000 index 2ae958e..0000000 --- a/Pods/Headers/Public/Quick/QuickConfiguration.h +++ /dev/null @@ -1 +0,0 @@ -../../../Quick/Quick/Configuration/QuickConfiguration.h \ No newline at end of file diff --git a/Pods/Headers/Public/Quick/QuickSpec.h b/Pods/Headers/Public/Quick/QuickSpec.h deleted file mode 120000 index 50bd82e..0000000 --- a/Pods/Headers/Public/Quick/QuickSpec.h +++ /dev/null @@ -1 +0,0 @@ -../../../Quick/Quick/QuickSpec.h \ No newline at end of file diff --git a/Pods/Local Podspecs/Quick.podspec.json b/Pods/Local Podspecs/Quick.podspec.json deleted file mode 100644 index 47ad889..0000000 --- a/Pods/Local Podspecs/Quick.podspec.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "Quick", - "version": "0.2.2", - "summary": "The Swift (and Objective-C) testing framework.", - "description": " Quick is a behavior-driven development framework for Swift and Objective-C. Inspired by RSpec, Specta, and Ginkgo.\n", - "homepage": "https://github.com/Quick/Quick", - "license": { - "type": "Apache 2.0", - "file": "LICENSE" - }, - "authors": "Quick Contributors", - "platforms": { - "ios": "8.0", - "osx": "10.10" - }, - "source": { - "git": "https://github.com/Quick/Quick.git", - "tag": "v0.2.2" - }, - "source_files": [ - "Quick", - "Quick/**/*.{swift,h,m}" - ], - "frameworks": "XCTest", - "requires_arc": true -} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index a228755..a2ae8a6 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -1,29 +1,10 @@ PODS: - - Nimble (0.3.0) - - Quick (0.2.2) + - Nimble (0.4.2) DEPENDENCIES: - - Nimble (from `https://github.com/Quick/Nimble.git`, commit `9538a301d5320fd607f01c931dc282868b0e827a`) - - Quick (from `https://github.com/Quick/Quick.git`, commit `f8c9ff9f499fc5ea72ff55c1c5eed32e1ff303ea`) - -EXTERNAL SOURCES: - Nimble: - :commit: 9538a301d5320fd607f01c931dc282868b0e827a - :git: https://github.com/Quick/Nimble.git - Quick: - :commit: f8c9ff9f499fc5ea72ff55c1c5eed32e1ff303ea - :git: https://github.com/Quick/Quick.git - -CHECKOUT OPTIONS: - Nimble: - :commit: 9538a301d5320fd607f01c931dc282868b0e827a - :git: https://github.com/Quick/Nimble.git - Quick: - :commit: f8c9ff9f499fc5ea72ff55c1c5eed32e1ff303ea - :git: https://github.com/Quick/Quick.git + - Nimble SPEC CHECKSUMS: - Nimble: 55fef248ef3703024ce431db817160ad24d89ba3 - Quick: 1bda8b4c8d43f6b4dd69ca001918b1767b3c9c93 + Nimble: 49b7a7da8919f42823d37c6d68cc6d15a7009f32 -COCOAPODS: 0.36.0 +COCOAPODS: 0.37.1 diff --git a/Pods/Nimble/Nimble/Adapters/AdapterProtocols.swift b/Pods/Nimble/Nimble/Adapters/AdapterProtocols.swift index 73569d8..6fdea6e 100644 --- a/Pods/Nimble/Nimble/Adapters/AdapterProtocols.swift +++ b/Pods/Nimble/Nimble/Adapters/AdapterProtocols.swift @@ -9,5 +9,4 @@ public protocol AssertionHandler { /// Defaults to a private test handler that passes through to XCTest. /// /// @see AssertionHandler -var CurrentAssertionHandler: AssertionHandler = XCTestHandler() - +public var NimbleAssertionHandler: AssertionHandler = NimbleXCTestHandler() diff --git a/Pods/Nimble/Nimble/Adapters/AssertionRecorder.swift b/Pods/Nimble/Nimble/Adapters/AssertionRecorder.swift index 1e79314..3e7dcbe 100644 --- a/Pods/Nimble/Nimble/Adapters/AssertionRecorder.swift +++ b/Pods/Nimble/Nimble/Adapters/AssertionRecorder.swift @@ -40,11 +40,11 @@ public class AssertionRecorder : AssertionHandler { /// /// @see AssertionHandler public func withAssertionHandler(tempAssertionHandler: AssertionHandler, closure: () -> Void) { - let oldRecorder = CurrentAssertionHandler + let oldRecorder = NimbleAssertionHandler let capturer = NMBExceptionCapture(handler: nil, finally: ({ - CurrentAssertionHandler = oldRecorder + NimbleAssertionHandler = oldRecorder })) - CurrentAssertionHandler = tempAssertionHandler + NimbleAssertionHandler = tempAssertionHandler capturer.tryBlock { closure() } diff --git a/Pods/Nimble/Nimble/Adapters/NimbleXCTestHandler.swift b/Pods/Nimble/Nimble/Adapters/NimbleXCTestHandler.swift new file mode 100644 index 0000000..76f8ee1 --- /dev/null +++ b/Pods/Nimble/Nimble/Adapters/NimbleXCTestHandler.swift @@ -0,0 +1,12 @@ +import Foundation +import XCTest + +/// Default handler for Nimble. This assertion handler passes failures along to +/// XCTest. +public class NimbleXCTestHandler : AssertionHandler { + public func assert(assertion: Bool, message: String, location: SourceLocation) { + if !assertion { + XCTFail(message, file: location.file, line: location.line) + } + } +} diff --git a/Pods/Nimble/Nimble/Adapters/XCTestHandler.swift b/Pods/Nimble/Nimble/Adapters/XCTestHandler.swift deleted file mode 100644 index aff2559..0000000 --- a/Pods/Nimble/Nimble/Adapters/XCTestHandler.swift +++ /dev/null @@ -1,10 +0,0 @@ -import Foundation -import XCTest - -class XCTestHandler : AssertionHandler { - func assert(assertion: Bool, message: String, location: SourceLocation) { - if !assertion { - XCTFail(message, file: location.file, line: location.line) - } - } -} diff --git a/Pods/Nimble/Nimble/DSL+Wait.swift b/Pods/Nimble/Nimble/DSL+Wait.swift index f4298f1..b939482 100644 --- a/Pods/Nimble/Nimble/DSL+Wait.swift +++ b/Pods/Nimble/Nimble/DSL+Wait.swift @@ -4,7 +4,7 @@ import Foundation /// bridges to Objective-C via the @objc keyword. This class encapsulates callback-style /// asynchronous waiting logic so that it may be called from Objective-C and Swift. @objc public class NMBWait { - public class func until(#timeout: NSTimeInterval, action: (() -> Void) -> Void, file: String = __FILE__, line: UInt = __LINE__) -> Void { + public class func until(#timeout: NSTimeInterval, file: String = __FILE__, line: UInt = __LINE__, action: (() -> Void) -> Void) -> Void { var completed = false var token: dispatch_once_t = 0 let result = pollBlock(pollInterval: 0.01, timeoutInterval: timeout) { @@ -23,21 +23,21 @@ import Foundation } } - public class func until(action: (() -> Void) -> Void, file: String = __FILE__, line: UInt = __LINE__) -> Void { - until(timeout: 1, action: action, file: file, line: line) + public class func until(file: String = __FILE__, line: UInt = __LINE__, action: (() -> Void) -> Void) -> Void { + until(timeout: 1, file: file, line: line, action: action) } } /// Wait asynchronously until the done closure is called. /// /// This will advance the run loop. -public func waitUntil(#timeout: NSTimeInterval, action: (() -> Void) -> Void, file: String = __FILE__, line: UInt = __LINE__) -> Void { - NMBWait.until(timeout: timeout, action: action, file: file, line: line) +public func waitUntil(#timeout: NSTimeInterval, file: String = __FILE__, line: UInt = __LINE__, action: (() -> Void) -> Void) -> Void { + NMBWait.until(timeout: timeout, file: file, line: line, action: action) } /// Wait asynchronously until the done closure is called. /// /// This will advance the run loop. -public func waitUntil(action: (() -> Void) -> Void, file: String = __FILE__, line: UInt = __LINE__) -> Void { - NMBWait.until(action, file: file, line: line) +public func waitUntil(file: String = __FILE__, line: UInt = __LINE__, action: (() -> Void) -> Void) -> Void { + NMBWait.until(file: file, line: line, action: action) } \ No newline at end of file diff --git a/Pods/Nimble/Nimble/DSL.swift b/Pods/Nimble/Nimble/DSL.swift index 2989c0e..faa7e73 100644 --- a/Pods/Nimble/Nimble/DSL.swift +++ b/Pods/Nimble/Nimble/DSL.swift @@ -1,9 +1,10 @@ /// Make an expectation on a given actual value. The value given is lazily evaluated. -public func expect(expression: @autoclosure () -> T?, file: String = __FILE__, line: UInt = __LINE__) -> Expectation { +public func expect(@autoclosure(escaping) expression: () -> T?, file: String = __FILE__, line: UInt = __LINE__) -> Expectation { return Expectation( expression: Expression( expression: expression, - location: SourceLocation(file: file, line: line))) + location: SourceLocation(file: file, line: line), + isClosure: true)) } /// Make an expectation on a given actual value. The closure is lazily invoked. @@ -11,12 +12,13 @@ public func expect(file: String = __FILE__, line: UInt = __LINE__, expression return Expectation( expression: Expression( expression: expression, - location: SourceLocation(file: file, line: line))) + location: SourceLocation(file: file, line: line), + isClosure: true)) } /// Always fails the test with a message and a specified location. public func fail(message: String, #location: SourceLocation) { - CurrentAssertionHandler.assert(false, message: message, location: location) + NimbleAssertionHandler.assert(false, message: message, location: location) } /// Always fails the test with a message. diff --git a/Pods/Nimble/Nimble/Expectation.swift b/Pods/Nimble/Nimble/Expectation.swift index 3f7919d..47224b6 100644 --- a/Pods/Nimble/Nimble/Expectation.swift +++ b/Pods/Nimble/Nimble/Expectation.swift @@ -4,7 +4,7 @@ public struct Expectation { let expression: Expression public func verify(pass: Bool, _ message: String) { - CurrentAssertionHandler.assert(pass, message: message, location: expression.location) + NimbleAssertionHandler.assert(pass, message: message, location: expression.location) } public func to(matcher: U) { diff --git a/Pods/Nimble/Nimble/Expression.swift b/Pods/Nimble/Nimble/Expression.swift index 7fc0b90..dad1a03 100644 --- a/Pods/Nimble/Nimble/Expression.swift +++ b/Pods/Nimble/Nimble/Expression.swift @@ -16,21 +16,24 @@ public struct Expression { internal let _expression: (Bool) -> T? internal let _withoutCaching: Bool public let location: SourceLocation + public let isClosure: Bool - public init(expression: () -> T?, location: SourceLocation) { + public init(expression: () -> T?, location: SourceLocation, isClosure: Bool = false) { self._expression = memoizedClosure(expression) self.location = location self._withoutCaching = false + self.isClosure = isClosure } - public init(memoizedExpression: (Bool) -> T?, location: SourceLocation, withoutCaching: Bool) { + public init(memoizedExpression: (Bool) -> T?, location: SourceLocation, withoutCaching: Bool, isClosure: Bool = false) { self._expression = memoizedExpression self.location = location self._withoutCaching = withoutCaching + self.isClosure = isClosure } public func cast(block: (T?) -> U?) -> Expression { - return Expression(expression: ({ block(self.evaluate()) }), location: self.location) + return Expression(expression: ({ block(self.evaluate()) }), location: self.location, isClosure: self.isClosure) } public func evaluate() -> T? { @@ -38,6 +41,6 @@ public struct Expression { } public func withoutCaching() -> Expression { - return Expression(memoizedExpression: self._expression, location: location, withoutCaching: true) + return Expression(memoizedExpression: self._expression, location: location, withoutCaching: true, isClosure: isClosure) } } diff --git a/Pods/Nimble/Nimble/FailureMessage.swift b/Pods/Nimble/Nimble/FailureMessage.swift index 6312122..4faa50c 100644 --- a/Pods/Nimble/Nimble/FailureMessage.swift +++ b/Pods/Nimble/Nimble/FailureMessage.swift @@ -16,7 +16,7 @@ public class FailureMessage { if let actualValue = actualValue { value = "\(expected) \(to) \(postfixMessage), got \(actualValue)\(postfixActual)" } - var lines: [String] = (value as NSString).componentsSeparatedByString("\n") as [String] + var lines: [String] = (value as NSString).componentsSeparatedByString("\n") as! [String] let whitespace = NSCharacterSet.whitespaceAndNewlineCharacterSet() lines = lines.map { line in line.stringByTrimmingCharactersInSet(whitespace) } return "".join(lines) diff --git a/Pods/Nimble/Nimble/Matchers/AllPass.swift b/Pods/Nimble/Nimble/Matchers/AllPass.swift new file mode 100644 index 0000000..5353faf --- /dev/null +++ b/Pods/Nimble/Nimble/Matchers/AllPass.swift @@ -0,0 +1,99 @@ +import Foundation + +public func allPass + (passFunc: (T?) -> Bool) -> NonNilMatcherFunc { + return allPass("pass a condition", passFunc) +} + +public func allPass + (passName:String, passFunc: (T?) -> Bool) -> NonNilMatcherFunc { + return createAllPassMatcher() { + expression, failureMessage in + failureMessage.postfixMessage = passName + return passFunc(expression.evaluate()) + } +} + +public func allPass + (matcher: V) -> NonNilMatcherFunc { + let wrapper = NonNilMatcherWrapper(NonNilBasicMatcherWrapper(matcher)) + return createAllPassMatcher() {wrapper.matches($0, failureMessage: $1)} +} + +public func allPass + (matcher: V) -> NonNilMatcherFunc { + let wrapper = BasicMatcherWrapper(matcher: matcher) + return createAllPassMatcher() {wrapper.matches($0, failureMessage: $1)} +} + +public func allPass + (matcher: V) -> NonNilMatcherFunc { + return createAllPassMatcher() {matcher.matches($0, failureMessage: $1)} +} + +private func createAllPassMatcher + (elementEvaluator:(Expression, FailureMessage) -> Bool) -> NonNilMatcherFunc { + return NonNilMatcherFunc { actualExpression, failureMessage in + failureMessage.actualValue = nil + if let actualValue = actualExpression.evaluate() { + for currentElement in actualValue { + let exp = Expression( + expression: {currentElement}, location: actualExpression.location) + if !elementEvaluator(exp, failureMessage) { + failureMessage.postfixMessage = + "all \(failureMessage.postfixMessage)," + + " but failed first at element <\(stringify(currentElement))>" + + " in <\(stringify(actualValue))>" + return false + } + } + failureMessage.postfixMessage = "all \(failureMessage.postfixMessage)" + } else { + failureMessage.postfixMessage = "all pass (use beNil() to match nils)" + return false + } + + return true + } +} + +extension NMBObjCMatcher { + public class func allPassMatcher(matcher: NMBObjCMatcher) -> NMBObjCMatcher { + return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage, location in + let actualValue = actualExpression.evaluate() + var nsObjects = [NSObject]() + + var collectionIsUsable = true + if let value = actualValue as? NSFastEnumeration { + let generator = NSFastGenerator(value) + while let obj:AnyObject = generator.next() { + if let nsObject = obj as? NSObject { + nsObjects.append(nsObject) + } else { + collectionIsUsable = false + break + } + } + } else { + collectionIsUsable = false + } + + if !collectionIsUsable { + failureMessage.postfixMessage = + "allPass only works with NSFastEnumeration (NSArray, NSSet, ...) of NSObjects" + failureMessage.expected = "" + failureMessage.to = "" + return false + } + + let expr = Expression(expression: ({ nsObjects }), location: location) + let elementEvaluator: (Expression, FailureMessage) -> Bool = { + expression, failureMessage in + return matcher.matches( + {expression.evaluate()}, failureMessage: failureMessage, location: expr.location) + } + return createAllPassMatcher(elementEvaluator).matches( + expr, failureMessage: failureMessage) + } + } +} diff --git a/Pods/Nimble/Nimble/Matchers/BeGreaterThan.swift b/Pods/Nimble/Nimble/Matchers/BeGreaterThan.swift index bf5e006..8668d2c 100644 --- a/Pods/Nimble/Nimble/Matchers/BeGreaterThan.swift +++ b/Pods/Nimble/Nimble/Matchers/BeGreaterThan.swift @@ -30,7 +30,7 @@ public func >(lhs: Expectation, rhs: NMBComparable?) { extension NMBObjCMatcher { public class func beGreaterThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage, location in - let expr = actualExpression.cast { $0 as NMBComparable? } + let expr = actualExpression.cast { $0 as? NMBComparable } return beGreaterThan(expected).matches(expr, failureMessage: failureMessage) } } diff --git a/Pods/Nimble/Nimble/Matchers/BeGreaterThanOrEqualTo.swift b/Pods/Nimble/Nimble/Matchers/BeGreaterThanOrEqualTo.swift index f746e03..fd99f29 100644 --- a/Pods/Nimble/Nimble/Matchers/BeGreaterThanOrEqualTo.swift +++ b/Pods/Nimble/Nimble/Matchers/BeGreaterThanOrEqualTo.swift @@ -32,7 +32,7 @@ public func >=(lhs: Expectation, rhs: T) { extension NMBObjCMatcher { public class func beGreaterThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage, location in - let expr = actualExpression.cast { $0 as NMBComparable? } + let expr = actualExpression.cast { $0 as? NMBComparable } return beGreaterThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage) } } diff --git a/Pods/Nimble/Nimble/Matchers/BeLessThan.swift b/Pods/Nimble/Nimble/Matchers/BeLessThan.swift index 3807ef8..b20a0f8 100644 --- a/Pods/Nimble/Nimble/Matchers/BeLessThan.swift +++ b/Pods/Nimble/Nimble/Matchers/BeLessThan.swift @@ -29,7 +29,7 @@ public func <(lhs: Expectation, rhs: NMBComparable?) { extension NMBObjCMatcher { public class func beLessThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage, location in - let expr = actualExpression.cast { $0 as NMBComparable? } + let expr = actualExpression.cast { $0 as! NMBComparable? } return beLessThan(expected).matches(expr, failureMessage: failureMessage) } } diff --git a/Pods/Nimble/Nimble/Matchers/BeginWith.swift b/Pods/Nimble/Nimble/Matchers/BeginWith.swift index 71c6058..47d7071 100644 --- a/Pods/Nimble/Nimble/Matchers/BeginWith.swift +++ b/Pods/Nimble/Nimble/Matchers/BeginWith.swift @@ -43,7 +43,7 @@ extension NMBObjCMatcher { let actual = actualExpression.evaluate() if let actualString = actual as? String { let expr = actualExpression.cast { $0 as? String } - return beginWith(expected as String).matches(expr, failureMessage: failureMessage) + return beginWith(expected as! String).matches(expr, failureMessage: failureMessage) } else { let expr = actualExpression.cast { $0 as? NMBOrderedCollection } return beginWith(expected).matches(expr, failureMessage: failureMessage) diff --git a/Pods/Nimble/Nimble/Matchers/Contain.swift b/Pods/Nimble/Nimble/Matchers/Contain.swift index aa1be43..50e4082 100644 --- a/Pods/Nimble/Nimble/Matchers/Contain.swift +++ b/Pods/Nimble/Nimble/Matchers/Contain.swift @@ -28,6 +28,19 @@ public func contain(substrings: String...) -> NonNilMatcherFunc { } } +/// A Nimble matcher that succeeds when the actual string contains the expected substring. +public func contain(substrings: NSString...) -> NonNilMatcherFunc { + return NonNilMatcherFunc { actualExpression, failureMessage in + failureMessage.postfixMessage = "contain <\(arrayAsString(substrings))>" + if let actual = actualExpression.evaluate() { + return all(substrings) { + return actual.containsString($0.description) + } + } + return false + } +} + /// A Nimble matcher that succeeds when the actual collection contains the expected object. public func contain(items: AnyObject?...) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in @@ -48,7 +61,7 @@ extension NMBObjCMatcher { return contain(expected).matches(expr, failureMessage: failureMessage) } else if let value = actualValue as? NSString { let expr = Expression(expression: ({ value as String }), location: location) - return contain(expected as String).matches(expr, failureMessage: failureMessage) + return contain(expected as! String).matches(expr, failureMessage: failureMessage) } else if actualValue != nil { failureMessage.postfixMessage = "contain <\(stringify(expected))> (only works for NSArrays, NSSets, NSHashTables, and NSStrings)" } else { diff --git a/Pods/Nimble/Nimble/Matchers/EndWith.swift b/Pods/Nimble/Nimble/Matchers/EndWith.swift index 7797b48..1dfd4aa 100644 --- a/Pods/Nimble/Nimble/Matchers/EndWith.swift +++ b/Pods/Nimble/Nimble/Matchers/EndWith.swift @@ -53,7 +53,7 @@ extension NMBObjCMatcher { let actual = actualExpression.evaluate() if let actualString = actual as? String { let expr = Expression(expression: ({ actualString }), location: location) - return endWith(expected as String).matches(expr, failureMessage: failureMessage) + return endWith(expected as! String).matches(expr, failureMessage: failureMessage) } else { let expr = Expression(expression: ({ actual as? NMBOrderedCollection }), location: location) return endWith(expected).matches(expr, failureMessage: failureMessage) diff --git a/Pods/Nimble/Nimble/Matchers/Equal.swift b/Pods/Nimble/Nimble/Matchers/Equal.swift index e3a3886..afcb7ec 100644 --- a/Pods/Nimble/Nimble/Matchers/Equal.swift +++ b/Pods/Nimble/Nimble/Matchers/Equal.swift @@ -50,6 +50,52 @@ public func equal(expectedValue: [T]?) -> NonNilMatcherFunc<[T]> { } } +/// A Nimble matcher that succeeds when the actual set is equal to the expected set. +public func equal(expectedValue: Set?) -> NonNilMatcherFunc> { + return equal(expectedValue, stringify: stringify) +} + +/// A Nimble matcher that succeeds when the actual set is equal to the expected set. +public func equal(expectedValue: Set?) -> NonNilMatcherFunc> { + return equal(expectedValue, stringify: { + if let set = $0 { + return stringify(Array(set).sorted { $0 < $1 }) + } else { + return "nil" + } + }) +} + +private func equal(expectedValue: Set?, #stringify: Set? -> String) -> NonNilMatcherFunc> { + return NonNilMatcherFunc { actualExpression, failureMessage in + failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" + + if let expectedValue = expectedValue { + if let actualValue = actualExpression.evaluate() { + failureMessage.actualValue = "<\(stringify(actualValue))>" + + if expectedValue == actualValue { + return true + } + + let missing = expectedValue.subtract(actualValue) + if missing.count > 0 { + failureMessage.postfixActual += ", missing <\(stringify(missing))>" + } + + let extra = actualValue.subtract(expectedValue) + if extra.count > 0 { + failureMessage.postfixActual += ", extra <\(stringify(extra))>" + } + } + } else { + failureMessage.postfixActual = " (use beNil() to match nils)" + } + + return false + } +} + public func ==(lhs: Expectation, rhs: T?) { lhs.to(equal(rhs)) } @@ -66,6 +112,22 @@ public func !=(lhs: Expectation<[T]>, rhs: [T]?) { lhs.toNot(equal(rhs)) } +public func ==(lhs: Expectation>, rhs: Set?) { + lhs.to(equal(rhs)) +} + +public func !=(lhs: Expectation>, rhs: Set?) { + lhs.toNot(equal(rhs)) +} + +public func ==(lhs: Expectation>, rhs: Set?) { + lhs.to(equal(rhs)) +} + +public func !=(lhs: Expectation>, rhs: Set?) { + lhs.toNot(equal(rhs)) +} + public func ==(lhs: Expectation<[T: C]>, rhs: [T: C]?) { lhs.to(equal(rhs)) } diff --git a/Pods/Nimble/Nimble/Matchers/Match.swift b/Pods/Nimble/Nimble/Matchers/Match.swift index 85dd98f..f954a0a 100644 --- a/Pods/Nimble/Nimble/Matchers/Match.swift +++ b/Pods/Nimble/Nimble/Matchers/Match.swift @@ -20,7 +20,7 @@ extension NMBObjCMatcher { public class func matchMatcher(expected: NSString) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage, location in let actual = actualExpression.cast { $0 as? String } - return match(expected).matches(actual, failureMessage: failureMessage) + return match(expected.description).matches(actual, failureMessage: failureMessage) } } } diff --git a/Pods/Nimble/Nimble/Matchers/MatcherProtocols.swift b/Pods/Nimble/Nimble/Matchers/MatcherProtocols.swift index 035f185..687bd2e 100644 --- a/Pods/Nimble/Nimble/Matchers/MatcherProtocols.swift +++ b/Pods/Nimble/Nimble/Matchers/MatcherProtocols.swift @@ -82,11 +82,11 @@ extension NSDecimalNumber : NMBDoubleConvertible { } // TODO: not the best to do } extension NSNumber : NMBComparable { public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult { - return compare(otherObject as NSNumber) + return compare(otherObject as! NSNumber) } } extension NSString : NMBComparable { public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult { - return compare(otherObject as NSString) + return compare(otherObject as! String) } } diff --git a/Pods/Nimble/Nimble/Matchers/RaisesException.swift b/Pods/Nimble/Nimble/Matchers/RaisesException.swift index fdb0518..be764cd 100644 --- a/Pods/Nimble/Nimble/Matchers/RaisesException.swift +++ b/Pods/Nimble/Nimble/Matchers/RaisesException.swift @@ -1,81 +1,185 @@ import Foundation -internal func raiseExceptionMatcher(message: String, matches: (NSException?) -> Bool) -> MatcherFunc { +internal struct RaiseExceptionMatchResult { + var success: Bool + var nameFailureMessage: FailureMessage? + var reasonFailureMessage: FailureMessage? + var userInfoFailureMessage: FailureMessage? +} + +internal func raiseExceptionMatcher(matches: (NSException?, SourceLocation) -> RaiseExceptionMatchResult) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in failureMessage.actualValue = nil - failureMessage.postfixMessage = message - // It would be better if this was part of Expression, but - // Swift compiler crashes when expect() is inside a closure. var exception: NSException? - var result: T? var capture = NMBExceptionCapture(handler: ({ e in exception = e - }), finally: nil) + }), finally: nil) capture.tryBlock { actualExpression.evaluate() return } - return matches(exception) + + let result = matches(exception, actualExpression.location) + + failureMessage.postfixMessage = "raise exception" + + if let nameFailureMessage = result.nameFailureMessage { + failureMessage.postfixMessage += " with name \(nameFailureMessage.postfixMessage)" + } + if let reasonFailureMessage = result.reasonFailureMessage { + failureMessage.postfixMessage += " with reason \(reasonFailureMessage.postfixMessage)" + } + if let userInfoFailureMessage = result.userInfoFailureMessage { + failureMessage.postfixMessage += " with userInfo \(userInfoFailureMessage.postfixMessage)" + } + if result.nameFailureMessage == nil && result.reasonFailureMessage == nil + && result.userInfoFailureMessage == nil { + failureMessage.postfixMessage = "raise any exception" + } + + return result.success } + +} + +// A Nimble matcher that succeeds when the actual expression raises an exception, which name, +// reason and userInfo match successfully with the provided matchers +public func raiseException( + named: NonNilMatcherFunc? = nil, + reason: NonNilMatcherFunc? = nil, + userInfo: NonNilMatcherFunc? = nil) -> MatcherFunc { + return raiseExceptionMatcher() { exception, location in + + var matches = exception != nil + + var nameFailureMessage: FailureMessage? + if let nameMatcher = named { + let wrapper = NonNilMatcherWrapper(NonNilBasicMatcherWrapper(nameMatcher)) + nameFailureMessage = FailureMessage() + matches = wrapper.matches( + Expression(expression: { exception?.name }, + location: location, + isClosure: false), + failureMessage: nameFailureMessage!) && matches + } + + var reasonFailureMessage: FailureMessage? + if let reasonMatcher = reason { + let wrapper = NonNilMatcherWrapper(NonNilBasicMatcherWrapper(reasonMatcher)) + reasonFailureMessage = FailureMessage() + matches = wrapper.matches( + Expression(expression: { exception?.reason }, + location: location, + isClosure: false), + failureMessage: reasonFailureMessage!) && matches + } + + var userInfoFailureMessage: FailureMessage? + if let userInfoMatcher = userInfo { + let wrapper = NonNilMatcherWrapper(NonNilBasicMatcherWrapper(userInfoMatcher)) + userInfoFailureMessage = FailureMessage() + matches = wrapper.matches( + Expression(expression: { exception?.userInfo }, + location: location, + isClosure: false), + failureMessage: userInfoFailureMessage!) && matches + } + + return RaiseExceptionMatchResult( + success: matches, + nameFailureMessage: nameFailureMessage, + reasonFailureMessage: reasonFailureMessage, + userInfoFailureMessage: userInfoFailureMessage) + } } /// A Nimble matcher that succeeds when the actual expression raises an exception with /// the specified name, reason, and userInfo. public func raiseException(#named: String, #reason: String, #userInfo: NSDictionary) -> MatcherFunc { - return raiseExceptionMatcher("raise exception named <\(named)> with reason <\(reason)> and userInfo <\(userInfo)>") { - exception in - return exception?.name == named - && exception?.reason == reason - && exception?.userInfo == userInfo - } + return raiseException(named: equal(named), reason: equal(reason), userInfo: equal(userInfo)) } /// A Nimble matcher that succeeds when the actual expression raises an exception with /// the specified name and reason. public func raiseException(#named: String, #reason: String) -> MatcherFunc { - return raiseExceptionMatcher("raise exception named <\(named)> with reason <\(reason)>") { - exception in return exception?.name == named && exception?.reason == reason - } + return raiseException(named: equal(named), reason: equal(reason)) } /// A Nimble matcher that succeeds when the actual expression raises an exception with /// the specified name. public func raiseException(#named: String) -> MatcherFunc { - return raiseExceptionMatcher("raise exception named <\(named)>") { - exception in return exception?.name == named - } -} - -/// A Nimble matcher that succeeds when the actual expression raises any exception. -/// Please use a more specific raiseException() matcher when possible. -public func raiseException() -> MatcherFunc { - return raiseExceptionMatcher("raise any exception") { - exception in return exception != nil - } + return raiseException(named: equal(named)) } @objc public class NMBObjCRaiseExceptionMatcher : NMBMatcher { var _name: String? var _reason: String? var _userInfo: NSDictionary? + var _nameMatcher: NMBMatcher? + var _reasonMatcher: NMBMatcher? + var _userInfoMatcher: NMBMatcher? + init(name: String?, reason: String?, userInfo: NSDictionary?) { _name = name _reason = reason _userInfo = userInfo } + init(nameMatcher: NMBMatcher?, reasonMatcher: NMBMatcher?, userInfoMatcher: NMBMatcher?) { + _nameMatcher = nameMatcher + _reasonMatcher = reasonMatcher + _userInfoMatcher = userInfoMatcher + } + public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { let block: () -> Any? = ({ actualBlock(); return nil }) let expr = Expression(expression: block, location: location) - if _name != nil && _reason != nil && _userInfo != nil { - return raiseException(named: _name!, reason: _reason!, userInfo: _userInfo!).matches(expr, failureMessage: failureMessage) - } else if _name != nil && _reason != nil { - return raiseException(named: _name!, reason: _reason!).matches(expr, failureMessage: failureMessage) - } else if _name != nil { - return raiseException(named: _name!).matches(expr, failureMessage: failureMessage) + if _nameMatcher != nil || _reasonMatcher != nil || _userInfoMatcher != nil { + return raiseExceptionMatcher() { + exception, location in + + var matches = exception != nil + + var nameFailureMessage: FailureMessage? + if let nameMatcher = self._nameMatcher { + nameFailureMessage = FailureMessage() + matches = nameMatcher.matches({ exception?.name }, + failureMessage: nameFailureMessage!, + location: location) && matches + } + + var reasonFailureMessage: FailureMessage? + if let reasonMatcher = self._reasonMatcher { + reasonFailureMessage = FailureMessage() + matches = reasonMatcher.matches({ exception?.reason }, + failureMessage: reasonFailureMessage!, + location: location) && matches + } + + var userInfoFailureMessage: FailureMessage? + if let userInfoMatcher = self._userInfoMatcher { + userInfoFailureMessage = FailureMessage() + matches = userInfoMatcher.matches({ exception?.userInfo }, + failureMessage: userInfoFailureMessage!, + location: location) && matches + } + + return RaiseExceptionMatchResult( + success: matches, + nameFailureMessage: nameFailureMessage, + reasonFailureMessage: reasonFailureMessage, + userInfoFailureMessage: userInfoFailureMessage) + + }.matches(expr, failureMessage: failureMessage) + } else if let name = _name, reason = _reason, userInfo = _userInfo { + return raiseException(named: name, reason: reason, userInfo: userInfo).matches(expr, failureMessage: failureMessage) + } else if let name = _name, reason = _reason { + return raiseException(named: name, reason: reason).matches(expr, failureMessage: failureMessage) + } else if let name = _name { + return raiseException(named: name).matches(expr, failureMessage: failureMessage) } else { return raiseException().matches(expr, failureMessage: failureMessage) } @@ -102,6 +206,27 @@ public func raiseException() -> MatcherFunc { return NMBObjCRaiseExceptionMatcher(name: self._name, reason: self._reason, userInfo: userInfo) }) } + + public var withName: (nameMatcher: NMBMatcher) -> NMBObjCRaiseExceptionMatcher { + return ({ nameMatcher in + return NMBObjCRaiseExceptionMatcher(nameMatcher: nameMatcher, + reasonMatcher: self._reasonMatcher, userInfoMatcher: self._userInfoMatcher) + }) + } + + public var withReason: (reasonMatcher: NMBMatcher) -> NMBObjCRaiseExceptionMatcher { + return ({ reasonMatcher in + return NMBObjCRaiseExceptionMatcher(nameMatcher: self._nameMatcher, + reasonMatcher: reasonMatcher, userInfoMatcher: self._userInfoMatcher) + }) + } + + public var withUserInfo: (userInfoMatcher: NMBMatcher) -> NMBObjCRaiseExceptionMatcher { + return ({ userInfoMatcher in + return NMBObjCRaiseExceptionMatcher(nameMatcher: self._nameMatcher, + reasonMatcher: self._reasonMatcher, userInfoMatcher: userInfoMatcher) + }) + } } extension NMBObjCMatcher { diff --git a/Pods/Nimble/Nimble/Utils/Stringers.swift b/Pods/Nimble/Nimble/Utils/Stringers.swift index a383912..c914a12 100644 --- a/Pods/Nimble/Nimble/Utils/Stringers.swift +++ b/Pods/Nimble/Nimble/Utils/Stringers.swift @@ -5,7 +5,7 @@ internal func identityAsString(value: AnyObject?) -> String { if value == nil { return "nil" } - return NSString(format: "<%p>", unsafeBitCast(value!, Int.self)) + return NSString(format: "<%p>", unsafeBitCast(value!, Int.self)).description } internal func arrayAsString(items: [T], joiner: String = ", ") -> String { @@ -41,8 +41,8 @@ extension NSArray : NMBStringer { } internal func stringify(value: T) -> String { - if value is Double { - return NSString(format: "%.4f", (value as Double)) + if let value = value as? Double { + return NSString(format: "%.4f", (value)).description } return toString(value) } diff --git a/Pods/Nimble/Nimble/Wrappers/AsyncMatcherWrapper.swift b/Pods/Nimble/Nimble/Wrappers/AsyncMatcherWrapper.swift index 3c7b422..b893196 100644 --- a/Pods/Nimble/Nimble/Wrappers/AsyncMatcherWrapper.swift +++ b/Pods/Nimble/Nimble/Wrappers/AsyncMatcherWrapper.swift @@ -2,8 +2,14 @@ import Foundation struct AsyncMatcherWrapper: Matcher { let fullMatcher: U - let timeoutInterval: NSTimeInterval = 1 - let pollInterval: NSTimeInterval = 0.01 + let timeoutInterval: NSTimeInterval + let pollInterval: NSTimeInterval + + init(fullMatcher: U, timeoutInterval: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01) { + self.fullMatcher = fullMatcher + self.timeoutInterval = timeoutInterval + self.pollInterval = pollInterval + } func matches(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { let uncachedExpression = actualExpression.withoutCaching() @@ -34,25 +40,36 @@ struct AsyncMatcherWrapper: Matcher { } } +private let toEventuallyRequiresClosureError = "expect(...).toEventually(...) requires an explicit closure (eg - expect { ... }.toEventually(...) )\nSwift 1.2 @autoclosure behavior has changed in an incompatible way for Nimble to function" + + extension Expectation { public func toEventually(matcher: U, timeout: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01) { - to(AsyncMatcherWrapper( - fullMatcher: FullMatcherWrapper( - matcher: matcher, - to: "to eventually", - toNot: "to eventually not"), - timeoutInterval: timeout, - pollInterval: pollInterval)) + if expression.isClosure { + to(AsyncMatcherWrapper( + fullMatcher: FullMatcherWrapper( + matcher: matcher, + to: "to eventually", + toNot: "to eventually not"), + timeoutInterval: timeout, + pollInterval: pollInterval)) + } else { + verify(false, toEventuallyRequiresClosureError) + } } public func toEventuallyNot(matcher: U, timeout: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01) { - toNot(AsyncMatcherWrapper( - fullMatcher: FullMatcherWrapper( - matcher: matcher, - to: "to eventually", - toNot: "to eventually not"), - timeoutInterval: timeout, - pollInterval: pollInterval)) + if expression.isClosure { + toNot(AsyncMatcherWrapper( + fullMatcher: FullMatcherWrapper( + matcher: matcher, + to: "to eventually", + toNot: "to eventually not"), + timeoutInterval: timeout, + pollInterval: pollInterval)) + } else { + verify(false, toEventuallyRequiresClosureError) + } } public func toEventually(matcher: U, timeout: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01) { diff --git a/Pods/Nimble/Nimble/objc/DSL.h b/Pods/Nimble/Nimble/objc/DSL.h index 9c64486..8186e1f 100644 --- a/Pods/Nimble/Nimble/objc/DSL.h +++ b/Pods/Nimble/Nimble/objc/DSL.h @@ -96,6 +96,10 @@ NIMBLE_EXPORT id NMB_match(id expectedValue); NIMBLE_SHORT(id match(id expectedValue), NMB_match(expectedValue)); +NIMBLE_EXPORT id NMB_allPass(id matcher); +NIMBLE_SHORT(id allPass(id matcher), + NMB_allPass(matcher)); + // In order to preserve breakpoint behavior despite using macros to fill in __FILE__ and __LINE__, // define a builder that populates __FILE__ and __LINE__, and returns a block that takes timeout // and action arguments. See https://github.com/Quick/Quick/pull/185 for details. diff --git a/Pods/Nimble/Nimble/objc/DSL.m b/Pods/Nimble/Nimble/objc/DSL.m index 20af61d..9a33271 100644 --- a/Pods/Nimble/Nimble/objc/DSL.m +++ b/Pods/Nimble/Nimble/objc/DSL.m @@ -84,18 +84,22 @@ NIMBLE_EXPORT id NMB_match(id expectedValue) { return [NMBObjCMatcher matchMatcher:expectedValue]; } +NIMBLE_EXPORT id NMB_allPass(id expectedValue) { + return [NMBObjCMatcher allPassMatcher:expectedValue]; +} + NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException() { return [NMBObjCMatcher raiseExceptionMatcher]; } NIMBLE_EXPORT NMBWaitUntilTimeoutBlock nmb_wait_until_timeout_builder(NSString *file, NSUInteger line) { return ^(NSTimeInterval timeout, void (^action)(void (^)(void))) { - [NMBWait untilTimeout:timeout action:action file:file line:line]; + [NMBWait untilTimeout:timeout file:file line:line action:action]; }; } NIMBLE_EXPORT NMBWaitUntilBlock nmb_wait_until_builder(NSString *file, NSUInteger line) { return ^(void (^action)(void (^)(void))) { - [NMBWait until:action file:file line:line]; + [NMBWait untilFile:file line:line action:action]; }; } diff --git a/Pods/Nimble/README.md b/Pods/Nimble/README.md index 83cf199..42014b1 100644 --- a/Pods/Nimble/README.md +++ b/Pods/Nimble/README.md @@ -1,6 +1,6 @@ # Nimble -[![Build Status](https://travis-ci.org/Quick/Nimble.svg?branch=master)](https://travis-ci.org/Quick/Nimble) +[![Build Status](https://travis-ci.org/Quick/Nimble.svg?branch=swift-1.1)](https://travis-ci.org/Quick/Nimble) Use Nimble to express the expected outcomes of Swift or Objective-C expressions. Inspired by @@ -40,6 +40,7 @@ expect(ocean.isClean).toEventually(beTruthy()) - [Exceptions](#exceptions) - [Collection Membership](#collection-membership) - [Strings](#strings) + - [Checking if all elements of a collection pass a condition](#checking-if-all-elements-of-a-collection-pass-a-condition) - [Writing Your Own Matchers](#writing-your-own-matchers) - [Lazy Evaluation](#lazy-evaluation) - [Type Checking via Swift Generics](#type-checking-via-swift-generics) @@ -177,14 +178,14 @@ let exception = NSException( name: NSInternalInconsistencyException, reason: "Not enough fish in the sea.", userInfo: ["something": "is fishy"]) -expect(exception.raise()).to(raiseException()) +expect { exception.raise() }.to(raiseException()) // Also, you can customize raiseException to be more specific -expect(exception.raise()).to(raiseException(named: NSInternalInconsistencyException)) -expect(exception.raise()).to(raiseException( +expect { exception.raise() }.to(raiseException(named: NSInternalInconsistencyException)) +expect { exception.raise() }.to(raiseException( named: NSInternalInconsistencyException, reason: "Not enough fish in the sea")) -expect(exception.raise()).to(raiseException( +expect { exception.raise() }.to(raiseException( named: NSInternalInconsistencyException, reason: "Not enough fish in the sea", userInfo: ["something": "is fishy"])) @@ -213,16 +214,6 @@ expectAction([exception raise]).to(raiseException(). userInfo(@{@"something": @"is fishy"})); ``` -In Swift, the `expect` function can also take a trailing closure: - -```swift -// Swift - -expect { - exception.raise() -}.to(raiseException(named: NSInternalInconsistencyException)) -``` - ## C Primitives Some testing frameworks make it hard to test primitive C values. @@ -639,6 +630,16 @@ expect(actual).to(raiseException(named: name)) // Passes if actual raises an exception with the given name and reason: expect(actual).to(raiseException(named: name, reason: reason)) + +// Passes if actual raises an exception with a name equal "a name" +expect(actual).to(raiseException(named: equal("a name"))) + +// Passes if actual raises an exception with a reason that begins with "a r" +expect(actual).to(raiseException(reason: beginWith("a r"))) + +// Passes if actual raises an exception with a name equal "a name" +// and a reason that begins with "a r" +expect(actual).to(raiseException(named: equal("a name"), reason: beginWith("a r"))) ``` ```objc @@ -646,13 +647,27 @@ expect(actual).to(raiseException(named: name, reason: reason)) // Passes if actual, when evaluated, raises an exception: expect(actual).to(raiseException()) + +// Passes if actual raises an exception with the given name +expect(actual).to(raiseException().named(name)) + +// Passes if actual raises an exception with the given name and reason: +expect(actual).to(raiseException().named(name).reason(reason)) + +// Passes if actual raises an exception with a name equal "a name" +expect(actual).to(raiseException().withName(equal("a name"))) + +// Passes if actual raises an exception with a reason that begins with "a r" +expect(actual).to(raiseException().withName(withReason(beginWith(@"a r"))) + +// Passes if actual raises an exception with a name equal "a name" +// and a reason that begins with "a r" +expect(actual).to(raiseException().withName(equal("a name")).withReason(beginWith(@"a r"))) ``` Note: Swift currently doesn't have exceptions. Only Objective-C code can raise exceptions that Nimble will catch. -> Sorry, [Nimble doesn't support matching on exception `name`, `reason`, or `userInfo` yet](https://github.com/Quick/Nimble/issues/26). - ## Collection Membership ```swift @@ -768,6 +783,29 @@ expect(actual).to(beEmpty()); expect(actual).to(match(expected)) ``` +## Checking if all elements of a collection pass a condition + +```swift +// Swift + +// with a custom function: +expect([1,2,3,4]).to(allPass({$0 < 5})) + +// with another matcher: +expect([1,2,3,4]).to(allPass(beLessThan(5))) +``` + +```objc +// Objective-C + +expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@5))); +``` + +For Swift the actual value has to be a SequenceType, e.g. an array, a set or a custom seqence type. + +For Objective-C the actual value has to be a NSFastEnumeration, e.g. NSArray and NSSet, of NSObjects and only the variant which +uses another matcher is available here. + # Writing Your Own Matchers In Nimble, matchers are Swift functions that take an expected @@ -807,9 +845,10 @@ also check out the tips below. ## Lazy Evaluation -`actualExpression` is a lazy, memoized closure around the value provided to -the `expect` function. In order to determine whether that value matches, -custom matchers should call `actualExpression.evalaute()`: +`actualExpression` is a lazy, memoized closure around the value provided to the +`expect` function. The expression can either be a closure or a value directly +passed to `expect(...)`. In order to determine whether that value matches, +custom matchers should call `actualExpression.evaluate()`: ```swift // Swift @@ -827,6 +866,9 @@ that returns a value. The value it returns, which is accessed via the `evaluate()` method, may be `nil`. If that value is `nil`, the `beNil` matcher function returns `true`, indicating that the expectation passed. +Use `expression.isClosure` to determine if the expression will be invoking +a closure to produce its value. + ## Type Checking via Swift Generics Using Swift's generics, matchers can constrain the type of the actual value @@ -971,8 +1013,9 @@ extension NMBObjCMatcher { Quick and Nimble, follow [the installation instructions in the Quick README](https://github.com/Quick/Quick#how-to-install-quick). -Nimble can currently be installed in one of two ways: using a pre-release -version of CocoaPods, or with git submodules. +Nimble can currently be installed in one of two ways: using CocoaPods, or with git submodules. The master branch of +Nimble supports Swift 1.2. For Swift 1.1 support, use the `swift-1.1` +branch. ## Installing Nimble as a Submodule @@ -980,7 +1023,7 @@ To use Nimble as a submodule to test your iOS or OS X applications, follow these 4 easy steps: 1. Clone the Nimble repository -2. Add Nimble.xcodeproj to your test target +2. Add Nimble.xcodeproj to the Xcode workspace for your project 3. Link Nimble.framework to your test target 4. Start writing expectations! @@ -991,9 +1034,8 @@ install just Nimble. ## Installing Nimble via CocoaPods -To use Nimble in CocoaPods to test your iOS or OS X applications, we'll need to -install 0.36 Beta 1 of CocoaPods. Do so using the command `[sudo] gem install cocoapods --pre`. -Then just add Nimble to your podfile. +To use Nimble in CocoaPods to test your iOS or OS X applications, update CocoaPods to Version 0.36.0. +Then add Nimble to your podfile and add the ```use_frameworks!``` line to enable Swift support for Cocoapods. ```ruby platform :ios, '8.0' @@ -1003,8 +1045,12 @@ source 'https://github.com/CocoaPods/Specs.git' # Whatever pods you need for your app go here target 'YOUR_APP_NAME_HERE_Tests', :exclusive => true do - pod 'Nimble' + use_frameworks! + # If you're using Swift 1.2 (Xcode 6.3 beta), use this: + pod 'Nimble', '~> 0.4.0' + # Otherwise, use this commented out line for Swift 1.1 (Xcode 6.2): + # pod 'Nimble', '~> 0.3.0' end ``` -Finally run `bundle exec pod install`. +Finally run `pod install`. diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 51ea354..ca6ef83 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,454 +7,343 @@ objects = { /* Begin PBXBuildFile section */ - 063E8FF4CDFCA6AE9064115D /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0532F94D7DEF51D97275BFBE /* Match.swift */; }; - 0C1C88128A14FB102A244FB2 /* Pods-cameraTests-Nimble-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 82048FF5F5EFF9305672C391 /* Pods-cameraTests-Nimble-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0DE457D3E7DBE1ACD5C3D501 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DF2111C551AF9DB8E1EF0D4 /* Functional.swift */; }; - 148835A4D3AFD1C2E5AD45B3 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402ACB04DB1A0D5DFD74F095 /* Expression.swift */; }; - 1DA17DDB55A971E2DCE64EC1 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EEF62B2DD8F00333107ABD5 /* Callsite.swift */; }; - 1E5F0C6E0DDCFCD7F013E317 /* Pods-cameraTests-Nimble-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2563F2959D17BA2558043577 /* Pods-cameraTests-Nimble-dummy.m */; }; - 2045ABFCB6047AAABAFD5951 /* NonNilMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA0C0BEF285D56CF99F9BAFF /* NonNilMatcherWrapper.swift */; }; - 215CFF9F5CAFD9259A55DAA8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD33B1DB349F34B4254F41C8 /* Stringers.swift */; }; - 24EC168BC53587C5BAA31DF8 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = D25C7D9460041796229179A6 /* DSL.swift */; }; - 2583C08B2B578208A1F3EF74 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 471D38845FE2712C8D24E2B2 /* BeLogical.swift */; }; - 29767E33FB320295213ED819 /* Pods-cameraTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F41DDB356DAEA5AE9D68F607 /* Pods-cameraTests-dummy.m */; }; - 2B03C1417FFA9C18A8AB1AA0 /* Pods-cameraTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 319B45E19AE5060F26A16C98 /* Pods-cameraTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2C78C1C5EE6B462D3F98C015 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F2F7037B987C74A3ED1EBFB /* BeGreaterThanOrEqualTo.swift */; }; - 2DD2E38C9E6579166798FEDF /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = B20D631CE4DCBF504E55A2AE /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 31F138AF892521818A7A24DB /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EC533250C6B34D3F73A8823 /* DSL+Wait.swift */; }; - 4285DB510E4C2975EC76AB63 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFFBC02BB9B8B3867FC27FD8 /* Foundation.framework */; }; - 44983BE29EC5942CA81CC746 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7E8C66E5FDC940E269FA8EE /* ExampleMetadata.swift */; }; - 4588F215C7B4D62EB6D25B65 /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B396785B7F6615196840BDF /* NSString+QCKSelectorName.m */; }; - 469FB027B28EA5637451BCDA /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = C198515AF8C48951047C3943 /* BeNil.swift */; }; - 47D9B38EC06F0C2D754B30E8 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2CED32A84A0D0848A31C737 /* BeEmpty.swift */; }; - 4C8ACE662BA5A7740E9837F7 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB89177296F437C09E320EBB /* AsyncMatcherWrapper.swift */; }; - 55DDF0B03E9424CFFC3AF509 /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 20E1F52A34452E4FA8C09B97 /* QuickSpec.m */; }; - 566FBD2A832342493B5E1248 /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB09B9D379670E585AC1A13F /* Closures.swift */; }; - 5C2D96298D8C523D2D26EB3D /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 60F89AACA3CF3565890BBE49 /* QuickConfiguration.m */; }; - 5CAF4ACE6BA1C7452395D6A9 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 162A7C8BEFEDFC011A49B88B /* XCTest.framework */; }; - 5DADA0D163D6F2AB97923636 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 505291DF2F3F7BAEC5C13A9A /* BeIdenticalTo.swift */; }; - 6E0F5AECCF6F03172F05E212 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = FE29350F14BE8900985973C3 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FBFFFC70B42C58008662472 /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D05A5AECA35165DB51FF23C /* ExampleHooks.swift */; }; - 805F293C8EBCB8B9DF9A72C3 /* Poll.swift in Sources */ = {isa = PBXBuildFile; fileRef = A38C289E43ECD26E8939591E /* Poll.swift */; }; - 83B6D03B51245190D8231710 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = C282D3D28C0BEC2EBC15A8DF /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8530A93B446712333274DC5C /* Pods-cameraTests-Quick-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D55D3DF99DE7681A2BF29E48 /* Pods-cameraTests-Quick-dummy.m */; }; - 88941222651EFD5099091A80 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8630A26F9BAB2A785161489 /* AdapterProtocols.swift */; }; - 89BA35CC59B06F790F4FB74B /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB281C3837A207CC43C4BC7D /* World.swift */; }; - 8F595832DC35B61579EE169E /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C3A8A501FDD021511871A68 /* BeLessThan.swift */; }; - 90A1E3E113A4854CDE879B7A /* ObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08D659BCCBEE7E6D07689459 /* ObjCMatcher.swift */; }; - 916B0B420F40CBBE80F1D53E /* Failure.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F975D83EBDA345C8FFF01E3 /* Failure.swift */; }; - 91B8BA9DB5971B966053E3C7 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CA3099BFB4185F0F9767377 /* MatcherFunc.swift */; }; - 969C23D06E4FA1F290FE3246 /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2389619E50745E53C4B52528 /* SuiteHooks.swift */; }; - 97D0996C4D453390EC72FB74 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFFBC02BB9B8B3867FC27FD8 /* Foundation.framework */; }; - 9A32003B9A5212D5DB5DD242 /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = DB8A4880FEBDC35E69C45749 /* NSString+QCKSelectorName.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A0855A9E298477B377CCED81 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C5228EE1BA2EEDDFE07798C /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A0CA0C07D5BC4D70CD1CFA7F /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 023EDA9E6B95AB5CEC4B4486 /* ExampleGroup.swift */; }; - A3A73AA2DE52892441B7C07B /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = B618EB76AF4D043BB1CB23D5 /* World+DSL.swift */; }; - A53A614EA359BE4BC5E7A76F /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 521FFDC3BB0D3ACFAFB152C5 /* SourceLocation.swift */; }; - AC5A06E42BB74303D071D511 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E6B9FF0BCC8962A6C65076A /* QCKDSL.m */; }; - B140E0F3305E9B616E69FE43 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15DD6B442275C14CAE3A1B66 /* Example.swift */; }; - B3AA544E38464E781C8CC293 /* FullMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10AAD1CDC0D3F5F3811E373F /* FullMatcherWrapper.swift */; }; - B456F2687494679DCC788F13 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D8EA6DCEF3F2E5E57BF215C /* BeAnInstanceOf.swift */; }; - B4B2AE2237712BD5C19B0118 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = A2E5E3720B0C95643A807292 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C4BFDF7E8990139CB496F329 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9518ECD232456850752F53A9 /* BeAKindOf.swift */; }; - C7C750539B66C4A25629C408 /* XCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CCDAA183DD8D7743EA56A62 /* XCTestHandler.swift */; }; - CEED31385D717D6650D6215B /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ED460346C47D3AFFC6090B8 /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0571DA54BC746097B7E24DD /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45B2BB9B92C8802E08894181 /* Contain.swift */; }; - D222320726C05BFAA57F4125 /* Pods-cameraTests-Quick-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 10D035D62A299B43E1A25EC5 /* Pods-cameraTests-Quick-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D24F4280730F62EBA770A466 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 162A7C8BEFEDFC011A49B88B /* XCTest.framework */; }; - D4F6891916948345C4F34CB3 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 101E03BF1A34E5E7AF543F36 /* BeLessThanOrEqual.swift */; }; - DAC661C91F943606AAA50D08 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D1A8FF83A07B9D8E0829FF /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE797E73B09B1BC1949905F /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAE50AB5F905197F46BD849C /* Equal.swift */; }; - DD4A57F896D7155C9288D542 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 317BE5243B6AF2E8548397AA /* Configuration.swift */; }; - DEE1E683E8D1993467BD5A04 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 950BF84666ADF1BEDBD288E4 /* BeGreaterThan.swift */; }; - DF251E97102A9CA07892ADD9 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28C1AD18150646E02B4BA2B8 /* EndWith.swift */; }; - E5405948B5668C7744B2B500 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2998B2ADD9C42625B07F3AFF /* RaisesException.swift */; }; - E6B6A48E6BECCE0DFD34E181 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17C2C0AF2677DB9CAC6E081C /* MatcherProtocols.swift */; }; - E6D1ADBA50F5D37ED62DF0D0 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC12C064DC64767DF335152E /* Filter.swift */; }; - E92D205A4BFDC48A341C5303 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = CC8571A8C022144BCE3CA10A /* NMBExceptionCapture.m */; }; - E9FB65406B698DDAA6049113 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E16B6CB02D5174AFB2978EE /* BeginWith.swift */; }; - EA787861C31E6CF172E606A1 /* BasicMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15F79813906738A2BD6AA38B /* BasicMatcherWrapper.swift */; }; - ED6EE4512210821BD4A7CCE5 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 927BE526BA3C7C60EC6D1167 /* Expectation.swift */; }; - EEB52C99E3DBDD83F1358174 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = D826AAF28238AA855ABA32D0 /* DSL.swift */; }; - EEB7CEB54D7A73B5D6880666 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1873C187F1C5BFEDF74A6BA3 /* DSL.m */; }; - EF0A2ACC9641B96FF65447F6 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C83946110D73E44EF4F81113 /* BeCloseTo.swift */; }; - F024FD314F49ABBFB66A44D1 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33F8FE546E76EC71E1B4C24A /* AssertionRecorder.swift */; }; - F9A9F02544CEC452A4EC300D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFFBC02BB9B8B3867FC27FD8 /* Foundation.framework */; }; - FA95CE02552C5BE7B6B28522 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7218266BAAFAEDFC4DEED9E5 /* FailureMessage.swift */; }; + 01089148ABC131B7DAC0ADBC /* BasicMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 152AF4A2E5ACEDACCC5E1B06 /* BasicMatcherWrapper.swift */; }; + 0CDE0A58ECCA978F3BC3CA31 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43141A44B97AD3E367956828 /* EndWith.swift */; }; + 0E9D27CE257CD39FA0B3E71D /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 078D8E651E500274F399D41E /* BeCloseTo.swift */; }; + 14148724E009FC8FBA176881 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A8F515027DAF831F7DC54D8 /* Stringers.swift */; }; + 159C57E648A726FFC9339607 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1AD6342E53A2D4C2E812607 /* AsyncMatcherWrapper.swift */; }; + 17ACC643879106F24D53C641 /* Pods-cameraTests-Nimble-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 021ADDBBBF231A5D239F4C27 /* Pods-cameraTests-Nimble-dummy.m */; }; + 1D890FB86EC29E49C9C9F4CF /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEB89CA3410BD2FD7DCE6F77 /* BeGreaterThan.swift */; }; + 3EBBCEDABA12566CF98444A7 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A917C86763BD1CF101F1655 /* Equal.swift */; }; + 42E2926C0F5EF8D65B53A688 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA668E44BFF46C893D9507F5 /* Expectation.swift */; }; + 45FC366B9905C2662261CF46 /* Pods-cameraTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BE09A6B18ED41D446839352E /* Pods-cameraTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 464B01A367749B5493612A3E /* NonNilMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33855997ACC736A273CC31FE /* NonNilMatcherWrapper.swift */; }; + 471D0C01840B72E4AF8658FC /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D954B303308DCC71600B886 /* BeLessThan.swift */; }; + 4D7BCE4B2037A18F2BCF3B49 /* FullMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9085E3E32975EEB9F6CDF05 /* FullMatcherWrapper.swift */; }; + 4DB4999BB8DBB43810B6DC73 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D9C447E222B27B3B55B82F2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4E2F5FF51CFA702793EDC9CB /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62B4F1518EDEC85C932550D6 /* AdapterProtocols.swift */; }; + 51BF7A9F0C61C2954E4E6981 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B788622D28DB93A351DE04AE /* Foundation.framework */; }; + 5323F82564C12D21885B12B1 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8570B04BE051CE0C299C217 /* MatcherFunc.swift */; }; + 5F2B169EBEEBB9158E0F4091 /* Pods-cameraTests-Nimble-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A89419B19D97A9C1D85F74EA /* Pods-cameraTests-Nimble-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5FE1F6A8C608FB3CCDD44065 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E97C6378E1EFC6A9FCD5858 /* NimbleXCTestHandler.swift */; }; + 62E2F6A80ACB1CC1C12F0A84 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A4667FA8D211151E704C12E /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6669C58A2D35EF1F0B59A70B /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1600EED11CD5DCB47E73704E /* BeIdenticalTo.swift */; }; + 735DEA800DD01C8C698BCC12 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E520D13B89924C3C867B530 /* AssertionRecorder.swift */; }; + 74BF86C46E83F93B092D9616 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 37516A185BCDC2106B98E8E8 /* XCTest.framework */; }; + 74F01F4457479C23F65B6DBE /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6B780BA32F3CB7F26B1FBA8 /* SourceLocation.swift */; }; + 7889D3EE297702D056F82D9C /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CD4D2538141697BC84A172D /* DSL+Wait.swift */; }; + 7F4663D1202D8EC7BB2838C8 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 532E3AA7F87EF0F8DDBA9655 /* Contain.swift */; }; + 845E41849D0388DF8B095192 /* ObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB736FB6B375900B50F5D36A /* ObjCMatcher.swift */; }; + 85F70FED553970D25D69AA6B /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9F114F3B8D445E46110AE38 /* MatcherProtocols.swift */; }; + 87E5689CFA6996489B04439F /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78BB93EDD75CA7AD651F697 /* FailureMessage.swift */; }; + 90E1907B18A6767B60124BEA /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B8E22C95D6FC2CB4CAE30EB /* BeLessThanOrEqual.swift */; }; + 964879168653FACBEC120D11 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89937C7EE610962CD881BE8F /* BeNil.swift */; }; + 9B146CBD42DCA7412BCA6155 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF8E7B37650BCE7B556E47C3 /* Functional.swift */; }; + A624B3EA27F6600EADB9736F /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 263D6C0F1E625A583B0B3DCA /* NMBExceptionCapture.m */; }; + B03074DE8A8F7647A2C23FA4 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D8E569C593DB80BD4A8E6A4 /* BeEmpty.swift */; }; + B98295B00C4A782FE5538FCD /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA53801B35C14BA80F9BC307 /* AllPass.swift */; }; + C687DB314CDE705E154CE18B /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 634D4B9D994E64B3604AB81B /* BeginWith.swift */; }; + CAF41CE8ECBF1667F86E0DF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 0721FEB55A46E044A54D3C84 /* DSL.m */; }; + CB9EC2C617B609ABEE813D73 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48B47B60C36672D4575CADDC /* Expression.swift */; }; + D11C27E82C73BD53F6F97C31 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DD9236DD45DBCB29C093A1A /* BeLogical.swift */; }; + D288B19C6D66D3E07BBAE689 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BD548BBC08B3144844482 /* BeAKindOf.swift */; }; + D384F02E9F6267A2D4A98244 /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05969277623A1E98CA475706 /* Match.swift */; }; + D9225694B5282883E4CB86A0 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 138F44E6EC4E2624F0D16F78 /* DSL.swift */; }; + E4D155ABCC2A49EC84FDAFEF /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB337C30BF47A0F2AE17082B /* BeGreaterThanOrEqualTo.swift */; }; + E6E50053B164289E7C0286A1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B788622D28DB93A351DE04AE /* Foundation.framework */; }; + EB0EBE7891841909EF97930C /* Pods-cameraTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A68951E49F8B1020860B088 /* Pods-cameraTests-dummy.m */; }; + EEEE68FDF6DF9C68AABCB1EF /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 492A9EA2857145B5C2A65F90 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FED5D51DA977C4C75F56EC88 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = B56AC8FE10644EAA3C1BF20B /* RaisesException.swift */; }; + FF0F82E6307C7BCB94359952 /* Poll.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD217FB84ED2D06BDE3BCE9F /* Poll.swift */; }; + FFAE85B2E23251978FB44C57 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA22B69CB52C59CB59ADFEC5 /* BeAnInstanceOf.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 37D85D4EDDBAF1915445F71D /* PBXContainerItemProxy */ = { + 653B1B8D4FADBD49C1108AD3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 937304FB055E8B31CCE17C33 /* Project object */; + containerPortal = 27C1A71C4CEE03720FF9424C /* Project object */; proxyType = 1; - remoteGlobalIDString = 03098993B86EADB31B473BE6; + remoteGlobalIDString = F31DCF4BC1F75A477673D8D8; remoteInfo = "Pods-cameraTests-Nimble"; }; - 7CA981DCCC17BAE34B95333C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 937304FB055E8B31CCE17C33 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 63EE31CFA4335E182795B62C; - remoteInfo = "Pods-cameraTests-Quick"; - }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 012CF5B0C5FAFA77ED64A0D1 /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 023EDA9E6B95AB5CEC4B4486 /* ExampleGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleGroup.swift; path = Quick/ExampleGroup.swift; sourceTree = ""; }; - 04C98A932ACA82234342D315 /* Pods-cameraTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-cameraTests-acknowledgements.plist"; sourceTree = ""; }; - 0532F94D7DEF51D97275BFBE /* Match.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Match.swift; path = Nimble/Matchers/Match.swift; sourceTree = ""; }; - 069BE081A378991AC5D4C293 /* Pods-cameraTests-Quick.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-cameraTests-Quick.modulemap"; sourceTree = ""; }; - 08D659BCCBEE7E6D07689459 /* ObjCMatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjCMatcher.swift; path = Nimble/Wrappers/ObjCMatcher.swift; sourceTree = ""; }; - 0AE7F2DBC9CCBE4489BA75DE /* Pods-cameraTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-cameraTests-acknowledgements.markdown"; sourceTree = ""; }; - 0E16B6CB02D5174AFB2978EE /* BeginWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeginWith.swift; path = Nimble/Matchers/BeginWith.swift; sourceTree = ""; }; - 101E03BF1A34E5E7AF543F36 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThanOrEqual.swift; path = Nimble/Matchers/BeLessThanOrEqual.swift; sourceTree = ""; }; - 10AAD1CDC0D3F5F3811E373F /* FullMatcherWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FullMatcherWrapper.swift; path = Nimble/Wrappers/FullMatcherWrapper.swift; sourceTree = ""; }; - 10D035D62A299B43E1A25EC5 /* Pods-cameraTests-Quick-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-cameraTests-Quick-umbrella.h"; sourceTree = ""; }; - 15DD6B442275C14CAE3A1B66 /* Example.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Example.swift; path = Quick/Example.swift; sourceTree = ""; }; - 15F79813906738A2BD6AA38B /* BasicMatcherWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BasicMatcherWrapper.swift; path = Nimble/Wrappers/BasicMatcherWrapper.swift; sourceTree = ""; }; - 162A7C8BEFEDFC011A49B88B /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - 17C2C0AF2677DB9CAC6E081C /* MatcherProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherProtocols.swift; path = Nimble/Matchers/MatcherProtocols.swift; sourceTree = ""; }; - 1873C187F1C5BFEDF74A6BA3 /* DSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DSL.m; path = Nimble/objc/DSL.m; sourceTree = ""; }; - 19609E67865F88C862DF57F9 /* Pods-cameraTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-cameraTests-resources.sh"; sourceTree = ""; }; - 1C3A8A501FDD021511871A68 /* BeLessThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThan.swift; path = Nimble/Matchers/BeLessThan.swift; sourceTree = ""; }; - 1CA3099BFB4185F0F9767377 /* MatcherFunc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherFunc.swift; path = Nimble/Wrappers/MatcherFunc.swift; sourceTree = ""; }; - 1D8EA6DCEF3F2E5E57BF215C /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAnInstanceOf.swift; path = Nimble/Matchers/BeAnInstanceOf.swift; sourceTree = ""; }; - 20E1F52A34452E4FA8C09B97 /* QuickSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickSpec.m; path = Quick/QuickSpec.m; sourceTree = ""; }; - 2389619E50745E53C4B52528 /* SuiteHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuiteHooks.swift; path = Quick/Hooks/SuiteHooks.swift; sourceTree = ""; }; - 2563F2959D17BA2558043577 /* Pods-cameraTests-Nimble-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-cameraTests-Nimble-dummy.m"; sourceTree = ""; }; - 28C1AD18150646E02B4BA2B8 /* EndWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EndWith.swift; path = Nimble/Matchers/EndWith.swift; sourceTree = ""; }; - 295C9B81917E2E66C4CB585F /* Pods-cameraTests-environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-cameraTests-environment.h"; sourceTree = ""; }; - 2998B2ADD9C42625B07F3AFF /* RaisesException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RaisesException.swift; path = Nimble/Matchers/RaisesException.swift; sourceTree = ""; }; - 2DF2111C551AF9DB8E1EF0D4 /* Functional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Functional.swift; path = Nimble/Utils/Functional.swift; sourceTree = ""; }; - 2E83D4416070EF016A049329 /* Pods-cameraTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-cameraTests.release.xcconfig"; sourceTree = ""; }; - 317BE5243B6AF2E8548397AA /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = Quick/Configuration/Configuration.swift; sourceTree = ""; }; - 319B45E19AE5060F26A16C98 /* Pods-cameraTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-cameraTests-umbrella.h"; sourceTree = ""; }; - 32D1A8FF83A07B9D8E0829FF /* QCKDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QCKDSL.h; path = Quick/DSL/QCKDSL.h; sourceTree = ""; }; - 33F8FE546E76EC71E1B4C24A /* AssertionRecorder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionRecorder.swift; path = Nimble/Adapters/AssertionRecorder.swift; sourceTree = ""; }; - 3793683F5C9C8923253EC1D9 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 3C5228EE1BA2EEDDFE07798C /* DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DSL.h; path = Nimble/objc/DSL.h; sourceTree = ""; }; - 402ACB04DB1A0D5DFD74F095 /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Nimble/Expression.swift; sourceTree = ""; }; - 45B2BB9B92C8802E08894181 /* Contain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Contain.swift; path = Nimble/Matchers/Contain.swift; sourceTree = ""; }; - 471D38845FE2712C8D24E2B2 /* BeLogical.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLogical.swift; path = Nimble/Matchers/BeLogical.swift; sourceTree = ""; }; - 4BA526DB9E85C442548416FF /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4ED460346C47D3AFFC6090B8 /* QuickConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickConfiguration.h; path = Quick/Configuration/QuickConfiguration.h; sourceTree = ""; }; - 505291DF2F3F7BAEC5C13A9A /* BeIdenticalTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeIdenticalTo.swift; path = Nimble/Matchers/BeIdenticalTo.swift; sourceTree = ""; }; - 521FFDC3BB0D3ACFAFB152C5 /* SourceLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SourceLocation.swift; path = Nimble/Utils/SourceLocation.swift; sourceTree = ""; }; - 5B396785B7F6615196840BDF /* NSString+QCKSelectorName.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+QCKSelectorName.m"; path = "Quick/NSString+QCKSelectorName.m"; sourceTree = ""; }; - 60F89AACA3CF3565890BBE49 /* QuickConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickConfiguration.m; path = Quick/Configuration/QuickConfiguration.m; sourceTree = ""; }; - 6759F6DB7C918DCA172362CB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 6E6B9FF0BCC8962A6C65076A /* QCKDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QCKDSL.m; path = Quick/DSL/QCKDSL.m; sourceTree = ""; }; - 7218266BAAFAEDFC4DEED9E5 /* FailureMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FailureMessage.swift; path = Nimble/FailureMessage.swift; sourceTree = ""; }; - 7B748F87FF3D770DF9007604 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7DE5D16EBDF47FE756EFDD5F /* Pods-cameraTests-Nimble.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-cameraTests-Nimble.xcconfig"; sourceTree = ""; }; - 7EEF62B2DD8F00333107ABD5 /* Callsite.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Callsite.swift; path = Quick/Callsite.swift; sourceTree = ""; }; - 7FD9B1694D7D39B422068BF9 /* Pods-cameraTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-cameraTests.debug.xcconfig"; sourceTree = ""; }; - 82048FF5F5EFF9305672C391 /* Pods-cameraTests-Nimble-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-cameraTests-Nimble-umbrella.h"; sourceTree = ""; }; - 87EC112C5F1B702FC4B3F370 /* Pods-cameraTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-cameraTests.modulemap"; sourceTree = ""; }; - 8D91B6199A9DEBE41D2FDA21 /* Pods_cameraTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_cameraTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8DDAB2D1C38A94C6D032404C /* Pods-cameraTests-Quick-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-cameraTests-Quick-prefix.pch"; sourceTree = ""; }; - 8EC533250C6B34D3F73A8823 /* DSL+Wait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DSL+Wait.swift"; path = "Nimble/DSL+Wait.swift"; sourceTree = ""; }; - 8F2F7037B987C74A3ED1EBFB /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThanOrEqualTo.swift; path = Nimble/Matchers/BeGreaterThanOrEqualTo.swift; sourceTree = ""; }; - 927BE526BA3C7C60EC6D1167 /* Expectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expectation.swift; path = Nimble/Expectation.swift; sourceTree = ""; }; - 950BF84666ADF1BEDBD288E4 /* BeGreaterThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThan.swift; path = Nimble/Matchers/BeGreaterThan.swift; sourceTree = ""; }; - 9518ECD232456850752F53A9 /* BeAKindOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAKindOf.swift; path = Nimble/Matchers/BeAKindOf.swift; sourceTree = ""; }; - 9CCDAA183DD8D7743EA56A62 /* XCTestHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XCTestHandler.swift; path = Nimble/Adapters/XCTestHandler.swift; sourceTree = ""; }; - 9D05A5AECA35165DB51FF23C /* ExampleHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleHooks.swift; path = Quick/Hooks/ExampleHooks.swift; sourceTree = ""; }; - 9F975D83EBDA345C8FFF01E3 /* Failure.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Failure.swift; path = Quick/Failure.swift; sourceTree = ""; }; - A2E5E3720B0C95643A807292 /* Quick.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Quick.h; path = Quick/Quick.h; sourceTree = ""; }; - A38C289E43ECD26E8939591E /* Poll.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Poll.swift; path = Nimble/Utils/Poll.swift; sourceTree = ""; }; - A8630A26F9BAB2A785161489 /* AdapterProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AdapterProtocols.swift; path = Nimble/Adapters/AdapterProtocols.swift; sourceTree = ""; }; - AE55690197160BABCF839CF6 /* Pods-cameraTests-Nimble-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-cameraTests-Nimble-Private.xcconfig"; sourceTree = ""; }; - AFFBC02BB9B8B3867FC27FD8 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - B08C633FA95B2863036438B9 /* Pods-cameraTests-Quick.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-cameraTests-Quick.xcconfig"; sourceTree = ""; }; - B20D631CE4DCBF504E55A2AE /* Nimble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nimble.h; path = Nimble/Nimble.h; sourceTree = ""; }; - B618EB76AF4D043BB1CB23D5 /* World+DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "World+DSL.swift"; path = "Quick/DSL/World+DSL.swift"; sourceTree = ""; }; - B7E8C66E5FDC940E269FA8EE /* ExampleMetadata.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleMetadata.swift; path = Quick/ExampleMetadata.swift; sourceTree = ""; }; - BB09B9D379670E585AC1A13F /* Closures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Closures.swift; path = Quick/Hooks/Closures.swift; sourceTree = ""; }; - BB281C3837A207CC43C4BC7D /* World.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = World.swift; path = Quick/World.swift; sourceTree = ""; }; - BD33B1DB349F34B4254F41C8 /* Stringers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stringers.swift; path = Nimble/Utils/Stringers.swift; sourceTree = ""; }; - BFEE86CD156B011635A2DCFD /* Pods-cameraTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-cameraTests-frameworks.sh"; sourceTree = ""; }; - C198515AF8C48951047C3943 /* BeNil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeNil.swift; path = Nimble/Matchers/BeNil.swift; sourceTree = ""; }; - C282D3D28C0BEC2EBC15A8DF /* QuickSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickSpec.h; path = Quick/QuickSpec.h; sourceTree = ""; }; - C83946110D73E44EF4F81113 /* BeCloseTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeCloseTo.swift; path = Nimble/Matchers/BeCloseTo.swift; sourceTree = ""; }; - CC8571A8C022144BCE3CA10A /* NMBExceptionCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBExceptionCapture.m; path = Nimble/objc/NMBExceptionCapture.m; sourceTree = ""; }; - D25C7D9460041796229179A6 /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Nimble/DSL.swift; sourceTree = ""; }; - D2CED32A84A0D0848A31C737 /* BeEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeEmpty.swift; path = Nimble/Matchers/BeEmpty.swift; sourceTree = ""; }; - D55D3DF99DE7681A2BF29E48 /* Pods-cameraTests-Quick-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-cameraTests-Quick-dummy.m"; sourceTree = ""; }; - D826AAF28238AA855ABA32D0 /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Quick/DSL/DSL.swift; sourceTree = ""; }; - DA0C0BEF285D56CF99F9BAFF /* NonNilMatcherWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NonNilMatcherWrapper.swift; path = Nimble/Wrappers/NonNilMatcherWrapper.swift; sourceTree = ""; }; - DB89177296F437C09E320EBB /* AsyncMatcherWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncMatcherWrapper.swift; path = Nimble/Wrappers/AsyncMatcherWrapper.swift; sourceTree = ""; }; - DB8A4880FEBDC35E69C45749 /* NSString+QCKSelectorName.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+QCKSelectorName.h"; path = "Quick/NSString+QCKSelectorName.h"; sourceTree = ""; }; - DFE1A82827C4DC004907D038 /* Pods-cameraTests-Quick-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-cameraTests-Quick-Private.xcconfig"; sourceTree = ""; }; - EB54E115C989CF89C6F59FDF /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F41DDB356DAEA5AE9D68F607 /* Pods-cameraTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-cameraTests-dummy.m"; sourceTree = ""; }; - F5A2611FED51DF823BD66EFD /* Pods-cameraTests-Nimble.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-cameraTests-Nimble.modulemap"; sourceTree = ""; }; - F65674506659FCBD087F62FE /* Pods-cameraTests-Nimble-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-cameraTests-Nimble-prefix.pch"; sourceTree = ""; }; - FAE50AB5F905197F46BD849C /* Equal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Equal.swift; path = Nimble/Matchers/Equal.swift; sourceTree = ""; }; - FC12C064DC64767DF335152E /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Quick/Filter.swift; sourceTree = ""; }; - FE29350F14BE8900985973C3 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBExceptionCapture.h; path = Nimble/objc/NMBExceptionCapture.h; sourceTree = ""; }; + 021ADDBBBF231A5D239F4C27 /* Pods-cameraTests-Nimble-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-cameraTests-Nimble-dummy.m"; sourceTree = ""; }; + 05969277623A1E98CA475706 /* Match.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Match.swift; path = Nimble/Matchers/Match.swift; sourceTree = ""; }; + 0721FEB55A46E044A54D3C84 /* DSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DSL.m; path = Nimble/objc/DSL.m; sourceTree = ""; }; + 078D8E651E500274F399D41E /* BeCloseTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeCloseTo.swift; path = Nimble/Matchers/BeCloseTo.swift; sourceTree = ""; }; + 0A43DB02D37C42C4F7BE4D51 /* Pods_cameraTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_cameraTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 120601460EFA14EA14597810 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 138F44E6EC4E2624F0D16F78 /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Nimble/DSL.swift; sourceTree = ""; }; + 152AF4A2E5ACEDACCC5E1B06 /* BasicMatcherWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BasicMatcherWrapper.swift; path = Nimble/Wrappers/BasicMatcherWrapper.swift; sourceTree = ""; }; + 15CCC82CDE5BDB8775D89FC8 /* Pods-cameraTests-Nimble-Private.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-cameraTests-Nimble-Private.xcconfig"; sourceTree = ""; }; + 1600EED11CD5DCB47E73704E /* BeIdenticalTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeIdenticalTo.swift; path = Nimble/Matchers/BeIdenticalTo.swift; sourceTree = ""; }; + 17637EBC9866319AD7C0C4E1 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 1B544C5FB7AB727EEF74872F /* Pods-cameraTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-cameraTests.debug.xcconfig"; sourceTree = ""; }; + 263D6C0F1E625A583B0B3DCA /* NMBExceptionCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBExceptionCapture.m; path = Nimble/objc/NMBExceptionCapture.m; sourceTree = ""; }; + 2A4667FA8D211151E704C12E /* DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DSL.h; path = Nimble/objc/DSL.h; sourceTree = ""; }; + 2D181BDAED0514B1747A9927 /* Pods-cameraTests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-cameraTests-resources.sh"; sourceTree = ""; }; + 2D954B303308DCC71600B886 /* BeLessThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThan.swift; path = Nimble/Matchers/BeLessThan.swift; sourceTree = ""; }; + 2E520D13B89924C3C867B530 /* AssertionRecorder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionRecorder.swift; path = Nimble/Adapters/AssertionRecorder.swift; sourceTree = ""; }; + 33855997ACC736A273CC31FE /* NonNilMatcherWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NonNilMatcherWrapper.swift; path = Nimble/Wrappers/NonNilMatcherWrapper.swift; sourceTree = ""; }; + 3456DC85700157A9B987FC5E /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 37516A185BCDC2106B98E8E8 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + 3A8F515027DAF831F7DC54D8 /* Stringers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stringers.swift; path = Nimble/Utils/Stringers.swift; sourceTree = ""; }; + 43141A44B97AD3E367956828 /* EndWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EndWith.swift; path = Nimble/Matchers/EndWith.swift; sourceTree = ""; }; + 48B47B60C36672D4575CADDC /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Nimble/Expression.swift; sourceTree = ""; }; + 492A9EA2857145B5C2A65F90 /* Nimble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nimble.h; path = Nimble/Nimble.h; sourceTree = ""; }; + 4DD9236DD45DBCB29C093A1A /* BeLogical.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLogical.swift; path = Nimble/Matchers/BeLogical.swift; sourceTree = ""; }; + 532E3AA7F87EF0F8DDBA9655 /* Contain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Contain.swift; path = Nimble/Matchers/Contain.swift; sourceTree = ""; }; + 53AE1EAC4C9160383EDC753B /* Pods-cameraTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-cameraTests.release.xcconfig"; sourceTree = ""; }; + 54C3349B00B675F956B73C67 /* Pods-cameraTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-cameraTests-acknowledgements.plist"; sourceTree = ""; }; + 5753B8FBCF21E39467BE1707 /* Pods-cameraTests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-cameraTests-frameworks.sh"; sourceTree = ""; }; + 60E6D71933D5DB3F01A96CFD /* Pods-cameraTests-Nimble.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-cameraTests-Nimble.xcconfig"; sourceTree = ""; }; + 62B4F1518EDEC85C932550D6 /* AdapterProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AdapterProtocols.swift; path = Nimble/Adapters/AdapterProtocols.swift; sourceTree = ""; }; + 634D4B9D994E64B3604AB81B /* BeginWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeginWith.swift; path = Nimble/Matchers/BeginWith.swift; sourceTree = ""; }; + 6D8E569C593DB80BD4A8E6A4 /* BeEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeEmpty.swift; path = Nimble/Matchers/BeEmpty.swift; sourceTree = ""; }; + 7B8E22C95D6FC2CB4CAE30EB /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThanOrEqual.swift; path = Nimble/Matchers/BeLessThanOrEqual.swift; sourceTree = ""; }; + 7C100A42839F35137B24C84B /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 825F7D266989A04E26AF28C0 /* Pods-cameraTests-environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-cameraTests-environment.h"; sourceTree = ""; }; + 89937C7EE610962CD881BE8F /* BeNil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeNil.swift; path = Nimble/Matchers/BeNil.swift; sourceTree = ""; }; + 8CD4D2538141697BC84A172D /* DSL+Wait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DSL+Wait.swift"; path = "Nimble/DSL+Wait.swift"; sourceTree = ""; }; + 8E97C6378E1EFC6A9FCD5858 /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleXCTestHandler.swift; path = Nimble/Adapters/NimbleXCTestHandler.swift; sourceTree = ""; }; + 966FFA9B2426A9009DF07DD4 /* Pods-cameraTests-Nimble-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-cameraTests-Nimble-prefix.pch"; sourceTree = ""; }; + 9A68951E49F8B1020860B088 /* Pods-cameraTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-cameraTests-dummy.m"; sourceTree = ""; }; + 9A917C86763BD1CF101F1655 /* Equal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Equal.swift; path = Nimble/Matchers/Equal.swift; sourceTree = ""; }; + 9D9C447E222B27B3B55B82F2 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBExceptionCapture.h; path = Nimble/objc/NMBExceptionCapture.h; sourceTree = ""; }; + A8570B04BE051CE0C299C217 /* MatcherFunc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherFunc.swift; path = Nimble/Wrappers/MatcherFunc.swift; sourceTree = ""; }; + A89419B19D97A9C1D85F74EA /* Pods-cameraTests-Nimble-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-cameraTests-Nimble-umbrella.h"; sourceTree = ""; }; + A9085E3E32975EEB9F6CDF05 /* FullMatcherWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FullMatcherWrapper.swift; path = Nimble/Wrappers/FullMatcherWrapper.swift; sourceTree = ""; }; + A9F114F3B8D445E46110AE38 /* MatcherProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherProtocols.swift; path = Nimble/Matchers/MatcherProtocols.swift; sourceTree = ""; }; + AD217FB84ED2D06BDE3BCE9F /* Poll.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Poll.swift; path = Nimble/Utils/Poll.swift; sourceTree = ""; }; + AE4BD548BBC08B3144844482 /* BeAKindOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAKindOf.swift; path = Nimble/Matchers/BeAKindOf.swift; sourceTree = ""; }; + B1AD6342E53A2D4C2E812607 /* AsyncMatcherWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncMatcherWrapper.swift; path = Nimble/Wrappers/AsyncMatcherWrapper.swift; sourceTree = ""; }; + B56AC8FE10644EAA3C1BF20B /* RaisesException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RaisesException.swift; path = Nimble/Matchers/RaisesException.swift; sourceTree = ""; }; + B6B780BA32F3CB7F26B1FBA8 /* SourceLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SourceLocation.swift; path = Nimble/Utils/SourceLocation.swift; sourceTree = ""; }; + B75333D5681CD6667EDA5D55 /* Pods-cameraTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-cameraTests.modulemap"; sourceTree = ""; }; + B788622D28DB93A351DE04AE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + BE09A6B18ED41D446839352E /* Pods-cameraTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-cameraTests-umbrella.h"; sourceTree = ""; }; + CB337C30BF47A0F2AE17082B /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThanOrEqualTo.swift; path = Nimble/Matchers/BeGreaterThanOrEqualTo.swift; sourceTree = ""; }; + D78BB93EDD75CA7AD651F697 /* FailureMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FailureMessage.swift; path = Nimble/FailureMessage.swift; sourceTree = ""; }; + DA668E44BFF46C893D9507F5 /* Expectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expectation.swift; path = Nimble/Expectation.swift; sourceTree = ""; }; + DB736FB6B375900B50F5D36A /* ObjCMatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjCMatcher.swift; path = Nimble/Wrappers/ObjCMatcher.swift; sourceTree = ""; }; + DEB89CA3410BD2FD7DCE6F77 /* BeGreaterThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThan.swift; path = Nimble/Matchers/BeGreaterThan.swift; sourceTree = ""; }; + DF8E7B37650BCE7B556E47C3 /* Functional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Functional.swift; path = Nimble/Utils/Functional.swift; sourceTree = ""; }; + E2EACB37B702DAAE7FF0F311 /* Pods-cameraTests-Nimble.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-cameraTests-Nimble.modulemap"; sourceTree = ""; }; + E37AE92C2BCD0A171EBD9048 /* Pods-cameraTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-cameraTests-acknowledgements.markdown"; sourceTree = ""; }; + FA22B69CB52C59CB59ADFEC5 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAnInstanceOf.swift; path = Nimble/Matchers/BeAnInstanceOf.swift; sourceTree = ""; }; + FA53801B35C14BA80F9BC307 /* AllPass.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllPass.swift; path = Nimble/Matchers/AllPass.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 58094DDE21DBB51BC835A4A4 /* Frameworks */ = { + 86AED7A97ED978B78AA624B8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F9A9F02544CEC452A4EC300D /* Foundation.framework in Frameworks */, - 5CAF4ACE6BA1C7452395D6A9 /* XCTest.framework in Frameworks */, + 51BF7A9F0C61C2954E4E6981 /* Foundation.framework in Frameworks */, + 74BF86C46E83F93B092D9616 /* XCTest.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6B1C7242D21308F1279EA301 /* Frameworks */ = { + C231EDE8C35C7D379CB96CF6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 97D0996C4D453390EC72FB74 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 71C74F61879210D969B8CFF5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4285DB510E4C2975EC76AB63 /* Foundation.framework in Frameworks */, - D24F4280730F62EBA770A466 /* XCTest.framework in Frameworks */, + E6E50053B164289E7C0286A1 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 08F881C603574785D738721C = { + 3C5FFF9DD5BDE1510BB6D866 /* Targets Support Files */ = { isa = PBXGroup; children = ( - 012CF5B0C5FAFA77ED64A0D1 /* Podfile */, - B15D4557820AE99A4D342CB4 /* Frameworks */, - 957D697A04C144323B10B143 /* Pods */, - B1E20CDBA0845824CB7F7AD0 /* Products */, - EB6DD5BB32A1AE1C45DA962C /* Targets Support Files */, + B62D92E24703855CAF461CCB /* Pods-cameraTests */, ); + name = "Targets Support Files"; sourceTree = ""; }; - 3AD18E3BF6AE65FDD211F642 /* Nimble */ = { + 46FB1072C2AF7C69F7812B07 /* Frameworks */ = { isa = PBXGroup; children = ( - A8630A26F9BAB2A785161489 /* AdapterProtocols.swift */, - 33F8FE546E76EC71E1B4C24A /* AssertionRecorder.swift */, - DB89177296F437C09E320EBB /* AsyncMatcherWrapper.swift */, - 15F79813906738A2BD6AA38B /* BasicMatcherWrapper.swift */, - 9518ECD232456850752F53A9 /* BeAKindOf.swift */, - 1D8EA6DCEF3F2E5E57BF215C /* BeAnInstanceOf.swift */, - C83946110D73E44EF4F81113 /* BeCloseTo.swift */, - D2CED32A84A0D0848A31C737 /* BeEmpty.swift */, - 950BF84666ADF1BEDBD288E4 /* BeGreaterThan.swift */, - 8F2F7037B987C74A3ED1EBFB /* BeGreaterThanOrEqualTo.swift */, - 505291DF2F3F7BAEC5C13A9A /* BeIdenticalTo.swift */, - 1C3A8A501FDD021511871A68 /* BeLessThan.swift */, - 101E03BF1A34E5E7AF543F36 /* BeLessThanOrEqual.swift */, - 471D38845FE2712C8D24E2B2 /* BeLogical.swift */, - C198515AF8C48951047C3943 /* BeNil.swift */, - 0E16B6CB02D5174AFB2978EE /* BeginWith.swift */, - 45B2BB9B92C8802E08894181 /* Contain.swift */, - 3C5228EE1BA2EEDDFE07798C /* DSL.h */, - 1873C187F1C5BFEDF74A6BA3 /* DSL.m */, - D25C7D9460041796229179A6 /* DSL.swift */, - 8EC533250C6B34D3F73A8823 /* DSL+Wait.swift */, - 28C1AD18150646E02B4BA2B8 /* EndWith.swift */, - FAE50AB5F905197F46BD849C /* Equal.swift */, - 927BE526BA3C7C60EC6D1167 /* Expectation.swift */, - 402ACB04DB1A0D5DFD74F095 /* Expression.swift */, - 7218266BAAFAEDFC4DEED9E5 /* FailureMessage.swift */, - 10AAD1CDC0D3F5F3811E373F /* FullMatcherWrapper.swift */, - 2DF2111C551AF9DB8E1EF0D4 /* Functional.swift */, - 0532F94D7DEF51D97275BFBE /* Match.swift */, - 1CA3099BFB4185F0F9767377 /* MatcherFunc.swift */, - 17C2C0AF2677DB9CAC6E081C /* MatcherProtocols.swift */, - FE29350F14BE8900985973C3 /* NMBExceptionCapture.h */, - CC8571A8C022144BCE3CA10A /* NMBExceptionCapture.m */, - B20D631CE4DCBF504E55A2AE /* Nimble.h */, - DA0C0BEF285D56CF99F9BAFF /* NonNilMatcherWrapper.swift */, - 08D659BCCBEE7E6D07689459 /* ObjCMatcher.swift */, - A38C289E43ECD26E8939591E /* Poll.swift */, - 2998B2ADD9C42625B07F3AFF /* RaisesException.swift */, - 521FFDC3BB0D3ACFAFB152C5 /* SourceLocation.swift */, - BD33B1DB349F34B4254F41C8 /* Stringers.swift */, - 9CCDAA183DD8D7743EA56A62 /* XCTestHandler.swift */, - C579C6A6E4BEE85A4FB9E7E3 /* Support Files */, - ); - path = Nimble; - sourceTree = ""; - }; - 53F4DB2DDDF3FC1008E4F3FC /* Quick */ = { - isa = PBXGroup; - children = ( - 7EEF62B2DD8F00333107ABD5 /* Callsite.swift */, - BB09B9D379670E585AC1A13F /* Closures.swift */, - 317BE5243B6AF2E8548397AA /* Configuration.swift */, - D826AAF28238AA855ABA32D0 /* DSL.swift */, - 15DD6B442275C14CAE3A1B66 /* Example.swift */, - 023EDA9E6B95AB5CEC4B4486 /* ExampleGroup.swift */, - 9D05A5AECA35165DB51FF23C /* ExampleHooks.swift */, - B7E8C66E5FDC940E269FA8EE /* ExampleMetadata.swift */, - 9F975D83EBDA345C8FFF01E3 /* Failure.swift */, - FC12C064DC64767DF335152E /* Filter.swift */, - DB8A4880FEBDC35E69C45749 /* NSString+QCKSelectorName.h */, - 5B396785B7F6615196840BDF /* NSString+QCKSelectorName.m */, - 32D1A8FF83A07B9D8E0829FF /* QCKDSL.h */, - 6E6B9FF0BCC8962A6C65076A /* QCKDSL.m */, - A2E5E3720B0C95643A807292 /* Quick.h */, - 4ED460346C47D3AFFC6090B8 /* QuickConfiguration.h */, - 60F89AACA3CF3565890BBE49 /* QuickConfiguration.m */, - C282D3D28C0BEC2EBC15A8DF /* QuickSpec.h */, - 20E1F52A34452E4FA8C09B97 /* QuickSpec.m */, - 2389619E50745E53C4B52528 /* SuiteHooks.swift */, - BB281C3837A207CC43C4BC7D /* World.swift */, - B618EB76AF4D043BB1CB23D5 /* World+DSL.swift */, - EED5FEA1196A4D1AF951C4CE /* Support Files */, - ); - path = Quick; - sourceTree = ""; - }; - 957D697A04C144323B10B143 /* Pods */ = { - isa = PBXGroup; - children = ( - 3AD18E3BF6AE65FDD211F642 /* Nimble */, - 53F4DB2DDDF3FC1008E4F3FC /* Quick */, - ); - name = Pods; - sourceTree = ""; - }; - A9B4B57B53606BB9CE6EB5BC /* Pods-cameraTests */ = { - isa = PBXGroup; - children = ( - 6759F6DB7C918DCA172362CB /* Info.plist */, - 87EC112C5F1B702FC4B3F370 /* Pods-cameraTests.modulemap */, - 0AE7F2DBC9CCBE4489BA75DE /* Pods-cameraTests-acknowledgements.markdown */, - 04C98A932ACA82234342D315 /* Pods-cameraTests-acknowledgements.plist */, - F41DDB356DAEA5AE9D68F607 /* Pods-cameraTests-dummy.m */, - 295C9B81917E2E66C4CB585F /* Pods-cameraTests-environment.h */, - BFEE86CD156B011635A2DCFD /* Pods-cameraTests-frameworks.sh */, - 19609E67865F88C862DF57F9 /* Pods-cameraTests-resources.sh */, - 319B45E19AE5060F26A16C98 /* Pods-cameraTests-umbrella.h */, - 7FD9B1694D7D39B422068BF9 /* Pods-cameraTests.debug.xcconfig */, - 2E83D4416070EF016A049329 /* Pods-cameraTests.release.xcconfig */, - ); - name = "Pods-cameraTests"; - path = "Target Support Files/Pods-cameraTests"; - sourceTree = ""; - }; - B15D4557820AE99A4D342CB4 /* Frameworks */ = { - isa = PBXGroup; - children = ( - E12DDD9F4BE1C635F8E8936D /* iOS */, + 7F04B8451408463267D6E9FC /* iOS */, ); name = Frameworks; sourceTree = ""; }; - B1E20CDBA0845824CB7F7AD0 /* Products */ = { + 564BBA1DA28C2A6CFBBFA5D0 /* Support Files */ = { isa = PBXGroup; children = ( - 4BA526DB9E85C442548416FF /* Nimble.framework */, - 8D91B6199A9DEBE41D2FDA21 /* Pods_cameraTests.framework */, - 7B748F87FF3D770DF9007604 /* Quick.framework */, - ); - name = Products; - sourceTree = ""; - }; - C579C6A6E4BEE85A4FB9E7E3 /* Support Files */ = { - isa = PBXGroup; - children = ( - 3793683F5C9C8923253EC1D9 /* Info.plist */, - F5A2611FED51DF823BD66EFD /* Pods-cameraTests-Nimble.modulemap */, - 7DE5D16EBDF47FE756EFDD5F /* Pods-cameraTests-Nimble.xcconfig */, - AE55690197160BABCF839CF6 /* Pods-cameraTests-Nimble-Private.xcconfig */, - 2563F2959D17BA2558043577 /* Pods-cameraTests-Nimble-dummy.m */, - F65674506659FCBD087F62FE /* Pods-cameraTests-Nimble-prefix.pch */, - 82048FF5F5EFF9305672C391 /* Pods-cameraTests-Nimble-umbrella.h */, + 17637EBC9866319AD7C0C4E1 /* Info.plist */, + E2EACB37B702DAAE7FF0F311 /* Pods-cameraTests-Nimble.modulemap */, + 60E6D71933D5DB3F01A96CFD /* Pods-cameraTests-Nimble.xcconfig */, + 15CCC82CDE5BDB8775D89FC8 /* Pods-cameraTests-Nimble-Private.xcconfig */, + 021ADDBBBF231A5D239F4C27 /* Pods-cameraTests-Nimble-dummy.m */, + 966FFA9B2426A9009DF07DD4 /* Pods-cameraTests-Nimble-prefix.pch */, + A89419B19D97A9C1D85F74EA /* Pods-cameraTests-Nimble-umbrella.h */, ); name = "Support Files"; path = "../Target Support Files/Pods-cameraTests-Nimble"; sourceTree = ""; }; - E12DDD9F4BE1C635F8E8936D /* iOS */ = { + 6DA46FFACBA68D7E0E651E9C /* Nimble */ = { isa = PBXGroup; children = ( - AFFBC02BB9B8B3867FC27FD8 /* Foundation.framework */, - 162A7C8BEFEDFC011A49B88B /* XCTest.framework */, + 62B4F1518EDEC85C932550D6 /* AdapterProtocols.swift */, + FA53801B35C14BA80F9BC307 /* AllPass.swift */, + 2E520D13B89924C3C867B530 /* AssertionRecorder.swift */, + B1AD6342E53A2D4C2E812607 /* AsyncMatcherWrapper.swift */, + 152AF4A2E5ACEDACCC5E1B06 /* BasicMatcherWrapper.swift */, + AE4BD548BBC08B3144844482 /* BeAKindOf.swift */, + FA22B69CB52C59CB59ADFEC5 /* BeAnInstanceOf.swift */, + 078D8E651E500274F399D41E /* BeCloseTo.swift */, + 6D8E569C593DB80BD4A8E6A4 /* BeEmpty.swift */, + DEB89CA3410BD2FD7DCE6F77 /* BeGreaterThan.swift */, + CB337C30BF47A0F2AE17082B /* BeGreaterThanOrEqualTo.swift */, + 1600EED11CD5DCB47E73704E /* BeIdenticalTo.swift */, + 2D954B303308DCC71600B886 /* BeLessThan.swift */, + 7B8E22C95D6FC2CB4CAE30EB /* BeLessThanOrEqual.swift */, + 4DD9236DD45DBCB29C093A1A /* BeLogical.swift */, + 89937C7EE610962CD881BE8F /* BeNil.swift */, + 634D4B9D994E64B3604AB81B /* BeginWith.swift */, + 532E3AA7F87EF0F8DDBA9655 /* Contain.swift */, + 2A4667FA8D211151E704C12E /* DSL.h */, + 0721FEB55A46E044A54D3C84 /* DSL.m */, + 138F44E6EC4E2624F0D16F78 /* DSL.swift */, + 8CD4D2538141697BC84A172D /* DSL+Wait.swift */, + 43141A44B97AD3E367956828 /* EndWith.swift */, + 9A917C86763BD1CF101F1655 /* Equal.swift */, + DA668E44BFF46C893D9507F5 /* Expectation.swift */, + 48B47B60C36672D4575CADDC /* Expression.swift */, + D78BB93EDD75CA7AD651F697 /* FailureMessage.swift */, + A9085E3E32975EEB9F6CDF05 /* FullMatcherWrapper.swift */, + DF8E7B37650BCE7B556E47C3 /* Functional.swift */, + 05969277623A1E98CA475706 /* Match.swift */, + A8570B04BE051CE0C299C217 /* MatcherFunc.swift */, + A9F114F3B8D445E46110AE38 /* MatcherProtocols.swift */, + 9D9C447E222B27B3B55B82F2 /* NMBExceptionCapture.h */, + 263D6C0F1E625A583B0B3DCA /* NMBExceptionCapture.m */, + 492A9EA2857145B5C2A65F90 /* Nimble.h */, + 8E97C6378E1EFC6A9FCD5858 /* NimbleXCTestHandler.swift */, + 33855997ACC736A273CC31FE /* NonNilMatcherWrapper.swift */, + DB736FB6B375900B50F5D36A /* ObjCMatcher.swift */, + AD217FB84ED2D06BDE3BCE9F /* Poll.swift */, + B56AC8FE10644EAA3C1BF20B /* RaisesException.swift */, + B6B780BA32F3CB7F26B1FBA8 /* SourceLocation.swift */, + 3A8F515027DAF831F7DC54D8 /* Stringers.swift */, + 564BBA1DA28C2A6CFBBFA5D0 /* Support Files */, + ); + path = Nimble; + sourceTree = ""; + }; + 7F04B8451408463267D6E9FC /* iOS */ = { + isa = PBXGroup; + children = ( + B788622D28DB93A351DE04AE /* Foundation.framework */, + 37516A185BCDC2106B98E8E8 /* XCTest.framework */, ); name = iOS; sourceTree = ""; }; - EB6DD5BB32A1AE1C45DA962C /* Targets Support Files */ = { + B62D92E24703855CAF461CCB /* Pods-cameraTests */ = { isa = PBXGroup; children = ( - A9B4B57B53606BB9CE6EB5BC /* Pods-cameraTests */, + 3456DC85700157A9B987FC5E /* Info.plist */, + B75333D5681CD6667EDA5D55 /* Pods-cameraTests.modulemap */, + E37AE92C2BCD0A171EBD9048 /* Pods-cameraTests-acknowledgements.markdown */, + 54C3349B00B675F956B73C67 /* Pods-cameraTests-acknowledgements.plist */, + 9A68951E49F8B1020860B088 /* Pods-cameraTests-dummy.m */, + 825F7D266989A04E26AF28C0 /* Pods-cameraTests-environment.h */, + 5753B8FBCF21E39467BE1707 /* Pods-cameraTests-frameworks.sh */, + 2D181BDAED0514B1747A9927 /* Pods-cameraTests-resources.sh */, + BE09A6B18ED41D446839352E /* Pods-cameraTests-umbrella.h */, + 1B544C5FB7AB727EEF74872F /* Pods-cameraTests.debug.xcconfig */, + 53AE1EAC4C9160383EDC753B /* Pods-cameraTests.release.xcconfig */, ); - name = "Targets Support Files"; + name = "Pods-cameraTests"; + path = "Target Support Files/Pods-cameraTests"; sourceTree = ""; }; - EED5FEA1196A4D1AF951C4CE /* Support Files */ = { + C3E0195705D5B04895B4DB58 /* Pods */ = { isa = PBXGroup; children = ( - EB54E115C989CF89C6F59FDF /* Info.plist */, - 069BE081A378991AC5D4C293 /* Pods-cameraTests-Quick.modulemap */, - B08C633FA95B2863036438B9 /* Pods-cameraTests-Quick.xcconfig */, - DFE1A82827C4DC004907D038 /* Pods-cameraTests-Quick-Private.xcconfig */, - D55D3DF99DE7681A2BF29E48 /* Pods-cameraTests-Quick-dummy.m */, - 8DDAB2D1C38A94C6D032404C /* Pods-cameraTests-Quick-prefix.pch */, - 10D035D62A299B43E1A25EC5 /* Pods-cameraTests-Quick-umbrella.h */, + 6DA46FFACBA68D7E0E651E9C /* Nimble */, + ); + name = Pods; + sourceTree = ""; + }; + CE75AE2EC99DAE129C05D411 /* Products */ = { + isa = PBXGroup; + children = ( + 120601460EFA14EA14597810 /* Nimble.framework */, + 0A43DB02D37C42C4F7BE4D51 /* Pods_cameraTests.framework */, + ); + name = Products; + sourceTree = ""; + }; + EB884C39B7ED8AAF95E5DB4D = { + isa = PBXGroup; + children = ( + 7C100A42839F35137B24C84B /* Podfile */, + 46FB1072C2AF7C69F7812B07 /* Frameworks */, + C3E0195705D5B04895B4DB58 /* Pods */, + CE75AE2EC99DAE129C05D411 /* Products */, + 3C5FFF9DD5BDE1510BB6D866 /* Targets Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/Pods-cameraTests-Quick"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - A5BB95D35970C3C680F429C2 /* Headers */ = { + 02DEB2322AA0F2E9AD171FED /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - A0855A9E298477B377CCED81 /* DSL.h in Headers */, - 6E0F5AECCF6F03172F05E212 /* NMBExceptionCapture.h in Headers */, - 2DD2E38C9E6579166798FEDF /* Nimble.h in Headers */, - 0C1C88128A14FB102A244FB2 /* Pods-cameraTests-Nimble-umbrella.h in Headers */, + 62E2F6A80ACB1CC1C12F0A84 /* DSL.h in Headers */, + 4DB4999BB8DBB43810B6DC73 /* NMBExceptionCapture.h in Headers */, + EEEE68FDF6DF9C68AABCB1EF /* Nimble.h in Headers */, + 5F2B169EBEEBB9158E0F4091 /* Pods-cameraTests-Nimble-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - A9AF48F077E44AB8816A6B3A /* Headers */ = { + 3FC06EEDD1E9B1615F81E05A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 2B03C1417FFA9C18A8AB1AA0 /* Pods-cameraTests-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B667064B3F9530CEE1FE0A09 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 9A32003B9A5212D5DB5DD242 /* NSString+QCKSelectorName.h in Headers */, - D222320726C05BFAA57F4125 /* Pods-cameraTests-Quick-umbrella.h in Headers */, - DAC661C91F943606AAA50D08 /* QCKDSL.h in Headers */, - B4B2AE2237712BD5C19B0118 /* Quick.h in Headers */, - CEED31385D717D6650D6215B /* QuickConfiguration.h in Headers */, - 83B6D03B51245190D8231710 /* QuickSpec.h in Headers */, + 45FC366B9905C2662261CF46 /* Pods-cameraTests-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 03098993B86EADB31B473BE6 /* Pods-cameraTests-Nimble */ = { + 5450F12D18236260DBDC1426 /* Pods-cameraTests */ = { isa = PBXNativeTarget; - buildConfigurationList = BB79BEC5BA1769570BD1E7DD /* Build configuration list for PBXNativeTarget "Pods-cameraTests-Nimble" */; + buildConfigurationList = 584229604CB9167009147B96 /* Build configuration list for PBXNativeTarget "Pods-cameraTests" */; buildPhases = ( - 763398E741FB1E12C12D84F2 /* Sources */, - 71C74F61879210D969B8CFF5 /* Frameworks */, - A5BB95D35970C3C680F429C2 /* Headers */, + 0113DE36E48EBF1827925437 /* Sources */, + C231EDE8C35C7D379CB96CF6 /* Frameworks */, + 3FC06EEDD1E9B1615F81E05A /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + 3F08A95AE54212B5311E1F4F /* PBXTargetDependency */, + ); + name = "Pods-cameraTests"; + productName = "Pods-cameraTests"; + productReference = 0A43DB02D37C42C4F7BE4D51 /* Pods_cameraTests.framework */; + productType = "com.apple.product-type.framework"; + }; + F31DCF4BC1F75A477673D8D8 /* Pods-cameraTests-Nimble */ = { + isa = PBXNativeTarget; + buildConfigurationList = C37EEE75303E967D57CD8DA4 /* Build configuration list for PBXNativeTarget "Pods-cameraTests-Nimble" */; + buildPhases = ( + B6A95D639391F9A2B4AB79A4 /* Sources */, + 86AED7A97ED978B78AA624B8 /* Frameworks */, + 02DEB2322AA0F2E9AD171FED /* Headers */, ); buildRules = ( ); @@ -462,173 +351,135 @@ ); name = "Pods-cameraTests-Nimble"; productName = "Pods-cameraTests-Nimble"; - productReference = 4BA526DB9E85C442548416FF /* Nimble.framework */; - productType = "com.apple.product-type.framework"; - }; - 13DE2AA1E6F090FB14C78F4F /* Pods-cameraTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5E163F4741EBD5093FF979A0 /* Build configuration list for PBXNativeTarget "Pods-cameraTests" */; - buildPhases = ( - A44FD4D3C268FE6ABFB86370 /* Sources */, - 6B1C7242D21308F1279EA301 /* Frameworks */, - A9AF48F077E44AB8816A6B3A /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - 5A3678F527D62842A8BE1355 /* PBXTargetDependency */, - CB41BD7C70E50072C531B672 /* PBXTargetDependency */, - ); - name = "Pods-cameraTests"; - productName = "Pods-cameraTests"; - productReference = 8D91B6199A9DEBE41D2FDA21 /* Pods_cameraTests.framework */; - productType = "com.apple.product-type.framework"; - }; - 63EE31CFA4335E182795B62C /* Pods-cameraTests-Quick */ = { - isa = PBXNativeTarget; - buildConfigurationList = 80E8FCBE643252A34AECC2C1 /* Build configuration list for PBXNativeTarget "Pods-cameraTests-Quick" */; - buildPhases = ( - 1295A3CC72F95948B0E41FFA /* Sources */, - 58094DDE21DBB51BC835A4A4 /* Frameworks */, - B667064B3F9530CEE1FE0A09 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Pods-cameraTests-Quick"; - productName = "Pods-cameraTests-Quick"; - productReference = 7B748F87FF3D770DF9007604 /* Quick.framework */; + productReference = 120601460EFA14EA14597810 /* Nimble.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - 937304FB055E8B31CCE17C33 /* Project object */ = { + 27C1A71C4CEE03720FF9424C /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0510; + LastUpgradeCheck = 0640; }; - buildConfigurationList = 5769F664A8E3A93FFCE45473 /* Build configuration list for PBXProject "Pods" */; + buildConfigurationList = 86873D4C70DE8A7BC5A71107 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, ); - mainGroup = 08F881C603574785D738721C; - productRefGroup = B1E20CDBA0845824CB7F7AD0 /* Products */; + mainGroup = EB884C39B7ED8AAF95E5DB4D; + productRefGroup = CE75AE2EC99DAE129C05D411 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 13DE2AA1E6F090FB14C78F4F /* Pods-cameraTests */, - 03098993B86EADB31B473BE6 /* Pods-cameraTests-Nimble */, - 63EE31CFA4335E182795B62C /* Pods-cameraTests-Quick */, + 5450F12D18236260DBDC1426 /* Pods-cameraTests */, + F31DCF4BC1F75A477673D8D8 /* Pods-cameraTests-Nimble */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 1295A3CC72F95948B0E41FFA /* Sources */ = { + 0113DE36E48EBF1827925437 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1DA17DDB55A971E2DCE64EC1 /* Callsite.swift in Sources */, - 566FBD2A832342493B5E1248 /* Closures.swift in Sources */, - DD4A57F896D7155C9288D542 /* Configuration.swift in Sources */, - EEB52C99E3DBDD83F1358174 /* DSL.swift in Sources */, - B140E0F3305E9B616E69FE43 /* Example.swift in Sources */, - A0CA0C07D5BC4D70CD1CFA7F /* ExampleGroup.swift in Sources */, - 6FBFFFC70B42C58008662472 /* ExampleHooks.swift in Sources */, - 44983BE29EC5942CA81CC746 /* ExampleMetadata.swift in Sources */, - 916B0B420F40CBBE80F1D53E /* Failure.swift in Sources */, - E6D1ADBA50F5D37ED62DF0D0 /* Filter.swift in Sources */, - 4588F215C7B4D62EB6D25B65 /* NSString+QCKSelectorName.m in Sources */, - 8530A93B446712333274DC5C /* Pods-cameraTests-Quick-dummy.m in Sources */, - AC5A06E42BB74303D071D511 /* QCKDSL.m in Sources */, - 5C2D96298D8C523D2D26EB3D /* QuickConfiguration.m in Sources */, - 55DDF0B03E9424CFFC3AF509 /* QuickSpec.m in Sources */, - 969C23D06E4FA1F290FE3246 /* SuiteHooks.swift in Sources */, - A3A73AA2DE52892441B7C07B /* World+DSL.swift in Sources */, - 89BA35CC59B06F790F4FB74B /* World.swift in Sources */, + EB0EBE7891841909EF97930C /* Pods-cameraTests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 763398E741FB1E12C12D84F2 /* Sources */ = { + B6A95D639391F9A2B4AB79A4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 88941222651EFD5099091A80 /* AdapterProtocols.swift in Sources */, - F024FD314F49ABBFB66A44D1 /* AssertionRecorder.swift in Sources */, - 4C8ACE662BA5A7740E9837F7 /* AsyncMatcherWrapper.swift in Sources */, - EA787861C31E6CF172E606A1 /* BasicMatcherWrapper.swift in Sources */, - C4BFDF7E8990139CB496F329 /* BeAKindOf.swift in Sources */, - B456F2687494679DCC788F13 /* BeAnInstanceOf.swift in Sources */, - EF0A2ACC9641B96FF65447F6 /* BeCloseTo.swift in Sources */, - 47D9B38EC06F0C2D754B30E8 /* BeEmpty.swift in Sources */, - DEE1E683E8D1993467BD5A04 /* BeGreaterThan.swift in Sources */, - 2C78C1C5EE6B462D3F98C015 /* BeGreaterThanOrEqualTo.swift in Sources */, - 5DADA0D163D6F2AB97923636 /* BeIdenticalTo.swift in Sources */, - 8F595832DC35B61579EE169E /* BeLessThan.swift in Sources */, - D4F6891916948345C4F34CB3 /* BeLessThanOrEqual.swift in Sources */, - 2583C08B2B578208A1F3EF74 /* BeLogical.swift in Sources */, - 469FB027B28EA5637451BCDA /* BeNil.swift in Sources */, - E9FB65406B698DDAA6049113 /* BeginWith.swift in Sources */, - D0571DA54BC746097B7E24DD /* Contain.swift in Sources */, - 31F138AF892521818A7A24DB /* DSL+Wait.swift in Sources */, - EEB7CEB54D7A73B5D6880666 /* DSL.m in Sources */, - 24EC168BC53587C5BAA31DF8 /* DSL.swift in Sources */, - DF251E97102A9CA07892ADD9 /* EndWith.swift in Sources */, - DAE797E73B09B1BC1949905F /* Equal.swift in Sources */, - ED6EE4512210821BD4A7CCE5 /* Expectation.swift in Sources */, - 148835A4D3AFD1C2E5AD45B3 /* Expression.swift in Sources */, - FA95CE02552C5BE7B6B28522 /* FailureMessage.swift in Sources */, - B3AA544E38464E781C8CC293 /* FullMatcherWrapper.swift in Sources */, - 0DE457D3E7DBE1ACD5C3D501 /* Functional.swift in Sources */, - 063E8FF4CDFCA6AE9064115D /* Match.swift in Sources */, - 91B8BA9DB5971B966053E3C7 /* MatcherFunc.swift in Sources */, - E6B6A48E6BECCE0DFD34E181 /* MatcherProtocols.swift in Sources */, - E92D205A4BFDC48A341C5303 /* NMBExceptionCapture.m in Sources */, - 2045ABFCB6047AAABAFD5951 /* NonNilMatcherWrapper.swift in Sources */, - 90A1E3E113A4854CDE879B7A /* ObjCMatcher.swift in Sources */, - 1E5F0C6E0DDCFCD7F013E317 /* Pods-cameraTests-Nimble-dummy.m in Sources */, - 805F293C8EBCB8B9DF9A72C3 /* Poll.swift in Sources */, - E5405948B5668C7744B2B500 /* RaisesException.swift in Sources */, - A53A614EA359BE4BC5E7A76F /* SourceLocation.swift in Sources */, - 215CFF9F5CAFD9259A55DAA8 /* Stringers.swift in Sources */, - C7C750539B66C4A25629C408 /* XCTestHandler.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A44FD4D3C268FE6ABFB86370 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 29767E33FB320295213ED819 /* Pods-cameraTests-dummy.m in Sources */, + 4E2F5FF51CFA702793EDC9CB /* AdapterProtocols.swift in Sources */, + B98295B00C4A782FE5538FCD /* AllPass.swift in Sources */, + 735DEA800DD01C8C698BCC12 /* AssertionRecorder.swift in Sources */, + 159C57E648A726FFC9339607 /* AsyncMatcherWrapper.swift in Sources */, + 01089148ABC131B7DAC0ADBC /* BasicMatcherWrapper.swift in Sources */, + D288B19C6D66D3E07BBAE689 /* BeAKindOf.swift in Sources */, + FFAE85B2E23251978FB44C57 /* BeAnInstanceOf.swift in Sources */, + 0E9D27CE257CD39FA0B3E71D /* BeCloseTo.swift in Sources */, + B03074DE8A8F7647A2C23FA4 /* BeEmpty.swift in Sources */, + 1D890FB86EC29E49C9C9F4CF /* BeGreaterThan.swift in Sources */, + E4D155ABCC2A49EC84FDAFEF /* BeGreaterThanOrEqualTo.swift in Sources */, + 6669C58A2D35EF1F0B59A70B /* BeIdenticalTo.swift in Sources */, + 471D0C01840B72E4AF8658FC /* BeLessThan.swift in Sources */, + 90E1907B18A6767B60124BEA /* BeLessThanOrEqual.swift in Sources */, + D11C27E82C73BD53F6F97C31 /* BeLogical.swift in Sources */, + 964879168653FACBEC120D11 /* BeNil.swift in Sources */, + C687DB314CDE705E154CE18B /* BeginWith.swift in Sources */, + 7F4663D1202D8EC7BB2838C8 /* Contain.swift in Sources */, + 7889D3EE297702D056F82D9C /* DSL+Wait.swift in Sources */, + CAF41CE8ECBF1667F86E0DF2 /* DSL.m in Sources */, + D9225694B5282883E4CB86A0 /* DSL.swift in Sources */, + 0CDE0A58ECCA978F3BC3CA31 /* EndWith.swift in Sources */, + 3EBBCEDABA12566CF98444A7 /* Equal.swift in Sources */, + 42E2926C0F5EF8D65B53A688 /* Expectation.swift in Sources */, + CB9EC2C617B609ABEE813D73 /* Expression.swift in Sources */, + 87E5689CFA6996489B04439F /* FailureMessage.swift in Sources */, + 4D7BCE4B2037A18F2BCF3B49 /* FullMatcherWrapper.swift in Sources */, + 9B146CBD42DCA7412BCA6155 /* Functional.swift in Sources */, + D384F02E9F6267A2D4A98244 /* Match.swift in Sources */, + 5323F82564C12D21885B12B1 /* MatcherFunc.swift in Sources */, + 85F70FED553970D25D69AA6B /* MatcherProtocols.swift in Sources */, + A624B3EA27F6600EADB9736F /* NMBExceptionCapture.m in Sources */, + 5FE1F6A8C608FB3CCDD44065 /* NimbleXCTestHandler.swift in Sources */, + 464B01A367749B5493612A3E /* NonNilMatcherWrapper.swift in Sources */, + 845E41849D0388DF8B095192 /* ObjCMatcher.swift in Sources */, + 17ACC643879106F24D53C641 /* Pods-cameraTests-Nimble-dummy.m in Sources */, + FF0F82E6307C7BCB94359952 /* Poll.swift in Sources */, + FED5D51DA977C4C75F56EC88 /* RaisesException.swift in Sources */, + 74F01F4457479C23F65B6DBE /* SourceLocation.swift in Sources */, + 14148724E009FC8FBA176881 /* Stringers.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 5A3678F527D62842A8BE1355 /* PBXTargetDependency */ = { + 3F08A95AE54212B5311E1F4F /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "Pods-cameraTests-Nimble"; - target = 03098993B86EADB31B473BE6 /* Pods-cameraTests-Nimble */; - targetProxy = 37D85D4EDDBAF1915445F71D /* PBXContainerItemProxy */; - }; - CB41BD7C70E50072C531B672 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Pods-cameraTests-Quick"; - target = 63EE31CFA4335E182795B62C /* Pods-cameraTests-Quick */; - targetProxy = 7CA981DCCC17BAE34B95333C /* PBXContainerItemProxy */; + target = F31DCF4BC1F75A477673D8D8 /* Pods-cameraTests-Nimble */; + targetProxy = 653B1B8D4FADBD49C1108AD3 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 00239A09BAF338DE4756F37E /* Debug */ = { + 6248E498F981E8EBAC638FAD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7FD9B1694D7D39B422068BF9 /* Pods-cameraTests.debug.xcconfig */; + baseConfigurationReference = 53AE1EAC4C9160383EDC753B /* Pods-cameraTests.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + INFOPLIST_FILE = "Target Support Files/Pods-cameraTests/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/Pods-cameraTests/Pods-cameraTests.modulemap"; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_NAME = Pods_cameraTests; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 9D9AF972159E4F33859A2C93 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1B544C5FB7AB727EEF74872F /* Pods-cameraTests.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -656,98 +507,9 @@ }; name = Debug; }; - 1B091D115A0C1092280F7931 /* Release */ = { + A411FA41F1DD1687A9192012 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DFE1A82827C4DC004907D038 /* Pods-cameraTests-Quick-Private.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Pods-cameraTests-Quick/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/Pods-cameraTests-Quick/Pods-cameraTests-Quick.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = Quick; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 20B00DF98765E75714720D04 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PREPROCESSOR_DEFINITIONS = "RELEASE=1"; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 3C81ABF0EA0FFD687A137559 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AE55690197160BABCF839CF6 /* Pods-cameraTests-Nimble-Private.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Pods-cameraTests-Nimble/Pods-cameraTests-Nimble-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Pods-cameraTests-Nimble/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/Pods-cameraTests-Nimble/Pods-cameraTests-Nimble.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = Nimble; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 9E796F71A1E7451766EAB9AE /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AE55690197160BABCF839CF6 /* Pods-cameraTests-Nimble-Private.xcconfig */; + baseConfigurationReference = 15CCC82CDE5BDB8775D89FC8 /* Pods-cameraTests-Nimble-Private.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; @@ -772,64 +534,7 @@ }; name = Release; }; - C6871B2830DDCE0A1BA3E7E4 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2E83D4416070EF016A049329 /* Pods-cameraTests.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - INFOPLIST_FILE = "Target Support Files/Pods-cameraTests/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/Pods-cameraTests/Pods-cameraTests.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_NAME = Pods_cameraTests; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - DA520EE373392C6DFDFD3B98 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DFE1A82827C4DC004907D038 /* Pods-cameraTests-Quick-Private.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_PREFIX_HEADER = "Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Pods-cameraTests-Quick/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/Pods-cameraTests-Quick/Pods-cameraTests-Quick.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_NAME = Quick; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - FFC7600F9623F21509735F5F /* Debug */ = { + ECB36D1D36C8A99B248E5F28 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -868,46 +573,99 @@ }; name = Debug; }; + EDCACA62C23CC326DD4B0FC3 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 15CCC82CDE5BDB8775D89FC8 /* Pods-cameraTests-Nimble-Private.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_PREFIX_HEADER = "Target Support Files/Pods-cameraTests-Nimble/Pods-cameraTests-Nimble-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Pods-cameraTests-Nimble/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/Pods-cameraTests-Nimble/Pods-cameraTests-Nimble.modulemap"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_NAME = Nimble; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + F1EB43F79943B44B27E22ADE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_PREPROCESSOR_DEFINITIONS = "RELEASE=1"; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 5769F664A8E3A93FFCE45473 /* Build configuration list for PBXProject "Pods" */ = { + 584229604CB9167009147B96 /* Build configuration list for PBXNativeTarget "Pods-cameraTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - FFC7600F9623F21509735F5F /* Debug */, - 20B00DF98765E75714720D04 /* Release */, + 9D9AF972159E4F33859A2C93 /* Debug */, + 6248E498F981E8EBAC638FAD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5E163F4741EBD5093FF979A0 /* Build configuration list for PBXNativeTarget "Pods-cameraTests" */ = { + 86873D4C70DE8A7BC5A71107 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 00239A09BAF338DE4756F37E /* Debug */, - C6871B2830DDCE0A1BA3E7E4 /* Release */, + ECB36D1D36C8A99B248E5F28 /* Debug */, + F1EB43F79943B44B27E22ADE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 80E8FCBE643252A34AECC2C1 /* Build configuration list for PBXNativeTarget "Pods-cameraTests-Quick" */ = { + C37EEE75303E967D57CD8DA4 /* Build configuration list for PBXNativeTarget "Pods-cameraTests-Nimble" */ = { isa = XCConfigurationList; buildConfigurations = ( - DA520EE373392C6DFDFD3B98 /* Debug */, - 1B091D115A0C1092280F7931 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - BB79BEC5BA1769570BD1E7DD /* Build configuration list for PBXNativeTarget "Pods-cameraTests-Nimble" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3C81ABF0EA0FFD687A137559 /* Debug */, - 9E796F71A1E7451766EAB9AE /* Release */, + EDCACA62C23CC326DD4B0FC3 /* Debug */, + A411FA41F1DD1687A9192012 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 937304FB055E8B31CCE17C33 /* Project object */; + rootObject = 27C1A71C4CEE03720FF9424C /* Project object */; } diff --git a/Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/Pods-cameraTests-Nimble.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/Pods-cameraTests-Nimble.xcscheme index ac6607b..6c979c0 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/Pods-cameraTests-Nimble.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/Pods-cameraTests-Nimble.xcscheme @@ -1,6 +1,6 @@ diff --git a/Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/Pods-cameraTests-Quick.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/Pods-cameraTests-Quick.xcscheme deleted file mode 100644 index 9b866fd..0000000 --- a/Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/Pods-cameraTests-Quick.xcscheme +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/Pods-cameraTests.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/Pods-cameraTests.xcscheme index ca5445c..30d78b1 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/Pods-cameraTests.xcscheme +++ b/Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/Pods-cameraTests.xcscheme @@ -1,6 +1,6 @@ diff --git a/Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/xcschememanagement.plist index a5b3adb..dad66bf 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/nataliaterlecka.xcuserdatad/xcschemes/xcschememanagement.plist @@ -9,11 +9,6 @@ isShown - Pods-cameraTests-Quick.xcscheme - - isShown - - Pods-cameraTests.xcscheme isShown @@ -22,17 +17,12 @@ SuppressBuildableAutocreation - 03098993B86EADB31B473BE6 + 5450F12D18236260DBDC1426 primary - 13DE2AA1E6F090FB14C78F4F - - primary - - - 63EE31CFA4335E182795B62C + F31DCF4BC1F75A477673D8D8 primary diff --git a/Pods/Quick/LICENSE b/Pods/Quick/LICENSE deleted file mode 100644 index e900165..0000000 --- a/Pods/Quick/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2014, Quick Team - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Pods/Quick/Quick/Callsite.swift b/Pods/Quick/Quick/Callsite.swift deleted file mode 100644 index c212a1a..0000000 --- a/Pods/Quick/Quick/Callsite.swift +++ /dev/null @@ -1,28 +0,0 @@ -/** - An object encapsulating the file and line number at which - a particular example is defined. -*/ -@objc final public class Callsite: Equatable { - /** - The absolute path of the file in which an example is defined. - */ - public let file: String - - /** - The line number on which an example is defined. - */ - public let line: Int - - internal init(file: String, line: Int) { - self.file = file - self.line = line - } -} - -/** - Returns a boolean indicating whether two Callsite objects are equal. - If two callsites are in the same file and on the same line, they must be equal. -*/ -public func ==(lhs: Callsite, rhs: Callsite) -> Bool { - return lhs.file == rhs.file && lhs.line == rhs.line -} diff --git a/Pods/Quick/Quick/Configuration/Configuration.swift b/Pods/Quick/Quick/Configuration/Configuration.swift deleted file mode 100644 index c31ee76..0000000 --- a/Pods/Quick/Quick/Configuration/Configuration.swift +++ /dev/null @@ -1,147 +0,0 @@ -/** - A closure that temporarily exposes a Configuration object within - the scope of the closure. -*/ -public typealias QuickConfigurer = (configuration: Configuration) -> () - -/** - A closure that, given metadata about an example, returns a boolean value - indicating whether that example should be run. -*/ -public typealias ExampleFilter = (example: Example) -> Bool - -/** - A configuration encapsulates various options you can use - to configure Quick's behavior. -*/ -@objc final public class Configuration { - 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 - } - }] - - /** - Run all examples if none match the configured filters. True by default. - */ - public var runAllWhenEverythingFiltered = true - - /** - Registers an inclusion filter. - - All examples are filtered using all inclusion filters. - The remaining examples are run. If no examples remain, all examples are run. - - :param: filter A filter that, given an example, returns a value indicating - whether that example should be included in the examples - that are run. - */ - public func include(filter: ExampleFilter) { - inclusionFilters.append(filter) - } - - /** - Registers an exclusion filter. - - All examples that remain after being filtered by the inclusion filters are - then filtered via all exclusion filters. - - :param: filter A filter that, given an example, returns a value indicating - whether that example should be excluded from the examples - that are run. - */ - public func exclude(filter: ExampleFilter) { - exclusionFilters.append(filter) - } - - /** - Identical to Quick.Configuration.beforeEach, except the closure is - provided with metadata on the example that the closure is being run - prior to. - */ - @objc(beforeEachWithMetadata:) - public func beforeEach(closure: BeforeExampleWithMetadataClosure) { - exampleHooks.appendBefore(closure) - } - - /** - Like Quick.DSL.beforeEach, this configures Quick to execute the - 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 - 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, - will be executed in the order they're defined. - - :param: closure The closure to be executed before each example - in the test suite. - */ - public func beforeEach(closure: BeforeExampleClosure) { - exampleHooks.appendBefore(closure) - } - - /** - Identical to Quick.Configuration.afterEach, except the closure - is provided with metadata on the example that the closure is being - run after. - */ - @objc(afterEachWithMetadata:) - public func afterEach(closure: AfterExampleWithMetadataClosure) { - exampleHooks.appendAfter(closure) - } - - /** - Like Quick.DSL.afterEach, this configures Quick to execute the - 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 - 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, - will be executed in the order they're defined. - - :param: closure The closure to be executed before each example - in the test suite. - */ - public func afterEach(closure: AfterExampleClosure) { - exampleHooks.appendAfter(closure) - } - - /** - Like Quick.DSL.beforeSuite, this configures Quick to execute - the given closure prior to any and all examples that are run. - The two methods are functionally equivalent. - */ - public func beforeSuite(closure: BeforeSuiteClosure) { - suiteHooks.appendBefore(closure) - } - - /** - Like Quick.DSL.afterSuite, this configures Quick to execute - the given closure after all examples have been run. - The two methods are functionally equivalent. - */ - public func afterSuite(closure: AfterSuiteClosure) { - suiteHooks.appendAfter(closure) - } -} diff --git a/Pods/Quick/Quick/Configuration/QuickConfiguration.h b/Pods/Quick/Quick/Configuration/QuickConfiguration.h deleted file mode 100644 index 5646199..0000000 --- a/Pods/Quick/Quick/Configuration/QuickConfiguration.h +++ /dev/null @@ -1,30 +0,0 @@ -#import - -@class Configuration; - -/** - Subclass QuickConfiguration and override the +[QuickConfiguration configure:] - method in order to configure how Quick behaves when running specs, or to define - shared examples that are used across spec files. - */ -@interface QuickConfiguration : NSObject - -/** - This method is executed on each subclass of this class before Quick runs - any examples. You may override this method on as many subclasses as you like, but - there is no guarantee as to the order in which these methods are executed. - - You can override this method in order to: - - 1. Configure how Quick behaves, by modifying properties on the Configuration object. - Setting the same properties in several methods has undefined behavior. - - 2. Define shared examples using `sharedExamples`. - - @param configuration A mutable object that is used to configure how Quick behaves on - a framework level. For details on all the options, see the - documentation in Configuration.swift. - */ -+ (void)configure:(Configuration *)configuration; - -@end diff --git a/Pods/Quick/Quick/Configuration/QuickConfiguration.m b/Pods/Quick/Quick/Configuration/QuickConfiguration.m deleted file mode 100644 index 6479226..0000000 --- a/Pods/Quick/Quick/Configuration/QuickConfiguration.m +++ /dev/null @@ -1,83 +0,0 @@ -#import "QuickConfiguration.h" -#import -#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); - } -} - -@implementation QuickConfiguration - -#pragma mark - Object Lifecycle - -/** - QuickConfiguration is not meant to be instantiated; it merely provides a hook - for users to configure how Quick behaves. Raise an exception if an instance of - QuickConfiguration is created. - */ -- (instancetype)init { - NSString *className = NSStringFromClass([self class]); - NSString *selectorName = NSStringFromSelector(@selector(configure:)); - [NSException raise:NSInternalInconsistencyException - format:@"%@ is not meant to be instantiated; " - @"subclass %@ and override %@ to configure Quick.", - className, className, selectorName]; - return nil; -} - -#pragma mark - NSObject Overrides - -/** - Hook into when QuickConfiguration is initialized in the runtime in order to - call +[QuickConfiguration configure:] on each of its subclasses. - */ -+ (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]; - }); - } -} - -#pragma mark - Public Interface - -+ (void)configure:(Configuration *)configuration { } - -@end diff --git a/Pods/Quick/Quick/DSL/DSL.swift b/Pods/Quick/Quick/DSL/DSL.swift deleted file mode 100644 index dc2f31e..0000000 --- a/Pods/Quick/Quick/DSL/DSL.swift +++ /dev/null @@ -1,227 +0,0 @@ -/** - Defines a closure to be run prior to any examples in the test suite. - You may define an unlimited number of these closures, but there is no - guarantee as to the order in which they're run. - - If the test suite crashes before the first example is run, this closure - will not be executed. - - :param: closure The closure to be run prior to any examples in the test suite. -*/ -public func beforeSuite(closure: BeforeSuiteClosure) { - World.sharedWorld().beforeSuite(closure) -} - -/** - Defines a closure to be run after all of the examples in the test suite. - You may define an unlimited number of these closures, but there is no - guarantee as to the order in which they're run. - - If the test suite crashes before all examples are run, this closure - will not be executed. - - :param: closure The closure to be run after all of the examples in the test suite. -*/ -public func afterSuite(closure: AfterSuiteClosure) { - World.sharedWorld().afterSuite(closure) -} - -/** - Defines a group of shared examples. These examples can be re-used in several locations - by using the `itBehavesLike` function. - - :param: name The name of the shared example group. This must be unique across all shared example - groups defined in a test suite. - :param: closure A closure containing the examples. This behaves just like an example group defined - using `describe` or `context`--the closure may contain any number of `beforeEach` - and `afterEach` closures, as well as any number of examples (defined using `it`). -*/ -public func sharedExamples(name: String, closure: () -> ()) { - World.sharedWorld().sharedExamples(name, closure: { (NSDictionary) in closure() }) -} - -/** - Defines a group of shared examples. These examples can be re-used in several locations - by using the `itBehavesLike` function. - - :param: name The name of the shared example group. This must be unique across all shared example - groups defined in a test suite. - :param: closure A closure containing the examples. This behaves just like an example group defined - using `describe` or `context`--the closure may contain any number of `beforeEach` - and `afterEach` closures, as well as any number of examples (defined using `it`). - - The closure takes a SharedExampleContext as an argument. This context is a function - that can be executed to retrieve parameters passed in via an `itBehavesLike` function. -*/ -public func sharedExamples(name: String, closure: SharedExampleClosure) { - World.sharedWorld().sharedExamples(name, closure: closure) -} - -/** - Defines an example group. Example groups are logical groupings of examples. - Example groups can share setup and teardown code. - - :param: description An arbitrary string describing the example group. - :param: closure A closure that can contain other examples. - :param: flags A mapping of string keys to booleans that can be used to filter examples or example groups. -*/ -public func describe(description: String, closure: () -> (), flags: FilterFlags = [:]) { - World.sharedWorld().describe(description, closure: closure, flags: flags) -} - -/** - Defines an example group. Equivalent to `describe`. -*/ -public func context(description: String, closure: () -> (), flags: FilterFlags = [:]) { - describe(description, closure, flags: flags) -} - -/** - Defines a closure to be run prior to each example in the current example - group. This closure is not run for pending or otherwise disabled examples. - An example group may contain an unlimited number of beforeEach. They'll be - run in the order they're defined, but you shouldn't rely on that behavior. - - :param: closure The closure to be run prior to each example. -*/ -public func beforeEach(closure: BeforeExampleClosure) { - World.sharedWorld().beforeEach(closure) -} - -/** - Identical to Quick.DSL.beforeEach, except the closure is provided with - metadata on the example that the closure is being run prior to. -*/ -public func beforeEach(#closure: BeforeExampleWithMetadataClosure) { - World.sharedWorld().beforeEach(closure: closure) -} - -/** - Defines a closure to be run after each example in the current example - group. This closure is not run for pending or otherwise disabled examples. - An example group may contain an unlimited number of afterEach. They'll be - run in the order they're defined, but you shouldn't rely on that behavior. - - :param: closure The closure to be run after each example. -*/ -public func afterEach(closure: AfterExampleClosure) { - World.sharedWorld().afterEach(closure) -} - -/** - Identical to Quick.DSL.afterEach, except the closure is provided with - metadata on the example that the closure is being run after. -*/ -public func afterEach(#closure: AfterExampleWithMetadataClosure) { - World.sharedWorld().afterEach(closure: closure) -} - -/** - Defines an example. Examples use assertions to demonstrate how code should - behave. These are like "tests" in XCTest. - - :param: description An arbitrary string describing what the example is meant to specify. - :param: closure A closure that can contain assertions. - :param: flags A mapping of string keys to booleans that can be used to filter examples or example groups. - Empty by default. - :param: file The absolute path to the file containing the example. A sensible default is provided. - :param: line The line containing the example. A sensible default is provided. -*/ -public func it(description: String, closure: () -> (), flags: FilterFlags = [:], file: String = __FILE__, line: Int = __LINE__) { - World.sharedWorld().it(description, flags: flags, file: file, line: line, closure: closure) -} - -/** - Inserts the examples defined using a `sharedExamples` function into the current example group. - The shared examples are executed at this location, as if they were written out manually. - - :param: name The name of the shared examples group to be executed. This must be identical to the - name of a shared examples group defined using `sharedExamples`. If there are no shared - examples that match the name given, an exception is thrown and the test suite will crash. - :param: flags A mapping of string keys to booleans that can be used to filter examples or example groups. - Empty by default. - :param: file The absolute path to the file containing the current example group. A sensible default is provided. - :param: line The line containing the current example group. A sensible default is provided. -*/ -public func itBehavesLike(name: String, flags: FilterFlags = [:], file: String = __FILE__, line: Int = __LINE__) { - itBehavesLike(name, { return [:] }, flags: flags, file: file, line: line) -} - -/** - Inserts the examples defined using a `sharedExamples` function into the current example group. - The shared examples are executed at this location, as if they were written out manually. - This function also passes those shared examples a context that can be evaluated to give the shared - examples extra information on the subject of the example. - - :param: name The name of the shared examples group to be executed. This must be identical to the - name of a shared examples group defined using `sharedExamples`. If there are no shared - examples that match the name given, an exception is thrown and the test suite will crash. - :param: sharedExampleContext A closure that, when evaluated, returns key-value pairs that provide the - shared examples with extra information on the subject of the example. - :param: flags A mapping of string keys to booleans that can be used to filter examples or example groups. - Empty by default. - :param: file The absolute path to the file containing the current example group. A sensible default is provided. - :param: line The line containing the current example group. A sensible default is provided. -*/ -public func itBehavesLike(name: String, sharedExampleContext: SharedExampleContext, flags: FilterFlags = [:], file: String = __FILE__, line: Int = __LINE__) { - World.sharedWorld().itBehavesLike(name, sharedExampleContext: sharedExampleContext, flags: flags, file: file, line: line) -} - -/** - Defines an example or example group that should not be executed. Use `pending` to temporarily disable - examples or groups that should not be run yet. - - :param: description An arbitrary string describing the example or example group. - :param: closure A closure that will not be evaluated. -*/ -public func pending(description: String, closure: () -> ()) { - World.sharedWorld().pending(description, closure: closure) -} - -/** - Use this to quickly mark a `describe` closure as pending. - This disables all examples within the closure. -*/ -public func xdescribe(description: String, closure: () -> (), flags: FilterFlags) { - World.sharedWorld().xdescribe(description, closure: closure, flags: flags) -} - -/** - Use this to quickly mark a `context` closure as pending. - This disables all examples within the closure. -*/ -public func xcontext(description: String, closure: () -> (), flags: FilterFlags) { - xdescribe(description, closure, flags) -} - -/** - 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, closure: () -> (), flags: FilterFlags = [:], file: String = __FILE__, line: Int = __LINE__) { - World.sharedWorld().xit(description, flags: flags, file: file, line: line, closure: closure) -} - -/** - Use this to quickly focus a `describe` closure, focusing the examples in the closure. - If any examples in the test suite are focused, only those examples are executed. - This trumps any explicitly focused or unfocused examples within the closure--they are all treated as focused. -*/ -public func fdescribe(description: String, closure: () -> (), flags: FilterFlags = [:]) { - World.sharedWorld().fdescribe(description, closure: closure, flags: flags) -} - -/** - Use this to quickly focus a `context` closure. Equivalent to `fdescribe`. -*/ -public func fcontext(description: String, closure: () -> (), flags: FilterFlags = [:]) { - fdescribe(description, closure, flags: flags) -} - -/** - 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, closure: () -> (), flags: FilterFlags = [:], file: String = __FILE__, line: Int = __LINE__) { - World.sharedWorld().fit(description, flags: flags, file: file, line: line, closure: closure) -} diff --git a/Pods/Quick/Quick/DSL/QCKDSL.h b/Pods/Quick/Quick/DSL/QCKDSL.h deleted file mode 100644 index 7e63cbd..0000000 --- a/Pods/Quick/Quick/DSL/QCKDSL.h +++ /dev/null @@ -1,211 +0,0 @@ -#import - -/** - Provides a hook for Quick to be configured before any examples are run. - Within this scope, override the +[QuickConfiguration configure:] method - to set properties on a configuration object to customize Quick behavior. - For details, see the documentation for Configuraiton.swift. - - @param name The name of the configuration class. Like any Objective-C - class name, this must be unique to the current runtime - environment. - */ -#define QuickConfigurationBegin(name) \ - @interface name : QuickConfiguration; @end \ - @implementation name \ - - -/** - Marks the end of a Quick configuration. - Make sure you put this after `QuickConfigurationBegin`. - */ -#define QuickConfigurationEnd \ - @end \ - - -/** - Defines a new QuickSpec. Define examples and example groups within the space - between this and `QuickSpecEnd`. - - @param name The name of the spec class. Like any Objective-C class name, this - must be unique to the current runtime environment. - */ -#define QuickSpecBegin(name) \ - @interface name : QuickSpec; @end \ - @implementation name \ - - (void)spec { \ - - -/** - Marks the end of a QuickSpec. Make sure you put this after `QuickSpecBegin`. - */ -#define QuickSpecEnd \ - } \ - @end \ - -typedef NSDictionary *(^QCKDSLSharedExampleContext)(void); -typedef void (^QCKDSLSharedExampleBlock)(QCKDSLSharedExampleContext); -typedef void (^QCKDSLEmptyBlock)(void); - -extern void qck_beforeSuite(QCKDSLEmptyBlock closure); -extern void qck_afterSuite(QCKDSLEmptyBlock closure); -extern void qck_sharedExamples(NSString *name, QCKDSLSharedExampleBlock closure); -extern void qck_describe(NSString *description, QCKDSLEmptyBlock closure); -extern void qck_context(NSString *description, QCKDSLEmptyBlock closure); -extern void qck_beforeEach(QCKDSLEmptyBlock closure); -extern void qck_afterEach(QCKDSLEmptyBlock closure); -extern void qck_pending(NSString *description, QCKDSLEmptyBlock closure); -extern void qck_xdescribe(NSString *description, QCKDSLEmptyBlock closure); -extern void qck_xcontext(NSString *description, QCKDSLEmptyBlock closure); -extern void qck_fdescribe(NSString *description, QCKDSLEmptyBlock closure); -extern void qck_fcontext(NSString *description, QCKDSLEmptyBlock closure); - -#ifndef QUICK_DISABLE_SHORT_SYNTAX -/** - Defines a closure to be run prior to any examples in the test suite. - You may define an unlimited number of these closures, but there is no - guarantee as to the order in which they're run. - - If the test suite crashes before the first example is run, this closure - will not be executed. - - @param closure The closure to be run prior to any examples in the test suite. - */ -static inline void beforeSuite(QCKDSLEmptyBlock closure) { - qck_beforeSuite(closure); -} - - -/** - Defines a closure to be run after all of the examples in the test suite. - You may define an unlimited number of these closures, but there is no - guarantee as to the order in which they're run. - - If the test suite crashes before all examples are run, this closure - will not be executed. - - @param closure The closure to be run after all of the examples in the test suite. - */ -static inline void afterSuite(QCKDSLEmptyBlock closure) { - qck_afterSuite(closure); -} - -/** - Defines a group of shared examples. These examples can be re-used in several locations - by using the `itBehavesLike` function. - - @param name The name of the shared example group. This must be unique across all shared example - groups defined in a test suite. - @param closure A closure containing the examples. This behaves just like an example group defined - using `describe` or `context`--the closure may contain any number of `beforeEach` - and `afterEach` closures, as well as any number of examples (defined using `it`). - */ -static inline void sharedExamples(NSString *name, QCKDSLSharedExampleBlock closure) { - qck_sharedExamples(name, closure); -} - -/** - Defines an example group. Example groups are logical groupings of examples. - Example groups can share setup and teardown code. - - @param description An arbitrary string describing the example group. - @param closure A closure that can contain other examples. - */ -static inline void describe(NSString *description, QCKDSLEmptyBlock closure) { - qck_describe(description, closure); -} - -/** - Defines an example group. Equivalent to `describe`. - */ -static inline void context(NSString *description, QCKDSLEmptyBlock closure) { - qck_context(description, closure); -} - -/** - Defines a closure to be run prior to each example in the current example - group. This closure is not run for pending or otherwise disabled examples. - An example group may contain an unlimited number of beforeEach. They'll be - run in the order they're defined, but you shouldn't rely on that behavior. - - @param closure The closure to be run prior to each example. - */ -static inline void beforeEach(QCKDSLEmptyBlock closure) { - qck_beforeEach(closure); -} - -/** - Defines a closure to be run after each example in the current example - group. This closure is not run for pending or otherwise disabled examples. - An example group may contain an unlimited number of afterEach. They'll be - run in the order they're defined, but you shouldn't rely on that behavior. - - @param closure The closure to be run after each example. - */ -static inline void afterEach(QCKDSLEmptyBlock closure) { - qck_afterEach(closure); -} - -/** - Defines an example or example group that should not be executed. Use `pending` to temporarily disable - examples or groups that should not be run yet. - - @param description An arbitrary string describing the example or example group. - @param closure A closure that will not be evaluated. - */ -static inline void pending(NSString *description, QCKDSLEmptyBlock closure) { - qck_pending(description, closure); -} - -/** - Use this to quickly mark a `describe` block as pending. - This disables all examples within the block. - */ -static inline void xdescribe(NSString *description, QCKDSLEmptyBlock closure) { - qck_xdescribe(description, closure); -} - -/** - Use this to quickly mark a `context` block as pending. - This disables all examples within the block. - */ -static inline void xcontext(NSString *description, QCKDSLEmptyBlock closure) { - qck_xcontext(description, closure); -} - -/** - Use this to quickly focus a `describe` block, focusing the examples in the block. - If any examples in the test suite are focused, only those examples are executed. - This trumps any explicitly focused or unfocused examples within the block--they are all treated as focused. - */ -static inline void fdescribe(NSString *description, QCKDSLEmptyBlock closure) { - qck_fdescribe(description, closure); -} - -/** - Use this to quickly focus a `context` block. Equivalent to `fdescribe`. - */ -static inline void fcontext(NSString *description, QCKDSLEmptyBlock closure) { - qck_fcontext(description, closure); -} - -#define it qck_it -#define xit qck_xit -#define fit qck_fit -#define itBehavesLike qck_itBehavesLike -#define xitBehavesLike qck_xitBehavesLike -#define fitBehavesLike qck_fitBehavesLike -#endif - -#define qck_it qck_it_builder(@{}, @(__FILE__), __LINE__) -#define qck_xit qck_it_builder(@{Filter.pending: @YES}, @(__FILE__), __LINE__) -#define qck_fit qck_it_builder(@{Filter.focused: @YES}, @(__FILE__), __LINE__) -#define qck_itBehavesLike qck_itBehavesLike_builder(@{}, @(__FILE__), __LINE__) -#define qck_xitBehavesLike qck_itBehavesLike_builder(@{Filter.pending: @YES}, @(__FILE__), __LINE__) -#define qck_fitBehavesLike qck_itBehavesLike_builder(@{Filter.focused: @YES}, @(__FILE__), __LINE__) - -typedef void (^QCKItBlock)(NSString *description, QCKDSLEmptyBlock closure); -typedef void (^QCKItBehavesLikeBlock)(NSString *description, QCKDSLSharedExampleContext context); - -extern QCKItBlock qck_it_builder(NSDictionary *flags, NSString *file, NSUInteger line); -extern QCKItBehavesLikeBlock qck_itBehavesLike_builder(NSDictionary *flags, NSString *file, NSUInteger line); diff --git a/Pods/Quick/Quick/DSL/QCKDSL.m b/Pods/Quick/Quick/DSL/QCKDSL.m deleted file mode 100644 index 6b7d1f3..0000000 --- a/Pods/Quick/Quick/DSL/QCKDSL.m +++ /dev/null @@ -1,70 +0,0 @@ -#import "QCKDSL.h" -#import - -void qck_beforeSuite(QCKDSLEmptyBlock closure) { - [[World sharedWorld] beforeSuite:closure]; -} - -void qck_afterSuite(QCKDSLEmptyBlock closure) { - [[World sharedWorld] afterSuite:closure]; -} - -void qck_sharedExamples(NSString *name, QCKDSLSharedExampleBlock closure) { - [[World sharedWorld] sharedExamples:name closure:closure]; -} - -void qck_describe(NSString *description, QCKDSLEmptyBlock closure) { - [[World sharedWorld] describe:description closure:closure flags:@{}]; -} - -void qck_context(NSString *description, QCKDSLEmptyBlock closure) { - qck_describe(description, closure); -} - -void qck_beforeEach(QCKDSLEmptyBlock closure) { - [[World sharedWorld] beforeEach:closure]; -} - -void qck_afterEach(QCKDSLEmptyBlock closure) { - [[World sharedWorld] afterEach:closure]; -} - -QCKItBlock qck_it_builder(NSDictionary *flags, NSString *file, NSUInteger line) { - return ^(NSString *description, QCKDSLEmptyBlock closure) { - [[World sharedWorld] itWithDescription:description - flags:flags - file:file - line:line - closure:closure]; - }; -} - -QCKItBehavesLikeBlock qck_itBehavesLike_builder(NSDictionary *flags, NSString *file, NSUInteger line) { - return ^(NSString *name, QCKDSLSharedExampleContext context) { - [[World sharedWorld] itBehavesLikeSharedExampleNamed:name - sharedExampleContext:context - flags:flags - file:file - line:line]; - }; -} - -void qck_pending(NSString *description, QCKDSLEmptyBlock closure) { - [[World sharedWorld] pending:description closure:closure]; -} - -void qck_xdescribe(NSString *description, QCKDSLEmptyBlock closure) { - [[World sharedWorld] xdescribe:description closure:closure flags:@{}]; -} - -void qck_xcontext(NSString *description, QCKDSLEmptyBlock closure) { - qck_xdescribe(description, closure); -} - -void qck_fdescribe(NSString *description, QCKDSLEmptyBlock closure) { - [[World sharedWorld] fdescribe:description closure:closure flags:@{}]; -} - -void qck_fcontext(NSString *description, QCKDSLEmptyBlock closure) { - qck_fdescribe(description, closure); -} diff --git a/Pods/Quick/Quick/DSL/World+DSL.swift b/Pods/Quick/Quick/DSL/World+DSL.swift deleted file mode 100644 index 842963b..0000000 --- a/Pods/Quick/Quick/DSL/World+DSL.swift +++ /dev/null @@ -1,100 +0,0 @@ -/** - Adds methods to World to support top-level DSL functions (Swift) and - macros (Objective-C). These functions map directly to the DSL that test - writers use in their specs. -*/ -extension World { - public func beforeSuite(closure: BeforeSuiteClosure) { - suiteHooks.appendBefore(closure) - } - - public func afterSuite(closure: AfterSuiteClosure) { - suiteHooks.appendAfter(closure) - } - - public func sharedExamples(name: String, closure: SharedExampleClosure) { - registerSharedExample(name, closure: closure) - } - - public func describe(description: String, closure: () -> (), flags: FilterFlags) { - var group = ExampleGroup(description: description, flags: flags) - currentExampleGroup!.appendExampleGroup(group) - currentExampleGroup = group - closure() - currentExampleGroup = group.parent - } - - public func context(description: String, closure: () -> (), flags: FilterFlags) { - self.describe(description, closure: closure, flags: flags) - } - - public func fdescribe(description: String, closure: () -> (), flags: FilterFlags) { - var focusedFlags = flags - focusedFlags[Filter.focused] = true - self.describe(description, closure: closure, flags: focusedFlags) - } - - public func xdescribe(description: String, closure: () -> (), flags: FilterFlags) { - var pendingFlags = flags - pendingFlags[Filter.pending] = true - self.describe(description, closure: closure, flags: pendingFlags) - } - - public func beforeEach(closure: BeforeExampleClosure) { - currentExampleGroup!.hooks.appendBefore(closure) - } - - public func beforeEach(#closure: BeforeExampleWithMetadataClosure) { - currentExampleGroup!.hooks.appendBefore(closure) - } - - public func afterEach(closure: AfterExampleClosure) { - currentExampleGroup!.hooks.appendAfter(closure) - } - - public func afterEach(#closure: AfterExampleWithMetadataClosure) { - currentExampleGroup!.hooks.appendAfter(closure) - } - - @objc(itWithDescription:flags:file:line:closure:) - public func it(description: String, flags: FilterFlags, file: String, line: Int, closure: () -> ()) { - let callsite = Callsite(file: file, line: line) - let example = Example(description: description, callsite: callsite, flags: flags, closure) - currentExampleGroup!.appendExample(example) - } - - @objc(fitWithDescription:flags:file:line:closure:) - public func fit(description: String, flags: FilterFlags, file: String, line: Int, closure: () -> ()) { - var focusedFlags = flags - focusedFlags[Filter.focused] = true - self.it(description, flags: focusedFlags, file: file, line: line, closure: closure) - } - - @objc(xitWithDescription:flags:file:line:closure:) - public func xit(description: String, flags: FilterFlags, file: String, line: Int, closure: () -> ()) { - var pendingFlags = flags - pendingFlags[Filter.pending] = true - self.it(description, flags: pendingFlags, file: file, line: line, closure: closure) - } - - @objc(itBehavesLikeSharedExampleNamed:sharedExampleContext:flags:file:line:) - public func itBehavesLike(name: String, sharedExampleContext: SharedExampleContext, flags: FilterFlags, file: String, line: Int) { - let callsite = Callsite(file: file, line: line) - let closure = World.sharedWorld().sharedExample(name) - - var group = ExampleGroup(description: name, flags: flags) - currentExampleGroup!.appendExampleGroup(group) - currentExampleGroup = group - closure(sharedExampleContext) - currentExampleGroup!.walkDownExamples { (example: Example) in - example.isSharedExample = true - example.callsite = callsite - } - - currentExampleGroup = group.parent - } - - public func pending(description: String, closure: () -> ()) { - println("Pending: \(description)") - } -} diff --git a/Pods/Quick/Quick/Example.swift b/Pods/Quick/Quick/Example.swift deleted file mode 100644 index 78d935f..0000000 --- a/Pods/Quick/Quick/Example.swift +++ /dev/null @@ -1,103 +0,0 @@ -private var numberOfExamplesRun = 0 - -/** - Examples, defined with the `it` function, use assertions to - demonstrate how code should behave. These are like "tests" in XCTest. -*/ -@objc final public class Example: Equatable { - /** - A boolean indicating whether the example is a shared example; - i.e.: whether it is an example defined with `itBehavesLike`. - */ - public var isSharedExample = false - - /** - The site at which the example is defined. - This must be set correctly in order for Xcode to highlight - the correct line in red when reporting a failure. - */ - public var callsite: Callsite - - weak internal var group: ExampleGroup? - - private let description: String - private let closure: () -> () - private let flags: FilterFlags - - internal init(description: String, callsite: Callsite, flags: FilterFlags, closure: () -> ()) { - self.description = description - self.closure = closure - self.callsite = callsite - self.flags = flags - } - - /** - The example name. A name is a concatenation of the name of - the example group the example belongs to, followed by the - description of the example itself. - - The example name is used to generate a test method selector - to be displayed in Xcode's test navigator. - */ - public var name: String { - switch group!.name { - case .Some(let groupName): return "\(groupName), \(description)" - case .None: return description - } - } - - /** - Executes the example closure, as well as all before and after - closures defined in the its surrounding example groups. - */ - public func run() { - let world = World.sharedWorld() - - if numberOfExamplesRun == 0 { - world.suiteHooks.executeBefores() - } - - let exampleMetadata = ExampleMetadata(example: self, exampleIndex: numberOfExamplesRun) - world.currentExampleMetadata = exampleMetadata - - world.exampleHooks.executeBefores(exampleMetadata) - for before in group!.befores { - before(exampleMetadata: exampleMetadata) - } - - closure() - - for after in group!.afters { - after(exampleMetadata: exampleMetadata) - } - world.exampleHooks.executeAfters(exampleMetadata) - - ++numberOfExamplesRun - - if !world.isRunningAdditionalSuites && numberOfExamplesRun >= world.exampleCount { - world.suiteHooks.executeAfters() - } - } - - /** - Evaluates the filter flags set on this example and on the example groups - this example belongs to. Flags set on the example are trumped by flags on - the example group it belongs to. Flags on inner example groups are trumped - by flags on outer example groups. - */ - internal var filterFlags: FilterFlags { - var aggregateFlags = flags - for (key, value) in group!.filterFlags { - aggregateFlags[key] = value - } - return aggregateFlags - } -} - -/** - Returns a boolean indicating whether two Example objects are equal. - If two examples are defined at the exact same callsite, they must be equal. -*/ -public func ==(lhs: Example, rhs: Example) -> Bool { - return lhs.callsite == rhs.callsite -} diff --git a/Pods/Quick/Quick/ExampleGroup.swift b/Pods/Quick/Quick/ExampleGroup.swift deleted file mode 100644 index ecd6738..0000000 --- a/Pods/Quick/Quick/ExampleGroup.swift +++ /dev/null @@ -1,97 +0,0 @@ -/** - Example groups are logical groupings of examples, defined with - the `describe` and `context` functions. Example groups can share - setup and teardown code. -*/ -@objc final public class ExampleGroup { - weak internal var parent: ExampleGroup? - internal let hooks = ExampleHooks() - - private let description: String - private let flags: FilterFlags - private let isInternalRootExampleGroup: Bool - private var childGroups = [ExampleGroup]() - private var childExamples = [Example]() - - internal init(description: String, flags: FilterFlags, isInternalRootExampleGroup: Bool = false) { - self.description = description - self.flags = flags - self.isInternalRootExampleGroup = isInternalRootExampleGroup - } - - /** - Returns a list of examples that belong to this example group, - or to any of its descendant example groups. - */ - public var examples: [Example] { - var examples = childExamples - for group in childGroups { - examples.extend(group.examples) - } - return examples - } - - internal var name: String? { - if let parent = parent { - switch(parent.name) { - case .Some(let name): return "\(name), \(description)" - case .None: return description - } - } else { - return isInternalRootExampleGroup ? nil : description - } - } - - internal var filterFlags: FilterFlags { - var aggregateFlags = flags - walkUp() { (group: ExampleGroup) -> () in - for (key, value) in group.flags { - aggregateFlags[key] = value - } - } - return aggregateFlags - } - - internal var befores: [BeforeExampleWithMetadataClosure] { - var closures = hooks.befores.reverse() - walkUp() { (group: ExampleGroup) -> () in - closures.extend(group.hooks.befores.reverse()) - } - return closures.reverse() - } - - internal var afters: [AfterExampleWithMetadataClosure] { - var closures = hooks.afters - walkUp() { (group: ExampleGroup) -> () in - closures.extend(group.hooks.afters) - } - return closures - } - - internal func walkDownExamples(callback: (example: Example) -> ()) { - for example in childExamples { - callback(example: example) - } - for group in childGroups { - group.walkDownExamples(callback) - } - } - - internal func appendExampleGroup(group: ExampleGroup) { - group.parent = self - childGroups.append(group) - } - - internal func appendExample(example: Example) { - example.group = self - childExamples.append(example) - } - - private func walkUp(callback: (group: ExampleGroup) -> ()) { - var group = self - while let parent = group.parent { - callback(group: parent) - group = parent - } - } -} diff --git a/Pods/Quick/Quick/ExampleMetadata.swift b/Pods/Quick/Quick/ExampleMetadata.swift deleted file mode 100644 index d46605e..0000000 --- a/Pods/Quick/Quick/ExampleMetadata.swift +++ /dev/null @@ -1,22 +0,0 @@ -/** - A class that encapsulates information about an example, - including the index at which the example was executed, as - well as the example itself. -*/ -@objc final public class ExampleMetadata { - /** - The example for which this metadata was collected. - */ - public let example: Example - - /** - The index at which this example was executed in the - test suite. - */ - public let exampleIndex: Int - - internal init(example: Example, exampleIndex: Int) { - self.example = example - self.exampleIndex = exampleIndex - } -} diff --git a/Pods/Quick/Quick/Failure.swift b/Pods/Quick/Quick/Failure.swift deleted file mode 100644 index ff7e4ca..0000000 --- a/Pods/Quick/Quick/Failure.swift +++ /dev/null @@ -1,16 +0,0 @@ -import Foundation - -@objc final class Failure { - let callsite: Callsite - let exception: NSException - - init(exception: NSException, callsite: Callsite) { - self.exception = exception - self.callsite = callsite - } - - @objc(failureWithException:callsite:) - class func failure(exception: NSException, callsite: Callsite) -> Failure { - return Failure(exception: exception, callsite: callsite) - } -} diff --git a/Pods/Quick/Quick/Filter.swift b/Pods/Quick/Quick/Filter.swift deleted file mode 100644 index 3bdb0fe..0000000 --- a/Pods/Quick/Quick/Filter.swift +++ /dev/null @@ -1,29 +0,0 @@ -/** - A mapping of string keys to booleans that can be used to - filter examples or example groups. For example, a "focused" - example would have the flags [Focused: true]. -*/ -public typealias FilterFlags = [String: Bool] - -/** - A namespace for filter flag keys, defined primarily to make the - keys available in Objective-C. -*/ -@objc(QCKFilter) final public class Filter { - /** - Example and example groups with [Focused: true] are included in test runs, - excluding all other examples without this flag. Use this to only run one or - two tests that you're currently focusing on. - */ - public class var focused: String { - return "focused" - } - - /** - Example and example groups with [Pending: true] are excluded from test runs. - Use this to temporarily suspend examples that you know do not pass yet. - */ - public class var pending: String { - return "pending" - } -} diff --git a/Pods/Quick/Quick/Hooks/Closures.swift b/Pods/Quick/Quick/Hooks/Closures.swift deleted file mode 100644 index 3252bbf..0000000 --- a/Pods/Quick/Quick/Hooks/Closures.swift +++ /dev/null @@ -1,35 +0,0 @@ -// MARK: Example Hooks - -/** - A closure executed before an example is run. -*/ -public typealias BeforeExampleClosure = () -> () - -/** - A closure executed before an example is run. The closure is given example metadata, - which contains information about the example that is about to be run. -*/ -public typealias BeforeExampleWithMetadataClosure = (exampleMetadata: ExampleMetadata) -> () - -/** - A closure executed after an example is run. -*/ -public typealias AfterExampleClosure = BeforeExampleClosure - -/** - A closure executed after an example is run. The closure is given example metadata, - which contains information about the example that has just finished running. -*/ -public typealias AfterExampleWithMetadataClosure = BeforeExampleWithMetadataClosure - -// MARK: Suite Hooks - -/** - A closure executed before any examples are run. -*/ -public typealias BeforeSuiteClosure = () -> () - -/** - A closure executed after all examples have finished running. -*/ -public typealias AfterSuiteClosure = BeforeSuiteClosure diff --git a/Pods/Quick/Quick/Hooks/ExampleHooks.swift b/Pods/Quick/Quick/Hooks/ExampleHooks.swift deleted file mode 100644 index 75c9123..0000000 --- a/Pods/Quick/Quick/Hooks/ExampleHooks.swift +++ /dev/null @@ -1,36 +0,0 @@ -/** - A container for closures to be executed before and after each example. -*/ -final internal class ExampleHooks { - - internal var befores: [BeforeExampleWithMetadataClosure] = [] - internal var afters: [AfterExampleWithMetadataClosure] = [] - - internal func appendBefore(closure: BeforeExampleWithMetadataClosure) { - befores.append(closure) - } - - internal func appendBefore(closure: BeforeExampleClosure) { - befores.append { (exampleMetadata: ExampleMetadata) in closure() } - } - - internal func appendAfter(closure: AfterExampleWithMetadataClosure) { - afters.append(closure) - } - - internal func appendAfter(closure: AfterExampleClosure) { - afters.append { (exampleMetadata: ExampleMetadata) in closure() } - } - - internal func executeBefores(exampleMetadata: ExampleMetadata) { - for before in befores { - before(exampleMetadata: exampleMetadata) - } - } - - internal func executeAfters(exampleMetadata: ExampleMetadata) { - for after in afters { - after(exampleMetadata: exampleMetadata) - } - } -} diff --git a/Pods/Quick/Quick/Hooks/SuiteHooks.swift b/Pods/Quick/Quick/Hooks/SuiteHooks.swift deleted file mode 100644 index 5e09702..0000000 --- a/Pods/Quick/Quick/Hooks/SuiteHooks.swift +++ /dev/null @@ -1,34 +0,0 @@ -/** - A container for closures to be executed before and after all examples. -*/ -final internal class SuiteHooks { - internal var befores: [BeforeSuiteClosure] = [] - internal var beforesAlreadyExecuted = false - - internal var afters: [AfterSuiteClosure] = [] - internal var aftersAlreadyExecuted = false - - internal func appendBefore(closure: BeforeSuiteClosure) { - befores.append(closure) - } - - internal func appendAfter(closure: AfterSuiteClosure) { - afters.append(closure) - } - - internal func executeBefores() { - assert(!beforesAlreadyExecuted) - for before in befores { - before() - } - beforesAlreadyExecuted = true - } - - internal func executeAfters() { - assert(!aftersAlreadyExecuted) - for after in afters { - after() - } - aftersAlreadyExecuted = true - } -} diff --git a/Pods/Quick/Quick/NSString+QCKSelectorName.h b/Pods/Quick/Quick/NSString+QCKSelectorName.h deleted file mode 100644 index 2da524e..0000000 --- a/Pods/Quick/Quick/NSString+QCKSelectorName.h +++ /dev/null @@ -1,17 +0,0 @@ -#import - -/** - QuickSpec converts example names into test methods. - Those test methods need valid selector names, which means no whitespace, - control characters, etc. This category gives NSString objects an easy way - to replace those illegal characters with underscores. - */ -@interface NSString (QCKSelectorName) - -/** - Returns a string with underscores in place of all characters that cannot - be included in a selector (SEL) name. - */ -@property (nonatomic, readonly) NSString *qck_selectorName; - -@end diff --git a/Pods/Quick/Quick/NSString+QCKSelectorName.m b/Pods/Quick/Quick/NSString+QCKSelectorName.m deleted file mode 100644 index 8cf187d..0000000 --- a/Pods/Quick/Quick/NSString+QCKSelectorName.m +++ /dev/null @@ -1,33 +0,0 @@ -#import "NSString+QCKSelectorName.h" - -@implementation NSString (QCKSelectorName) - -- (NSString *)qck_selectorName { - static NSMutableCharacterSet *invalidCharacters = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - invalidCharacters = [NSMutableCharacterSet new]; - - NSCharacterSet *whitespaceCharacterSet = [NSCharacterSet whitespaceCharacterSet]; - NSCharacterSet *newlineCharacterSet = [NSCharacterSet newlineCharacterSet]; - NSCharacterSet *illegalCharacterSet = [NSCharacterSet illegalCharacterSet]; - NSCharacterSet *controlCharacterSet = [NSCharacterSet controlCharacterSet]; - NSCharacterSet *punctuationCharacterSet = [NSCharacterSet punctuationCharacterSet]; - NSCharacterSet *nonBaseCharacterSet = [NSCharacterSet nonBaseCharacterSet]; - NSCharacterSet *symbolCharacterSet = [NSCharacterSet symbolCharacterSet]; - - [invalidCharacters formUnionWithCharacterSet:whitespaceCharacterSet]; - [invalidCharacters formUnionWithCharacterSet:newlineCharacterSet]; - [invalidCharacters formUnionWithCharacterSet:illegalCharacterSet]; - [invalidCharacters formUnionWithCharacterSet:controlCharacterSet]; - [invalidCharacters formUnionWithCharacterSet:punctuationCharacterSet]; - [invalidCharacters formUnionWithCharacterSet:nonBaseCharacterSet]; - [invalidCharacters formUnionWithCharacterSet:symbolCharacterSet]; - }); - - NSArray *validComponents = [self componentsSeparatedByCharactersInSet:invalidCharacters]; - - return [validComponents componentsJoinedByString:@"_"]; -} - -@end diff --git a/Pods/Quick/Quick/Quick.h b/Pods/Quick/Quick/Quick.h deleted file mode 100644 index 0c1b72d..0000000 --- a/Pods/Quick/Quick/Quick.h +++ /dev/null @@ -1,13 +0,0 @@ -#import - -//! Project version number for Quick. -FOUNDATION_EXPORT double QuickVersionNumber; - -//! Project version string for Quick. -FOUNDATION_EXPORT const unsigned char QuickVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import - -#import -#import -#import diff --git a/Pods/Quick/Quick/QuickSpec.h b/Pods/Quick/Quick/QuickSpec.h deleted file mode 100644 index 08d0079..0000000 --- a/Pods/Quick/Quick/QuickSpec.h +++ /dev/null @@ -1,48 +0,0 @@ -#import - -/** - QuickSpec is a base class all specs written in Quick inherit from. - They need to inherit from QuickSpec, a subclass of XCTestCase, in - order to be discovered by the XCTest framework. - - XCTest automatically compiles a list of XCTestCase subclasses included - in the test target. It iterates over each class in that list, and creates - a new instance of that class for each test method. It then creates an - "invocation" to execute that test method. The invocation is an instance of - NSInvocation, which represents a single message send in Objective-C. - The invocation is set on the XCTestCase instance, and the test is run. - - Most of the code in QuickSpec is dedicated to hooking into XCTest events. - First, when the spec is first loaded and before it is sent any messages, - the +[NSObject initialize] method is called. QuickSpec overrides this method - to call +[QuickSpec spec]. This builds the example group stacks and - registers them with Quick.World, a global register of examples. - - Then, XCTest queries QuickSpec for a list of test methods. Normally, XCTest - automatically finds all methods whose selectors begin with the string "test". - However, QuickSpec overrides this default behavior by implementing the - +[XCTestCase testInvocations] method. This method iterates over each example - registered in Quick.World, defines a new method for that example, and - returns an invocation to call that method to XCTest. Those invocations are - the tests that are run by XCTest. Their selector names are displayed in - the Xcode test navigation bar. - */ -@interface QuickSpec : XCTestCase - -/** - Override this method in your spec to define a set of example groups - and examples. - - override class func spec() { - describe("winter") { - it("is coming") { - // ... - } - } - } - - See DSL.swift for more information on what syntax is available. - */ -- (void)spec; - -@end diff --git a/Pods/Quick/Quick/QuickSpec.m b/Pods/Quick/Quick/QuickSpec.m deleted file mode 100644 index 3b2ef10..0000000 --- a/Pods/Quick/Quick/QuickSpec.m +++ /dev/null @@ -1,142 +0,0 @@ -#import "QuickSpec.h" -#import "QuickConfiguration.h" -#import "NSString+QCKSelectorName.h" -#import -#import - -const void * const QCKExampleKey = &QCKExampleKey; - -@interface QuickSpec () -@property (nonatomic, strong) Example *example; -@end - -@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.currentExampleGroup = [world rootExampleGroupForSpecClass:[self class]]; - 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]; - } -} - -/** - 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]. - - @return An array of invocations that execute the newly defined example methods. - */ -+ (NSArray *)testInvocations { - NSArray *examples = [[World sharedWorld] examplesForSpecClass:[self class]]; - NSMutableArray *invocations = [NSMutableArray arrayWithCapacity:[examples count]]; - for (Example *example in examples) { - SEL selector = [self addInstanceMethodForExample:example]; - NSInvocation *invocation = [self invocationForInstanceMethodWithSelector:selector - example:example]; - [invocations addObject:invocation]; - } - - return invocations; -} - -/** - XCTest sets the invocation for the current test case instance using this setter. - QuickSpec hooks into this event to give the test case a reference to the current example. - It will need this reference to correctly report its name to XCTest. - */ -- (void)setInvocation:(NSInvocation *)invocation { - self.example = objc_getAssociatedObject(invocation, QCKExampleKey); - [super setInvocation:invocation]; -} - -#pragma mark - Public Interface - -- (void)spec { } - -#pragma mark - Internal Methods - -/** - QuickSpec uses this method to dynamically define a new instance method for the - given example. The instance method runs the example, catching any exceptions. - The exceptions are then reported as test failures. - - In order to report the correct file and line number, examples must raise exceptions - containing following keys in their userInfo: - - - "SenTestFilenameKey": A String representing the file name - - "SenTestLineNumberKey": An Int representing the line number - - These keys used to be used by SenTestingKit, and are still used by some testing tools - in the wild. See: https://github.com/Quick/Quick/pull/41 - - @return The selector of the newly defined instance method. - */ -+ (SEL)addInstanceMethodForExample:(Example *)example { - IMP implementation = imp_implementationWithBlock(^(id self){ - [example run]; - }); - const char *types = [[NSString stringWithFormat:@"%s%s%s", @encode(id), @encode(id), @encode(SEL)] UTF8String]; - SEL selector = NSSelectorFromString(example.name.qck_selectorName); - class_addMethod(self, selector, implementation, types); - - return selector; -} - -+ (NSInvocation *)invocationForInstanceMethodWithSelector:(SEL)selector - example:(Example *)example { - NSMethodSignature *signature = [self instanceMethodSignatureForSelector:selector]; - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; - invocation.selector = selector; - objc_setAssociatedObject(invocation, - QCKExampleKey, - example, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); - return invocation; -} - -/** - This method is used to record failures, whether they represent example - expectations that were not met, or exceptions raised during test setup - and teardown. By default, the failure will be reported as an - XCTest failure, and the example will be highlighted in Xcode. - */ -- (void)recordFailureWithDescription:(NSString *)description - inFile:(NSString *)filePath - atLine:(NSUInteger)lineNumber - expected:(BOOL)expected { - if (self.example.isSharedExample) { - filePath = self.example.callsite.file; - lineNumber = self.example.callsite.line; - } - [super recordFailureWithDescription:description - inFile:filePath - atLine:lineNumber - expected:expected]; -} - -@end diff --git a/Pods/Quick/Quick/World.swift b/Pods/Quick/Quick/World.swift deleted file mode 100644 index 68110b4..0000000 --- a/Pods/Quick/Quick/World.swift +++ /dev/null @@ -1,197 +0,0 @@ -import Foundation - -/** - A closure that, when evaluated, returns a dictionary of key-value - pairs that can be accessed from within a group of shared examples. -*/ -public typealias SharedExampleContext = () -> (NSDictionary) - -/** - A closure that is used to define a group of shared examples. This - closure may contain any number of example and example groups. -*/ -public typealias SharedExampleClosure = (SharedExampleContext) -> () - -/** - A collection of state Quick builds up in order to work its magic. - World is primarily responsible for maintaining a mapping of QuickSpec - classes to root example groups for those classes. - - It also maintains a mapping of shared example names to shared - example closures. - - You may configure how Quick behaves by calling the -[World configure:] - method from within an overridden +[QuickConfiguration configure:] method. -*/ -@objc final public class World { - /** - The example group that is currently being run. - The DSL requires that this group is correctly set in order to build a - correct hierarchy of example groups and their examples. - */ - public var currentExampleGroup: ExampleGroup? - - /** - The example metadata of the test that is currently being run. - This is useful for using the Quick test metadata (like its name) at - runtime. - */ - - public var currentExampleMetadata: ExampleMetadata? - - /** - 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. - */ - public var isRunningAdditionalSuites = false - - private var specs: Dictionary = [:] - private var sharedExamples: [String: SharedExampleClosure] = [:] - private let configuration = Configuration() - private var isConfigurationFinalized = false - - internal var exampleHooks: ExampleHooks {return configuration.exampleHooks } - internal var suiteHooks: SuiteHooks { return configuration.suiteHooks } - - // MARK: Singleton Constructor - - private init() {} - private struct Shared { - static let instance = World() - } - public class func sharedWorld() -> World { - return Shared.instance - } - - // MARK: Public Interface - - /** - Exposes the World's Configuration object within the scope of the closure - so that it may be configured. This method must not be called outside of - an overridden +[QuickConfiguration configure:] method. - - :param: closure A closure that takes a Configuration object that can - be mutated to change Quick's behavior. - */ - public 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.") - closure(configuration: configuration) - } - - /** - Finalizes the World's configuration. - Any subsequent calls to World.configure() will raise. - */ - public func finalizeConfiguration() { - isConfigurationFinalized = true - } - - /** - Returns an internally constructed root example group for the given - QuickSpec class. - - A root example group with the description "root example group" is lazily - initialized for each QuickSpec class. This root example group wraps the - top level of a -[QuickSpec spec] method--it's thanks to this group that - users can define beforeEach and it closures at the top level, like so: - - override func spec() { - // These belong to the root example group - beforeEach {} - it("is at the top level") {} - } - - :param: cls The QuickSpec class for which to retrieve the root example group. - :returns: The root example group for the class. - */ - public func rootExampleGroupForSpecClass(cls: AnyClass) -> ExampleGroup { - let name = NSStringFromClass(cls) - if let group = specs[name] { - return group - } else { - let group = ExampleGroup( - description: "root example group", - flags: [:], - isInternalRootExampleGroup: true - ) - specs[name] = group - return group - } - } - - /** - Returns all examples that should be run for a given spec class. - There are two filtering passes that occur when determining which examples should be run. - That is, these examples are the ones that are included by inclusion filters, and are - not excluded by exclusion filters. - - :param: specClass The QuickSpec subclass for which examples are to be returned. - :returns: A list of examples to be run as test invocations. - */ - @objc(examplesForSpecClass:) - public func examples(specClass: AnyClass) -> [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 { contains(included, $0) } - // 3. Remove all excluded examples. - return spec.filter { example in - !self.configuration.exclusionFilters.reduce(false) { $0 || $1(example: example) } - } - } - - // MARK: Internal - - internal func registerSharedExample(name: String, closure: SharedExampleClosure) { - raiseIfSharedExampleAlreadyRegistered(name) - sharedExamples[name] = closure - } - - internal func sharedExample(name: String) -> SharedExampleClosure { - raiseIfSharedExampleNotRegistered(name) - return sharedExamples[name]! - } - - internal var exampleCount: Int { - return allExamples.count - } - - private var allExamples: [Example] { - var all: [Example] = [] - for (_, group) in specs { - group.walkDownExamples { all.append($0) } - } - return all - } - - private var includedExamples: [Example] { - let all = allExamples - let included = all.filter { example in - return self.configuration.inclusionFilters.reduce(false) { $0 || $1(example: example) } - } - - if included.isEmpty && configuration.runAllWhenEverythingFiltered { - return all - } else { - return included - } - } - - private func raiseIfSharedExampleAlreadyRegistered(name: String) { - if sharedExamples[name] != nil { - NSException(name: NSInternalInconsistencyException, - reason: "A shared example named '\(name)' has already been registered.", - userInfo: nil).raise() - } - } - - private func raiseIfSharedExampleNotRegistered(name: String) { - if sharedExamples[name] == nil { - NSException(name: NSInternalInconsistencyException, - reason: "No shared example named '\(name)' has been registered. Registered shared examples: '\(Array(sharedExamples.keys))'", - userInfo: nil).raise() - } - } -} diff --git a/Pods/Quick/README.md b/Pods/Quick/README.md deleted file mode 100644 index 1c1066f..0000000 --- a/Pods/Quick/README.md +++ /dev/null @@ -1,1165 +0,0 @@ -![](http://f.cl.ly/items/0r1E192C1R0b2g2Q3h2w/QuickLogo_Color.png) - -Quick is a behavior-driven development framework for Swift and Objective-C. -Inspired by [RSpec](https://github.com/rspec/rspec), [Specta](https://github.com/specta/specta), and [Ginkgo](https://github.com/onsi/ginkgo). - -[![Build Status](https://travis-ci.org/Quick/Quick.svg)](https://travis-ci.org/Quick/Quick) - -![](https://raw.githubusercontent.com/Quick/Assets/master/Screenshots/QuickSpec%20screenshot.png) - -```swift -// Swift - -import Quick -import Nimble - -class TableOfContentsSpec: QuickSpec { - override func spec() { - describe("the table of contents below") { - it("has everything you need to get started") { - let sections = TableOfContents().sections - expect(sections).to(contain("Quick: Examples and Example Groups")) - expect(sections).to(contain("Nimble: Assertions using expect(...).to")) - expect(sections).to(contain("How to Install Quick")) - } - - context("if it doesn't have what you're looking for") { - it("needs to be updated") { - let you = You(awesome: true) - expect{you.submittedAnIssue}.toEventually(beTruthy()) - } - } - } - } -} -``` - -# How to Use Quick - - - - -- [Quick: Examples and Example Groups](#quick-examples-and-example-groups) - - [Examples Using `it`](#examples-using-it) - - [Example Groups Using `describe` and `context`](#example-groups-using-describe-and-context) - - [Describing Classes and Methods Using `describe`](#describing-classes-and-methods-using-describe) - - [Sharing Setup/Teardown Code Using `beforeEach` and `afterEach`](#sharing-setupteardown-code-using-beforeeach-and-aftereach) - - [Specifying Conditional Behavior Using `context`](#specifying-conditional-behavior-using-context) - - [Temporarily Disabling Examples or Groups Using `pending`](#temporarily-disabling-examples-or-groups-using-pending) - - [Shorthand syntax](#shorthand-syntax) - - [Temporarily Running a Subset of Focused Examples](#temporarily-running-a-subset-of-focused-examples) - - [Global Setup/Teardown Using `beforeSuite` and `afterSuite`](#global-setupteardown-using-beforesuite-and-aftersuite) - - [Sharing Examples](#sharing-examples) -- [Using Quick in Objective-C: The Optional Shorthand Syntax](#using-quick-in-objective-c-the-optional-shorthand-syntax) - - [Caveat: Your Test Target Must Include At Least One Swift File](#caveat-your-test-target-must-include-at-least-one-swift-file) -- [Nimble: Assertions Using `expect(...).to`](#nimble-assertions-using-expectto) -- [Testing Swift Code](#testing-swift-code) -- [Testing UIKit with Quick](#testing-uikit-with-quick) -- [How to Install Quick](#how-to-install-quick) - - [1. Clone the Quick and Nimble repositories](#1-clone-the-quick-and-nimble-repositories) - - [2. Add `Quick.xcodeproj` and `Nimble.xcodeproj` to your test target](#2-add-quickxcodeproj-and-nimblexcodeproj-to-your-test-target) - - [3. Link `Quick.framework` and `Nimble.framework`](#3-link-quickframework-and-nimbleframework) - - [4. Start writing specs!](#4-start-writing-specs) -- [Including Quick in a Git Repository Using Submodules](#including-quick-in-a-git-repository-using-submodules) - - [Adding Quick as a Git Submodule](#adding-quick-as-a-git-submodule) - - [Updating the Quick Submodule](#updating-the-quick-submodule) - - [Cloning a Repository that Includes a Quick Submodule](#cloning-a-repository-that-includes-a-quick-submodule) -- [How to Install Quick using CocoaPods](#how-to-install-quick-using-cocoapods) -- [How to Install Quick File Templates](#how-to-install-quick-file-templates) - - [Using Alcatraz](#using-alcatraz) - - [Manually via the Rakefile](#manually-via-the-rakefile) -- [Configuring Quick](#configuring-quick) - - [Adding Global Before and After Filters](#adding-global-before-and-after-filters) -- [Who Uses Quick](#who-uses-quick) -- [License](#license) - - - -## Quick: Examples and Example Groups - -Quick uses a special syntax to define **examples** and **example groups**. - -### Examples Using `it` - -Examples, defined with the `it` function, use assertions to demonstrate -how code should behave. These are like "tests" in XCTest. - -`it` takes two parameters: the name of the example, and a closure. -The examples below specify how the `Dolphin` class should behave. -A new dolphin should be smart and friendly: - -```swift -// Swift - -import Quick -import Nimble - -class DolphinSpec: QuickSpec { - override func spec() { - it("is friendly") { - expect(Dolphin().isFriendly).to(beTruthy()) - } - - it("is smart") { - expect(Dolphin().isSmart).to(beTruthy()) - } - } -} -``` - -```objc -// Objective-C - -#import -#import - -QuickSpecBegin(DolphinSpec) - -it(@"is friendly", ^{ - expect(@([[Dolphin new] isFriendly])).to(beTruthy()); -}); - -it(@"is smart", ^{ - expect(@([[Dolphin new] isSmart])).to(beTruthy()); -}); - -QuickSpecEnd -``` - -> Descriptions can use any character, including characters from languages - besides English, or even emoji! :v: :sunglasses: - -### Example Groups Using `describe` and `context` - -Example groups are logical groupings of examples. Example groups can share -setup and teardown code. - -#### Describing Classes and Methods Using `describe` - -To specify the behavior of the `Dolphin` class's `click` method--in -other words, to test the method works--several `it` examples can be -grouped together using the `describe` function. Grouping similar -examples together makes the spec easier to read: - -```swift -// Swift - -import Quick -import Nimble - -class DolphinSpec: QuickSpec { - override func spec() { - describe("a dolphin") { - describe("its click") { - it("is loud") { - let click = Dolphin().click() - expect(click.isLoud).to(beTruthy()) - } - - it("has a high frequency") { - let click = Dolphin().click() - expect(click.hasHighFrequency).to(beTruthy()) - } - } - } - } -} -``` - -```objc -// Objective-C - -#import -#import - -QuickSpecBegin(DolphinSpec) - -describe(@"a dolphin", ^{ - describe(@"its click", ^{ - it(@"is loud", ^{ - Click *click = [[Dolphin new] click]; - expect(@(click.isLoud)).to(beTruthy()); - }); - - it(@"has a high frequency", ^{ - Click *click = [[Dolphin new] click]; - expect(@(click.hasHighFrequency)).to(beTruthy()); - }); - }); -}); - -QuickSpecEnd -``` - -#### Sharing Setup/Teardown Code Using `beforeEach` and `afterEach` - -Example groups don't just make the examples clearer, they're also useful -for sharing setup and teardown code among examples in a group. - -In the example below, the `beforeEach` function is used to create a brand -new instance of a dolphin and its click before each example in the group. -This ensures that both are in a "fresh" state for every example: - -```swift -// Swift - -import Quick -import Nimble - -class DolphinSpec: QuickSpec { - override func spec() { - describe("a dolphin") { - var dolphin: Dolphin? - beforeEach { - dolphin = Dolphin() - } - - describe("its click") { - var click: Click? - beforeEach { - click = dolphin!.click() - } - - it("is loud") { - expect(click!.isLoud).to(beTruthy()) - } - - it("has a high frequency") { - expect(click!.hasHighFrequency).to(beTruthy()) - } - } - } - } -} -``` - -```objc -// Objective-C - -#import -#import - -QuickSpecBegin(DolphinSpec) - -describe(@"a dolphin", ^{ - __block Dolphin *dolphin = nil; - beforeEach(^{ - dolphin = [Dolphin new]; - }); - - describe(@"its click", ^{ - __block Click *click = nil; - beforeEach(^{ - click = [dolphin click]; - }); - - it(@"is loud", ^{ - expect(@(click.isLoud)).to(beTruthy()); - }); - - it(@"has a high frequency", ^{ - expect(@(click.hasHighFrequency)).to(beTruthy()); - }); - }); -}); - -QuickSpecEnd -``` - -Sharing setup like this might not seem like a big deal with the -dolphin example, but for more complicated objects, it saves a lot -of typing! - -To execute code *after* each example, use `afterEach`. - -#### Specifying Conditional Behavior Using `context` - -Dolphins use clicks for echolocation. When they approach something -particularly interesting to them, they release a series of clicks in -order to get a better idea of what it is. - -The tests need to show that the `click` method behaves differently in -different circumstances. Normally, the dolphin just clicks once. But when -the dolphin is close to something interesting, it clicks several times. - -This can be expressed using `context` functions: one `context` for the -normal case, and one `context` for when the dolphin is close to -something interesting: - -```swift -// Swift - -import Quick -import Nimble - -class DolphinSpec: QuickSpec { - override func spec() { - describe("a dolphin") { - var dolphin: Dolphin? - beforeEach { dolphin = Dolphin() } - - describe("its click") { - context("when the dolphin is not near anything interesting") { - it("is only emitted once") { - expect(dolphin!.click().count).to(equal(1)) - } - } - - context("when the dolphin is near something interesting") { - beforeEach { - let ship = SunkenShip() - Jamaica.dolphinCove.add(ship) - Jamaica.dolphinCove.add(dolphin) - } - - it("is emitted three times") { - expect(dolphin!.click().count).to(equal(3)) - } - } - } - } - } -} -``` - -```objc -// Objective-C - -#import -#import - -QuickSpecBegin(DolphinSpec) - -describe(@"a dolphin", ^{ - __block Dolphin *dolphin = nil; - beforeEach(^{ dolphin = [Dolphin new]; }); - - describe(@"its click", ^{ - context(@"when the dolphin is not near anything interesting", ^{ - it(@"is only emitted once", ^{ - expect(@([[dolphin click] count])).to(equal(@1)); - }); - }); - - context(@"when the dolphin is near something interesting", ^{ - beforeEach(^{ - [[Jamaica dolphinCove] add:[SunkenShip new]]; - [[Jamaica dolphinCove] add:dolphin]; - }); - - it(@"is emitted three times", ^{ - expect(@([[dolphin click] count])).to(equal(@3)); - }); - }); - }); -}); - -QuickSpecEnd -``` - -### Temporarily Disabling Examples or Groups Using `pending` - -For examples that don't pass yet, use `pending`. Pending examples -are not run, but are printed out along with the test results. - -The example below marks the cases in which the dolphin is close to -something interesting as "pending"--perhaps that functionality hasn't -been implemented yet, but these tests have been written as reminders -that it should be soon: - -```swift -// Swift - -pending("when the dolphin is near something interesting") { - // ...none of the code in this closure will be run. -} -``` - -```objc -// Objective-C - -pending(@"when the dolphin is near something interesting", ^{ - // ...none of the code in this closure will be run. -}); -``` - -#### Shorthand syntax - -Examples and groups can also be marked as pending by using -`xdescribe`, `xcontext`, and `xit`: - -```swift -// Swift - -xdescribe("its click") { - // ...none of the code in this closure will be run. -} - -xcontext("when the dolphin is not near anything interesting") { - // ...none of the code in this closure will be run. -} - -xit("is only emitted once") { - // ...none of the code in this closure will be run. -} -``` - -```objc -// Objective-C - -xdescribe(@"its click", ^{ - // ...none of the code in this closure will be run. -}); - -xcontext(@"when the dolphin is not near anything interesting", ^{ - // ...none of the code in this closure will be run. -}); - -xit(@"is only emitted once", ^{ - // ...none of the code in this closure will be run. -}); -``` - -### Temporarily Running a Subset of Focused Examples - -Sometimes it helps to focus on only one or a few examples. Running one -or two exmaples is faster than the entire suite, after all. You can -run only one or two by using the `fit` function. You can also focus a -group of examples using `fdescribe` or `fcontext`: - -```swift -fit("its click") { - // ...only this focused example will be run. -} - -it("is only emitted once") { - // ...this example is not focused, and will not be run. -} - -fdescribe("when the dolphin is near something interesting") { - // ...examples in this group are also focused, so they'll be run. -} -``` - -```objc -fit(@"its click", { - // ...only this focused example will be run. -}); - -it(@"is only emitted once", ^{ - // ...this example is not focused, and will not be run. -}); - -fdescribe(@"when the dolphin is near something interesting", ^{ - // ...examples in this group are also focused, so they'll be run. -}); -``` - -### Global Setup/Teardown Using `beforeSuite` and `afterSuite` - -Some test setup needs to be performed before *any* examples are -run. For these cases, use `beforeSuite` and `afterSuite`. - -In the example below, a database of all the creatures in the ocean is -created before any examples are run. That database is torn down once all -the examples have finished: - -```swift -// Swift - -import Quick - -class DolphinSpec: QuickSpec { - override func spec() { - beforeSuite { - OceanDatabase.createDatabase(name: "test.db") - OceanDatabase.connectToDatabase(name: "test.db") - } - - afterSuite { - OceanDatabase.teardownDatabase(name: "test.db") - } - - describe("a dolphin") { - // ... - } - } -} -``` - -```objc -// Objective-C - -#import - -QuickSpecBegin(DolphinSpec) - -beforeSuite(^{ - [OceanDatabase createDatabase:@"test.db"]; - [OceanDatabase connectToDatabase:@"test.db"]; -}); - -afterSuite(^{ - [OceanDatabase teardownDatabase:@"test.db"]; -}); - -describe(@"a dolphin", ^{ - // ... -}); - -QuickSpecEnd -``` - -> You can specify as many `beforeSuite` and `afterSuite` as you like. All - `beforeSuite` closures will be executed before any tests run, and all - `afterSuite` closures will be executed after all the tests are finished. - There is no guarantee as to what order these closures will be executed in. - -### Sharing Examples - -In some cases, the same set of specifications apply to multiple objects. - -For example, consider a protocol called `Edible`. When a dolphin -eats something `Edible`, the dolphin becomes happy. `Mackerel` and -`Cod` are both edible. Quick allows you to easily test that a dolphin is -happy to eat either one. - -The example below defines a set of "shared examples" for "something edible", -and specifies that both mackerel and cod behave like "something edible": - -```swift -// Swift - -import Quick -import Nimble - -class EdibleSharedExamplesConfiguration: QuickConfiguration { - override class func configure(configuration: Configuration) { - sharedExamples("something edible") { (sharedExampleContext: SharedExampleContext) in - it("makes dolphins happy") { - let dolphin = Dolphin(happy: false) - let edible = sharedExampleContext()["edible"] - dolphin.eat(edible) - expect(dolphin.isHappy).to(beTruthy()) - } - } - } -} - -class MackerelSpec: QuickSpec { - override func spec() { - var mackerel: Mackerel! = nil - beforeEach { - mackerel = Mackerel() - } - - itBehavesLike("something edible") { ["edible": mackerel] } - } -} - -class CodSpec: QuickSpec { - override func spec() { - var cod: Cod! = nil - beforeEach { - cod = Cod() - } - - itBehavesLike("something edible") { ["edible": cod] } - } -} -``` - -```objc -// Objective-C - -#import -#import - -QuickConfigurationBegin(EdibleSharedExamplesConfiguration) - -+ (void)configure:(Configuration *configuration) { - sharedExamples(@"something edible", ^(QCKDSLSharedExampleContext exampleContext) { - it(@"makes dolphins happy") { - Dolphin *dolphin = [[Dolphin alloc] init]; - dolphin.happy = NO; - id edible = exampleContext()[@"edible"]; - [dolphin eat:edible]; - expect(dolphin.isHappy).to(beTruthy()) - } - }); -} - -QuickConfigurationEnd - -QuickSpecBegin(MackerelSpec) - -__block Mackerel *mackerel = nil; -beforeEach(^{ - mackerel = [[Mackerel alloc] init]; -}); - -itBehavesLike(@"someting edible", ^{ return @{ @"edible": mackerel }; }); - -QuickSpecEnd - -QuickSpecBegin(CodSpec) - -__block Mackerel *cod = nil; -beforeEach(^{ - cod = [[Cod alloc] init]; -}); - -itBehavesLike(@"someting edible", ^{ return @{ @"edible": cod }; }); - -QuickSpecEnd -``` - -Shared examples can include any number of `it`, `context`, and -`describe` blocks. They save a *lot* of typing when running -the same tests against several different kinds of objects. - -In some cases, you won't need any additional context. In Swift, you can -simply use `sharedExampleFor` closures that take no parameters. This -might be useful when testing some sort of global state: - -```swift -// Swift - -import Quick - -sharedExamplesFor("everything under the sea") { - // ... -} - -itBehavesLike("everything under the sea") -``` - -> In Objective-C, you'll have to pass a block that takes a - `QCKDSLSharedExampleContext`, even if you don't plan on using that - argument. Sorry, but that's the way the cookie crumbles! - :cookie: :bomb: - -You can also focus shared examples using the `fitBehavesLike` function. - -## Using Quick in Objective-C: The Optional Shorthand Syntax - -Quick works equally well in both Swift and Objective-C. - -Importing Quick in an Objective-C file defines macros named `it` and -`itShouldBehaveLike`, as well as functions like `context()`, `describe()`, etc. -If the project you are testing also defines symbols with these names, you may -encounter confusing build failures. In that case, you can avoid namespace -collision by turning off Quick's optional "shorthand" syntax: - -```objc -#define QUICK_DISABLE_SHORT_SYNTAX 1 - -#import - -QuickSpecBegin(DolphinSpec) -// ... -QuickSpecEnd -``` - -You must define the `QUICK_DISABLE_SHORT_SYNTAX` macro *before* -importing the Quick header. - -### Caveat: Your Test Target Must Include At Least One Swift File - -The Swift stdlib will not be linked into your test target, and thus -Quick will fail to execute properly, if you test target does not contain -*at least one* Swift file. If it does not, your tests will exit -prematurely with the following error: - -``` -*** Test session exited(82) without checking in. Executable cannot be -loaded for some other reason, such as a problem with a library it -depends on or a code signature/entitlements mismatch. -``` - -To fix the problem, add a blank file called `SwiftSpec.swift` to your test target: - -```swift -// SwiftSpec.swift - -import Quick -``` - -> For more details on this issue, see https://github.com/Quick/Quick/issues/164. - -## Nimble: Assertions Using `expect(...).to` - -Quick provides an easy language to define examples and example groups. Within those -examples, [Nimble](https://github.com/Quick/Nimble) provides a simple -language to define expectations--that is, to assert that code behaves a -certain way, and to display a test failure if it doesn't. - -Nimble expectations use the `expect(...).to` syntax: - -```swift -// Swift - -import Nimble - -expect(person.greeting).to(equal("Oh, hi.")) -expect(person.greeting).notTo(equal("Hello!")) -expect(person.isHappy).toEventually(beTruthy()) -``` - -```objc -// Objective-C - -#import - -expect(person.greeting).to(equal(@"Oh, hi.")); -expect(person.greeting).notTo(equal(@"Hello!")); -expect(@(person.isHappy)).toEventually(beTruthy()); -``` - -You can find much more detailed documentation on -[Nimble](https://github.com/Quick/Nimble), including a -full set of available matchers and details on how to perform asynchronous tests, -in [the project's README](https://github.com/Quick/Nimble). - -## Testing Swift Code - -In order to test code written in Swift, you'll need to do three things: - -1. Set "defines module" in your `.xcodeproj` to `YES`. -2. Mark any class/method/function you want to test `public`, since only - `public` symbols are exported. -3. `import YourAppModuleName` in your unit tests. - -Some developers advocate adding Swift source files to your test target. -However, this leads to [subtle, hard-to-diagnose -errors](https://github.com/Quick/Quick/issues/91), and is not -recommended. - -## Testing UIKit with Quick - -Quick can be used for testing UIKit interaction as well. Say, for example, we have a `DolphinTableViewController` that displays one cell with label `Bottlenose`. We want to test that the cell gets displayed when the view is loaded. Additionally, we would like to delete the row upon selecting it. An approach might be: - -```swift -// Swift - -import UIKit -import Quick -import Nimble - -class DolphinTableViewControllerSpecs: QuickSpec { - override func spec() { - var viewController: DolphinTableViewController! - - beforeEach { - viewController = DolphinTableViewController() - } - - describe("viewDidLoad") { - beforeEach { - // Accessing the view property causes the UIKit framework to trigger the necessary methods to render the view. - viewController.view - } - - - it("loads the table view with one cell") { - let tableView = viewController.tableView - - var indexPath = NSIndexPath(forRow: 0, inSection: 0) - var cell = viewController.tableView(tableView, cellForRowAtIndexPath: indexPath) - - expect(cell.textLabel?.text).to(equal("Bottlenose")) - } - } - - describe("didSelectRowAtIndexPath") { - beforeEach { - // Causes the UIKit framework to trigger the necessary methods to render the view and perform viewWillAppear: and viewDidAppear: callbacks - viewController.beginAppearanceTransition(true, animated: false) - viewController.endAppearanceTransition() - } - - it("deletes the selected row and reloads the tableView's data") { - let tableView = viewController.tableView - let indexPath = NSIndexPath(forRow: 0, inSection: 0) - - viewController.tableView(tableView, didSelectRowAtIndexPath: indexPath) - - var cell = viewController.tableView(tableView, cellForRowAtIndexPath: indexPath) - expect(cell.textLabel?.text).to(beNil()) - } - } - } -} -``` - -```objc -// Objective-C - -#import -#import -#import - -QuickSpecBegin(DolphinTableViewControllerSpec) - -describe(@"viewDidLoad", ^{ - __block DolphinTableViewController *viewController = nil; - - beforeEach(^{ - viewController = [[DolphinTableViewController alloc] init]; - }); - - it(@"loads the table view with three types of dolphin", ^{ - beforeEach(^{ - // Accessing the view property causes the UIKit framework to trigger the necessary methods to render the view. - [viewController view]; - }); - - UITableView *tableView = [viewController tableView]; - NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; - UITableViewCell *cell = [viewController tableView:tableView cellForRowAtIndexPath:indexPath]; - - expect(@([[cell textLabel] text])).to(equal(@"Bottlenose")); - }); -} - -describe(@"didSelectRowAtIndexPath", ^{ - __block DolphinTableViewController *viewController = nil; - - beforeEach(^{ - // Causes the UIKit framework to trigger the necessary methods to render the view and perform viewWillAppear: and - viewController = [[DolphinTableViewController alloc] init]; - [viewController beginAppearanceTransition:YES animated:NO]; - [viewController endAppearanceTransition]; - }); - - it(@"deletes the selected row and reloads the tableView's data", ^{ - UITableView *tableView = [viewController tableView]; - NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; - - [viewController tableView:tableView didSelectRowAtIndexPath:indexPath]; - - UITableViewCell *cell = [viewController tableView:tableView cellForRowAtIndexPath:indexPath]; - - expect(@([[cell textLabel] text])).to(beNil()); - }); -} - -QuickSpecEnd -``` - -## How to Install Quick - -Quick provides the syntax to define examples and example groups. Nimble -provides the `expect(...).to` assertion syntax. You may use either one, -or both, in your tests. - -To use Quick and Nimble to test your iOS or OS X applications, follow these 4 easy steps: - -1. [Clone the Quick and Nimble repositories](#1-clone-the-quick-and-nimble-repositories) -2. [Add `Quick.xcodeproj` and `Nimble.xcodeproj` to your test target](#2-add-quickxcodeproj-and-nimblexcodeproj-to-your-test-target) -3. [Link `Quick.framework` and `Nimble.framework`](#3-link-quickframework-and-nimbleframework) -4. Start writing specs! - -Example projects with this complete setup is available in the -[`Examples`](https://github.com/modocache/Quick/tree/master/Examples) directory. - -### 1. Clone the Quick and Nimble repositories - -```sh -git clone git@github.com:Quick/Quick.git Vendor/Quick -git clone git@github.com:Quick/Nimble.git Vendor/Nimble -``` - -### 2. Add `Quick.xcodeproj` and `Nimble.xcodeproj` to your test target - -Right-click on the group containing your application's tests and -select `Add Files To YourApp...`. - -![](http://cl.ly/image/3m110l2s0a18/Screen%20Shot%202014-06-08%20at%204.25.59%20AM.png) - -Next, select `Quick.xcodeproj`, which you downloaded in step 1. - -![](http://cl.ly/image/431F041z3g1P/Screen%20Shot%202014-06-08%20at%204.26.49%20AM.png) - -Once you've added the Quick project, you should see it in Xcode's project -navigator, grouped with your tests. - -![](http://cl.ly/image/0p0k2F2u2O3I/Screen%20Shot%202014-06-08%20at%204.27.29%20AM%20copy.png) - -Follow the same steps for `Nimble.xcodeproj`. - -### 3. Link `Quick.framework` and `Nimble.framework` - - Link the `Quick.framework` during your test target's -`Link Binary with Libraries` build phase. You should see two -`Quick.frameworks`; one is for OS X, and the other is for iOS. - -![](http://cl.ly/image/2L0G0H1a173C/Screen%20Shot%202014-06-08%20at%204.27.48%20AM.png) - -Do the same for the `Nimble.framework`. - -### 4. Start writing specs! - -If you run into any problems, please file an issue. - -## Including Quick in a Git Repository Using Submodules - -The best way to include Quick in a Git repository is by using Git -submodules. Git submodules are great because: - -1. They track exactly which version of Quick is being used -2. It's easy to update Quick to the latest--or any other--version - -### Adding Quick as a Git Submodule - -To use Git submodules, follow the same steps as above, except instead of -cloning the Quick and Nimble repositories, add them to your project as -submodules: - -```sh -mkdir Vendor # you can keep your submodules in their own directory -git submodule add git@github.com:Quick/Quick.git Vendor/Quick -git submodule add git@github.com:Quick/Nimble.git Vendor/Nimble -git submodule update --init --recursive -``` - -### Updating the Quick Submodule - -If you ever want to update the Quick submodule to latest version, enter -the Quick directory and pull from the master repository: - -```sh -cd Vendor/Quick -git pull --rebase origin master -``` - -Your Git repository will track changes to submodules. You'll want to -commit the fact that you've updated the Quick submodule: - -```sh -git commit -m "Updated Quick submodule" -``` - -### Cloning a Repository that Includes a Quick Submodule - -After other people clone your repository, they'll have to pull down the -submodules as well. They can do so by running the `git submodule update` -command: - -```sh -git submodule update --init --recursive -``` - -You can read more about Git submodules -[here](http://git-scm.com/book/en/Git-Tools-Submodules). To see examples -of Git submodules in action, check out any of the repositories linked to -in the ["Who Uses Quick"](#who-uses-quick) section of this guide. - -## How to Install Quick using CocoaPods - -If you would like to use Quick with CocoaPods today, you need to install the -beta build of CocoaPods via `[sudo] gem install cocoapods --pre` then add Quick -to your Podfile. - -```rb -pod 'Quick' -``` - -If you need the latest cutting-edge code, use the following: - -```rb -pod 'Quick', :head -``` - -## How to Install Quick using [Carthage](https://github.com/Carthage/Carthage) -As Test targets do not have the "Embedded Binaries" section, the frameworks must be added to the target's "Link Binary With Libraries" as well as a "Copy Files" build phase to copy them to the target's Frameworks destination. - > As Carthage builds dynamic frameworks, you will need a valid code signing identity set up. - -1. Add Quick to your **[Cartfile.private](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfileprivate)** - - ``` - github "Quick/Quick" - github "Quick/Nimble" - ``` - -2. Run `carthage update` -3. From your `Carthage/Build/[platform]/` directory, add both Quick and Nimble to your test target's **Link Binary With Libraries** build phase - ![](http://i.imgur.com/pBkDDk5.png) - -4. For your test target, create a new build phase of type **Copy Files** - ![](http://i.imgur.com/jZATIjQ.png) - -5. Set the **Destination** to **Frameworks**, then add both frameworks - ![](http://i.imgur.com/rpnyWGH.png) - -This is not 'the one and only way' to use Carthage to manage dependencies, for further reference check out the [Carthage documentation](https://github.com/Carthage/Carthage/blob/master/README.md) - -## How to Install Quick File Templates - -The Quick repository includes file templates for both Swift and -Objective-C specs. - -### Using Alcatraz - -Quick templates can be installed via [Alcatraz](https://github.com/supermarin/Alcatraz), -a package manager for Xcode. Just search for the templates from the -Package Manager window. - -![](http://f.cl.ly/items/3T3q0G1j0b2t1V0M0T04/Screen%20Shot%202014-06-27%20at%202.01.10%20PM.png) - -### Manually via the Rakefile - -To manually install the templates, just clone the repository and -run the `templates:install` rake task: - -```sh -$ git clone git@github.com:Quick/Quick.git -$ rake templates:install -``` - -Uninstalling is easy, too: - -```sh -$ rake templates:uninstall -``` - -## Configuring Quick - -The Quick configuration object exposes custom options to alter the behavior of -the framework. The intention of this hook is to provide a global configuration -to meet the needs of your project. *QuickConfiguration* is never meant to be -instantiated. If you do so, an exception will be raised. Instead, subclass it -and override the `configure()` class function, like so: - -```swift -// Swift - -import Quick -import Nimble - -class ProjectDataTestConfiguration: QuickConfiguration { - override class func configure(configuration : Configuration) { - // set options on the configuration object - } -} -``` - -```objc -// Objective-C - -#import -#import - -QuickConfigurationBegin(ProjectDataTestConfiguration) - -+ (void)configure:(Configuration *configuration) { - // set options of the configuration object -} - -QuickConfigurationEnd -``` - -Projects may include several configurations. However, Quick does not make any -guarantee about the order in which they are executed. - -### Adding Global Before and After Filters - -Similar to `beforeEach()` and `afterEach()` functions in QuickSpec(s), global -filters can be applied to all tests. For example, a computed value may need to -be reset before each test case. In the following case, it is assumed that the -tests rely on the `height` property of the `Dorsal` singleton to be 0 in order -to do some sort of mathematical computation. - -```swift -// Swift - -import Quick -import Nimble - -class FinConfiguration: QuickConfiguration { - override class func configure(configuration: Configuration) { - configuration.beforeEach() { - fin = Dorsal.sharedFin() - fin.height = 0 - } - } -} -``` - -```objc -// Objective-C - -#import -#import "Dorsal.h" - -QuickConfigurationBegin(FinConfiguration) - -+ (void)configure:(Configuration *)configuration { - [configuration beforeEach:^{ - Dorsal *fin = [Dorsal sharedFin]; - fin.height = 0; - }]; -} - -QuickConfigurationEnd -``` - -Every test resets the `height` property to 0. Therefore, our tests with various -computations remain entirely independent. - -In addition, Quick allows you to access metadata regarding the tests. The -framework provides `beforeSuite()` and `afterSuite()` closures with -metadata. Metadata is passed into the closure like so: - -```swift -// Swift - -import Quick -import Nimble - -class Fin2Configuration: QuickConfiguration { - override class func configure(configuration: Configuration) { - configuration.beforeEach({ (exampleMetadata : ExampleMetadata) -> () in - // work with metadata - }) - } -} -``` - -```objc -// Objective-C - -#import -#import "Dorsal.h" - -QuickConfigurationBegin(Fin2Configuration) - -+ (void)configure:(Configuration *)configuration { - [configuration beforeEachWithMetadata:^(ExampleMetadata *data) { - // work with metadata - }]; -} - -QuickConfigurationEnd -``` - -## Who Uses Quick - -Quick is used by many companies, open-source projects, and individuals, -including [GitHub](https://github.com/github) and -[ReactiveCocoa](https://github.com/ReactiveCocoa). See examples below: - -- https://github.com/ReactiveCocoa/ReactiveCocoa -- https://github.com/github/Archimedes -- https://github.com/libgit2/objective-git -- https://github.com/jspahrsummers/RXSwift -- https://github.com/artsy/eidolon -- https://github.com/AshFurrow/Moya -- https://github.com/nerdyc/Squeal -- https://github.com/pepibumur/SugarRecord - -> Add an issue or [tweet](https://twitter.com/modocache) if you'd like to be added to this list. - -## License - -Apache 2.0 license. See the `LICENSE` file for details. diff --git a/Pods/Target Support Files/Pods-cameraTests-Nimble/Info.plist b/Pods/Target Support Files/Pods-cameraTests-Nimble/Info.plist index 0837642..b607405 100644 --- a/Pods/Target Support Files/Pods-cameraTests-Nimble/Info.plist +++ b/Pods/Target Support Files/Pods-cameraTests-Nimble/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.3.0 + 0.4.2 CFBundleSignature ???? CFBundleVersion diff --git a/Pods/Target Support Files/Pods-cameraTests-Nimble/Pods-cameraTests-Nimble-Private.xcconfig b/Pods/Target Support Files/Pods-cameraTests-Nimble/Pods-cameraTests-Nimble-Private.xcconfig index 2e6d90c..5d15686 100644 --- a/Pods/Target Support Files/Pods-cameraTests-Nimble/Pods-cameraTests-Nimble-Private.xcconfig +++ b/Pods/Target Support Files/Pods-cameraTests-Nimble/Pods-cameraTests-Nimble-Private.xcconfig @@ -2,7 +2,7 @@ CONFIGURATION_BUILD_DIR = $PODS_FRAMEWORK_BUILD_PATH FRAMEWORK_SEARCH_PATHS = "$PODS_FRAMEWORK_BUILD_PATH" ${PODS_CAMERATESTS_NIMBLE_FRAMEWORK_SEARCH_PATHS} GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Nimble" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Nimble" "${PODS_ROOT}/Headers/Public/Quick" +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Nimble" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Nimble" OTHER_LDFLAGS = ${PODS_CAMERATESTS_NIMBLE_OTHER_LDFLAGS} -ObjC OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods-cameraTests diff --git a/Pods/Target Support Files/Pods-cameraTests-Quick/Info.plist b/Pods/Target Support Files/Pods-cameraTests-Quick/Info.plist deleted file mode 100644 index 595bc9a..0000000 --- a/Pods/Target Support Files/Pods-cameraTests-Quick/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - org.cocoapods.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.2.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-Private.xcconfig b/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-Private.xcconfig deleted file mode 100644 index 8d85f99..0000000 --- a/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-Private.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -#include "Pods-cameraTests-Quick.xcconfig" -CONFIGURATION_BUILD_DIR = $PODS_FRAMEWORK_BUILD_PATH -FRAMEWORK_SEARCH_PATHS = "$PODS_FRAMEWORK_BUILD_PATH" ${PODS_CAMERATESTS_QUICK_FRAMEWORK_SEARCH_PATHS} -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Quick" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Nimble" "${PODS_ROOT}/Headers/Public/Quick" -OTHER_LDFLAGS = ${PODS_CAMERATESTS_QUICK_OTHER_LDFLAGS} -ObjC -OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods-cameraTests -PODS_ROOT = ${SRCROOT} -SKIP_INSTALL = YES \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-dummy.m b/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-dummy.m deleted file mode 100644 index 3ba2244..0000000 --- a/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_cameraTests_Quick : NSObject -@end -@implementation PodsDummy_Pods_cameraTests_Quick -@end diff --git a/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-prefix.pch b/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-prefix.pch deleted file mode 100644 index 1fc3b81..0000000 --- a/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-prefix.pch +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef __OBJC__ -#import -#endif - -#import "Pods-cameraTests-environment.h" diff --git a/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-umbrella.h b/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-umbrella.h deleted file mode 100644 index 61d5fcf..0000000 --- a/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick-umbrella.h +++ /dev/null @@ -1,11 +0,0 @@ -#import - -#import "NSString+QCKSelectorName.h" -#import "Quick.h" -#import "QuickSpec.h" -#import "QuickConfiguration.h" -#import "QCKDSL.h" - -FOUNDATION_EXPORT double QuickVersionNumber; -FOUNDATION_EXPORT const unsigned char QuickVersionString[]; - diff --git a/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick.modulemap b/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick.modulemap deleted file mode 100644 index f644728..0000000 --- a/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Quick { - umbrella header "Pods-cameraTests-Quick-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick.xcconfig b/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick.xcconfig deleted file mode 100644 index f8b0452..0000000 --- a/Pods/Target Support Files/Pods-cameraTests-Quick/Pods-cameraTests-Quick.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -PODS_CAMERATESTS_QUICK_FRAMEWORK_SEARCH_PATHS = $(inherited) "$(SDKROOT)/Developer/Library/Frameworks" "$(PLATFORM_DIR)/Developer/Library/Frameworks" -PODS_CAMERATESTS_QUICK_OTHER_LDFLAGS = -framework "XCTest" \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-acknowledgements.markdown b/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-acknowledgements.markdown index 52e3990..36d4225 100644 --- a/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-acknowledgements.markdown @@ -205,209 +205,4 @@ Apache License See the License for the specific language governing permissions and limitations under the License. - -## Quick - -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2014, Quick Team - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - Generated by CocoaPods - http://cocoapods.org diff --git a/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-acknowledgements.plist b/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-acknowledgements.plist index 81da4bd..4023106 100644 --- a/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-acknowledgements.plist @@ -221,215 +221,6 @@ Type PSGroupSpecifier - - FooterText - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2014, Quick Team - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Title - Quick - Type - PSGroupSpecifier - FooterText Generated by CocoaPods - http://cocoapods.org diff --git a/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-environment.h b/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-environment.h index 2ebf692..5c5fda2 100644 --- a/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-environment.h +++ b/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-environment.h @@ -9,12 +9,6 @@ // Nimble #define COCOAPODS_POD_AVAILABLE_Nimble #define COCOAPODS_VERSION_MAJOR_Nimble 0 -#define COCOAPODS_VERSION_MINOR_Nimble 3 -#define COCOAPODS_VERSION_PATCH_Nimble 0 - -// Quick -#define COCOAPODS_POD_AVAILABLE_Quick -#define COCOAPODS_VERSION_MAJOR_Quick 0 -#define COCOAPODS_VERSION_MINOR_Quick 2 -#define COCOAPODS_VERSION_PATCH_Quick 2 +#define COCOAPODS_VERSION_MINOR_Nimble 4 +#define COCOAPODS_VERSION_PATCH_Nimble 2 diff --git a/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-frameworks.sh b/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-frameworks.sh index 2993f68..ac3a300 100755 --- a/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-frameworks.sh +++ b/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-frameworks.sh @@ -17,8 +17,8 @@ install_framework() fi # use filter instead of exclude so missing patterns dont' throw errors - echo "rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers/" --filter "- PrivateHeaders/" ${source} ${destination}" - rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers/" --filter "- PrivateHeaders/" "${source}" "${destination}" + echo "rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers/" --filter "- PrivateHeaders/" --filter "- Modules/" ${source} ${destination}" + rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers/" --filter "- PrivateHeaders/" --filter "- Modules/" "${source}" "${destination}" # Resign the code if required by the build settings to avoid unstable apps if [ "${CODE_SIGNING_REQUIRED}" == "YES" ]; then code_sign "${destination}/$1" @@ -49,9 +49,7 @@ code_sign() { if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework 'Nimble.framework' - install_framework 'Quick.framework' fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework 'Nimble.framework' - install_framework 'Quick.framework' fi diff --git a/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-resources.sh b/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-resources.sh index 64c6f7a..43f0852 100755 --- a/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-resources.sh +++ b/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests-resources.sh @@ -6,7 +6,13 @@ mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt > "$RESOURCES_TO_COPY" -XCASSET_FILES="" +XCASSET_FILES=() + +realpath() { + DIRECTORY=$(cd "${1%/*}" && pwd) + FILENAME="${1##*/}" + echo "$DIRECTORY/$FILENAME" +} install_resource() { @@ -38,7 +44,8 @@ install_resource() xcrun mapc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcmappingmodel`.cdm" ;; *.xcassets) - XCASSET_FILES="$XCASSET_FILES '$1'" + ABSOLUTE_XCASSET_FILE=$(realpath "${PODS_ROOT}/$1") + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; /*) echo "$1" @@ -57,7 +64,7 @@ if [[ "${ACTION}" == "install" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n $XCASSET_FILES ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] then case "${TARGETED_DEVICE_FAMILY}" in 1,2) @@ -73,5 +80,14 @@ then TARGET_DEVICE_ARGS="--target-device mac" ;; esac - echo $XCASSET_FILES | xargs actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "`realpath $PODS_ROOT`*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi diff --git a/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests.debug.xcconfig b/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests.debug.xcconfig index 119e005..244ee53 100644 --- a/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests.debug.xcconfig +++ b/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests.debug.xcconfig @@ -1,8 +1,8 @@ -FRAMEWORK_SEARCH_PATHS = "$PODS_FRAMEWORK_BUILD_PATH" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_FRAMEWORK_BUILD_PATH" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_FRAMEWORK_BUILD_PATH/Nimble.framework/Headers" -iquote "$PODS_FRAMEWORK_BUILD_PATH/Quick.framework/Headers" -OTHER_LDFLAGS = $(inherited) -ObjC -framework "Nimble" -framework "Quick" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_FRAMEWORK_BUILD_PATH/Nimble.framework/Headers" +OTHER_LDFLAGS = $(inherited) -ObjC -framework "Nimble" OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods-cameraTests diff --git a/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests.release.xcconfig b/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests.release.xcconfig index 119e005..244ee53 100644 --- a/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests.release.xcconfig +++ b/Pods/Target Support Files/Pods-cameraTests/Pods-cameraTests.release.xcconfig @@ -1,8 +1,8 @@ -FRAMEWORK_SEARCH_PATHS = "$PODS_FRAMEWORK_BUILD_PATH" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_FRAMEWORK_BUILD_PATH" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_FRAMEWORK_BUILD_PATH/Nimble.framework/Headers" -iquote "$PODS_FRAMEWORK_BUILD_PATH/Quick.framework/Headers" -OTHER_LDFLAGS = $(inherited) -ObjC -framework "Nimble" -framework "Quick" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_FRAMEWORK_BUILD_PATH/Nimble.framework/Headers" +OTHER_LDFLAGS = $(inherited) -ObjC -framework "Nimble" OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" PODS_FRAMEWORK_BUILD_PATH = $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Pods-cameraTests diff --git a/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate b/camera.xcodeproj/project.xcworkspace/xcuserdata/nataliaterlecka.xcuserdatad/UserInterfaceState.xcuserstate index dc4ebaf9b6862cfddbd8704a3144cc6f4a4646f5..7460dea9d0723600faf033b9d0e83fc99898fba8 100644 GIT binary patch literal 92572 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 literal 91354 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

#y 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 yZ~~V>zgchNE*^n7Tc6>DFgfce3*vQN0P^m