diff --git a/Example/Podfile b/Example/Podfile index aea9d16..d8981c2 100644 --- a/Example/Podfile +++ b/Example/Podfile @@ -8,6 +8,6 @@ end target 'Chirp_Tests', :exclusive => true do pod "Chirp", :path => "../" - pod 'Quick', '~> 0.8.0' - pod 'Nimble', '3.0.0' + pod 'Quick', '~> 0.9.2' + pod 'Nimble', '4.0.0' end diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 4e2f105..a4b3adb 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,20 +1,20 @@ PODS: - - Chirp (0.1.0) - - Nimble (3.0.0) - - Quick (0.8.0) + - Chirp (1.1.1) + - Nimble (4.0.0) + - Quick (0.9.2) DEPENDENCIES: - Chirp (from `../`) - - Nimble (= 3.0.0) - - Quick (~> 0.8.0) + - Nimble + - Quick EXTERNAL SOURCES: Chirp: - :path: ../ + :path: "../" SPEC CHECKSUMS: - Chirp: d136718ec0b5923fea223c56d03cd70a502844bb - Nimble: 4c353d43735b38b545cbb4cb91504588eb5de926 - Quick: 563d0f6ec5f72e394645adb377708639b7dd38ab + Chirp: e06920df90dd33b3e74c988c58f621a8a1e41e7d + Nimble: 72bcc3e2f02242e6bfaaf8d9412ca7bfe3d8b417 + Quick: 18d057bc66451eedd5d1c8dc99ba2a5db6e60226 COCOAPODS: 0.39.0 diff --git a/Example/Pods/Headers/Private/Nimble/DSL.h b/Example/Pods/Headers/Private/Nimble/DSL.h index 0308fcd..4fe5956 120000 --- a/Example/Pods/Headers/Private/Nimble/DSL.h +++ b/Example/Pods/Headers/Private/Nimble/DSL.h @@ -1 +1 @@ -../../../Nimble/Nimble/objc/DSL.h \ No newline at end of file +../../../Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/Nimble/NMBExceptionCapture.h b/Example/Pods/Headers/Private/Nimble/NMBExceptionCapture.h index c86b6a1..cc47aa8 120000 --- a/Example/Pods/Headers/Private/Nimble/NMBExceptionCapture.h +++ b/Example/Pods/Headers/Private/Nimble/NMBExceptionCapture.h @@ -1 +1 @@ -../../../Nimble/Nimble/objc/NMBExceptionCapture.h \ No newline at end of file +../../../Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/Nimble/NMBStringify.h b/Example/Pods/Headers/Private/Nimble/NMBStringify.h new file mode 120000 index 0000000..cb72948 --- /dev/null +++ b/Example/Pods/Headers/Private/Nimble/NMBStringify.h @@ -0,0 +1 @@ +../../../Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/Nimble/Nimble.h b/Example/Pods/Headers/Private/Nimble/Nimble.h index 06ace47..dcbca3c 120000 --- a/Example/Pods/Headers/Private/Nimble/Nimble.h +++ b/Example/Pods/Headers/Private/Nimble/Nimble.h @@ -1 +1 @@ -../../../Nimble/Nimble/Nimble.h \ No newline at end of file +../../../Nimble/Sources/Nimble/Nimble.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/Quick/NSString+QCKSelectorName.h b/Example/Pods/Headers/Private/Quick/NSString+QCKSelectorName.h index 0c5df21..faa71a2 120000 --- a/Example/Pods/Headers/Private/Quick/NSString+QCKSelectorName.h +++ b/Example/Pods/Headers/Private/Quick/NSString+QCKSelectorName.h @@ -1 +1 @@ -../../../Quick/Quick/NSString+QCKSelectorName.h \ No newline at end of file +../../../Quick/Sources/Quick/NSString+QCKSelectorName.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/Quick/QCKDSL.h b/Example/Pods/Headers/Private/Quick/QCKDSL.h index 08e04e9..5ae1ce2 120000 --- a/Example/Pods/Headers/Private/Quick/QCKDSL.h +++ b/Example/Pods/Headers/Private/Quick/QCKDSL.h @@ -1 +1 @@ -../../../Quick/Quick/DSL/QCKDSL.h \ No newline at end of file +../../../Quick/Sources/Quick/DSL/QCKDSL.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/Quick/Quick.h b/Example/Pods/Headers/Private/Quick/Quick.h index 16c22c2..2be4243 120000 --- a/Example/Pods/Headers/Private/Quick/Quick.h +++ b/Example/Pods/Headers/Private/Quick/Quick.h @@ -1 +1 @@ -../../../Quick/Quick/Quick.h \ No newline at end of file +../../../Quick/Sources/Quick/Quick.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/Quick/QuickConfiguration.h b/Example/Pods/Headers/Private/Quick/QuickConfiguration.h index 2ae958e..ebb8ece 120000 --- a/Example/Pods/Headers/Private/Quick/QuickConfiguration.h +++ b/Example/Pods/Headers/Private/Quick/QuickConfiguration.h @@ -1 +1 @@ -../../../Quick/Quick/Configuration/QuickConfiguration.h \ No newline at end of file +../../../Quick/Sources/Quick/Configuration/QuickConfiguration.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/Quick/QuickSpec.h b/Example/Pods/Headers/Private/Quick/QuickSpec.h index 50bd82e..c790177 120000 --- a/Example/Pods/Headers/Private/Quick/QuickSpec.h +++ b/Example/Pods/Headers/Private/Quick/QuickSpec.h @@ -1 +1 @@ -../../../Quick/Quick/QuickSpec.h \ No newline at end of file +../../../Quick/Sources/Quick/QuickSpec.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/Quick/World+DSL.h b/Example/Pods/Headers/Private/Quick/World+DSL.h index 0e0c397..d2d257e 120000 --- a/Example/Pods/Headers/Private/Quick/World+DSL.h +++ b/Example/Pods/Headers/Private/Quick/World+DSL.h @@ -1 +1 @@ -../../../Quick/Quick/DSL/World+DSL.h \ No newline at end of file +../../../Quick/Sources/Quick/DSL/World+DSL.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/Quick/World.h b/Example/Pods/Headers/Private/Quick/World.h index 03dc4ee..5584295 120000 --- a/Example/Pods/Headers/Private/Quick/World.h +++ b/Example/Pods/Headers/Private/Quick/World.h @@ -1 +1 @@ -../../../Quick/Quick/World.h \ No newline at end of file +../../../Quick/Sources/Quick/World.h \ No newline at end of file diff --git a/Example/Pods/Local Podspecs/Chirp.podspec.json b/Example/Pods/Local Podspecs/Chirp.podspec.json index 18e5bbd..6f40e8e 100644 --- a/Example/Pods/Local Podspecs/Chirp.podspec.json +++ b/Example/Pods/Local Podspecs/Chirp.podspec.json @@ -1,16 +1,16 @@ { "name": "Chirp", - "version": "0.1.0", - "summary": "A short description of Chirp.", - "description": "", - "homepage": "https://github.com//Chirp", + "version": "1.1.1", + "summary": "The easiest way to prepare, play, and remove sounds in your Swift app!", + "description": "Bored of manually managing SystemSoundIDs? Chirp gives you a quick and easy way to prepare, play, and remove sounds in your app! Each of those only taking 1 line of code.", + "homepage": "https://github.com/trifl/Chirp", "license": "MIT", "authors": { "JP McGlone": "jp@trifl.co" }, "source": { - "git": "https://github.com//Chirp.git", - "tag": "0.1.0" + "git": "https://github.com/trifl/Chirp.git", + "tag": "1.1.1" }, "platforms": { "ios": "8.0" diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 4e2f105..a4b3adb 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,20 +1,20 @@ PODS: - - Chirp (0.1.0) - - Nimble (3.0.0) - - Quick (0.8.0) + - Chirp (1.1.1) + - Nimble (4.0.0) + - Quick (0.9.2) DEPENDENCIES: - Chirp (from `../`) - - Nimble (= 3.0.0) - - Quick (~> 0.8.0) + - Nimble + - Quick EXTERNAL SOURCES: Chirp: - :path: ../ + :path: "../" SPEC CHECKSUMS: - Chirp: d136718ec0b5923fea223c56d03cd70a502844bb - Nimble: 4c353d43735b38b545cbb4cb91504588eb5de926 - Quick: 563d0f6ec5f72e394645adb377708639b7dd38ab + Chirp: e06920df90dd33b3e74c988c58f621a8a1e41e7d + Nimble: 72bcc3e2f02242e6bfaaf8d9412ca7bfe3d8b417 + Quick: 18d057bc66451eedd5d1c8dc99ba2a5db6e60226 COCOAPODS: 0.39.0 diff --git a/Example/Pods/Nimble/Nimble/Adapters/NimbleXCTestHandler.swift b/Example/Pods/Nimble/Nimble/Adapters/NimbleXCTestHandler.swift deleted file mode 100644 index 12d1944..0000000 --- a/Example/Pods/Nimble/Nimble/Adapters/NimbleXCTestHandler.swift +++ /dev/null @@ -1,40 +0,0 @@ -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: FailureMessage, location: SourceLocation) { - if !assertion { - XCTFail("\(message.stringValue)\n", file: location.file, line: location.line) - } - } -} - -/// Alternative handler for Nimble. This assertion handler passes failures along -/// to XCTest by attempting to reduce the failure message size. -public class NimbleShortXCTestHandler: AssertionHandler { - public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { - if !assertion { - let msg: String - if let actual = message.actualValue { - msg = "got: \(actual) \(message.postfixActual)" - } else { - msg = "expected \(message.to) \(message.postfixMessage)" - } - XCTFail("\(msg)\n", file: location.file, line: location.line) - } - } -} - -/// Fallback handler in case XCTest is unavailable. This assertion handler will abort -/// the program if it is invoked. -class NimbleXCTestUnavailableHandler : AssertionHandler { - func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { - fatalError("XCTest is not available and no custom assertion handler was configured. Aborting.") - } -} - -func isXCTestAvailable() -> Bool { - return NSClassFromString("XCTestCase") != nil -} diff --git a/Example/Pods/Nimble/Nimble/DSL+Wait.swift b/Example/Pods/Nimble/Nimble/DSL+Wait.swift deleted file mode 100644 index 7214d29..0000000 --- a/Example/Pods/Nimble/Nimble/DSL+Wait.swift +++ /dev/null @@ -1,43 +0,0 @@ -import Foundation - -/// Only classes, protocols, methods, properties, and subscript declarations can be -/// 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. -internal class NMBWait: NSObject { - internal class func until(timeout 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) { - dispatch_once(&token) { - dispatch_async(dispatch_get_main_queue()) { - action() { completed = true } - } - } - return completed - } - switch (result) { - case .Failure: - let pluralize = (timeout == 1 ? "" : "s") - fail("Waited more than \(timeout) second\(pluralize)", file: file, line: line) - case .Timeout: - fail("Stall on main thread - too much enqueued on main run loop before waitUntil executes.", file: file, line: line) - case let .ErrorThrown(error): - // Technically, we can never reach this via a public API call - fail("Unexpected error thrown: \(error)", file: file, line: line) - case .Success: - break - } - } - - @objc(untilFile:line:action:) - internal 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 timeout: NSTimeInterval = 1, file: String = __FILE__, line: UInt = __LINE__, action: (() -> Void) -> Void) -> Void { - NMBWait.until(timeout: timeout, file: file, line: line, action: action) -} \ No newline at end of file diff --git a/Example/Pods/Nimble/Nimble/DSL.swift b/Example/Pods/Nimble/Nimble/DSL.swift deleted file mode 100644 index 98c60ba..0000000 --- a/Example/Pods/Nimble/Nimble/DSL.swift +++ /dev/null @@ -1,32 +0,0 @@ -/// Make an expectation on a given actual value. The value given is lazily evaluated. -public func expect(@autoclosure(escaping) expression: () throws -> T?, file: String = __FILE__, line: UInt = __LINE__) -> Expectation { - return Expectation( - expression: Expression( - expression: expression, - location: SourceLocation(file: file, line: line), - isClosure: true)) -} - -/// Make an expectation on a given actual value. The closure is lazily invoked. -public func expect(file: String = __FILE__, line: UInt = __LINE__, expression: () throws -> T?) -> Expectation { - return Expectation( - expression: Expression( - expression: expression, - 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) { - NimbleAssertionHandler.assert(false, message: FailureMessage(stringValue: message), location: location) -} - -/// Always fails the test with a message. -public func fail(message: String, file: String = __FILE__, line: UInt = __LINE__) { - fail(message, location: SourceLocation(file: file, line: line)) -} - -/// Always fails the test. -public func fail(file: String = __FILE__, line: UInt = __LINE__) { - fail("fail() always fails", file: file, line: line) -} diff --git a/Example/Pods/Nimble/Nimble/Matchers/ThrowError.swift b/Example/Pods/Nimble/Nimble/Matchers/ThrowError.swift deleted file mode 100644 index c12e31c..0000000 --- a/Example/Pods/Nimble/Nimble/Matchers/ThrowError.swift +++ /dev/null @@ -1,181 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual expression throws an -/// error of the specified type or from the specified case. -/// -/// Errors are tried to be compared by their implementation of Equatable, -/// otherwise they fallback to comparision by _domain and _code. -/// -/// Alternatively, you can pass a closure to do any arbitrary custom matching -/// to the thrown error. The closure only gets called when an error was thrown. -/// -/// nil arguments indicates that the matcher should not attempt to match against -/// that parameter. -public func throwError( - error: T? = nil, - errorType: T.Type? = nil, - closure: ((T) -> Void)? = nil) -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - - var actualError: ErrorType? - do { - try actualExpression.evaluate() - } catch let catchedError { - actualError = catchedError - } - - setFailureMessageForError(failureMessage, actualError: actualError, error: error, errorType: errorType, closure: closure) - return errorMatchesNonNilFieldsOrClosure(actualError, error: error, errorType: errorType, closure: closure) - } -} - -internal func setFailureMessageForError( - failureMessage: FailureMessage, - actualError: ErrorType?, - error: T?, - errorType: T.Type? = nil, - closure: ((T) -> Void)?) { - failureMessage.postfixMessage = "throw error" - - if let error = error { - if let error = error as? CustomDebugStringConvertible { - failureMessage.postfixMessage += " <\(error.debugDescription)>" - } else { - failureMessage.postfixMessage += " <\(error)>" - } - } else if errorType != nil || closure != nil { - failureMessage.postfixMessage += " from type <\(T.self)>" - } - if let _ = closure { - failureMessage.postfixMessage += " that satisfies block" - } - if error == nil && errorType == nil && closure == nil { - failureMessage.postfixMessage = "throw any error" - } - - if let actualError = actualError { - failureMessage.actualValue = "<\(actualError)>" - } else { - failureMessage.actualValue = "no error" - } -} - -internal func errorMatchesExpectedError( - actualError: ErrorType, - expectedError: T) -> Bool { - return actualError._domain == expectedError._domain - && actualError._code == expectedError._code -} - -internal func errorMatchesExpectedError( - actualError: ErrorType, - expectedError: T) -> Bool { - if let actualError = actualError as? T { - return actualError == expectedError - } - return false -} - -internal func errorMatchesNonNilFieldsOrClosure( - actualError: ErrorType?, - error: T?, - errorType: T.Type?, - closure: ((T) -> Void)?) -> Bool { - var matches = false - - if let actualError = actualError { - matches = true - - if let error = error { - if !errorMatchesExpectedError(actualError, expectedError: error) { - matches = false - } - } - if let actualError = actualError as? T { - if let closure = closure { - let assertions = gatherFailingExpectations { - closure(actualError as T) - } - let messages = assertions.map { $0.message } - if messages.count > 0 { - matches = false - } - } - } else if errorType != nil && closure != nil { - // The closure expects another ErrorType as argument, so this - // is _supposed_ to fail, so that it becomes more obvious. - let assertions = gatherExpectations { - expect(actualError is T).to(equal(true)) - } - precondition(assertions.map { $0.message }.count > 0) - matches = false - } - } - - return matches -} - - -/// A Nimble matcher that succeeds when the actual expression throws any -/// error or when the passed closures' arbitrary custom matching succeeds. -/// -/// This duplication to it's generic adequate is required to allow to receive -/// values of the existential type ErrorType in the closure. -/// -/// The closure only gets called when an error was thrown. -public func throwError( - closure closure: ((ErrorType) -> Void)? = nil) -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - - var actualError: ErrorType? - do { - try actualExpression.evaluate() - } catch let catchedError { - actualError = catchedError - } - - setFailureMessageForError(failureMessage, actualError: actualError, closure: closure) - return errorMatchesNonNilFieldsOrClosure(actualError, closure: closure) - } -} - -internal func setFailureMessageForError( - failureMessage: FailureMessage, - actualError: ErrorType?, - closure: ((ErrorType) -> Void)?) { - failureMessage.postfixMessage = "throw error" - - if let _ = closure { - failureMessage.postfixMessage += " that satisfies block" - } else { - failureMessage.postfixMessage = "throw any error" - } - - if let actualError = actualError { - failureMessage.actualValue = "<\(actualError)>" - } else { - failureMessage.actualValue = "no error" - } -} - -internal func errorMatchesNonNilFieldsOrClosure( - actualError: ErrorType?, - closure: ((ErrorType) -> Void)?) -> Bool { - var matches = false - - if let actualError = actualError { - matches = true - - if let closure = closure { - let assertions = gatherFailingExpectations { - closure(actualError) - } - let messages = assertions.map { $0.message } - if messages.count > 0 { - matches = false - } - } - } - - return matches -} diff --git a/Example/Pods/Nimble/Nimble/Utils/Functional.swift b/Example/Pods/Nimble/Nimble/Utils/Functional.swift deleted file mode 100644 index 647123f..0000000 --- a/Example/Pods/Nimble/Nimble/Utils/Functional.swift +++ /dev/null @@ -1,11 +0,0 @@ -import Foundation - -internal func all(array: [T], fn: (T) -> Bool) -> Bool { - for item in array { - if !fn(item) { - return false - } - } - return true -} - diff --git a/Example/Pods/Nimble/Nimble/Utils/Poll.swift b/Example/Pods/Nimble/Nimble/Utils/Poll.swift deleted file mode 100644 index 603d111..0000000 --- a/Example/Pods/Nimble/Nimble/Utils/Poll.swift +++ /dev/null @@ -1,86 +0,0 @@ -import Foundation - -internal enum PollResult : BooleanType { - case Success, Failure, Timeout - case ErrorThrown(ErrorType) - - var boolValue : Bool { - switch (self) { - case .Success: - return true - default: - return false - } - } -} - -internal class RunPromise { - var token: dispatch_once_t = 0 - var didFinish = false - var didFail = false - - init() {} - - func succeed() { - dispatch_once(&self.token) { - self.didFinish = false - } - } - - func fail(block: () -> Void) { - dispatch_once(&self.token) { - self.didFail = true - block() - } - } -} - -let killQueue = dispatch_queue_create("nimble.waitUntil.queue", DISPATCH_QUEUE_SERIAL) - -internal func stopRunLoop(runLoop: NSRunLoop, delay: NSTimeInterval) -> RunPromise { - let promise = RunPromise() - let killTimeOffset = Int64(CDouble(delay) * CDouble(NSEC_PER_SEC)) - let killTime = dispatch_time(DISPATCH_TIME_NOW, killTimeOffset) - dispatch_after(killTime, killQueue) { - promise.fail { - CFRunLoopStop(runLoop.getCFRunLoop()) - } - } - return promise -} - -internal func pollBlock(pollInterval pollInterval: NSTimeInterval, timeoutInterval: NSTimeInterval, expression: () throws -> Bool) -> PollResult { - let runLoop = NSRunLoop.mainRunLoop() - - let promise = stopRunLoop(runLoop, delay: min(timeoutInterval, 0.2)) - - let startDate = NSDate() - - // trigger run loop to make sure enqueued tasks don't block our assertion polling - // the stop run loop task above will abort us if necessary - runLoop.runUntilDate(startDate) - dispatch_sync(killQueue) { - promise.succeed() - } - - if promise.didFail { - return .Timeout - } - - var pass = false - do { - repeat { - pass = try expression() - if pass { - break - } - - let runDate = NSDate().dateByAddingTimeInterval(pollInterval) - runLoop.runUntilDate(runDate) - } while(NSDate().timeIntervalSinceDate(startDate) < timeoutInterval) - } catch let error { - return .ErrorThrown(error) - } - - return pass ? .Success : .Failure -} diff --git a/Example/Pods/Nimble/Nimble/Utils/SourceLocation.swift b/Example/Pods/Nimble/Nimble/Utils/SourceLocation.swift deleted file mode 100644 index 6066caa..0000000 --- a/Example/Pods/Nimble/Nimble/Utils/SourceLocation.swift +++ /dev/null @@ -1,21 +0,0 @@ -import Foundation - - -public class SourceLocation : NSObject { - public let file: String - public let line: UInt - - override init() { - file = "Unknown File" - line = 0 - } - - init(file: String, line: UInt) { - self.file = file - self.line = line - } - - override public var description: String { - return "\(file):\(line)" - } -} diff --git a/Example/Pods/Nimble/Nimble/Utils/Stringers.swift b/Example/Pods/Nimble/Nimble/Utils/Stringers.swift deleted file mode 100644 index 96073f3..0000000 --- a/Example/Pods/Nimble/Nimble/Utils/Stringers.swift +++ /dev/null @@ -1,62 +0,0 @@ -import Foundation - - -internal func identityAsString(value: AnyObject?) -> String { - if value == nil { - return "nil" - } - return NSString(format: "<%p>", unsafeBitCast(value!, Int.self)).description -} - -internal func arrayAsString(items: [T], joiner: String = ", ") -> String { - return items.reduce("") { accum, item in - let prefix = (accum.isEmpty ? "" : joiner) - return accum + prefix + "\(stringify(item))" - } -} - -@objc internal protocol NMBStringer { - func NMB_stringify() -> String -} - -internal func stringify(value: S) -> String { - var generator = value.generate() - var strings = [String]() - var value: S.Generator.Element? - repeat { - value = generator.next() - if value != nil { - strings.append(stringify(value)) - } - } while value != nil - let str = strings.joinWithSeparator(", ") - return "[\(str)]" -} - -extension NSArray : NMBStringer { - func NMB_stringify() -> String { - let str = self.componentsJoinedByString(", ") - return "[\(str)]" - } -} - -internal func stringify(value: T) -> String { - if let value = value as? Double { - return NSString(format: "%.4f", (value)).description - } - return String(value) -} - -internal func stringify(value: NMBDoubleConvertible) -> String { - if let value = value as? Double { - return NSString(format: "%.4f", (value)).description - } - return value.stringRepresentation -} - -internal func stringify(value: T?) -> String { - if let unboxed = value { - return stringify(unboxed) - } - return "nil" -} diff --git a/Example/Pods/Nimble/README.md b/Example/Pods/Nimble/README.md index 22c8613..10286e0 100644 --- a/Example/Pods/Nimble/README.md +++ b/Example/Pods/Nimble/README.md @@ -43,6 +43,7 @@ expect(ocean.isClean).toEventually(beTruthy()) - [Strings](#strings) - [Checking if all elements of a collection pass a condition](#checking-if-all-elements-of-a-collection-pass-a-condition) - [Verify collection count](#verify-collection-count) + - [Matching a value to any of a group of matchers](#matching-a-value-to-any-of-a-group-of-matchers) - [Writing Your Own Matchers](#writing-your-own-matchers) - [Lazy Evaluation](#lazy-evaluation) - [Type Checking via Swift Generics](#type-checking-via-swift-generics) @@ -197,7 +198,7 @@ expect(10) > 2 ## Lazily Computed Values -The `expect` function doesn't evalaute the value it's given until it's +The `expect` function doesn't evaluate the value it's given until it's time to match. So Nimble can test whether an expression raises an exception once evaluated: @@ -207,6 +208,7 @@ exception once evaluated: // Note: Swift currently doesn't have exceptions. // Only Objective-C code can raise exceptions // that Nimble will catch. +// (see https://github.com/Quick/Nimble/issues/220#issuecomment-172667064) let exception = NSException( name: NSInternalInconsistencyException, reason: "Not enough fish in the sea.", @@ -307,6 +309,12 @@ dispatch_async(dispatch_get_main_queue(), ^{ expect(ocean).toEventually(contain(@"dolphins", @"whales")); ``` +Note: toEventually triggers its polls on the main thread. Blocking the main +thread will cause Nimble to stop the run loop. This can cause test pollution +for whatever incomplete code that was running on the main thread. Blocking the +main thread can be caused by blocking IO, calls to sleep(), deadlocks, and +synchronous IPC. + In the above example, `ocean` is constantly re-evaluated. If it ever contains dolphins and whales, the expectation passes. If `ocean` still doesn't contain them, even after being continuously re-evaluated for one @@ -373,6 +381,25 @@ waitUntilTimeout(10, ^(void (^done)(void)){ }); ``` +Note: waitUntil triggers its timeout code on the main thread. Blocking the main +thread will cause Nimble to stop the run loop to continue. This can cause test +pollution for whatever incomplete code that was running on the main thread. +Blocking the main thread can be caused by blocking IO, calls to sleep(), +deadlocks, and synchronous IPC. + +In some cases (e.g. when running on slower machines) it can be useful to modify +the default timeout and poll interval values. This can be done as follows: + +```swift +// Swift + +// Increase the global timeout to 5 seconds: +Nimble.Defaults.AsyncTimeout = 5 + +// Slow the polling interval to 0.1 seconds: +Nimble.Defaults.AsyncPollInterval = 0.1 +``` + ## Objective-C Support Nimble has full support for Objective-C. However, there are two things @@ -616,7 +643,7 @@ expect(dolphin).to(beAKindOf([Mammal class])); ## Truthiness ```swift -// Passes if actual is not nil, false, or an object with a boolean value of false: +// Passes if actual is not nil, true, or an object with a boolean value of true: expect(actual).to(beTruthy()) // Passes if actual is only true (not nil or an object conforming to BooleanType true): @@ -635,7 +662,7 @@ expect(actual).to(beNil()) ```objc // Objective-C -// Passes if actual is not nil, false, or an object with a boolean value of false: +// Passes if actual is not nil, true, or an object with a boolean value of true: expect(actual).to(beTruthy()); // Passes if actual is only true (not nil or an object conforming to BooleanType true): @@ -673,6 +700,23 @@ expect{ try somethingThatThrows() }.to(throwError(NSCocoaError.PropertyListReadC expect{ try somethingThatThrows() }.to(throwError(errorType: MyError.self)) ``` +If you are working directly with `ErrorType` values, as is sometimes the case when using `Result` or `Promise` types, you can use the `matchError` matcher to check if the error is the same error is is supposed to be, without requiring explicit casting. + +```swift +// Swift + +let actual: ErrorType = … + +// Passes if actual contains any error value from the MyErrorEnum type: +expect(actual).to(matchError(MyErrorEnum)) + +// Passes if actual contains the Timeout value from the MyErrorEnum type: +expect(actual).to(matchError(MyErrorEnum.Timeout)) + +// Passes if actual contains an NSError equal to the given one: +expect(actual).to(matchError(NSError(domain: "err", code: 123, userInfo: nil))) +``` + Note: This feature is only available in Swift. ## Exceptions @@ -715,7 +759,7 @@ expect(actual).to(raiseException().satisfyingBlock(^(NSException *exception) { })); ``` -Note: Swift currently doesn't have exceptions. Only Objective-C code can raise +Note: Swift currently doesn't have exceptions (see [#220](https://github.com/Quick/Nimble/issues/220#issuecomment-172667064)). Only Objective-C code can raise exceptions that Nimble will catch. ## Collection Membership @@ -878,6 +922,34 @@ For Swift the actual value must be a `CollectionType` such as array, dictionary For Objective-C the actual value has to be one of the following classes `NSArray`, `NSDictionary`, `NSSet`, `NSHashTable` or one of their subclasses. +## Matching a value to any of a group of matchers + +```swift +// passes if actual is either less than 10 or greater than 20 +expect(actual).to(satisfyAnyOf(beLessThan(10), beGreaterThan(20))) + +// can include any number of matchers -- the following will pass +// **be careful** -- too many matchers can be the sign of an unfocused test +expect(6).to(satisfyAnyOf(equal(2), equal(3), equal(4), equal(5), equal(6), equal(7))) + +// in Swift you also have the option to use the || operator to achieve a similar function +expect(82).to(beLessThan(50) || beGreaterThan(80)) +``` + +```objc +// passes if actual is either less than 10 or greater than 20 +expect(actual).to(satisfyAnyOf(beLessThan(@10), beGreaterThan(@20))) + +// can include any number of matchers -- the following will pass +// **be careful** -- too many matchers can be the sign of an unfocused test +expect(@6).to(satisfyAnyOf(equal(@2), equal(@3), equal(@4), equal(@5), equal(@6), equal(@7))) +``` + +Note: This matcher allows you to chain any number of matchers together. This provides flexibility, + but if you find yourself chaining many matchers together in one test, consider whether you + could instead refactor that single test into multiple, more precisely focused tests for + better coverage. + # Writing Your Own Matchers In Nimble, matchers are Swift functions that take an expected @@ -1088,10 +1160,6 @@ extension NMBObjCMatcher { Nimble can currently be installed in one of two ways: using CocoaPods, or with git submodules. -- The `swift-2.0` branch support Swift 2.0. -- 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 To use Nimble as a submodule to test your iOS or OS X applications, follow these @@ -1111,7 +1179,7 @@ install just Nimble. To use Nimble in CocoaPods to test your iOS or OS X applications, add Nimble to your podfile and add the ```use_frameworks!``` line to enable Swift support for -Cocoapods. +CocoaPods. ```ruby platform :ios, '8.0' @@ -1122,10 +1190,7 @@ source 'https://github.com/CocoaPods/Specs.git' target 'YOUR_APP_NAME_HERE_Tests', :exclusive => true do use_frameworks! - # If you're using Swift 2.0 (Xcode 7), use this: - pod 'Nimble', '~> 2.0.0' - # If you're using Swift 1.2 (Xcode 6), use this: - pod 'Nimble', '~> 1.0.0' + pod 'Nimble', '~> 3.1.0' end ``` diff --git a/Example/Pods/Nimble/Nimble/Adapters/AdapterProtocols.swift b/Example/Pods/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift similarity index 100% rename from Example/Pods/Nimble/Nimble/Adapters/AdapterProtocols.swift rename to Example/Pods/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift diff --git a/Example/Pods/Nimble/Nimble/Adapters/AssertionDispatcher.swift b/Example/Pods/Nimble/Sources/Nimble/Adapters/AssertionDispatcher.swift similarity index 100% rename from Example/Pods/Nimble/Nimble/Adapters/AssertionDispatcher.swift rename to Example/Pods/Nimble/Sources/Nimble/Adapters/AssertionDispatcher.swift diff --git a/Example/Pods/Nimble/Nimble/Adapters/AssertionRecorder.swift b/Example/Pods/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift similarity index 92% rename from Example/Pods/Nimble/Nimble/Adapters/AssertionRecorder.swift rename to Example/Pods/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift index 4709942..a1615a7 100644 --- a/Example/Pods/Nimble/Nimble/Adapters/AssertionRecorder.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift @@ -44,11 +44,12 @@ public class AssertionRecorder : AssertionHandler { /// /// @see AssertionHandler public func withAssertionHandler(tempAssertionHandler: AssertionHandler, closure: () throws -> Void) { - let oldRecorder = NimbleAssertionHandler + let environment = NimbleEnvironment.activeInstance + let oldRecorder = environment.assertionHandler let capturer = NMBExceptionCapture(handler: nil, finally: ({ - NimbleAssertionHandler = oldRecorder + environment.assertionHandler = oldRecorder })) - NimbleAssertionHandler = tempAssertionHandler + environment.assertionHandler = tempAssertionHandler capturer.tryBlock { try! closure() } @@ -65,7 +66,7 @@ public func withAssertionHandler(tempAssertionHandler: AssertionHandler, closure /// /// @see gatherFailingExpectations public func gatherExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] { - let previousRecorder = NimbleAssertionHandler + let previousRecorder = NimbleEnvironment.activeInstance.assertionHandler let recorder = AssertionRecorder() let handlers: [AssertionHandler] diff --git a/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift b/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift new file mode 100644 index 0000000..27cdac9 --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift @@ -0,0 +1,38 @@ +import Foundation + +/// "Global" state of Nimble is stored here. Only DSL functions should access / be aware of this +/// class' existance +internal class NimbleEnvironment { + static var activeInstance: NimbleEnvironment { + get { + let env = NSThread.currentThread().threadDictionary["NimbleEnvironment"] + if let env = env as? NimbleEnvironment { + return env + } else { + let newEnv = NimbleEnvironment() + self.activeInstance = newEnv + return newEnv + } + } + set { + NSThread.currentThread().threadDictionary["NimbleEnvironment"] = newValue + } + } + + // TODO: eventually migrate the global to this environment value + var assertionHandler: AssertionHandler { + get { return NimbleAssertionHandler } + set { NimbleAssertionHandler = newValue } + } + +#if _runtime(_ObjC) + var awaiter: Awaiter + + init() { + awaiter = Awaiter( + waitLock: AssertionWaitLock(), + asyncQueue: dispatch_get_main_queue(), + timeoutQueue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) + } +#endif +} diff --git a/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift b/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift new file mode 100644 index 0000000..7d84f45 --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift @@ -0,0 +1,77 @@ +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: FailureMessage, location: SourceLocation) { + if !assertion { + recordFailure("\(message.stringValue)\n", location: location) + } + } +} + +/// Alternative handler for Nimble. This assertion handler passes failures along +/// to XCTest by attempting to reduce the failure message size. +public class NimbleShortXCTestHandler: AssertionHandler { + public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { + if !assertion { + let msg: String + if let actual = message.actualValue { + msg = "got: \(actual) \(message.postfixActual)" + } else { + msg = "expected \(message.to) \(message.postfixMessage)" + } + recordFailure("\(msg)\n", location: location) + } + } +} + +/// Fallback handler in case XCTest is unavailable. This assertion handler will abort +/// the program if it is invoked. +class NimbleXCTestUnavailableHandler : AssertionHandler { + func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { + fatalError("XCTest is not available and no custom assertion handler was configured. Aborting.") + } +} + +#if _runtime(_ObjC) + /// Helper class providing access to the currently executing XCTestCase instance, if any +@objc final internal class CurrentTestCaseTracker: NSObject, XCTestObservation { + @objc static let sharedInstance = CurrentTestCaseTracker() + + private(set) var currentTestCase: XCTestCase? + + @objc func testCaseWillStart(testCase: XCTestCase) { + currentTestCase = testCase + } + + @objc func testCaseDidFinish(testCase: XCTestCase) { + currentTestCase = nil + } +} +#endif + + +func isXCTestAvailable() -> Bool { +#if _runtime(_ObjC) + // XCTest is weakly linked and so may not be present + return NSClassFromString("XCTestCase") != nil +#else + return true +#endif +} + +private func recordFailure(message: String, location: SourceLocation) { +#if _runtime(_ObjC) + if let testCase = CurrentTestCaseTracker.sharedInstance.currentTestCase { + testCase.recordFailureWithDescription(message, inFile: location.file, atLine: location.line, expected: true) + } else { + let msg = "Attempted to report a test failure to XCTest while no test case was running. " + + "The failure was:\n\"\(message)\"\nIt occurred at: \(location.file):\(location.line)" + NSException(name: NSInternalInconsistencyException, reason: msg, userInfo: nil).raise() + } +#else + XCTFail("\(message)\n", file: location.file, line: location.line) +#endif +} diff --git a/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.m b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.m new file mode 100644 index 0000000..fb2546f --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.m @@ -0,0 +1,25 @@ +#import +#import + +SWIFT_CLASS("_TtC6Nimble22CurrentTestCaseTracker") +@interface CurrentTestCaseTracker : NSObject ++ (CurrentTestCaseTracker *)sharedInstance; +@end + +@interface CurrentTestCaseTracker (Register) @end + +@implementation CurrentTestCaseTracker (Register) + ++ (void)load { + CurrentTestCaseTracker *tracker = [CurrentTestCaseTracker sharedInstance]; + // Xcode 7.3 introduced a bug where early registration of a test observer prevented + // default XCTest test observer from being registered. That caused no logs being + // printed to console, which in result broke several tools that relied on this. + // In order to work around the issue we're deferring registration to allow default + // test observer to register first. + dispatch_async(dispatch_get_main_queue(), ^{ + [[XCTestObservationCenter sharedTestObservationCenter] addTestObserver:tracker]; + }); +} + +@end diff --git a/Example/Pods/Nimble/Nimble/objc/DSL.h b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.h similarity index 93% rename from Example/Pods/Nimble/Nimble/objc/DSL.h rename to Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.h index 5ec3b51..a499059 100644 --- a/Example/Pods/Nimble/Nimble/objc/DSL.h +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.h @@ -53,6 +53,10 @@ NIMBLE_EXPORT id NMB_beIdenticalTo(id expectedInstance); NIMBLE_SHORT(id beIdenticalTo(id expectedInstance), NMB_beIdenticalTo(expectedInstance)); +NIMBLE_EXPORT id NMB_be(id expectedInstance); +NIMBLE_SHORT(id be(id expectedInstance), + NMB_be(expectedInstance)); + NIMBLE_EXPORT id NMB_beLessThan(NSNumber *expectedValue); NIMBLE_SHORT(id beLessThan(NSNumber *expectedValue), NMB_beLessThan(expectedValue)); @@ -107,6 +111,12 @@ NIMBLE_EXPORT id NMB_allPass(id matcher); NIMBLE_SHORT(id allPass(id matcher), NMB_allPass(matcher)); +NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers); +#define NMB_satisfyAnyOf(...) NMB_satisfyAnyOfWithMatchers(@[__VA_ARGS__]) +#ifndef NIMBLE_DISABLE_SHORT_SYNTAX +#define satisfyAnyOf(...) NMB_satisfyAnyOf(__VA_ARGS__) +#endif + // 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/Example/Pods/Nimble/Nimble/objc/DSL.m b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.m similarity index 94% rename from Example/Pods/Nimble/Nimble/objc/DSL.m rename to Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.m index e602036..2170238 100644 --- a/Example/Pods/Nimble/Nimble/objc/DSL.m +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.m @@ -55,6 +55,10 @@ NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; } +NIMBLE_EXPORT id NMB_be(id expectedInstance) { + return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; +} + NIMBLE_EXPORT id NMB_beLessThan(NSNumber *expectedValue) { return [NMBObjCMatcher beLessThanMatcher:expectedValue]; } @@ -125,6 +129,10 @@ NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger return [NMBObjCMatcher allPassMatcher:expectedValue]; } +NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers) { + return [NMBObjCMatcher satisfyAnyOfMatcher:matchers]; +} + NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException() { return [NMBObjCMatcher raiseExceptionMatcher]; } diff --git a/Example/Pods/Nimble/Nimble/objc/NMBExceptionCapture.h b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.h similarity index 70% rename from Example/Pods/Nimble/Nimble/objc/NMBExceptionCapture.h rename to Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.h index 8be4a5a..7e5fb07 100644 --- a/Example/Pods/Nimble/Nimble/objc/NMBExceptionCapture.h +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.h @@ -1,4 +1,5 @@ #import +#import @interface NMBExceptionCapture : NSObject @@ -6,3 +7,5 @@ - (void)tryBlock:(void(^)())unsafeBlock; @end + +typedef void(^NMBSourceCallbackBlock)(BOOL successful); diff --git a/Example/Pods/Nimble/Nimble/objc/NMBExceptionCapture.m b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.m similarity index 99% rename from Example/Pods/Nimble/Nimble/objc/NMBExceptionCapture.m rename to Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.m index d19d5d9..48f5739 100644 --- a/Example/Pods/Nimble/Nimble/objc/NMBExceptionCapture.m +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.m @@ -32,4 +32,4 @@ - (void)tryBlock:(void(^)())unsafeBlock { } } -@end +@end \ No newline at end of file diff --git a/Example/Pods/Nimble/Nimble/ObjCExpectation.swift b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExpectation.swift similarity index 95% rename from Example/Pods/Nimble/Nimble/ObjCExpectation.swift rename to Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExpectation.swift index 95060da..3f18d06 100644 --- a/Example/Pods/Nimble/Nimble/ObjCExpectation.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExpectation.swift @@ -1,3 +1,7 @@ +import Foundation + +#if _runtime(_ObjC) + internal struct ObjCMatcherWrapper : Matcher { let matcher: NMBMatcher @@ -20,11 +24,11 @@ internal struct ObjCMatcherWrapper : Matcher { public class NMBExpectation : NSObject { internal let _actualBlock: () -> NSObject! internal var _negative: Bool - internal let _file: String + internal let _file: FileString internal let _line: UInt internal var _timeout: NSTimeInterval = 1.0 - public init(actualBlock: () -> NSObject!, negative: Bool, file: String, line: UInt) { + public init(actualBlock: () -> NSObject!, negative: Bool, file: FileString, line: UInt) { self._actualBlock = actualBlock self._negative = negative self._file = file @@ -119,7 +123,9 @@ public class NMBExpectation : NSObject { public var toNotEventuallyWithDescription: (NMBMatcher, String) -> Void { return toEventuallyNotWithDescription } - public class func failWithMessage(message: String, file: String, line: UInt) { + public class func failWithMessage(message: String, file: FileString, line: UInt) { fail(message, location: SourceLocation(file: file, line: line)) } } + +#endif diff --git a/Example/Pods/Nimble/Nimble/Wrappers/ObjCMatcher.swift b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBObjCMatcher.swift similarity index 99% rename from Example/Pods/Nimble/Nimble/Wrappers/ObjCMatcher.swift rename to Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBObjCMatcher.swift index 30400d1..9f31d42 100644 --- a/Example/Pods/Nimble/Nimble/Wrappers/ObjCMatcher.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBObjCMatcher.swift @@ -1,5 +1,7 @@ import Foundation +#if _runtime(_ObjC) + public typealias MatcherBlock = (actualExpression: Expression, failureMessage: FailureMessage) -> Bool public typealias FullMatcherBlock = (actualExpression: Expression, failureMessage: FailureMessage, shouldNotMatch: Bool) -> Bool @@ -76,3 +78,4 @@ public class NMBObjCMatcher : NSObject, NMBMatcher { } } +#endif diff --git a/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.h b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.h new file mode 100644 index 0000000..e5d5ddd --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.h @@ -0,0 +1,18 @@ +@class NSString; + +/** + * Returns a string appropriate for displaying in test output + * from the provided value. + * + * @param value A value that will show up in a test's output. + * + * @return The string that is returned can be + * customized per type by conforming a type to the `TestOutputStringConvertible` + * protocol. When stringifying a non-`TestOutputStringConvertible` type, this + * function will return the value's debug description and then its + * normal description if available and in that order. Otherwise it + * will return the result of constructing a string from the value. + * + * @see `TestOutputStringConvertible` + */ +extern NSString *_Nonnull NMBStringify(id _Nullable anyObject) __attribute__((warn_unused_result)); diff --git a/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.m b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.m new file mode 100644 index 0000000..329d39a --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.m @@ -0,0 +1,6 @@ +#import "NMBStringify.h" +#import + +NSString *_Nonnull NMBStringify(id _Nullable anyObject) { + return [NMBStringer stringify:anyObject]; +} diff --git a/Example/Pods/Nimble/Sources/Nimble/DSL+Wait.swift b/Example/Pods/Nimble/Sources/Nimble/DSL+Wait.swift new file mode 100644 index 0000000..9124964 --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/DSL+Wait.swift @@ -0,0 +1,93 @@ +import Foundation + +#if _runtime(_ObjC) +private enum ErrorResult { + case Exception(NSException) + case Error(ErrorType) + case None +} + +/// Only classes, protocols, methods, properties, and subscript declarations can be +/// 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. +internal class NMBWait: NSObject { + internal class func until( + timeout timeout: NSTimeInterval, + file: FileString = #file, + line: UInt = #line, + action: (() -> Void) -> Void) -> Void { + return throwableUntil(timeout: timeout, file: file, line: line) { (done: () -> Void) throws -> Void in + action() { done() } + } + } + + // Using a throwable closure makes this method not objc compatible. + internal class func throwableUntil( + timeout timeout: NSTimeInterval, + file: FileString = #file, + line: UInt = #line, + action: (() -> Void) throws -> Void) -> Void { + let awaiter = NimbleEnvironment.activeInstance.awaiter + let leeway = timeout / 2.0 + let result = awaiter.performBlock { (done: (ErrorResult) -> Void) throws -> Void in + dispatch_async(dispatch_get_main_queue()) { + let capture = NMBExceptionCapture( + handler: ({ exception in + done(.Exception(exception)) + }), + finally: ({ }) + ) + capture.tryBlock { + do { + try action() { + done(.None) + } + } catch let e { + done(.Error(e)) + } + } + } + }.timeout(timeout, forcefullyAbortTimeout: leeway).wait("waitUntil(...)", file: file, line: line) + + switch result { + case .Incomplete: internalError("Reached .Incomplete state for waitUntil(...).") + case .BlockedRunLoop: + fail(blockedRunLoopErrorMessageFor("-waitUntil()", leeway: leeway), + file: file, line: line) + case .TimedOut: + let pluralize = (timeout == 1 ? "" : "s") + fail("Waited more than \(timeout) second\(pluralize)", file: file, line: line) + case let .RaisedException(exception): + fail("Unexpected exception raised: \(exception)") + case let .ErrorThrown(error): + fail("Unexpected error thrown: \(error)") + case .Completed(.Exception(let exception)): + fail("Unexpected exception raised: \(exception)") + case .Completed(.Error(let error)): + fail("Unexpected error thrown: \(error)") + case .Completed(.None): // success + break + } + } + + @objc(untilFile:line:action:) + internal class func until(file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { + until(timeout: 1, file: file, line: line, action: action) + } +} + +internal func blockedRunLoopErrorMessageFor(fnName: String, leeway: NSTimeInterval) -> String { + return "\(fnName) timed out but was unable to run the timeout handler because the main thread is unresponsive (\(leeway) seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run." +} + +/// Wait asynchronously until the done closure is called or the timeout has been reached. +/// +/// @discussion +/// Call the done() closure to indicate the waiting has completed. +/// +/// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function +/// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. +public func waitUntil(timeout timeout: NSTimeInterval = 1, file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { + NMBWait.until(timeout: timeout, file: file, line: line, action: action) +} +#endif diff --git a/Example/Pods/Nimble/Sources/Nimble/DSL.swift b/Example/Pods/Nimble/Sources/Nimble/DSL.swift new file mode 100644 index 0000000..b43a933 --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/DSL.swift @@ -0,0 +1,68 @@ +import Foundation + +/// Make an expectation on a given actual value. The value given is lazily evaluated. +@warn_unused_result(message="Follow 'expect(…)' with '.to(…)', '.toNot(…)', 'toEventually(…)', '==', etc.") +public func expect(@autoclosure(escaping) expression: () throws -> T?, file: FileString = #file, line: UInt = #line) -> Expectation { + return Expectation( + expression: Expression( + expression: expression, + location: SourceLocation(file: file, line: line), + isClosure: true)) +} + +/// Make an expectation on a given actual value. The closure is lazily invoked. +@warn_unused_result(message="Follow 'expect(…)' with '.to(…)', '.toNot(…)', 'toEventually(…)', '==', etc.") +public func expect(file: FileString = #file, line: UInt = #line, expression: () throws -> T?) -> Expectation { + return Expectation( + expression: Expression( + expression: expression, + 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) { + let handler = NimbleEnvironment.activeInstance.assertionHandler + handler.assert(false, message: FailureMessage(stringValue: message), location: location) +} + +/// Always fails the test with a message. +public func fail(message: String, file: FileString = #file, line: UInt = #line) { + fail(message, location: SourceLocation(file: file, line: line)) +} + +/// Always fails the test. +public func fail(file: FileString = #file, line: UInt = #line) { + fail("fail() always fails", file: file, line: line) +} + +/// Like Swift's precondition(), but raises NSExceptions instead of sigaborts +internal func nimblePrecondition( + @autoclosure expr: () -> Bool, + @autoclosure _ name: () -> String, + @autoclosure _ message: () -> String, + file: StaticString = #file, + line: UInt = #line) -> Bool { + let result = expr() + if !result { +#if _runtime(_ObjC) + let e = NSException( + name: name(), + reason: message(), + userInfo: nil) + e.raise() +#else + preconditionFailure("\(name()) - \(message())", file: file, line: line) +#endif + } + return result +} + +@noreturn +internal func internalError(msg: String, file: FileString = #file, line: UInt = #line) { + fatalError( + "Nimble Bug Found: \(msg) at \(file):\(line).\n" + + "Please file a bug to Nimble: https://github.com/Quick/Nimble/issues with the " + + "code snippet that caused this error." + ) +} \ No newline at end of file diff --git a/Example/Pods/Nimble/Nimble/Expectation.swift b/Example/Pods/Nimble/Sources/Nimble/Expectation.swift similarity index 94% rename from Example/Pods/Nimble/Nimble/Expectation.swift rename to Example/Pods/Nimble/Sources/Nimble/Expectation.swift index dcf1a92..520902d 100644 --- a/Example/Pods/Nimble/Nimble/Expectation.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Expectation.swift @@ -36,7 +36,8 @@ public struct Expectation { let expression: Expression public func verify(pass: Bool, _ message: FailureMessage) { - NimbleAssertionHandler.assert(pass, message: message, location: expression.location) + let handler = NimbleEnvironment.activeInstance.assertionHandler + handler.assert(pass, message: message, location: expression.location) } /// Tests the actual value using a matcher to match. diff --git a/Example/Pods/Nimble/Nimble/Expression.swift b/Example/Pods/Nimble/Sources/Nimble/Expression.swift similarity index 100% rename from Example/Pods/Nimble/Nimble/Expression.swift rename to Example/Pods/Nimble/Sources/Nimble/Expression.swift diff --git a/Example/Pods/Nimble/Nimble/FailureMessage.swift b/Example/Pods/Nimble/Sources/Nimble/FailureMessage.swift similarity index 88% rename from Example/Pods/Nimble/Nimble/FailureMessage.swift rename to Example/Pods/Nimble/Sources/Nimble/FailureMessage.swift index e59dacc..4d23bc8 100644 --- a/Example/Pods/Nimble/Nimble/FailureMessage.swift +++ b/Example/Pods/Nimble/Sources/Nimble/FailureMessage.swift @@ -34,9 +34,9 @@ public class FailureMessage: NSObject { } internal func stripNewlines(str: String) -> String { - var lines: [String] = (str as NSString).componentsSeparatedByString("\n") as [String] + var lines: [String] = NSString(string: str).componentsSeparatedByString("\n") as [String] let whitespace = NSCharacterSet.whitespaceAndNewlineCharacterSet() - lines = lines.map { line in line.stringByTrimmingCharactersInSet(whitespace) } + lines = lines.map { line in NSString(string: line).stringByTrimmingCharactersInSet(whitespace) } return lines.joinWithSeparator("") } diff --git a/Example/Pods/Nimble/Nimble/Matchers/AllPass.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/AllPass.swift similarity index 99% rename from Example/Pods/Nimble/Nimble/Matchers/AllPass.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/AllPass.swift index 075b7ac..d67714b 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/AllPass.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/AllPass.swift @@ -47,6 +47,7 @@ private func createAllPassMatcher NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in @@ -88,3 +89,4 @@ extension NMBObjCMatcher { } } } +#endif diff --git a/Example/Pods/Nimble/Nimble/Wrappers/AsyncMatcherWrapper.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/AsyncMatcherWrapper.swift similarity index 50% rename from Example/Pods/Nimble/Nimble/Wrappers/AsyncMatcherWrapper.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/AsyncMatcherWrapper.swift index 2d1a15b..3df6eb6 100644 --- a/Example/Pods/Nimble/Nimble/Wrappers/AsyncMatcherWrapper.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/AsyncMatcherWrapper.swift @@ -1,11 +1,18 @@ import Foundation +#if _runtime(_ObjC) + +public struct AsyncDefaults { + public static var Timeout: NSTimeInterval = 1 + public static var PollInterval: NSTimeInterval = 0.01 +} + internal struct AsyncMatcherWrapper: Matcher { let fullMatcher: U let timeoutInterval: NSTimeInterval let pollInterval: NSTimeInterval - init(fullMatcher: U, timeoutInterval: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01) { + init(fullMatcher: U, timeoutInterval: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval) { self.fullMatcher = fullMatcher self.timeoutInterval = timeoutInterval self.pollInterval = pollInterval @@ -13,35 +20,56 @@ internal struct AsyncMatcherWrapper: Ma func matches(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { let uncachedExpression = actualExpression.withoutCaching() - let result = pollBlock(pollInterval: pollInterval, timeoutInterval: timeoutInterval) { - try self.fullMatcher.matches(uncachedExpression, failureMessage: failureMessage) + let fnName = "expect(...).toEventually(...)" + let result = pollBlock( + pollInterval: pollInterval, + timeoutInterval: timeoutInterval, + file: actualExpression.location.file, + line: actualExpression.location.line, + fnName: fnName) { + try self.fullMatcher.matches(uncachedExpression, failureMessage: failureMessage) } switch (result) { - case .Success: return true - case .Failure: return false + case let .Completed(isSuccessful): return isSuccessful + case .TimedOut: return false case let .ErrorThrown(error): failureMessage.actualValue = "an unexpected error thrown: <\(error)>" return false - case .Timeout: - failureMessage.postfixMessage += " (Stall on main thread)." + case let .RaisedException(exception): + failureMessage.actualValue = "an unexpected exception thrown: <\(exception)>" return false + case .BlockedRunLoop: + failureMessage.postfixMessage += " (timed out, but main thread was unresponsive)." + return false + case .Incomplete: + internalError("Reached .Incomplete state for toEventually(...).") } } func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { let uncachedExpression = actualExpression.withoutCaching() - let result = pollBlock(pollInterval: pollInterval, timeoutInterval: timeoutInterval) { - try self.fullMatcher.doesNotMatch(uncachedExpression, failureMessage: failureMessage) + let result = pollBlock( + pollInterval: pollInterval, + timeoutInterval: timeoutInterval, + file: actualExpression.location.file, + line: actualExpression.location.line, + fnName: "expect(...).toEventuallyNot(...)") { + try self.fullMatcher.doesNotMatch(uncachedExpression, failureMessage: failureMessage) } switch (result) { - case .Success: return true - case .Failure: return false + case let .Completed(isSuccessful): return isSuccessful + case .TimedOut: return false case let .ErrorThrown(error): failureMessage.actualValue = "an unexpected error thrown: <\(error)>" return false - case .Timeout: - failureMessage.postfixMessage += " (Stall on main thread)." + case let .RaisedException(exception): + failureMessage.actualValue = "an unexpected exception thrown: <\(exception)>" + return false + case .BlockedRunLoop: + failureMessage.postfixMessage += " (timed out, but main thread was unresponsive)." return false + case .Incomplete: + internalError("Reached .Incomplete state for toEventuallyNot(...).") } } } @@ -52,7 +80,11 @@ private let toEventuallyRequiresClosureError = FailureMessage(stringValue: "expe extension Expectation { /// Tests the actual value using a matcher to match by checking continuously /// at each pollInterval until the timeout is reached. - public func toEventually(matcher: U, timeout: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01, description: String? = nil) { + /// + /// @discussion + /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function + /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. + public func toEventually(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { if expression.isClosure { let (pass, msg) = expressionMatches( expression, @@ -71,7 +103,11 @@ extension Expectation { /// Tests the actual value using a matcher to not match by checking /// continuously at each pollInterval until the timeout is reached. - public func toEventuallyNot(matcher: U, timeout: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01, description: String? = nil) { + /// + /// @discussion + /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function + /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. + public func toEventuallyNot(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { if expression.isClosure { let (pass, msg) = expressionDoesNotMatch( expression, @@ -92,7 +128,13 @@ extension Expectation { /// continuously at each pollInterval until the timeout is reached. /// /// Alias of toEventuallyNot() - public func toNotEventually(matcher: U, timeout: NSTimeInterval = 1, pollInterval: NSTimeInterval = 0.01, description: String? = nil) { + /// + /// @discussion + /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function + /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. + public func toNotEventually(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { return toEventuallyNot(matcher, timeout: timeout, pollInterval: pollInterval, description: description) } } + +#endif diff --git a/Example/Pods/Nimble/Nimble/Matchers/BeAKindOf.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift similarity index 86% rename from Example/Pods/Nimble/Nimble/Matchers/BeAKindOf.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift index b3f7338..d1f3737 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/BeAKindOf.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift @@ -1,5 +1,7 @@ import Foundation +#if _runtime(_ObjC) + // A Nimble matcher that catches attempts to use beAKindOf with non Objective-C types public func beAKindOf(expectedClass: Any) -> NonNilMatcherFunc { return NonNilMatcherFunc {actualExpression, failureMessage in @@ -16,11 +18,11 @@ public func beAKindOf(expectedClass: AnyClass) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let instance = try actualExpression.evaluate() if let validInstance = instance { - failureMessage.actualValue = "<\(NSStringFromClass(validInstance.dynamicType)) instance>" + failureMessage.actualValue = "<\(classAsString(validInstance.dynamicType)) instance>" } else { failureMessage.actualValue = "" } - failureMessage.postfixMessage = "be a kind of \(NSStringFromClass(expectedClass))" + failureMessage.postfixMessage = "be a kind of \(classAsString(expectedClass))" return instance != nil && instance!.isKindOfClass(expectedClass) } } @@ -32,3 +34,5 @@ extension NMBObjCMatcher { } } } + +#endif diff --git a/Example/Pods/Nimble/Nimble/Matchers/BeAnInstanceOf.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift similarity index 81% rename from Example/Pods/Nimble/Nimble/Matchers/BeAnInstanceOf.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift index e65948b..32477dd 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/BeAnInstanceOf.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift @@ -16,15 +16,20 @@ public func beAnInstanceOf(expectedClass: AnyClass) -> NonNilMatcherFunc NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in @@ -32,3 +37,4 @@ extension NMBObjCMatcher { } } } +#endif diff --git a/Example/Pods/Nimble/Nimble/Matchers/BeCloseTo.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift similarity index 96% rename from Example/Pods/Nimble/Nimble/Matchers/BeCloseTo.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift index 909e022..1a3dc11 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/BeCloseTo.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift @@ -1,14 +1,13 @@ +#if os(Linux) +import Glibc +#endif import Foundation internal let DefaultDelta = 0.0001 internal func isCloseTo(actualValue: NMBDoubleConvertible?, expectedValue: NMBDoubleConvertible, delta: Double, failureMessage: FailureMessage) -> Bool { failureMessage.postfixMessage = "be close to <\(stringify(expectedValue))> (within \(stringify(delta)))" - if actualValue != nil { - failureMessage.actualValue = "<\(stringify(actualValue!))>" - } else { - failureMessage.actualValue = "" - } + failureMessage.actualValue = "<\(stringify(actualValue))>" return actualValue != nil && abs(actualValue!.doubleValue - expectedValue.doubleValue) < delta } @@ -32,6 +31,7 @@ public func beCloseTo(expectedValue: NMBDoubleConvertible, within delta: Double } } +#if _runtime(_ObjC) public class NMBObjCBeCloseToMatcher : NSObject, NMBMatcher { var _expected: NSNumber var _delta: CDouble @@ -70,11 +70,14 @@ extension NMBObjCMatcher { return NMBObjCBeCloseToMatcher(expected: expected, within: within) } } +#endif public func beCloseTo(expectedValues: [Double], within delta: Double = DefaultDelta) -> NonNilMatcherFunc <[Double]> { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be close to <\(stringify(expectedValues))> (each within \(stringify(delta)))" if let actual = try actualExpression.evaluate() { + failureMessage.actualValue = "<\(stringify(actual))>" + if actual.count != expectedValues.count { return false } else { diff --git a/Example/Pods/Nimble/Nimble/Matchers/BeEmpty.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeEmpty.swift similarity index 93% rename from Example/Pods/Nimble/Nimble/Matchers/BeEmpty.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/BeEmpty.swift index 67c6bed..cebd82d 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/BeEmpty.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeEmpty.swift @@ -21,7 +21,7 @@ public func beEmpty() -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "be empty" let actualString = try actualExpression.evaluate() - return actualString == nil || (actualString! as NSString).length == 0 + return actualString == nil || NSString(string: actualString!).length == 0 } } @@ -68,6 +68,7 @@ public func beEmpty() -> NonNilMatcherFunc { } } +#if _runtime(_ObjC) extension NMBObjCMatcher { public class func beEmptyMatcher() -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in @@ -81,10 +82,11 @@ extension NMBObjCMatcher { let expr = Expression(expression: ({ value as String }), location: location) return try! beEmpty().matches(expr, failureMessage: failureMessage) } else if let actualValue = actualValue { - failureMessage.postfixMessage = "be empty (only works for NSArrays, NSSets, NSDictionaries, NSHashTables, and NSStrings)" - failureMessage.actualValue = "\(NSStringFromClass(actualValue.dynamicType)) type" + failureMessage.postfixMessage = "be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings)" + failureMessage.actualValue = "\(classAsString(actualValue.dynamicType)) type" } return false } } } +#endif diff --git a/Example/Pods/Nimble/Nimble/Matchers/BeGreaterThan.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift similarity index 98% rename from Example/Pods/Nimble/Nimble/Matchers/BeGreaterThan.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift index f632b33..0f24ab5 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/BeGreaterThan.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift @@ -27,6 +27,7 @@ public func >(lhs: Expectation, rhs: NMBComparable?) { lhs.to(beGreaterThan(rhs)) } +#if _runtime(_ObjC) extension NMBObjCMatcher { public class func beGreaterThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in @@ -35,3 +36,4 @@ extension NMBObjCMatcher { } } } +#endif diff --git a/Example/Pods/Nimble/Nimble/Matchers/BeGreaterThanOrEqualTo.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift similarity index 98% rename from Example/Pods/Nimble/Nimble/Matchers/BeGreaterThanOrEqualTo.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift index 20ad83d..c89ff07 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/BeGreaterThanOrEqualTo.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift @@ -29,6 +29,7 @@ public func >=(lhs: Expectation, rhs: T) { lhs.to(beGreaterThanOrEqualTo(rhs)) } +#if _runtime(_ObjC) extension NMBObjCMatcher { public class func beGreaterThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in @@ -37,3 +38,4 @@ extension NMBObjCMatcher { } } } +#endif diff --git a/Example/Pods/Nimble/Nimble/Matchers/BeIdenticalTo.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift similarity index 53% rename from Example/Pods/Nimble/Nimble/Matchers/BeIdenticalTo.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift index 2160782..a369501 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/BeIdenticalTo.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift @@ -3,7 +3,7 @@ import Foundation /// A Nimble matcher that succeeds when the actual value is the same instance /// as the expected instance. -public func beIdenticalTo(expected: T?) -> NonNilMatcherFunc { +public func beIdenticalTo(expected: AnyObject?) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in let actual = try actualExpression.evaluate() failureMessage.actualValue = "\(identityAsString(actual))" @@ -12,17 +12,28 @@ public func beIdenticalTo(expected: T?) -> NonNilMatcherFunc { } } -public func ===(lhs: Expectation, rhs: T?) { +public func ===(lhs: Expectation, rhs: AnyObject?) { lhs.to(beIdenticalTo(rhs)) } -public func !==(lhs: Expectation, rhs: T?) { +public func !==(lhs: Expectation, rhs: AnyObject?) { lhs.toNot(beIdenticalTo(rhs)) } +/// A Nimble matcher that succeeds when the actual value is the same instance +/// as the expected instance. +/// +/// Alias for "beIdenticalTo". +public func be(expected: AnyObject?) -> NonNilMatcherFunc { + return beIdenticalTo(expected) +} + +#if _runtime(_ObjC) extension NMBObjCMatcher { public class func beIdenticalToMatcher(expected: NSObject?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - return try! beIdenticalTo(expected).matches(actualExpression, failureMessage: failureMessage) + let aExpr = actualExpression.cast { $0 as AnyObject? } + return try! beIdenticalTo(expected).matches(aExpr, failureMessage: failureMessage) } } } +#endif diff --git a/Example/Pods/Nimble/Nimble/Matchers/BeLessThan.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThan.swift similarity index 98% rename from Example/Pods/Nimble/Nimble/Matchers/BeLessThan.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThan.swift index c93ea29..ea4725b 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/BeLessThan.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThan.swift @@ -26,6 +26,7 @@ public func <(lhs: Expectation, rhs: NMBComparable?) { lhs.to(beLessThan(rhs)) } +#if _runtime(_ObjC) extension NMBObjCMatcher { public class func beLessThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in @@ -34,3 +35,4 @@ extension NMBObjCMatcher { } } } +#endif diff --git a/Example/Pods/Nimble/Nimble/Matchers/BeLessThanOrEqual.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift similarity index 98% rename from Example/Pods/Nimble/Nimble/Matchers/BeLessThanOrEqual.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift index f260ac3..a24cf8c 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/BeLessThanOrEqual.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift @@ -27,6 +27,7 @@ public func <=(lhs: Expectation, rhs: T) { lhs.to(beLessThanOrEqualTo(rhs)) } +#if _runtime(_ObjC) extension NMBObjCMatcher { public class func beLessThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil:false) { actualExpression, failureMessage in @@ -35,3 +36,4 @@ extension NMBObjCMatcher { } } } +#endif diff --git a/Example/Pods/Nimble/Nimble/Matchers/BeLogical.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLogical.swift similarity index 82% rename from Example/Pods/Nimble/Nimble/Matchers/BeLogical.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/BeLogical.swift index d629472..ac729b2 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/BeLogical.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeLogical.swift @@ -1,15 +1,9 @@ import Foundation -internal func matcherWithFailureMessage(matcher: M, postprocessor: (FailureMessage) -> Void) -> FullMatcherFunc { - return FullMatcherFunc { actualExpression, failureMessage, isNegation in - let pass: Bool - if isNegation { - pass = try matcher.doesNotMatch(actualExpression, failureMessage: failureMessage) - } else { - pass = try matcher.matches(actualExpression, failureMessage: failureMessage) - } - postprocessor(failureMessage) - return pass +internal func matcherWithFailureMessage(matcher: NonNilMatcherFunc, postprocessor: (FailureMessage) -> Void) -> NonNilMatcherFunc { + return NonNilMatcherFunc { actualExpression, failureMessage in + defer { postprocessor(failureMessage) } + return try matcher.matcher(actualExpression, failureMessage) } } @@ -17,7 +11,7 @@ internal func matcherWithFailureMessage(ma /// A Nimble matcher that succeeds when the actual value is exactly true. /// This matcher will not match against nils. -public func beTrue() -> FullMatcherFunc { +public func beTrue() -> NonNilMatcherFunc { return matcherWithFailureMessage(equal(true)) { failureMessage in failureMessage.postfixMessage = "be true" } @@ -25,7 +19,7 @@ public func beTrue() -> FullMatcherFunc { /// A Nimble matcher that succeeds when the actual value is exactly false. /// This matcher will not match against nils. -public func beFalse() -> FullMatcherFunc { +public func beFalse() -> NonNilMatcherFunc { return matcherWithFailureMessage(equal(false)) { failureMessage in failureMessage.postfixMessage = "be false" } @@ -62,6 +56,7 @@ public func beFalsy() -> MatcherFunc { } } +#if _runtime(_ObjC) extension NMBObjCMatcher { public class func beTruthyMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in @@ -91,3 +86,4 @@ extension NMBObjCMatcher { } } } +#endif diff --git a/Example/Pods/Nimble/Nimble/Matchers/BeNil.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeNil.swift similarity index 95% rename from Example/Pods/Nimble/Nimble/Matchers/BeNil.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/BeNil.swift index 4245907..a6fb31f 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/BeNil.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeNil.swift @@ -9,6 +9,7 @@ public func beNil() -> MatcherFunc { } } +#if _runtime(_ObjC) extension NMBObjCMatcher { public class func beNilMatcher() -> NMBObjCMatcher { return NMBObjCMatcher { actualExpression, failureMessage in @@ -16,3 +17,4 @@ extension NMBObjCMatcher { } } } +#endif diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/BeVoid.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeVoid.swift new file mode 100644 index 0000000..8f86265 --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeVoid.swift @@ -0,0 +1,18 @@ +import Foundation + +/// A Nimble matcher that succeeds when the actual value is Void. +public func beVoid() -> MatcherFunc<()> { + return MatcherFunc { actualExpression, failureMessage in + failureMessage.postfixMessage = "be void" + let actualValue: ()? = try actualExpression.evaluate() + return actualValue != nil + } +} + +public func ==(lhs: Expectation<()>, rhs: ()) { + lhs.to(beVoid()) +} + +public func !=(lhs: Expectation<()>, rhs: ()) { + lhs.toNot(beVoid()) +} \ No newline at end of file diff --git a/Example/Pods/Nimble/Nimble/Matchers/BeginWith.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeginWith.swift similarity index 98% rename from Example/Pods/Nimble/Nimble/Matchers/BeginWith.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/BeginWith.swift index 9f07b12..0b5e0e1 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/BeginWith.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/BeginWith.swift @@ -37,6 +37,7 @@ public func beginWith(startingSubstring: String) -> NonNilMatcherFunc { } } +#if _runtime(_ObjC) extension NMBObjCMatcher { public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in @@ -51,3 +52,4 @@ extension NMBObjCMatcher { } } } +#endif diff --git a/Example/Pods/Nimble/Nimble/Matchers/Contain.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/Contain.swift similarity index 88% rename from Example/Pods/Nimble/Nimble/Matchers/Contain.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/Contain.swift index e0fe68c..bdac2d5 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/Contain.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/Contain.swift @@ -9,7 +9,7 @@ private func contain NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(substrings))>" if let actual = try actualExpression.evaluate() { - return all(substrings) { - let scanRange = Range(start: actual.startIndex, end: actual.endIndex) - let range = actual.rangeOfString($0, options: [], range: scanRange, locale: nil) + return substrings.all { + let range = actual.rangeOfString($0) return range != nil && !range!.isEmpty } } @@ -45,7 +44,7 @@ private func contain(substrings: [NSString]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(substrings))>" if let actual = try actualExpression.evaluate() { - return all(substrings) { actual.rangeOfString($0.description).length != 0 } + return substrings.all { actual.rangeOfString($0.description).length != 0 } } return false } @@ -59,13 +58,14 @@ public func contain(items: AnyObject?...) -> NonNilMatcherFunc { private func contain(items: [AnyObject?]) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in failureMessage.postfixMessage = "contain <\(arrayAsString(items))>" - let actual = try actualExpression.evaluate() - return all(items) { item in - return actual != nil && actual!.containsObject(item) + guard let actual = try actualExpression.evaluate() else { return false } + return items.all { item in + return item != nil && actual.containsObject(item!) } } } +#if _runtime(_ObjC) extension NMBObjCMatcher { public class func containMatcher(expected: [NSObject]) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in @@ -89,3 +89,4 @@ extension NMBObjCMatcher { } } } +#endif diff --git a/Example/Pods/Nimble/Nimble/Matchers/EndWith.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/EndWith.swift similarity index 98% rename from Example/Pods/Nimble/Nimble/Matchers/EndWith.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/EndWith.swift index 2f15874..ff2bd9e 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/EndWith.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/EndWith.swift @@ -47,6 +47,7 @@ public func endWith(endingSubstring: String) -> NonNilMatcherFunc { } } +#if _runtime(_ObjC) extension NMBObjCMatcher { public class func endWithMatcher(expected: AnyObject) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in @@ -61,3 +62,4 @@ extension NMBObjCMatcher { } } } +#endif diff --git a/Example/Pods/Nimble/Nimble/Matchers/Equal.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/Equal.swift similarity index 81% rename from Example/Pods/Nimble/Nimble/Matchers/Equal.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/Equal.swift index 96b7705..6373d8c 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/Equal.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/Equal.swift @@ -53,6 +53,37 @@ public func equal(expectedValue: [T]?) -> NonNilMatcherFunc<[T]> { } } +/// A Nimble matcher allowing comparison of collection with optional type +public func equal(expectedValue: [T?]) -> NonNilMatcherFunc<[T?]> { + return NonNilMatcherFunc { actualExpression, failureMessage in + failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" + if let actualValue = try actualExpression.evaluate() { + if expectedValue.count != actualValue.count { + return false + } + + for (index, item) in actualValue.enumerate() { + let otherItem = expectedValue[index] + if item == nil && otherItem == nil { + continue + } else if item == nil && otherItem != nil { + return false + } else if item != nil && otherItem == nil { + return false + } else if item! != otherItem! { + return false + } + } + + return true + } else { + failureMessage.postfixActual = " (use beNil() to match nils)" + } + + return false + } +} + /// 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) @@ -139,6 +170,7 @@ public func !=(lhs: Expectation<[T: C]>, rhs: [T: C] lhs.toNot(equal(rhs)) } +#if _runtime(_ObjC) extension NMBObjCMatcher { public class func equalMatcher(expected: NSObject) -> NMBMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in @@ -146,3 +178,4 @@ extension NMBObjCMatcher { } } } +#endif diff --git a/Example/Pods/Nimble/Nimble/Matchers/HaveCount.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/HaveCount.swift similarity index 84% rename from Example/Pods/Nimble/Nimble/Matchers/HaveCount.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/HaveCount.swift index 79205fa..a17cca2 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/HaveCount.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/HaveCount.swift @@ -5,7 +5,7 @@ import Foundation public func haveCount(expectedValue: T.Index.Distance) -> NonNilMatcherFunc { return NonNilMatcherFunc { actualExpression, failureMessage in if let actualValue = try actualExpression.evaluate() { - failureMessage.postfixMessage = "have \(actualValue) with count \(expectedValue)" + failureMessage.postfixMessage = "have \(stringify(actualValue)) with count \(stringify(expectedValue))" let result = expectedValue == actualValue.count failureMessage.actualValue = "\(actualValue.count)" return result @@ -20,7 +20,7 @@ public func haveCount(expectedValue: T.Index.Distance) -> Non public func haveCount(expectedValue: Int) -> MatcherFunc { return MatcherFunc { actualExpression, failureMessage in if let actualValue = try actualExpression.evaluate() { - failureMessage.postfixMessage = "have \(actualValue) with count \(expectedValue)" + failureMessage.postfixMessage = "have \(stringify(actualValue)) with count \(stringify(expectedValue))" let result = expectedValue == actualValue.count failureMessage.actualValue = "\(actualValue.count)" return result @@ -30,6 +30,7 @@ public func haveCount(expectedValue: Int) -> MatcherFunc { } } +#if _runtime(_ObjC) extension NMBObjCMatcher { public class func haveCountMatcher(expected: NSNumber) -> NMBObjCMatcher { return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in @@ -40,9 +41,10 @@ extension NMBObjCMatcher { return try! haveCount(expected.integerValue).matches(expr, failureMessage: failureMessage) } else if let actualValue = actualValue { failureMessage.postfixMessage = "get type of NSArray, NSSet, NSDictionary, or NSHashTable" - failureMessage.actualValue = "\(NSStringFromClass(actualValue.dynamicType))" + failureMessage.actualValue = "\(classAsString(actualValue.dynamicType))" } return false } } } +#endif diff --git a/Example/Pods/Nimble/Nimble/Matchers/Match.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/Match.swift similarity index 97% rename from Example/Pods/Nimble/Nimble/Matchers/Match.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/Match.swift index 058d6b1..586e616 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/Match.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/Match.swift @@ -1,5 +1,7 @@ import Foundation +#if _runtime(_ObjC) + /// A Nimble matcher that succeeds when the actual string satisfies the regular expression /// described by the expected string. public func match(expectedValue: String?) -> NonNilMatcherFunc { @@ -25,3 +27,4 @@ extension NMBObjCMatcher { } } +#endif diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/MatchError.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/MatchError.swift new file mode 100644 index 0000000..cba70c2 --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/MatchError.swift @@ -0,0 +1,26 @@ +import Foundation + +/// A Nimble matcher that succeeds when the actual expression evaluates to an +/// error from the specified case. +/// +/// Errors are tried to be compared by their implementation of Equatable, +/// otherwise they fallback to comparision by _domain and _code. +public func matchError(error: T) -> NonNilMatcherFunc { + return NonNilMatcherFunc { actualExpression, failureMessage in + let actualError: ErrorType? = try actualExpression.evaluate() + + setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, error: error) + return errorMatchesNonNilFieldsOrClosure(actualError, error: error) + } +} + +/// A Nimble matcher that succeeds when the actual expression evaluates to an +/// error of the specified type +public func matchError(errorType: T.Type) -> NonNilMatcherFunc { + return NonNilMatcherFunc { actualExpression, failureMessage in + let actualError: ErrorType? = try actualExpression.evaluate() + + setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, errorType: errorType) + return errorMatchesNonNilFieldsOrClosure(actualError, errorType: errorType) + } +} diff --git a/Example/Pods/Nimble/Nimble/Wrappers/MatcherFunc.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift similarity index 73% rename from Example/Pods/Nimble/Nimble/Wrappers/MatcherFunc.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift index ff9c2ee..c8a9217 100644 --- a/Example/Pods/Nimble/Nimble/Wrappers/MatcherFunc.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift @@ -1,29 +1,3 @@ -/// A convenience API to build matchers that allow full control over -/// to() and toNot() match cases. -/// -/// The final bool argument in the closure is if the match is for negation. -/// -/// You may use this when implementing your own custom matchers. -/// -/// Use the Matcher protocol instead of this type to accept custom matchers as -/// input parameters. -/// @see allPass for an example that uses accepts other matchers as input. -public struct FullMatcherFunc: Matcher { - public let matcher: (Expression, FailureMessage, Bool) throws -> Bool - - public init(_ matcher: (Expression, FailureMessage, Bool) throws -> Bool) { - self.matcher = matcher - } - - public func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { - return try matcher(actualExpression, failureMessage, false) - } - - public func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { - return try matcher(actualExpression, failureMessage, true) - } -} - /// A convenience API to build matchers that don't need special negation /// behavior. The toNot() behavior is the negation of to(). /// diff --git a/Example/Pods/Nimble/Nimble/Matchers/MatcherProtocols.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift similarity index 65% rename from Example/Pods/Nimble/Nimble/Matchers/MatcherProtocols.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift index 10f5b4e..978d54c 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/MatcherProtocols.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift @@ -2,44 +2,93 @@ import Foundation /// Implement this protocol to implement a custom matcher for Swift public protocol Matcher { - typealias ValueType + associatedtype ValueType func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool } +#if _runtime(_ObjC) /// Objective-C interface to the Swift variant of Matcher. @objc public protocol NMBMatcher { func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool } +#endif +#if _runtime(_ObjC) /// Protocol for types that support contain() matcher. @objc public protocol NMBContainer { func containsObject(object: AnyObject!) -> Bool } + +extension NSHashTable : NMBContainer {} // Corelibs Foundation does not include this class yet +#else +public protocol NMBContainer { + func containsObject(object: AnyObject) -> Bool +} +#endif + extension NSArray : NMBContainer {} extension NSSet : NMBContainer {} -extension NSHashTable : NMBContainer {} +#if _runtime(_ObjC) /// Protocol for types that support only beEmpty(), haveCount() matchers @objc public protocol NMBCollection { var count: Int { get } } + +extension NSHashTable : NMBCollection {} // Corelibs Foundation does not include these classes yet +extension NSMapTable : NMBCollection {} +#else +public protocol NMBCollection { + var count: Int { get } +} +#endif + extension NSSet : NMBCollection {} +extension NSIndexSet : NMBCollection {} extension NSDictionary : NMBCollection {} -extension NSHashTable : NMBCollection {} -extension NSMapTable : NMBCollection {} +#if _runtime(_ObjC) /// Protocol for types that support beginWith(), endWith(), beEmpty() matchers @objc public protocol NMBOrderedCollection : NMBCollection { func indexOfObject(object: AnyObject!) -> Int } +#else +public protocol NMBOrderedCollection : NMBCollection { + func indexOfObject(object: AnyObject) -> Int +} +#endif + extension NSArray : NMBOrderedCollection {} +#if _runtime(_ObjC) /// Protocol for types to support beCloseTo() matcher @objc public protocol NMBDoubleConvertible { var doubleValue: CDouble { get } } +#else +public protocol NMBDoubleConvertible { + var doubleValue: CDouble { get } +} + +extension Double : NMBDoubleConvertible { + public var doubleValue: CDouble { + get { + return self + } + } +} + +extension Float : NMBDoubleConvertible { + public var doubleValue: CDouble { + get { + return CDouble(self) + } + } +} +#endif + extension NSNumber : NMBDoubleConvertible { } @@ -47,10 +96,11 @@ private let dateFormatter: NSDateFormatter = { let formatter = NSDateFormatter() formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSS" formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") - + return formatter - }() +}() +#if _runtime(_ObjC) extension NSDate: NMBDoubleConvertible { public var doubleValue: CDouble { get { @@ -58,25 +108,11 @@ extension NSDate: NMBDoubleConvertible { } } } +#endif - -extension NMBDoubleConvertible { - public var stringRepresentation: String { - get { - if let date = self as? NSDate { - return dateFormatter.stringFromDate(date) - } - - if let debugStringConvertible = self as? CustomDebugStringConvertible { - return debugStringConvertible.debugDescription - } - - if let stringConvertible = self as? CustomStringConvertible { - return stringConvertible.description - } - - return "" - } +extension NSDate: TestOutputStringConvertible { + public var testDescription: String { + return dateFormatter.stringFromDate(self) } } @@ -84,9 +120,17 @@ extension NMBDoubleConvertible { /// beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers. /// /// Types that conform to Swift's Comparable protocol will work implicitly too +#if _runtime(_ObjC) @objc public protocol NMBComparable { func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult } +#else +// This should become obsolete once Corelibs Foundation adds Comparable conformance to NSNumber +public protocol NMBComparable { + func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult +} +#endif + extension NSNumber : NMBComparable { public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult { return compare(otherObject as! NSNumber) diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/PostNotification.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/PostNotification.swift new file mode 100644 index 0000000..0191f88 --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/PostNotification.swift @@ -0,0 +1,66 @@ +import Foundation + +internal class NotificationCollector { + private(set) var observedNotifications: [NSNotification] + private let notificationCenter: NSNotificationCenter + #if _runtime(_ObjC) + private var token: AnyObject? + #else + private var token: NSObjectProtocol? + #endif + + required init(notificationCenter: NSNotificationCenter) { + self.notificationCenter = notificationCenter + self.observedNotifications = [] + } + + func startObserving() { + self.token = self.notificationCenter.addObserverForName(nil, object: nil, queue: nil) { + // linux-swift gets confused by .append(n) + [weak self] n in self?.observedNotifications += [n] + } + } + + deinit { + #if _runtime(_ObjC) + if let token = self.token { + self.notificationCenter.removeObserver(token) + } + #else + if let token = self.token as? AnyObject { + self.notificationCenter.removeObserver(token) + } + #endif + } +} + +private let mainThread = pthread_self() + +public func postNotifications( + notificationsMatcher: T, + fromNotificationCenter center: NSNotificationCenter = NSNotificationCenter.defaultCenter()) + -> MatcherFunc { + let _ = mainThread // Force lazy-loading of this value + let collector = NotificationCollector(notificationCenter: center) + collector.startObserving() + var once: Bool = false + return MatcherFunc { actualExpression, failureMessage in + let collectorNotificationsExpression = Expression(memoizedExpression: { _ in + return collector.observedNotifications + }, location: actualExpression.location, withoutCaching: true) + + assert(pthread_equal(mainThread, pthread_self()) != 0, "Only expecting closure to be evaluated on main thread.") + if !once { + once = true + try actualExpression.evaluate() + } + + let match = try notificationsMatcher.matches(collectorNotificationsExpression, failureMessage: failureMessage) + if collector.observedNotifications.isEmpty { + failureMessage.actualValue = "no notifications" + } else { + failureMessage.actualValue = "<\(stringify(collector.observedNotifications))>" + } + return match + } +} \ No newline at end of file diff --git a/Example/Pods/Nimble/Nimble/Matchers/RaisesException.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/RaisesException.swift similarity index 94% rename from Example/Pods/Nimble/Nimble/Matchers/RaisesException.swift rename to Example/Pods/Nimble/Sources/Nimble/Matchers/RaisesException.swift index 0b5754f..ff6b74a 100644 --- a/Example/Pods/Nimble/Nimble/Matchers/RaisesException.swift +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/RaisesException.swift @@ -1,5 +1,8 @@ import Foundation +// This matcher requires the Objective-C, and being built by Xcode rather than the Swift Package Manager +#if _runtime(_ObjC) && !SWIFT_PACKAGE + /// A Nimble matcher that succeeds when the actual expression raises an /// exception with the specified name, reason, and/or userInfo. /// @@ -57,7 +60,7 @@ internal func setFailureMessageForException( } if let exception = exception { - failureMessage.actualValue = "\(NSStringFromClass(exception.dynamicType)) { name=\(exception.name), reason='\(stringify(exception.reason))', userInfo=\(stringify(exception.userInfo)) }" + failureMessage.actualValue = "\(classAsString(exception.dynamicType)) { name=\(exception.name), reason='\(stringify(exception.reason))', userInfo=\(stringify(exception.userInfo)) }" } else { failureMessage.actualValue = "no exception" } @@ -176,3 +179,4 @@ extension NMBObjCMatcher { return NMBObjCRaiseExceptionMatcher(name: nil, reason: nil, userInfo: nil, block: nil) } } +#endif diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift new file mode 100644 index 0000000..d383a31 --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift @@ -0,0 +1,61 @@ +import Foundation + +/// A Nimble matcher that succeeds when the actual value matches with any of the matchers +/// provided in the variable list of matchers. +public func satisfyAnyOf(matchers: U...) -> NonNilMatcherFunc { + return satisfyAnyOf(matchers) +} + +internal func satisfyAnyOf(matchers: [U]) -> NonNilMatcherFunc { + return NonNilMatcherFunc { actualExpression, failureMessage in + let postfixMessages = NSMutableArray() + var matches = false + for matcher in matchers { + if try matcher.matches(actualExpression, failureMessage: failureMessage) { + matches = true + } + postfixMessages.addObject(NSString(string: "{\(failureMessage.postfixMessage)}")) + } + + failureMessage.postfixMessage = "match one of: " + postfixMessages.componentsJoinedByString(", or ") + if let actualValue = try actualExpression.evaluate() { + failureMessage.actualValue = "\(actualValue)" + } + + return matches + } +} + +public func ||(left: NonNilMatcherFunc, right: NonNilMatcherFunc) -> NonNilMatcherFunc { + return satisfyAnyOf(left, right) +} + +public func ||(left: MatcherFunc, right: MatcherFunc) -> NonNilMatcherFunc { + return satisfyAnyOf(left, right) +} + +#if _runtime(_ObjC) +extension NMBObjCMatcher { + public class func satisfyAnyOfMatcher(matchers: [NMBObjCMatcher]) -> NMBObjCMatcher { + return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in + if matchers.isEmpty { + failureMessage.stringValue = "satisfyAnyOf must be called with at least one matcher" + return false + } + + var elementEvaluators = [NonNilMatcherFunc]() + for matcher in matchers { + let elementEvaluator: (Expression, FailureMessage) -> Bool = { + expression, failureMessage in + return matcher.matches( + {try! expression.evaluate()}, failureMessage: failureMessage, location: actualExpression.location) + } + + elementEvaluators.append(NonNilMatcherFunc(elementEvaluator)) + } + + return try! satisfyAnyOf(elementEvaluators).matches(actualExpression, failureMessage: failureMessage) + } + } +} +#endif diff --git a/Example/Pods/Nimble/Sources/Nimble/Matchers/ThrowError.swift b/Example/Pods/Nimble/Sources/Nimble/Matchers/ThrowError.swift new file mode 100644 index 0000000..9563565 --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Matchers/ThrowError.swift @@ -0,0 +1,53 @@ +import Foundation + +/// A Nimble matcher that succeeds when the actual expression throws an +/// error of the specified type or from the specified case. +/// +/// Errors are tried to be compared by their implementation of Equatable, +/// otherwise they fallback to comparision by _domain and _code. +/// +/// Alternatively, you can pass a closure to do any arbitrary custom matching +/// to the thrown error. The closure only gets called when an error was thrown. +/// +/// nil arguments indicates that the matcher should not attempt to match against +/// that parameter. +public func throwError( + error: T? = nil, + errorType: T.Type? = nil, + closure: ((T) -> Void)? = nil) -> MatcherFunc { + return MatcherFunc { actualExpression, failureMessage in + + var actualError: ErrorType? + do { + try actualExpression.evaluate() + } catch let catchedError { + actualError = catchedError + } + + setFailureMessageForError(failureMessage, actualError: actualError, error: error, errorType: errorType, closure: closure) + return errorMatchesNonNilFieldsOrClosure(actualError, error: error, errorType: errorType, closure: closure) + } +} + +/// A Nimble matcher that succeeds when the actual expression throws any +/// error or when the passed closures' arbitrary custom matching succeeds. +/// +/// This duplication to it's generic adequate is required to allow to receive +/// values of the existential type ErrorType in the closure. +/// +/// The closure only gets called when an error was thrown. +public func throwError( + closure closure: ((ErrorType) -> Void)? = nil) -> MatcherFunc { + return MatcherFunc { actualExpression, failureMessage in + + var actualError: ErrorType? + do { + try actualExpression.evaluate() + } catch let catchedError { + actualError = catchedError + } + + setFailureMessageForError(failureMessage, actualError: actualError, closure: closure) + return errorMatchesNonNilFieldsOrClosure(actualError, closure: closure) + } +} diff --git a/Example/Pods/Nimble/Nimble/Nimble.h b/Example/Pods/Nimble/Sources/Nimble/Nimble.h similarity index 88% rename from Example/Pods/Nimble/Nimble/Nimble.h rename to Example/Pods/Nimble/Sources/Nimble/Nimble.h index 296760c..c1d0ebc 100644 --- a/Example/Pods/Nimble/Nimble/Nimble.h +++ b/Example/Pods/Nimble/Sources/Nimble/Nimble.h @@ -1,5 +1,6 @@ #import #import "NMBExceptionCapture.h" +#import "NMBStringify.h" #import "DSL.h" FOUNDATION_EXPORT double NimbleVersionNumber; diff --git a/Example/Pods/Nimble/Sources/Nimble/Utils/Async.swift b/Example/Pods/Nimble/Sources/Nimble/Utils/Async.swift new file mode 100644 index 0000000..8f1a6de --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Utils/Async.swift @@ -0,0 +1,358 @@ +import Foundation + +#if _runtime(_ObjC) +import Dispatch + +private let timeoutLeeway: UInt64 = NSEC_PER_MSEC +private let pollLeeway: UInt64 = NSEC_PER_MSEC + +/// Stores debugging information about callers +internal struct WaitingInfo: CustomStringConvertible { + let name: String + let file: FileString + let lineNumber: UInt + + var description: String { + return "\(name) at \(file):\(lineNumber)" + } +} + +internal protocol WaitLock { + func acquireWaitingLock(fnName: String, file: FileString, line: UInt) + func releaseWaitingLock() + func isWaitingLocked() -> Bool +} + +internal class AssertionWaitLock: WaitLock { + private var currentWaiter: WaitingInfo? = nil + init() { } + + func acquireWaitingLock(fnName: String, file: FileString, line: UInt) { + let info = WaitingInfo(name: fnName, file: file, lineNumber: line) + nimblePrecondition( + NSThread.isMainThread(), + "InvalidNimbleAPIUsage", + "\(fnName) can only run on the main thread." + ) + nimblePrecondition( + currentWaiter == nil, + "InvalidNimbleAPIUsage", + "Nested async expectations are not allowed to avoid creating flaky tests.\n\n" + + "The call to\n\t\(info)\n" + + "triggered this exception because\n\t\(currentWaiter!)\n" + + "is currently managing the main run loop." + ) + currentWaiter = info + } + + func isWaitingLocked() -> Bool { + return currentWaiter != nil + } + + func releaseWaitingLock() { + currentWaiter = nil + } +} + +internal enum AwaitResult { + /// Incomplete indicates None (aka - this value hasn't been fulfilled yet) + case Incomplete + /// TimedOut indicates the result reached its defined timeout limit before returning + case TimedOut + /// BlockedRunLoop indicates the main runloop is too busy processing other blocks to trigger + /// the timeout code. + /// + /// This may also mean the async code waiting upon may have never actually ran within the + /// required time because other timers & sources are running on the main run loop. + case BlockedRunLoop + /// The async block successfully executed and returned a given result + case Completed(T) + /// When a Swift Error is thrown + case ErrorThrown(ErrorType) + /// When an Objective-C Exception is raised + case RaisedException(NSException) + + func isIncomplete() -> Bool { + switch self { + case .Incomplete: return true + default: return false + } + } + + func isCompleted() -> Bool { + switch self { + case .Completed(_): return true + default: return false + } + } +} + +/// Holds the resulting value from an asynchronous expectation. +/// This class is thread-safe at receiving an "response" to this promise. +internal class AwaitPromise { + private(set) internal var asyncResult: AwaitResult = .Incomplete + private var signal: dispatch_semaphore_t + + init() { + signal = dispatch_semaphore_create(1) + } + + /// Resolves the promise with the given result if it has not been resolved. Repeated calls to + /// this method will resolve in a no-op. + /// + /// @returns a Bool that indicates if the async result was accepted or rejected because another + /// value was recieved first. + func resolveResult(result: AwaitResult) -> Bool { + if dispatch_semaphore_wait(signal, DISPATCH_TIME_NOW) == 0 { + self.asyncResult = result + return true + } else { + return false + } + } +} + +internal struct AwaitTrigger { + let timeoutSource: dispatch_source_t + let actionSource: dispatch_source_t? + let start: () throws -> Void +} + +/// Factory for building fully configured AwaitPromises and waiting for their results. +/// +/// This factory stores all the state for an async expectation so that Await doesn't +/// doesn't have to manage it. +internal class AwaitPromiseBuilder { + let awaiter: Awaiter + let waitLock: WaitLock + let trigger: AwaitTrigger + let promise: AwaitPromise + + internal init( + awaiter: Awaiter, + waitLock: WaitLock, + promise: AwaitPromise, + trigger: AwaitTrigger) { + self.awaiter = awaiter + self.waitLock = waitLock + self.promise = promise + self.trigger = trigger + } + + func timeout(timeoutInterval: NSTimeInterval, forcefullyAbortTimeout: NSTimeInterval) -> Self { + // = Discussion = + // + // There's a lot of technical decisions here that is useful to elaborate on. This is + // definitely more lower-level than the previous NSRunLoop based implementation. + // + // + // Why Dispatch Source? + // + // + // We're using a dispatch source to have better control of the run loop behavior. + // A timer source gives us deferred-timing control without having to rely as much on + // a run loop's traditional dispatching machinery (eg - NSTimers, DefaultRunLoopMode, etc.) + // which is ripe for getting corrupted by application code. + // + // And unlike dispatch_async(), we can control how likely our code gets prioritized to + // executed (see leeway parameter) + DISPATCH_TIMER_STRICT. + // + // This timer is assumed to run on the HIGH priority queue to ensure it maintains the + // highest priority over normal application / test code when possible. + // + // + // Run Loop Management + // + // In order to properly interrupt the waiting behavior performed by this factory class, + // this timer stops the main run loop to tell the waiter code that the result should be + // checked. + // + // In addition, stopping the run loop is used to halt code executed on the main run loop. + dispatch_source_set_timer( + trigger.timeoutSource, + dispatch_time(DISPATCH_TIME_NOW, Int64(timeoutInterval * Double(NSEC_PER_SEC))), + DISPATCH_TIME_FOREVER, + timeoutLeeway + ) + dispatch_source_set_event_handler(trigger.timeoutSource) { + guard self.promise.asyncResult.isIncomplete() else { return } + let timedOutSem = dispatch_semaphore_create(0) + let semTimedOutOrBlocked = dispatch_semaphore_create(0) + dispatch_semaphore_signal(semTimedOutOrBlocked) + let runLoop = CFRunLoopGetMain() + CFRunLoopPerformBlock(runLoop, kCFRunLoopDefaultMode) { + if dispatch_semaphore_wait(semTimedOutOrBlocked, DISPATCH_TIME_NOW) == 0 { + dispatch_semaphore_signal(timedOutSem) + dispatch_semaphore_signal(semTimedOutOrBlocked) + if self.promise.resolveResult(.TimedOut) { + CFRunLoopStop(CFRunLoopGetMain()) + } + } + } + // potentially interrupt blocking code on run loop to let timeout code run + CFRunLoopStop(runLoop) + let now = dispatch_time(DISPATCH_TIME_NOW, Int64(forcefullyAbortTimeout * Double(NSEC_PER_SEC))) + let didNotTimeOut = dispatch_semaphore_wait(timedOutSem, now) != 0 + let timeoutWasNotTriggered = dispatch_semaphore_wait(semTimedOutOrBlocked, 0) == 0 + if didNotTimeOut && timeoutWasNotTriggered { + if self.promise.resolveResult(.BlockedRunLoop) { + CFRunLoopStop(CFRunLoopGetMain()) + } + } + } + return self + } + + /// Blocks for an asynchronous result. + /// + /// @discussion + /// This function must be executed on the main thread and cannot be nested. This is because + /// this function (and it's related methods) coordinate through the main run loop. Tampering + /// with the run loop can cause undesireable behavior. + /// + /// This method will return an AwaitResult in the following cases: + /// + /// - The main run loop is blocked by other operations and the async expectation cannot be + /// be stopped. + /// - The async expectation timed out + /// - The async expectation succeeded + /// - The async expectation raised an unexpected exception (objc) + /// - The async expectation raised an unexpected error (swift) + /// + /// The returned AwaitResult will NEVER be .Incomplete. + func wait(fnName: String = #function, file: FileString = #file, line: UInt = #line) -> AwaitResult { + waitLock.acquireWaitingLock( + fnName, + file: file, + line: line) + + let capture = NMBExceptionCapture(handler: ({ exception in + self.promise.resolveResult(.RaisedException(exception)) + }), finally: ({ + self.waitLock.releaseWaitingLock() + })) + capture.tryBlock { + do { + try self.trigger.start() + } catch let error { + self.promise.resolveResult(.ErrorThrown(error)) + } + dispatch_resume(self.trigger.timeoutSource) + while self.promise.asyncResult.isIncomplete() { + // Stopping the run loop does not work unless we run only 1 mode + NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate.distantFuture()) + } + dispatch_suspend(self.trigger.timeoutSource) + dispatch_source_cancel(self.trigger.timeoutSource) + if let asyncSource = self.trigger.actionSource { + dispatch_source_cancel(asyncSource) + } + } + + return promise.asyncResult + } +} + +internal class Awaiter { + let waitLock: WaitLock + let timeoutQueue: dispatch_queue_t + let asyncQueue: dispatch_queue_t + + internal init( + waitLock: WaitLock, + asyncQueue: dispatch_queue_t, + timeoutQueue: dispatch_queue_t) { + self.waitLock = waitLock + self.asyncQueue = asyncQueue + self.timeoutQueue = timeoutQueue + } + + private func createTimerSource(queue: dispatch_queue_t) -> dispatch_source_t { + return dispatch_source_create( + DISPATCH_SOURCE_TYPE_TIMER, + 0, + DISPATCH_TIMER_STRICT, + queue + ) + } + + func performBlock( + closure: ((T) -> Void) throws -> Void) -> AwaitPromiseBuilder { + let promise = AwaitPromise() + let timeoutSource = createTimerSource(timeoutQueue) + var completionCount = 0 + let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: nil) { + try closure() { + completionCount += 1 + nimblePrecondition( + completionCount < 2, + "InvalidNimbleAPIUsage", + "Done closure's was called multiple times. waitUntil(..) expects its " + + "completion closure to only be called once.") + if promise.resolveResult(.Completed($0)) { + CFRunLoopStop(CFRunLoopGetMain()) + } + } + } + + return AwaitPromiseBuilder( + awaiter: self, + waitLock: waitLock, + promise: promise, + trigger: trigger) + } + + func poll(pollInterval: NSTimeInterval, closure: () throws -> T?) -> AwaitPromiseBuilder { + let promise = AwaitPromise() + let timeoutSource = createTimerSource(timeoutQueue) + let asyncSource = createTimerSource(asyncQueue) + let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: asyncSource) { + let interval = UInt64(pollInterval * Double(NSEC_PER_SEC)) + dispatch_source_set_timer(asyncSource, DISPATCH_TIME_NOW, interval, pollLeeway) + dispatch_source_set_event_handler(asyncSource) { + do { + if let result = try closure() { + if promise.resolveResult(.Completed(result)) { + CFRunLoopStop(CFRunLoopGetCurrent()) + } + } + } catch let error { + if promise.resolveResult(.ErrorThrown(error)) { + CFRunLoopStop(CFRunLoopGetCurrent()) + } + } + } + dispatch_resume(asyncSource) + } + + return AwaitPromiseBuilder( + awaiter: self, + waitLock: waitLock, + promise: promise, + trigger: trigger) + } +} + +internal func pollBlock( + pollInterval pollInterval: NSTimeInterval, + timeoutInterval: NSTimeInterval, + file: FileString, + line: UInt, + fnName: String = #function, + expression: () throws -> Bool) -> AwaitResult { + let awaiter = NimbleEnvironment.activeInstance.awaiter + let result = awaiter.poll(pollInterval) { () throws -> Bool? in + do { + if try expression() { + return true + } + return nil + } catch let error { + throw error + } + }.timeout(timeoutInterval, forcefullyAbortTimeout: timeoutInterval / 2.0).wait(fnName, file: file, line: line) + + return result +} + +#endif diff --git a/Example/Pods/Nimble/Sources/Nimble/Utils/Errors.swift b/Example/Pods/Nimble/Sources/Nimble/Utils/Errors.swift new file mode 100644 index 0000000..29c4723 --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Utils/Errors.swift @@ -0,0 +1,133 @@ +import Foundation + +// Generic + +internal func setFailureMessageForError( + failureMessage: FailureMessage, + postfixMessageVerb: String = "throw", + actualError: ErrorType?, + error: T? = nil, + errorType: T.Type? = nil, + closure: ((T) -> Void)? = nil) { + failureMessage.postfixMessage = "\(postfixMessageVerb) error" + + if let error = error { + if let error = error as? CustomDebugStringConvertible { + failureMessage.postfixMessage += " <\(error.debugDescription)>" + } else { + failureMessage.postfixMessage += " <\(error)>" + } + } else if errorType != nil || closure != nil { + failureMessage.postfixMessage += " from type <\(T.self)>" + } + if let _ = closure { + failureMessage.postfixMessage += " that satisfies block" + } + if error == nil && errorType == nil && closure == nil { + failureMessage.postfixMessage = "\(postfixMessageVerb) any error" + } + + if let actualError = actualError { + failureMessage.actualValue = "<\(actualError)>" + } else { + failureMessage.actualValue = "no error" + } +} + +internal func errorMatchesExpectedError( + actualError: ErrorType, + expectedError: T) -> Bool { + return actualError._domain == expectedError._domain + && actualError._code == expectedError._code +} + +internal func errorMatchesExpectedError( + actualError: ErrorType, + expectedError: T) -> Bool { + if let actualError = actualError as? T { + return actualError == expectedError + } + return false +} + +internal func errorMatchesNonNilFieldsOrClosure( + actualError: ErrorType?, + error: T? = nil, + errorType: T.Type? = nil, + closure: ((T) -> Void)? = nil) -> Bool { + var matches = false + + if let actualError = actualError { + matches = true + + if let error = error { + if !errorMatchesExpectedError(actualError, expectedError: error) { + matches = false + } + } + if let actualError = actualError as? T { + if let closure = closure { + let assertions = gatherFailingExpectations { + closure(actualError as T) + } + let messages = assertions.map { $0.message } + if messages.count > 0 { + matches = false + } + } + } else if errorType != nil && closure != nil { + // The closure expects another ErrorType as argument, so this + // is _supposed_ to fail, so that it becomes more obvious. + let assertions = gatherExpectations { + expect(actualError is T).to(equal(true)) + } + precondition(assertions.map { $0.message }.count > 0) + matches = false + } + } + + return matches +} + +// Non-generic + +internal func setFailureMessageForError( + failureMessage: FailureMessage, + actualError: ErrorType?, + closure: ((ErrorType) -> Void)?) { + failureMessage.postfixMessage = "throw error" + + if let _ = closure { + failureMessage.postfixMessage += " that satisfies block" + } else { + failureMessage.postfixMessage = "throw any error" + } + + if let actualError = actualError { + failureMessage.actualValue = "<\(actualError)>" + } else { + failureMessage.actualValue = "no error" + } +} + +internal func errorMatchesNonNilFieldsOrClosure( + actualError: ErrorType?, + closure: ((ErrorType) -> Void)?) -> Bool { + var matches = false + + if let actualError = actualError { + matches = true + + if let closure = closure { + let assertions = gatherFailingExpectations { + closure(actualError) + } + let messages = assertions.map { $0.message } + if messages.count > 0 { + matches = false + } + } + } + + return matches +} diff --git a/Example/Pods/Nimble/Sources/Nimble/Utils/Functional.swift b/Example/Pods/Nimble/Sources/Nimble/Utils/Functional.swift new file mode 100644 index 0000000..e85c755 --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Utils/Functional.swift @@ -0,0 +1,12 @@ +import Foundation + +extension SequenceType { + internal func all(fn: Generator.Element -> Bool) -> Bool { + for item in self { + if !fn(item) { + return false + } + } + return true + } +} diff --git a/Example/Pods/Nimble/Sources/Nimble/Utils/SourceLocation.swift b/Example/Pods/Nimble/Sources/Nimble/Utils/SourceLocation.swift new file mode 100644 index 0000000..a7279aa --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Utils/SourceLocation.swift @@ -0,0 +1,31 @@ +import Foundation + +// Ideally we would always use `StaticString` as the type for tracking the file name +// that expectations originate from, for consistency with `assert` etc. from the +// stdlib, and because recent versions of the XCTest overlay require `StaticString` +// when calling `XCTFail`. Under the Objective-C runtime (i.e. building on Mac), we +// have to use `String` instead because StaticString can't be generated from Objective-C +#if _runtime(_ObjC) +public typealias FileString = String +#else +public typealias FileString = StaticString +#endif + +public final class SourceLocation : NSObject { + public let file: FileString + public let line: UInt + + override init() { + file = "Unknown File" + line = 0 + } + + init(file: FileString, line: UInt) { + self.file = file + self.line = line + } + + override public var description: String { + return "\(file):\(line)" + } +} diff --git a/Example/Pods/Nimble/Sources/Nimble/Utils/Stringers.swift b/Example/Pods/Nimble/Sources/Nimble/Utils/Stringers.swift new file mode 100644 index 0000000..4edead3 --- /dev/null +++ b/Example/Pods/Nimble/Sources/Nimble/Utils/Stringers.swift @@ -0,0 +1,171 @@ +import Foundation + + +internal func identityAsString(value: AnyObject?) -> String { + if let value = value { + return NSString(format: "<%p>", unsafeBitCast(value, Int.self)).description + } else { + return "nil" + } +} + +internal func classAsString(cls: AnyClass) -> String { +#if _runtime(_ObjC) + return NSStringFromClass(cls) +#else + return String(cls) +#endif +} + +internal func arrayAsString(items: [T], joiner: String = ", ") -> String { + return items.reduce("") { accum, item in + let prefix = (accum.isEmpty ? "" : joiner) + return accum + prefix + "\(stringify(item))" + } +} + +/// A type with a customized test output text representation. +/// +/// This textual representation is produced when values will be +/// printed in test runs, and may be useful when producing +/// error messages in custom matchers. +/// +/// - SeeAlso: `CustomDebugStringConvertible` +public protocol TestOutputStringConvertible { + var testDescription: String { get } +} + +extension Double: TestOutputStringConvertible { + public var testDescription: String { + return NSNumber(double: self).testDescription + } +} + +extension Float: TestOutputStringConvertible { + public var testDescription: String { + return NSNumber(float: self).testDescription + } +} + +extension NSNumber: TestOutputStringConvertible { + // This is using `NSString(format:)` instead of + // `String(format:)` because the latter somehow breaks + // the travis CI build on linux. + public var testDescription: String { + let description = self.description + + if description.containsString(".") { + // Travis linux swiftpm build doesn't like casting String to NSString, + // which is why this annoying nested initializer thing is here. + // Maybe this will change in a future snapshot. + let decimalPlaces = NSString(string: NSString(string: description) + .componentsSeparatedByString(".")[1]) + + if decimalPlaces.length > 4 { + return NSString(format: "%0.4f", self.doubleValue).description + } + } + return self.description + } +} + +extension Array: TestOutputStringConvertible { + public var testDescription: String { + let list = self.map(Nimble.stringify).joinWithSeparator(", ") + return "[\(list)]" + } +} + +extension AnySequence: TestOutputStringConvertible { + public var testDescription: String { + let generator = self.generate() + var strings = [String]() + var value: AnySequence.Generator.Element? + + repeat { + value = generator.next() + if let value = value { + strings.append(stringify(value)) + } + } while value != nil + + let list = strings.joinWithSeparator(", ") + return "[\(list)]" + } +} + +extension NSArray: TestOutputStringConvertible { + public var testDescription: String { + let list = Array(self).map(Nimble.stringify).joinWithSeparator(", ") + return "(\(list))" + } +} + +extension NSIndexSet: TestOutputStringConvertible { + public var testDescription: String { + let list = Array(self).map(Nimble.stringify).joinWithSeparator(", ") + return "(\(list))" + } +} + +extension String: TestOutputStringConvertible { + public var testDescription: String { + return self + } +} + +extension NSData: TestOutputStringConvertible { + public var testDescription: String { + #if os(Linux) + // FIXME: Swift on Linux triggers a segfault when calling NSData's hash() (last checked on 03-11-16) + return "NSData" + #else + return "NSData" + #endif + } +} + +/// +/// Returns a string appropriate for displaying in test output +/// from the provided value. +/// +/// - parameter value: A value that will show up in a test's output. +/// +/// - returns: The string that is returned can be +/// customized per type by conforming a type to the `TestOutputStringConvertible` +/// protocol. When stringifying a non-`TestOutputStringConvertible` type, this +/// function will return the value's debug description and then its +/// normal description if available and in that order. Otherwise it +/// will return the result of constructing a string from the value. +/// +/// - SeeAlso: `TestOutputStringConvertible` +@warn_unused_result +public func stringify(value: T) -> String { + if let value = value as? TestOutputStringConvertible { + return value.testDescription + } + + if let value = value as? CustomDebugStringConvertible { + return value.debugDescription + } + + return String(value) +} + +/// -SeeAlso: `stringify(value: T)` +@warn_unused_result +public func stringify(value: T?) -> String { + if let unboxed = value { + return stringify(unboxed) + } + return "nil" +} + +#if _runtime(_ObjC) +@objc public class NMBStringer: NSObject { + @warn_unused_result + @objc public class func stringify(obj: AnyObject?) -> String { + return Nimble.stringify(obj) + } +} +#endif diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index b684850..73d4307 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -1,1375 +1,4581 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 02BF9988CC94A01E7CB6049694390020 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 40FBD52025077E5788ADCE71EF040393 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 02DF5BD2281BA10105A447F95FCF8CF3 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = B011BCE1507648ECA7586CF7DABF6F4C /* BeLogical.swift */; }; - 0492354DA7EF0C9068F7B4E8F74001B0 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25961731CF4F7537A5ECD61A000A150C /* FailureMessage.swift */; }; - 0A6E71555F55082003A3DB2B03CA85D2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D42013D479CDC11E7882C7C0045B66B /* AsyncMatcherWrapper.swift */; }; - 0C41D290BCA32F2CFF6276BF8773A739 /* Chirp-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E07415049C7B244A3483A24AA9F3762 /* Chirp-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0D6CFD02CBB99727F0D1FF162D5B0E53 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF7511682ED488897012E4EEC14429BF /* Filter.swift */; }; - 0F49254A4C560DD4696936F6080756DC /* Nimble-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BF4AE1E80CC4EA4F2E1FF17CA10A3D26 /* Nimble-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1724C85DB84F771E3247FF47AFB4262E /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2005F86F2C2D05CDE00BB78EF02D6D4 /* ExampleGroup.swift */; }; - 188E8712B72132856FF1363A664217C7 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = AE670FBBCC7FBB0E81F05DA0C8EAAEE5 /* QuickConfiguration.m */; }; - 1E28F9362956B758C4C981D3C1129C90 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3CD67A0263B5D926517C112081F48B2 /* BeGreaterThan.swift */; }; - 1F54836131CDD3472A6D8706F232A5CE /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = E41A31E4949F1319040B8D2BBBF2B5D6 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D3B916F7168E9412EDB95BA203A5BB4 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2BC0728045ED4D4A2C12B52A561EEF7 /* ThrowError.swift */; }; - 33264C6A7A3536AD91EF42B3E8CC8220 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C03BB6589A73F51F073DF050F55D7F41 /* BeGreaterThanOrEqualTo.swift */; }; - 33514FEE6EA65605EFB6F1801834B692 /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B0C995C72A44C02A9369FA2BDB1F4FF /* AssertionDispatcher.swift */; }; - 33BCA35A0A0D0DE7F501300C1F4842C9 /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 62241019A9DFE31F82A2CDF8690A163C /* QuickSpec.m */; }; - 36ADB08168319308B642A1E248ED55CD /* Pods-Chirp_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CC9D4B64F9B5EF312F80B146359316B9 /* Pods-Chirp_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3A92AEE86034356AF8987F20EE1F82DF /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E8B6303CCFDEBF93094E92D50CAFF38 /* EndWith.swift */; }; - 3AEAC447B09E7AABC140654C8529BC94 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = E43EEEBE209F0CF242FBC231937E6922 /* MatcherFunc.swift */; }; - 408B287A1C37C64B00134C54 /* Chirp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 408B28791C37C64B00134C54 /* Chirp.swift */; }; - 409AF2F57B1AA35FCB1DFC1D3AC874A2 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33DD2CC5441C4540A072B29E4A257A9D /* DSL.swift */; }; - 43FD0EEA7C01D820AAD7F02D99767174 /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01F8C281E400A6FABAD082CEA7263B2A /* ExampleHooks.swift */; }; - 4749D2699685B93816331F807746C389 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38715BF4570032AE706B97AB11365E48 /* ExampleMetadata.swift */; }; - 4E87C6AE24AB15700A39FC24A2F1C93B /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E12C6F645E5DC0EDB23023A394F1CB1 /* BeLessThanOrEqual.swift */; }; - 50FD882B66CB9C578F0B80C443F69494 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEA1EFFE836005E11B9D420692E9E50C /* Example.swift */; }; - 512DFAE728521F02AF225F0082195DCC /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 784135A9193F0FE38182AF2C577B3A52 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 58EBA2C1A43283FB2188AB1FB592D32B /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B9040AB08CA7AEB727960E284F746A4 /* DSL.swift */; }; - 640735DDB32E1AC348750F7F10297BC7 /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64F0BEE5B67844F0E333920C2CB3416C /* SuiteHooks.swift */; }; - 6694F7B41F5A6FEE0DB5343108470F69 /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = 64F492985EB6550A418DD3DB1BCDE146 /* NSString+QCKSelectorName.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 698D887E14F069B6D4A6298F204E6861 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E351727CD07BB90B2A3CAE2C2433F6C5 /* Foundation.framework */; }; - 6AF199422687120EF1D7E39B4CE75191 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF695047E0AAFB3CA54EC10F0E97FD3 /* Configuration.swift */; }; - 73695FA6A6CDFBB13C0CC73C2E5126C0 /* Nimble-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C8E9634CF58B22F95DF5AA222CDAF9B8 /* Nimble-dummy.m */; }; - 7680F08C43B965EC873D26E6AD854C9F /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69A1AA2E4CDFA7B6FD9B4F253CAF481F /* BeIdenticalTo.swift */; }; - 77128C0365A98E3BAC038A915B38791C /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B53DF3C5B85F993313E9FA09386C167 /* BeAKindOf.swift */; }; - 7A6E2730A25A55D8DFA74D3D7CB005EF /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13064CC241598F189B1341470994F9D9 /* BeAnInstanceOf.swift */; }; - 7BFD25B1BB1116D8AC47E2C3874C5B76 /* ObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73B922FF75D982F502B345AE30399F97 /* ObjCMatcher.swift */; }; - 7DA9FF8513AA48310B15A0744A541818 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4930275AC98E3FD0F3BC81A7D08B8591 /* SourceLocation.swift */; }; - 831D33A4C5C5BBC1EC158D9A236C61D7 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5596CB4CEA7B7B71461C9ECE75263656 /* NimbleXCTestHandler.swift */; }; - 85702A2C1F8B83CAF99B7055208C0DB7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E351727CD07BB90B2A3CAE2C2433F6C5 /* Foundation.framework */; }; - 8647013E45347ED95450EE262FCC5FBE /* Quick-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 616BFD5BF73AEF373E5250D05560A338 /* Quick-dummy.m */; }; - 8D0BF52FF564A170A3D1DE28C27B233E /* Poll.swift in Sources */ = {isa = PBXBuildFile; fileRef = F689A549CFB432AE0684F3EA3BA8D2FF /* Poll.swift */; }; - 9187EEC2982DB82AD8D3A7001AA647D6 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = F5F4CE0DE16848CBDA8A93366A52BEF7 /* NMBExceptionCapture.m */; }; - 9341B96D63EF6C54A1F906A1BBAEAF46 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DA695A07DF17BA243064E57D889E1CBB /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9646787942A85613FE77F45794E9B5CD /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58CD57ED9D79412A49A037E8EAA4AF42 /* BeginWith.swift */; }; - 96FC401F9F02B2F9BD055F0DD0DBB822 /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = F1D4A64A54F414359EC782444B27597B /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 98345FDD2B3CF3D0118ED6BCFFC7AEBB /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 94A039912FDC46FCB2AF6DCEEB91ADB4 /* World+DSL.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9E7786C034F0E0A6B5F0A0E6BE7D7E4A /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FE24AE8654BDA8234080C23F6335E26 /* BeEmpty.swift */; }; - A535EB7028BE7449459DA9741BAB224A /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C0EAA5BA062125C64E6A819695F87C6 /* World.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ACD19EFED6B565548F9E22B2036E933C /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 20ABC5A3D02301EC1EC014B6ABEFA42A /* NSString+QCKSelectorName.m */; }; - B0A26F58BA3E6222E50AE5AC883B8EAF /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = D17DFC0D37F8449B1B2A2D117D1179A2 /* DSL.m */; }; - B41E8E775408ACE233F29CE93388B270 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6727AA774C6723AFCA6CFCEF099071C7 /* Contain.swift */; }; - B8E476942F8261F91D0C928CFE0BD50B /* Chirp-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C32D47CE6AE1352683960263F34BCD5 /* Chirp-dummy.m */; }; - B905718B2501DDA22F2AE73CB6E76E6B /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29A378AC6A7BCB5D43F7586353A7610A /* BeCloseTo.swift */; }; - BB4F35062294C1A461DA3CEF6306A1DB /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54BC3268759E7DB38A0E192F06A1BD06 /* HaveCount.swift */; }; - BBD3E5198869F0166CB7BCE55391020A /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE6E3634125A20B9BA58962919B08DDC /* Closures.swift */; }; - BCB53F24DCADF12601B8BA90AE3190AE /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69578BBC16AAA12ED9630E2036580E94 /* BeLessThan.swift */; }; - BED2C63E2D2C34D5511F39E398755C55 /* Pods-Chirp_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 47F124C5F3B880D5BECAFB535C4E9823 /* Pods-Chirp_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C150157922BAEB1F93635508FB59E618 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E351727CD07BB90B2A3CAE2C2433F6C5 /* Foundation.framework */; }; - C59B6E5E5A1913A29D7F30FB2B85AC84 /* Pods-Chirp_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F43DF0F136DBD2A566C0B08DA3322D49 /* Pods-Chirp_Tests-dummy.m */; }; - C63AB521EA514A811A167E507C0CF9AD /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 227AD60FAC82B3DEDDBB09BAEE052647 /* Expression.swift */; }; - C9AC658F3FCB67B50E96313C2687B33D /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28D0DF7E7A59098355B7877A39D254B6 /* MatcherProtocols.swift */; }; - CAAED5FB81DB035A9EC080917C783FA6 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECB4882E47E7537D32F4C677DF4F0B43 /* AdapterProtocols.swift */; }; - CD9D31B6063C50689EAC2A0745C282DC /* ObjCExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7FE6BD80E2769820B83F2550DAC4AAF /* ObjCExpectation.swift */; }; - CE3F911A490411EE0F9D0FE2D47A3804 /* Quick-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FC9D0077C69A720B9DD2BB12344FD893 /* Quick-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D429691F39B4C30A8993360FB8A3E334 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F2CCEF958AF4E4C4F073031905F2CE2 /* AllPass.swift */; }; - D68A544D8420A1A20875F8A41D9009E9 /* Pods-Chirp_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E053F5361987AE204F638A4C00C8ED99 /* Pods-Chirp_Example-dummy.m */; }; - D7B45D4600C6166C124C0A926EE65284 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28E302676FFF0A4192E3ECFB4B1FDCF6 /* Functional.swift */; }; - DEE170DD3064F7343884A4016546B762 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDA388FEA33C5B8824432D9681B318F3 /* DSL+Wait.swift */; }; - E2FBD93D72DF01427486D1A6853FC689 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3116FC3DA077740D1C5702FA4C187A2 /* Expectation.swift */; }; - E36C5201AE7F1CBB25F9D2E7CBFC3C20 /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0843BD7412E439120C081E8D9FE0F80 /* Match.swift */; }; - E6E7B15FAD6C56681511813DB2666478 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = B84D274316F8C6F9695294FB40D7596F /* AssertionRecorder.swift */; }; - E6F83C681D61CFE4953065B70BE72575 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C6D6E41BA9F922E7BBD3A24B7E5D00A /* Callsite.swift */; }; - E9F69F3B2E0D3C6C3A4E41F21615D6A2 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 2543809E4D3D9755B94735346ACDFF03 /* QCKDSL.m */; }; - EBEFB9215D7FAFB9829C368FF34B7729 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E351727CD07BB90B2A3CAE2C2433F6C5 /* Foundation.framework */; }; - EEAEBD35CDE184D420DAD6709CD3DDDE /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = D4E0D7E2D11371A45CB3D1221E7B4EC2 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F10FD3129985704FA1610F84FB98EDF5 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = E31CE50F8B4B99D3C229D2438892ED5B /* Stringers.swift */; }; - F1888D00F040D76B467386EBCBB90ECB /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 279AA6492631DEFA8C439A9C088EEB8A /* XCTest.framework */; }; - F1D4A8A1FC68EFA7F45945908D70A352 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02297D692E5CA1B1C21CCCDA1853BA44 /* BeNil.swift */; }; - F48910247CE414A86EBF5AF7BE0EF6D4 /* Chirp.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 170BDE2821810FFFF8F653EAB8273DC3 /* Chirp.bundle */; }; - F6A1E94424FCD83740B93B5F0C0D28BC /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DDA3CDE7515A11BE56C6C2FE5FB65D8 /* World+DSL.swift */; }; - F81AF0EB47EF5C817CE1F7C984E8DA11 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 8880B82EFD81A0D6EE2BBD27A39D61BA /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F9240021FEC9D9B2B7BFEC802C34259B /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8487245080A1AB0FFD48288B814AEA82 /* World.swift */; }; - FB1347627E64CA7E98C19DC985E13D95 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75276E4A134A22E123F4C40E529080C /* Equal.swift */; }; - FC10AD2963BF5047B16B087533946A7B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E351727CD07BB90B2A3CAE2C2433F6C5 /* Foundation.framework */; }; - FFC311AC1E19A23E0EB7B1B3A7A5A744 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88457B3A5C81E0F34AC48AC05B8040D6 /* RaisesException.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 08CE26224CEC08A2989C4FAF1CA18CA8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 559A4F124A60124F67D8E85253E29790; - remoteInfo = "Chirp-Chirp"; - }; - 1430425B9BFEC0461C205C8F926B27A4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = C5DB5104FED3C10F78978AFC810982B9; - remoteInfo = Nimble; - }; - 3B51E460492575828C5C2CDDC563F428 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0435B780B17A7A610BC562E4104531B8; - remoteInfo = Chirp; - }; - 5140C3AE3481694C4D2B73054570D9BE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = AE4C9880DA936780135AFC0791E15D25; - remoteInfo = Quick; - }; - 5C374A402A2DBCE7C46AAF19F63DFE3D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0435B780B17A7A610BC562E4104531B8; - remoteInfo = Chirp; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 01F8C281E400A6FABAD082CEA7263B2A /* ExampleHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleHooks.swift; path = Quick/Hooks/ExampleHooks.swift; sourceTree = ""; }; - 021C4E135FFC34B4A74FD0560A640549 /* Quick.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Quick.modulemap; sourceTree = ""; }; - 02297D692E5CA1B1C21CCCDA1853BA44 /* BeNil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeNil.swift; path = Nimble/Matchers/BeNil.swift; sourceTree = ""; }; - 0B0C995C72A44C02A9369FA2BDB1F4FF /* AssertionDispatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionDispatcher.swift; path = Nimble/Adapters/AssertionDispatcher.swift; sourceTree = ""; }; - 0B53DF3C5B85F993313E9FA09386C167 /* BeAKindOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAKindOf.swift; path = Nimble/Matchers/BeAKindOf.swift; sourceTree = ""; }; - 13064CC241598F189B1341470994F9D9 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeAnInstanceOf.swift; path = Nimble/Matchers/BeAnInstanceOf.swift; sourceTree = ""; }; - 170BDE2821810FFFF8F653EAB8273DC3 /* Chirp.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Chirp.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 1A506AD707244ECC9DDCB3EAD225E5F4 /* Pods-Chirp_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Chirp_Example-acknowledgements.plist"; sourceTree = ""; }; - 1B3023BBC173E83D0F79A6917B12F26B /* Chirp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Chirp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1C168EBF584B4F05BBE6D606FA0590A6 /* Pods-Chirp_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Chirp_Example-frameworks.sh"; sourceTree = ""; }; - 1D42013D479CDC11E7882C7C0045B66B /* AsyncMatcherWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncMatcherWrapper.swift; path = Nimble/Wrappers/AsyncMatcherWrapper.swift; sourceTree = ""; }; - 1DDC3CB54F6A90687CF044481BFAC6BE /* Pods-Chirp_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Chirp_Tests-acknowledgements.markdown"; sourceTree = ""; }; - 1E8B6303CCFDEBF93094E92D50CAFF38 /* EndWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EndWith.swift; path = Nimble/Matchers/EndWith.swift; sourceTree = ""; }; - 20ABC5A3D02301EC1EC014B6ABEFA42A /* NSString+QCKSelectorName.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+QCKSelectorName.m"; path = "Quick/NSString+QCKSelectorName.m"; sourceTree = ""; }; - 227AD60FAC82B3DEDDBB09BAEE052647 /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Nimble/Expression.swift; sourceTree = ""; }; - 2543809E4D3D9755B94735346ACDFF03 /* QCKDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QCKDSL.m; path = Quick/DSL/QCKDSL.m; sourceTree = ""; }; - 25961731CF4F7537A5ECD61A000A150C /* FailureMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FailureMessage.swift; path = Nimble/FailureMessage.swift; sourceTree = ""; }; - 279AA6492631DEFA8C439A9C088EEB8A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - 28CBE0D19FC6E65EFAA29981A9422B23 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 28D0DF7E7A59098355B7877A39D254B6 /* MatcherProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherProtocols.swift; path = Nimble/Matchers/MatcherProtocols.swift; sourceTree = ""; }; - 28E302676FFF0A4192E3ECFB4B1FDCF6 /* Functional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Functional.swift; path = Nimble/Utils/Functional.swift; sourceTree = ""; }; - 29A378AC6A7BCB5D43F7586353A7610A /* BeCloseTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeCloseTo.swift; path = Nimble/Matchers/BeCloseTo.swift; sourceTree = ""; }; - 2B9040AB08CA7AEB727960E284F746A4 /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Nimble/DSL.swift; sourceTree = ""; }; - 2F7E632096EBB5E0931B4F3E1926165A /* Pods-Chirp_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Chirp_Tests-resources.sh"; sourceTree = ""; }; - 2FE24AE8654BDA8234080C23F6335E26 /* BeEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeEmpty.swift; path = Nimble/Matchers/BeEmpty.swift; sourceTree = ""; }; - 33DD2CC5441C4540A072B29E4A257A9D /* DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DSL.swift; path = Quick/DSL/DSL.swift; sourceTree = ""; }; - 3472E223FCFF3134A95136CBF1A6EE3A /* Pods-Chirp_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Chirp_Tests-frameworks.sh"; sourceTree = ""; }; - 37A473CAA6B7043A0BF2868A15D109EC /* Pods-Chirp_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Chirp_Tests-acknowledgements.plist"; sourceTree = ""; }; - 38715BF4570032AE706B97AB11365E48 /* ExampleMetadata.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleMetadata.swift; path = Quick/ExampleMetadata.swift; sourceTree = ""; }; - 3C32D47CE6AE1352683960263F34BCD5 /* Chirp-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Chirp-dummy.m"; sourceTree = ""; }; - 3E07415049C7B244A3483A24AA9F3762 /* Chirp-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Chirp-umbrella.h"; sourceTree = ""; }; - 3F1975D001BFB447009180BAF8C14ADB /* Quick-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Quick-prefix.pch"; sourceTree = ""; }; - 408B28791C37C64B00134C54 /* Chirp.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Chirp.swift; sourceTree = ""; }; - 40FBD52025077E5788ADCE71EF040393 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = NMBExceptionCapture.h; path = Nimble/objc/NMBExceptionCapture.h; sourceTree = ""; }; - 47F124C5F3B880D5BECAFB535C4E9823 /* Pods-Chirp_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Chirp_Example-umbrella.h"; sourceTree = ""; }; - 4930275AC98E3FD0F3BC81A7D08B8591 /* SourceLocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SourceLocation.swift; path = Nimble/Utils/SourceLocation.swift; sourceTree = ""; }; - 4C0EAA5BA062125C64E6A819695F87C6 /* World.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = World.h; path = Quick/World.h; sourceTree = ""; }; - 4C6D6E41BA9F922E7BBD3A24B7E5D00A /* Callsite.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Callsite.swift; path = Quick/Callsite.swift; sourceTree = ""; }; - 4F2CCEF958AF4E4C4F073031905F2CE2 /* AllPass.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AllPass.swift; path = Nimble/Matchers/AllPass.swift; sourceTree = ""; }; - 52C908177CFC61716B8A5578A17936F0 /* Pods-Chirp_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Chirp_Example-acknowledgements.markdown"; sourceTree = ""; }; - 54BC3268759E7DB38A0E192F06A1BD06 /* HaveCount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HaveCount.swift; path = Nimble/Matchers/HaveCount.swift; sourceTree = ""; }; - 5596CB4CEA7B7B71461C9ECE75263656 /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NimbleXCTestHandler.swift; path = Nimble/Adapters/NimbleXCTestHandler.swift; sourceTree = ""; }; - 5698A2D90AE161B5790CE5B58BF41F47 /* Pods-Chirp_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Chirp_Example.release.xcconfig"; sourceTree = ""; }; - 58CD57ED9D79412A49A037E8EAA4AF42 /* BeginWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeginWith.swift; path = Nimble/Matchers/BeginWith.swift; sourceTree = ""; }; - 5BF695047E0AAFB3CA54EC10F0E97FD3 /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = Quick/Configuration/Configuration.swift; sourceTree = ""; }; - 5D6A2E71DBC9D0DE17402BCFCFEEBDB2 /* Nimble-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nimble-prefix.pch"; sourceTree = ""; }; - 616BFD5BF73AEF373E5250D05560A338 /* Quick-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Quick-dummy.m"; sourceTree = ""; }; - 62241019A9DFE31F82A2CDF8690A163C /* QuickSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickSpec.m; path = Quick/QuickSpec.m; sourceTree = ""; }; - 64F0BEE5B67844F0E333920C2CB3416C /* SuiteHooks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SuiteHooks.swift; path = Quick/Hooks/SuiteHooks.swift; sourceTree = ""; }; - 64F492985EB6550A418DD3DB1BCDE146 /* NSString+QCKSelectorName.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+QCKSelectorName.h"; path = "Quick/NSString+QCKSelectorName.h"; sourceTree = ""; }; - 6727AA774C6723AFCA6CFCEF099071C7 /* Contain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Contain.swift; path = Nimble/Matchers/Contain.swift; sourceTree = ""; }; - 69578BBC16AAA12ED9630E2036580E94 /* BeLessThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThan.swift; path = Nimble/Matchers/BeLessThan.swift; sourceTree = ""; }; - 69A1AA2E4CDFA7B6FD9B4F253CAF481F /* BeIdenticalTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeIdenticalTo.swift; path = Nimble/Matchers/BeIdenticalTo.swift; sourceTree = ""; }; - 6DDA3CDE7515A11BE56C6C2FE5FB65D8 /* World+DSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "World+DSL.swift"; path = "Quick/DSL/World+DSL.swift"; sourceTree = ""; }; - 73B922FF75D982F502B345AE30399F97 /* ObjCMatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjCMatcher.swift; path = Nimble/Wrappers/ObjCMatcher.swift; sourceTree = ""; }; - 784135A9193F0FE38182AF2C577B3A52 /* Nimble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Nimble.h; path = Nimble/Nimble.h; sourceTree = ""; }; - 7C07CB259CB51CAA2B1B59537C0A7C2C /* Quick.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Quick.xcconfig; sourceTree = ""; }; - 825D7B65E453145EBEC4A43C4A47A23A /* Pods_Chirp_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Chirp_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8487245080A1AB0FFD48288B814AEA82 /* World.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = World.swift; path = Quick/World.swift; sourceTree = ""; }; - 88457B3A5C81E0F34AC48AC05B8040D6 /* RaisesException.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RaisesException.swift; path = Nimble/Matchers/RaisesException.swift; sourceTree = ""; }; - 8880B82EFD81A0D6EE2BBD27A39D61BA /* QuickSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickSpec.h; path = Quick/QuickSpec.h; sourceTree = ""; }; - 8E12C6F645E5DC0EDB23023A394F1CB1 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLessThanOrEqual.swift; path = Nimble/Matchers/BeLessThanOrEqual.swift; sourceTree = ""; }; - 94A039912FDC46FCB2AF6DCEEB91ADB4 /* World+DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "World+DSL.h"; path = "Quick/DSL/World+DSL.h"; sourceTree = ""; }; - 962C40C8C6FD336FADD6AAE51235B58C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9FD6607324C33A0191F230B4058FD223 /* Pods-Chirp_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Chirp_Example.debug.xcconfig"; sourceTree = ""; }; - A36BA17B11B676B79FAE0DEC754DEEF6 /* Pods-Chirp_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Chirp_Example-resources.sh"; sourceTree = ""; }; - A8165BBB1EE1DFD8507C1FA412A2C7AF /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AA10E73A1A1A18A27DD11CDB40F0E4A5 /* Pods-Chirp_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Chirp_Tests.debug.xcconfig"; sourceTree = ""; }; - AB1D0B33481D2F32A53859C398159AB0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - AE670FBBCC7FBB0E81F05DA0C8EAAEE5 /* QuickConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QuickConfiguration.m; path = Quick/Configuration/QuickConfiguration.m; sourceTree = ""; }; - AE6E3634125A20B9BA58962919B08DDC /* Closures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Closures.swift; path = Quick/Hooks/Closures.swift; sourceTree = ""; }; - B011BCE1507648ECA7586CF7DABF6F4C /* BeLogical.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeLogical.swift; path = Nimble/Matchers/BeLogical.swift; sourceTree = ""; }; - B0A48A4BA8B87CD92D3790BEE3943058 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B2005F86F2C2D05CDE00BB78EF02D6D4 /* ExampleGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExampleGroup.swift; path = Quick/ExampleGroup.swift; sourceTree = ""; }; - B3116FC3DA077740D1C5702FA4C187A2 /* Expectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expectation.swift; path = Nimble/Expectation.swift; sourceTree = ""; }; - B4FDE815B95EFEF52906D506D28A424D /* Pods-Chirp_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-Chirp_Example.modulemap"; sourceTree = ""; }; - B68A276C05A93CFCC331A055BCA33167 /* Nimble.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Nimble.xcconfig; sourceTree = ""; }; - B8182BF7B8B80091D8DEE980BA686817 /* Chirp.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Chirp.xcconfig; sourceTree = ""; }; - B84D274316F8C6F9695294FB40D7596F /* AssertionRecorder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssertionRecorder.swift; path = Nimble/Adapters/AssertionRecorder.swift; sourceTree = ""; }; - BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - BEA1EFFE836005E11B9D420692E9E50C /* Example.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Example.swift; path = Quick/Example.swift; sourceTree = ""; }; - BF4A0BD3FF1881730835440CDFCFBA0B /* Chirp.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Chirp.modulemap; sourceTree = ""; }; - BF4AE1E80CC4EA4F2E1FF17CA10A3D26 /* Nimble-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Nimble-umbrella.h"; sourceTree = ""; }; - C03BB6589A73F51F073DF050F55D7F41 /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThanOrEqualTo.swift; path = Nimble/Matchers/BeGreaterThanOrEqualTo.swift; sourceTree = ""; }; - C8E9634CF58B22F95DF5AA222CDAF9B8 /* Nimble-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Nimble-dummy.m"; sourceTree = ""; }; - CB4849FC0E886B8F1D967410F57639BA /* Pods-Chirp_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Chirp_Tests.release.xcconfig"; sourceTree = ""; }; - CC441E7B2F9F623B1A07A52455CFB4CA /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CC9D4B64F9B5EF312F80B146359316B9 /* Pods-Chirp_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Chirp_Tests-umbrella.h"; sourceTree = ""; }; - CD6892139A4E44DF95C89A6BE52900CE /* Nimble.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = Nimble.modulemap; sourceTree = ""; }; - D0843BD7412E439120C081E8D9FE0F80 /* Match.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Match.swift; path = Nimble/Matchers/Match.swift; sourceTree = ""; }; - D17DFC0D37F8449B1B2A2D117D1179A2 /* DSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DSL.m; path = Nimble/objc/DSL.m; sourceTree = ""; }; - D4E0D7E2D11371A45CB3D1221E7B4EC2 /* Quick.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Quick.h; path = Quick/Quick.h; sourceTree = ""; }; - D75276E4A134A22E123F4C40E529080C /* Equal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Equal.swift; path = Nimble/Matchers/Equal.swift; sourceTree = ""; }; - DA695A07DF17BA243064E57D889E1CBB /* DSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DSL.h; path = Nimble/objc/DSL.h; sourceTree = ""; }; - DC2C9289CC730847F23BA922FFB13D7B /* Pods-Chirp_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-Chirp_Tests.modulemap"; sourceTree = ""; }; - E053F5361987AE204F638A4C00C8ED99 /* Pods-Chirp_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Chirp_Example-dummy.m"; sourceTree = ""; }; - E2BC0728045ED4D4A2C12B52A561EEF7 /* ThrowError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThrowError.swift; path = Nimble/Matchers/ThrowError.swift; sourceTree = ""; }; - E31CE50F8B4B99D3C229D2438892ED5B /* Stringers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stringers.swift; path = Nimble/Utils/Stringers.swift; sourceTree = ""; }; - E351727CD07BB90B2A3CAE2C2433F6C5 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - E3CD67A0263B5D926517C112081F48B2 /* BeGreaterThan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BeGreaterThan.swift; path = Nimble/Matchers/BeGreaterThan.swift; sourceTree = ""; }; - E41A31E4949F1319040B8D2BBBF2B5D6 /* QCKDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QCKDSL.h; path = Quick/DSL/QCKDSL.h; sourceTree = ""; }; - E43EEEBE209F0CF242FBC231937E6922 /* MatcherFunc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MatcherFunc.swift; path = Nimble/Wrappers/MatcherFunc.swift; sourceTree = ""; }; - ECB4882E47E7537D32F4C677DF4F0B43 /* AdapterProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AdapterProtocols.swift; path = Nimble/Adapters/AdapterProtocols.swift; sourceTree = ""; }; - EFC49133C85E8527B382701506740CEF /* Chirp-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Chirp-prefix.pch"; sourceTree = ""; }; - F1D4A64A54F414359EC782444B27597B /* QuickConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QuickConfiguration.h; path = Quick/Configuration/QuickConfiguration.h; sourceTree = ""; }; - F43DF0F136DBD2A566C0B08DA3322D49 /* Pods-Chirp_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Chirp_Tests-dummy.m"; sourceTree = ""; }; - F5F4CE0DE16848CBDA8A93366A52BEF7 /* NMBExceptionCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = NMBExceptionCapture.m; path = Nimble/objc/NMBExceptionCapture.m; sourceTree = ""; }; - F689A549CFB432AE0684F3EA3BA8D2FF /* Poll.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Poll.swift; path = Nimble/Utils/Poll.swift; sourceTree = ""; }; - F6C2CA3F29A11A3CA24693684C280A35 /* Pods_Chirp_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Chirp_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F7FE6BD80E2769820B83F2550DAC4AAF /* ObjCExpectation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObjCExpectation.swift; path = Nimble/ObjCExpectation.swift; sourceTree = ""; }; - FC9D0077C69A720B9DD2BB12344FD893 /* Quick-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Quick-umbrella.h"; sourceTree = ""; }; - FD0AF5781847E82CEC8A2C6AEE2DBE57 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FDA388FEA33C5B8824432D9681B318F3 /* DSL+Wait.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DSL+Wait.swift"; path = "Nimble/DSL+Wait.swift"; sourceTree = ""; }; - FF7511682ED488897012E4EEC14429BF /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Quick/Filter.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 07A40EBBC8E705FDFAA966E8AB4C36CF /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - EBEFB9215D7FAFB9829C368FF34B7729 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 0BE7119FA15ED8E2DC4A4B13388ED9CF /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 85702A2C1F8B83CAF99B7055208C0DB7 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 753CF489C0B6BDEB523F32E323CB9D8E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 698D887E14F069B6D4A6298F204E6861 /* Foundation.framework in Frameworks */, - F1888D00F040D76B467386EBCBB90ECB /* XCTest.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7FBD7B1537B634BB7C94BB4D4384BD63 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C150157922BAEB1F93635508FB59E618 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9FD6A3B3E894F3913B6F998BD9674A60 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E1454083EE97F200DF906735D77D4A5B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FC10AD2963BF5047B16B087533946A7B /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 060C632DAEE81B623F290540C8E1695E /* Pod */ = { - isa = PBXGroup; - children = ( - 88FEFF4443BB9DBA6C380B193F4B71F6 /* Classes */, - ); - path = Pod; - sourceTree = ""; - }; - 0C6B012983F9FEF8CC65C1318F5F090C /* iOS */ = { - isa = PBXGroup; - children = ( - E351727CD07BB90B2A3CAE2C2433F6C5 /* Foundation.framework */, - 279AA6492631DEFA8C439A9C088EEB8A /* XCTest.framework */, - ); - name = iOS; - sourceTree = ""; - }; - 16F40755D50C39F84A302222E30E8DD2 /* Support Files */ = { - isa = PBXGroup; - children = ( - 28CBE0D19FC6E65EFAA29981A9422B23 /* Info.plist */, - 021C4E135FFC34B4A74FD0560A640549 /* Quick.modulemap */, - 7C07CB259CB51CAA2B1B59537C0A7C2C /* Quick.xcconfig */, - 616BFD5BF73AEF373E5250D05560A338 /* Quick-dummy.m */, - 3F1975D001BFB447009180BAF8C14ADB /* Quick-prefix.pch */, - FC9D0077C69A720B9DD2BB12344FD893 /* Quick-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/Quick"; - sourceTree = ""; - }; - 2CC90B0C5391BA5C7C90377E28308DBB /* Pods-Chirp_Tests */ = { - isa = PBXGroup; - children = ( - 962C40C8C6FD336FADD6AAE51235B58C /* Info.plist */, - DC2C9289CC730847F23BA922FFB13D7B /* Pods-Chirp_Tests.modulemap */, - 1DDC3CB54F6A90687CF044481BFAC6BE /* Pods-Chirp_Tests-acknowledgements.markdown */, - 37A473CAA6B7043A0BF2868A15D109EC /* Pods-Chirp_Tests-acknowledgements.plist */, - F43DF0F136DBD2A566C0B08DA3322D49 /* Pods-Chirp_Tests-dummy.m */, - 3472E223FCFF3134A95136CBF1A6EE3A /* Pods-Chirp_Tests-frameworks.sh */, - 2F7E632096EBB5E0931B4F3E1926165A /* Pods-Chirp_Tests-resources.sh */, - CC9D4B64F9B5EF312F80B146359316B9 /* Pods-Chirp_Tests-umbrella.h */, - AA10E73A1A1A18A27DD11CDB40F0E4A5 /* Pods-Chirp_Tests.debug.xcconfig */, - CB4849FC0E886B8F1D967410F57639BA /* Pods-Chirp_Tests.release.xcconfig */, - ); - name = "Pods-Chirp_Tests"; - path = "Target Support Files/Pods-Chirp_Tests"; - sourceTree = ""; - }; - 36FD97F93AB8E4D454DAB2C2051EC699 /* Support Files */ = { - isa = PBXGroup; - children = ( - FD0AF5781847E82CEC8A2C6AEE2DBE57 /* Info.plist */, - CD6892139A4E44DF95C89A6BE52900CE /* Nimble.modulemap */, - B68A276C05A93CFCC331A055BCA33167 /* Nimble.xcconfig */, - C8E9634CF58B22F95DF5AA222CDAF9B8 /* Nimble-dummy.m */, - 5D6A2E71DBC9D0DE17402BCFCFEEBDB2 /* Nimble-prefix.pch */, - BF4AE1E80CC4EA4F2E1FF17CA10A3D26 /* Nimble-umbrella.h */, - ); - name = "Support Files"; - path = "../Target Support Files/Nimble"; - sourceTree = ""; - }; - 433CD3331B6C3787F473C941B61FC68F /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0C6B012983F9FEF8CC65C1318F5F090C /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - 46F5FF867B147465116CE447B59B1355 /* Chirp */ = { - isa = PBXGroup; - children = ( - 060C632DAEE81B623F290540C8E1695E /* Pod */, - 6BF6BD15BF92F7905EBA5FCCDD60367F /* Support Files */, - ); - name = Chirp; - path = ../..; - sourceTree = ""; - }; - 545E4C7B644646540DCE347796026AA3 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - CF54C234436827142B58ABAD8A7FBC4D /* Pods-Chirp_Example */, - 2CC90B0C5391BA5C7C90377E28308DBB /* Pods-Chirp_Tests */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; - 64E98FF7B6454214F8290BB0AC208D8F /* Quick */ = { - isa = PBXGroup; - children = ( - 4C6D6E41BA9F922E7BBD3A24B7E5D00A /* Callsite.swift */, - AE6E3634125A20B9BA58962919B08DDC /* Closures.swift */, - 5BF695047E0AAFB3CA54EC10F0E97FD3 /* Configuration.swift */, - 33DD2CC5441C4540A072B29E4A257A9D /* DSL.swift */, - BEA1EFFE836005E11B9D420692E9E50C /* Example.swift */, - B2005F86F2C2D05CDE00BB78EF02D6D4 /* ExampleGroup.swift */, - 01F8C281E400A6FABAD082CEA7263B2A /* ExampleHooks.swift */, - 38715BF4570032AE706B97AB11365E48 /* ExampleMetadata.swift */, - FF7511682ED488897012E4EEC14429BF /* Filter.swift */, - 64F492985EB6550A418DD3DB1BCDE146 /* NSString+QCKSelectorName.h */, - 20ABC5A3D02301EC1EC014B6ABEFA42A /* NSString+QCKSelectorName.m */, - E41A31E4949F1319040B8D2BBBF2B5D6 /* QCKDSL.h */, - 2543809E4D3D9755B94735346ACDFF03 /* QCKDSL.m */, - D4E0D7E2D11371A45CB3D1221E7B4EC2 /* Quick.h */, - F1D4A64A54F414359EC782444B27597B /* QuickConfiguration.h */, - AE670FBBCC7FBB0E81F05DA0C8EAAEE5 /* QuickConfiguration.m */, - 8880B82EFD81A0D6EE2BBD27A39D61BA /* QuickSpec.h */, - 62241019A9DFE31F82A2CDF8690A163C /* QuickSpec.m */, - 64F0BEE5B67844F0E333920C2CB3416C /* SuiteHooks.swift */, - 4C0EAA5BA062125C64E6A819695F87C6 /* World.h */, - 8487245080A1AB0FFD48288B814AEA82 /* World.swift */, - 94A039912FDC46FCB2AF6DCEEB91ADB4 /* World+DSL.h */, - 6DDA3CDE7515A11BE56C6C2FE5FB65D8 /* World+DSL.swift */, - 16F40755D50C39F84A302222E30E8DD2 /* Support Files */, - ); - path = Quick; - sourceTree = ""; - }; - 6BF6BD15BF92F7905EBA5FCCDD60367F /* Support Files */ = { - isa = PBXGroup; - children = ( - BF4A0BD3FF1881730835440CDFCFBA0B /* Chirp.modulemap */, - B8182BF7B8B80091D8DEE980BA686817 /* Chirp.xcconfig */, - 3C32D47CE6AE1352683960263F34BCD5 /* Chirp-dummy.m */, - EFC49133C85E8527B382701506740CEF /* Chirp-prefix.pch */, - 3E07415049C7B244A3483A24AA9F3762 /* Chirp-umbrella.h */, - A8165BBB1EE1DFD8507C1FA412A2C7AF /* Info.plist */, - ); - name = "Support Files"; - path = "Example/Pods/Target Support Files/Chirp"; - sourceTree = ""; - }; - 7DB346D0F39D3F0E887471402A8071AB = { - isa = PBXGroup; - children = ( - BA6428E9F66FD5A23C0A2E06ED26CD2F /* Podfile */, - C36487BB2C093603449C46F4F476DE02 /* Development Pods */, - 433CD3331B6C3787F473C941B61FC68F /* Frameworks */, - 8F29E9621F2E4347FEA6F6D7F0748038 /* Pods */, - 8794728D2749985FD917DC470A7BA4C0 /* Products */, - 545E4C7B644646540DCE347796026AA3 /* Targets Support Files */, - ); - sourceTree = ""; - }; - 8794728D2749985FD917DC470A7BA4C0 /* Products */ = { - isa = PBXGroup; - children = ( - 170BDE2821810FFFF8F653EAB8273DC3 /* Chirp.bundle */, - 1B3023BBC173E83D0F79A6917B12F26B /* Chirp.framework */, - B0A48A4BA8B87CD92D3790BEE3943058 /* Nimble.framework */, - F6C2CA3F29A11A3CA24693684C280A35 /* Pods_Chirp_Example.framework */, - 825D7B65E453145EBEC4A43C4A47A23A /* Pods_Chirp_Tests.framework */, - CC441E7B2F9F623B1A07A52455CFB4CA /* Quick.framework */, - ); - name = Products; - sourceTree = ""; - }; - 88FEFF4443BB9DBA6C380B193F4B71F6 /* Classes */ = { - isa = PBXGroup; - children = ( - 408B28791C37C64B00134C54 /* Chirp.swift */, - ); - path = Classes; - sourceTree = ""; - }; - 8F29E9621F2E4347FEA6F6D7F0748038 /* Pods */ = { - isa = PBXGroup; - children = ( - D877BEEDC4F6494B4B10BC732B32A32B /* Nimble */, - 64E98FF7B6454214F8290BB0AC208D8F /* Quick */, - ); - name = Pods; - sourceTree = ""; - }; - C36487BB2C093603449C46F4F476DE02 /* Development Pods */ = { - isa = PBXGroup; - children = ( - 46F5FF867B147465116CE447B59B1355 /* Chirp */, - ); - name = "Development Pods"; - sourceTree = ""; - }; - CF54C234436827142B58ABAD8A7FBC4D /* Pods-Chirp_Example */ = { - isa = PBXGroup; - children = ( - AB1D0B33481D2F32A53859C398159AB0 /* Info.plist */, - B4FDE815B95EFEF52906D506D28A424D /* Pods-Chirp_Example.modulemap */, - 52C908177CFC61716B8A5578A17936F0 /* Pods-Chirp_Example-acknowledgements.markdown */, - 1A506AD707244ECC9DDCB3EAD225E5F4 /* Pods-Chirp_Example-acknowledgements.plist */, - E053F5361987AE204F638A4C00C8ED99 /* Pods-Chirp_Example-dummy.m */, - 1C168EBF584B4F05BBE6D606FA0590A6 /* Pods-Chirp_Example-frameworks.sh */, - A36BA17B11B676B79FAE0DEC754DEEF6 /* Pods-Chirp_Example-resources.sh */, - 47F124C5F3B880D5BECAFB535C4E9823 /* Pods-Chirp_Example-umbrella.h */, - 9FD6607324C33A0191F230B4058FD223 /* Pods-Chirp_Example.debug.xcconfig */, - 5698A2D90AE161B5790CE5B58BF41F47 /* Pods-Chirp_Example.release.xcconfig */, - ); - name = "Pods-Chirp_Example"; - path = "Target Support Files/Pods-Chirp_Example"; - sourceTree = ""; - }; - D877BEEDC4F6494B4B10BC732B32A32B /* Nimble */ = { - isa = PBXGroup; - children = ( - ECB4882E47E7537D32F4C677DF4F0B43 /* AdapterProtocols.swift */, - 4F2CCEF958AF4E4C4F073031905F2CE2 /* AllPass.swift */, - 0B0C995C72A44C02A9369FA2BDB1F4FF /* AssertionDispatcher.swift */, - B84D274316F8C6F9695294FB40D7596F /* AssertionRecorder.swift */, - 1D42013D479CDC11E7882C7C0045B66B /* AsyncMatcherWrapper.swift */, - 0B53DF3C5B85F993313E9FA09386C167 /* BeAKindOf.swift */, - 13064CC241598F189B1341470994F9D9 /* BeAnInstanceOf.swift */, - 29A378AC6A7BCB5D43F7586353A7610A /* BeCloseTo.swift */, - 2FE24AE8654BDA8234080C23F6335E26 /* BeEmpty.swift */, - 58CD57ED9D79412A49A037E8EAA4AF42 /* BeginWith.swift */, - E3CD67A0263B5D926517C112081F48B2 /* BeGreaterThan.swift */, - C03BB6589A73F51F073DF050F55D7F41 /* BeGreaterThanOrEqualTo.swift */, - 69A1AA2E4CDFA7B6FD9B4F253CAF481F /* BeIdenticalTo.swift */, - 69578BBC16AAA12ED9630E2036580E94 /* BeLessThan.swift */, - 8E12C6F645E5DC0EDB23023A394F1CB1 /* BeLessThanOrEqual.swift */, - B011BCE1507648ECA7586CF7DABF6F4C /* BeLogical.swift */, - 02297D692E5CA1B1C21CCCDA1853BA44 /* BeNil.swift */, - 6727AA774C6723AFCA6CFCEF099071C7 /* Contain.swift */, - DA695A07DF17BA243064E57D889E1CBB /* DSL.h */, - D17DFC0D37F8449B1B2A2D117D1179A2 /* DSL.m */, - 2B9040AB08CA7AEB727960E284F746A4 /* DSL.swift */, - FDA388FEA33C5B8824432D9681B318F3 /* DSL+Wait.swift */, - 1E8B6303CCFDEBF93094E92D50CAFF38 /* EndWith.swift */, - D75276E4A134A22E123F4C40E529080C /* Equal.swift */, - B3116FC3DA077740D1C5702FA4C187A2 /* Expectation.swift */, - 227AD60FAC82B3DEDDBB09BAEE052647 /* Expression.swift */, - 25961731CF4F7537A5ECD61A000A150C /* FailureMessage.swift */, - 28E302676FFF0A4192E3ECFB4B1FDCF6 /* Functional.swift */, - 54BC3268759E7DB38A0E192F06A1BD06 /* HaveCount.swift */, - D0843BD7412E439120C081E8D9FE0F80 /* Match.swift */, - E43EEEBE209F0CF242FBC231937E6922 /* MatcherFunc.swift */, - 28D0DF7E7A59098355B7877A39D254B6 /* MatcherProtocols.swift */, - 784135A9193F0FE38182AF2C577B3A52 /* Nimble.h */, - 5596CB4CEA7B7B71461C9ECE75263656 /* NimbleXCTestHandler.swift */, - 40FBD52025077E5788ADCE71EF040393 /* NMBExceptionCapture.h */, - F5F4CE0DE16848CBDA8A93366A52BEF7 /* NMBExceptionCapture.m */, - F7FE6BD80E2769820B83F2550DAC4AAF /* ObjCExpectation.swift */, - 73B922FF75D982F502B345AE30399F97 /* ObjCMatcher.swift */, - F689A549CFB432AE0684F3EA3BA8D2FF /* Poll.swift */, - 88457B3A5C81E0F34AC48AC05B8040D6 /* RaisesException.swift */, - 4930275AC98E3FD0F3BC81A7D08B8591 /* SourceLocation.swift */, - E31CE50F8B4B99D3C229D2438892ED5B /* Stringers.swift */, - E2BC0728045ED4D4A2C12B52A561EEF7 /* ThrowError.swift */, - 36FD97F93AB8E4D454DAB2C2051EC699 /* Support Files */, - ); - path = Nimble; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 71EF86DFACDAA368456B9796DD0B12CF /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 0C41D290BCA32F2CFF6276BF8773A739 /* Chirp-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9665434B4EE8CC5267AF907A469795D4 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 6694F7B41F5A6FEE0DB5343108470F69 /* NSString+QCKSelectorName.h in Headers */, - 1F54836131CDD3472A6D8706F232A5CE /* QCKDSL.h in Headers */, - CE3F911A490411EE0F9D0FE2D47A3804 /* Quick-umbrella.h in Headers */, - EEAEBD35CDE184D420DAD6709CD3DDDE /* Quick.h in Headers */, - 96FC401F9F02B2F9BD055F0DD0DBB822 /* QuickConfiguration.h in Headers */, - F81AF0EB47EF5C817CE1F7C984E8DA11 /* QuickSpec.h in Headers */, - 98345FDD2B3CF3D0118ED6BCFFC7AEBB /* World+DSL.h in Headers */, - A535EB7028BE7449459DA9741BAB224A /* World.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C50C4EACDDA2F38FB9B296715DF18789 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - BED2C63E2D2C34D5511F39E398755C55 /* Pods-Chirp_Example-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E558CFA5C045F339837B0B7645133081 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 9341B96D63EF6C54A1F906A1BBAEAF46 /* DSL.h in Headers */, - 0F49254A4C560DD4696936F6080756DC /* Nimble-umbrella.h in Headers */, - 512DFAE728521F02AF225F0082195DCC /* Nimble.h in Headers */, - 02BF9988CC94A01E7CB6049694390020 /* NMBExceptionCapture.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E8C8A8F029ED942CBFA9896CC8873EC1 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 36ADB08168319308B642A1E248ED55CD /* Pods-Chirp_Tests-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 0435B780B17A7A610BC562E4104531B8 /* Chirp */ = { - isa = PBXNativeTarget; - buildConfigurationList = 9361B1333B29E4F46E87E7F9B1E7A63E /* Build configuration list for PBXNativeTarget "Chirp" */; - buildPhases = ( - 39E06D7A65ECCA75980EB9429B0EFED0 /* Sources */, - 0BE7119FA15ED8E2DC4A4B13388ED9CF /* Frameworks */, - 401A337DA1FB1C62E799AD80891EA4FB /* Resources */, - 71EF86DFACDAA368456B9796DD0B12CF /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - CB4F4808700C12CABB2C0CC951721643 /* PBXTargetDependency */, - ); - name = Chirp; - productName = Chirp; - productReference = 1B3023BBC173E83D0F79A6917B12F26B /* Chirp.framework */; - productType = "com.apple.product-type.framework"; - }; - 29FA9ED95400E6B0CF2684EB54CB9334 /* Pods-Chirp_Example */ = { - isa = PBXNativeTarget; - buildConfigurationList = 6DAA3D986680461CB21A2F87EC5A66D6 /* Build configuration list for PBXNativeTarget "Pods-Chirp_Example" */; - buildPhases = ( - 759A121E03678411807B431649F99856 /* Sources */, - E1454083EE97F200DF906735D77D4A5B /* Frameworks */, - C50C4EACDDA2F38FB9B296715DF18789 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - 7D49AD02B13B824A898862C667630CE0 /* PBXTargetDependency */, - ); - name = "Pods-Chirp_Example"; - productName = "Pods-Chirp_Example"; - productReference = F6C2CA3F29A11A3CA24693684C280A35 /* Pods_Chirp_Example.framework */; - productType = "com.apple.product-type.framework"; - }; - 559A4F124A60124F67D8E85253E29790 /* Chirp-Chirp */ = { - isa = PBXNativeTarget; - buildConfigurationList = 482DEB1F4FE66688D86639D749507A33 /* Build configuration list for PBXNativeTarget "Chirp-Chirp" */; - buildPhases = ( - 4234BBA2AC372FD718DFF16C80D7E135 /* Sources */, - 9FD6A3B3E894F3913B6F998BD9674A60 /* Frameworks */, - E866DC771D3A562B6FC0BDD2A02E9DF2 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Chirp-Chirp"; - productName = "Chirp-Chirp"; - productReference = 170BDE2821810FFFF8F653EAB8273DC3 /* Chirp.bundle */; - productType = "com.apple.product-type.bundle"; - }; - 5A9991D0148015292FB1894ED71124D5 /* Pods-Chirp_Tests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3EAA0B2BAC0E5D254A86DA186CE1CECC /* Build configuration list for PBXNativeTarget "Pods-Chirp_Tests" */; - buildPhases = ( - AE860E9FFDC8265351A198E106BD9D68 /* Sources */, - 07A40EBBC8E705FDFAA966E8AB4C36CF /* Frameworks */, - E8C8A8F029ED942CBFA9896CC8873EC1 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - 99F493677584D9EA7521546D00C4323F /* PBXTargetDependency */, - 2E814FDCF8B930B0ADCDE31916D3955F /* PBXTargetDependency */, - E55ED82E68CABF716EA45C2FFCEE612C /* PBXTargetDependency */, - ); - name = "Pods-Chirp_Tests"; - productName = "Pods-Chirp_Tests"; - productReference = 825D7B65E453145EBEC4A43C4A47A23A /* Pods_Chirp_Tests.framework */; - productType = "com.apple.product-type.framework"; - }; - AE4C9880DA936780135AFC0791E15D25 /* Quick */ = { - isa = PBXNativeTarget; - buildConfigurationList = C04E5D8A0920D53194D0EACFDD25B800 /* Build configuration list for PBXNativeTarget "Quick" */; - buildPhases = ( - BE073AAF2DEAAFE1736B80CF10D50E64 /* Sources */, - 753CF489C0B6BDEB523F32E323CB9D8E /* Frameworks */, - 9665434B4EE8CC5267AF907A469795D4 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Quick; - productName = Quick; - productReference = CC441E7B2F9F623B1A07A52455CFB4CA /* Quick.framework */; - productType = "com.apple.product-type.framework"; - }; - C5DB5104FED3C10F78978AFC810982B9 /* Nimble */ = { - isa = PBXNativeTarget; - buildConfigurationList = D4DCEA35595251EC6B9BDC29A571E7B2 /* Build configuration list for PBXNativeTarget "Nimble" */; - buildPhases = ( - CC264E557A8A184C30ECCED31C74BB34 /* Sources */, - 7FBD7B1537B634BB7C94BB4D4384BD63 /* Frameworks */, - E558CFA5C045F339837B0B7645133081 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Nimble; - productName = Nimble; - productReference = B0A48A4BA8B87CD92D3790BEE3943058 /* Nimble.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0700; - LastUpgradeCheck = 0720; - }; - buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 8794728D2749985FD917DC470A7BA4C0 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 0435B780B17A7A610BC562E4104531B8 /* Chirp */, - 559A4F124A60124F67D8E85253E29790 /* Chirp-Chirp */, - C5DB5104FED3C10F78978AFC810982B9 /* Nimble */, - 29FA9ED95400E6B0CF2684EB54CB9334 /* Pods-Chirp_Example */, - 5A9991D0148015292FB1894ED71124D5 /* Pods-Chirp_Tests */, - AE4C9880DA936780135AFC0791E15D25 /* Quick */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 401A337DA1FB1C62E799AD80891EA4FB /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F48910247CE414A86EBF5AF7BE0EF6D4 /* Chirp.bundle in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E866DC771D3A562B6FC0BDD2A02E9DF2 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 39E06D7A65ECCA75980EB9429B0EFED0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B8E476942F8261F91D0C928CFE0BD50B /* Chirp-dummy.m in Sources */, - 408B287A1C37C64B00134C54 /* Chirp.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4234BBA2AC372FD718DFF16C80D7E135 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 759A121E03678411807B431649F99856 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D68A544D8420A1A20875F8A41D9009E9 /* Pods-Chirp_Example-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AE860E9FFDC8265351A198E106BD9D68 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C59B6E5E5A1913A29D7F30FB2B85AC84 /* Pods-Chirp_Tests-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BE073AAF2DEAAFE1736B80CF10D50E64 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - E6F83C681D61CFE4953065B70BE72575 /* Callsite.swift in Sources */, - BBD3E5198869F0166CB7BCE55391020A /* Closures.swift in Sources */, - 6AF199422687120EF1D7E39B4CE75191 /* Configuration.swift in Sources */, - 409AF2F57B1AA35FCB1DFC1D3AC874A2 /* DSL.swift in Sources */, - 50FD882B66CB9C578F0B80C443F69494 /* Example.swift in Sources */, - 1724C85DB84F771E3247FF47AFB4262E /* ExampleGroup.swift in Sources */, - 43FD0EEA7C01D820AAD7F02D99767174 /* ExampleHooks.swift in Sources */, - 4749D2699685B93816331F807746C389 /* ExampleMetadata.swift in Sources */, - 0D6CFD02CBB99727F0D1FF162D5B0E53 /* Filter.swift in Sources */, - ACD19EFED6B565548F9E22B2036E933C /* NSString+QCKSelectorName.m in Sources */, - E9F69F3B2E0D3C6C3A4E41F21615D6A2 /* QCKDSL.m in Sources */, - 8647013E45347ED95450EE262FCC5FBE /* Quick-dummy.m in Sources */, - 188E8712B72132856FF1363A664217C7 /* QuickConfiguration.m in Sources */, - 33BCA35A0A0D0DE7F501300C1F4842C9 /* QuickSpec.m in Sources */, - 640735DDB32E1AC348750F7F10297BC7 /* SuiteHooks.swift in Sources */, - F6A1E94424FCD83740B93B5F0C0D28BC /* World+DSL.swift in Sources */, - F9240021FEC9D9B2B7BFEC802C34259B /* World.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CC264E557A8A184C30ECCED31C74BB34 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CAAED5FB81DB035A9EC080917C783FA6 /* AdapterProtocols.swift in Sources */, - D429691F39B4C30A8993360FB8A3E334 /* AllPass.swift in Sources */, - 33514FEE6EA65605EFB6F1801834B692 /* AssertionDispatcher.swift in Sources */, - E6E7B15FAD6C56681511813DB2666478 /* AssertionRecorder.swift in Sources */, - 0A6E71555F55082003A3DB2B03CA85D2 /* AsyncMatcherWrapper.swift in Sources */, - 77128C0365A98E3BAC038A915B38791C /* BeAKindOf.swift in Sources */, - 7A6E2730A25A55D8DFA74D3D7CB005EF /* BeAnInstanceOf.swift in Sources */, - B905718B2501DDA22F2AE73CB6E76E6B /* BeCloseTo.swift in Sources */, - 9E7786C034F0E0A6B5F0A0E6BE7D7E4A /* BeEmpty.swift in Sources */, - 9646787942A85613FE77F45794E9B5CD /* BeginWith.swift in Sources */, - 1E28F9362956B758C4C981D3C1129C90 /* BeGreaterThan.swift in Sources */, - 33264C6A7A3536AD91EF42B3E8CC8220 /* BeGreaterThanOrEqualTo.swift in Sources */, - 7680F08C43B965EC873D26E6AD854C9F /* BeIdenticalTo.swift in Sources */, - BCB53F24DCADF12601B8BA90AE3190AE /* BeLessThan.swift in Sources */, - 4E87C6AE24AB15700A39FC24A2F1C93B /* BeLessThanOrEqual.swift in Sources */, - 02DF5BD2281BA10105A447F95FCF8CF3 /* BeLogical.swift in Sources */, - F1D4A8A1FC68EFA7F45945908D70A352 /* BeNil.swift in Sources */, - B41E8E775408ACE233F29CE93388B270 /* Contain.swift in Sources */, - DEE170DD3064F7343884A4016546B762 /* DSL+Wait.swift in Sources */, - B0A26F58BA3E6222E50AE5AC883B8EAF /* DSL.m in Sources */, - 58EBA2C1A43283FB2188AB1FB592D32B /* DSL.swift in Sources */, - 3A92AEE86034356AF8987F20EE1F82DF /* EndWith.swift in Sources */, - FB1347627E64CA7E98C19DC985E13D95 /* Equal.swift in Sources */, - E2FBD93D72DF01427486D1A6853FC689 /* Expectation.swift in Sources */, - C63AB521EA514A811A167E507C0CF9AD /* Expression.swift in Sources */, - 0492354DA7EF0C9068F7B4E8F74001B0 /* FailureMessage.swift in Sources */, - D7B45D4600C6166C124C0A926EE65284 /* Functional.swift in Sources */, - BB4F35062294C1A461DA3CEF6306A1DB /* HaveCount.swift in Sources */, - E36C5201AE7F1CBB25F9D2E7CBFC3C20 /* Match.swift in Sources */, - 3AEAC447B09E7AABC140654C8529BC94 /* MatcherFunc.swift in Sources */, - C9AC658F3FCB67B50E96313C2687B33D /* MatcherProtocols.swift in Sources */, - 73695FA6A6CDFBB13C0CC73C2E5126C0 /* Nimble-dummy.m in Sources */, - 831D33A4C5C5BBC1EC158D9A236C61D7 /* NimbleXCTestHandler.swift in Sources */, - 9187EEC2982DB82AD8D3A7001AA647D6 /* NMBExceptionCapture.m in Sources */, - CD9D31B6063C50689EAC2A0745C282DC /* ObjCExpectation.swift in Sources */, - 7BFD25B1BB1116D8AC47E2C3874C5B76 /* ObjCMatcher.swift in Sources */, - 8D0BF52FF564A170A3D1DE28C27B233E /* Poll.swift in Sources */, - FFC311AC1E19A23E0EB7B1B3A7A5A744 /* RaisesException.swift in Sources */, - 7DA9FF8513AA48310B15A0744A541818 /* SourceLocation.swift in Sources */, - F10FD3129985704FA1610F84FB98EDF5 /* Stringers.swift in Sources */, - 2D3B916F7168E9412EDB95BA203A5BB4 /* ThrowError.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 2E814FDCF8B930B0ADCDE31916D3955F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Nimble; - target = C5DB5104FED3C10F78978AFC810982B9 /* Nimble */; - targetProxy = 1430425B9BFEC0461C205C8F926B27A4 /* PBXContainerItemProxy */; - }; - 7D49AD02B13B824A898862C667630CE0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Chirp; - target = 0435B780B17A7A610BC562E4104531B8 /* Chirp */; - targetProxy = 5C374A402A2DBCE7C46AAF19F63DFE3D /* PBXContainerItemProxy */; - }; - 99F493677584D9EA7521546D00C4323F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Chirp; - target = 0435B780B17A7A610BC562E4104531B8 /* Chirp */; - targetProxy = 3B51E460492575828C5C2CDDC563F428 /* PBXContainerItemProxy */; - }; - CB4F4808700C12CABB2C0CC951721643 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Chirp-Chirp"; - target = 559A4F124A60124F67D8E85253E29790 /* Chirp-Chirp */; - targetProxy = 08CE26224CEC08A2989C4FAF1CA18CA8 /* PBXContainerItemProxy */; - }; - E55ED82E68CABF716EA45C2FFCEE612C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Quick; - target = AE4C9880DA936780135AFC0791E15D25 /* Quick */; - targetProxy = 5140C3AE3481694C4D2B73054570D9BE /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 10DE1947DAC0ED28F6C0A9F9BD75D546 /* 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.3; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 3A931A7644CC926D3162E0BA9E4ACFA6 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B68A276C05A93CFCC331A055BCA33167 /* Nimble.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/Nimble/Nimble-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Nimble/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Nimble/Nimble.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - 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; - }; - 4AFD16B209AD115446B6D0184DAA3175 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B8182BF7B8B80091D8DEE980BA686817 /* Chirp.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/Chirp/Chirp-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Chirp/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Chirp/Chirp.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Chirp; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 4EDEB3D4FA67600E2F4F3D0FC3478D74 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CB4849FC0E886B8F1D967410F57639BA /* Pods-Chirp_Tests.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-Chirp_Tests/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Chirp_Tests/Pods-Chirp_Tests.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Chirp_Tests; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 4EF564BEA62C557AE8F9B8C1693AA239 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B68A276C05A93CFCC331A055BCA33167 /* Nimble.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/Nimble/Nimble-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Nimble/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Nimble/Nimble.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Nimble; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 552D02D5BA751AC2E8790D2811D496CA /* Debug */ = { - 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 = NO; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - 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.3; - ONLY_ACTIVE_ARCH = YES; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; - 791C9E4396CA657351F028E83390EB88 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AA10E73A1A1A18A27DD11CDB40F0E4A5 /* Pods-Chirp_Tests.debug.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-Chirp_Tests/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Chirp_Tests/Pods-Chirp_Tests.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Chirp_Tests; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 97A7C99688589E56C79A4B7EBB7FEF8D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7C07CB259CB51CAA2B1B59537C0A7C2C /* Quick.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/Quick/Quick-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Quick/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Quick/Quick.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Quick; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 9E5E8D6DA1B4D7A0A344ED32446A6880 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B8182BF7B8B80091D8DEE980BA686817 /* Chirp.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - PRODUCT_NAME = Chirp; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - B067737D7206609B96CEFF63BC293068 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9FD6607324C33A0191F230B4058FD223 /* Pods-Chirp_Example.debug.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-Chirp_Example/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Chirp_Example/Pods-Chirp_Example.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Chirp_Example; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - B66C7BD47B40546C751062E7C13ED470 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7C07CB259CB51CAA2B1B59537C0A7C2C /* Quick.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/Quick/Quick-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Quick/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Quick/Quick.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - 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; - }; - CF14F9FF0EF57CE072113A02F769921E /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B8182BF7B8B80091D8DEE980BA686817 /* Chirp.xcconfig */; - buildSettings = { - ENABLE_STRICT_OBJC_MSGSEND = YES; - PRODUCT_NAME = Chirp; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - E661BB4E14C6ACE0EB2CD5F150584290 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = B8182BF7B8B80091D8DEE980BA686817 /* Chirp.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/Chirp/Chirp-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Chirp/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Chirp/Chirp.modulemap"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Chirp; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - EDA7413626CB9C41D31654005A21B320 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5698A2D90AE161B5790CE5B58BF41F47 /* Pods-Chirp_Example.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-Chirp_Example/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Chirp_Example/Pods-Chirp_Example.modulemap"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Chirp_Example; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 552D02D5BA751AC2E8790D2811D496CA /* Debug */, - 10DE1947DAC0ED28F6C0A9F9BD75D546 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3EAA0B2BAC0E5D254A86DA186CE1CECC /* Build configuration list for PBXNativeTarget "Pods-Chirp_Tests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 791C9E4396CA657351F028E83390EB88 /* Debug */, - 4EDEB3D4FA67600E2F4F3D0FC3478D74 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 482DEB1F4FE66688D86639D749507A33 /* Build configuration list for PBXNativeTarget "Chirp-Chirp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9E5E8D6DA1B4D7A0A344ED32446A6880 /* Debug */, - CF14F9FF0EF57CE072113A02F769921E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 6DAA3D986680461CB21A2F87EC5A66D6 /* Build configuration list for PBXNativeTarget "Pods-Chirp_Example" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B067737D7206609B96CEFF63BC293068 /* Debug */, - EDA7413626CB9C41D31654005A21B320 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 9361B1333B29E4F46E87E7F9B1E7A63E /* Build configuration list for PBXNativeTarget "Chirp" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - E661BB4E14C6ACE0EB2CD5F150584290 /* Debug */, - 4AFD16B209AD115446B6D0184DAA3175 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C04E5D8A0920D53194D0EACFDD25B800 /* Build configuration list for PBXNativeTarget "Quick" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B66C7BD47B40546C751062E7C13ED470 /* Debug */, - 97A7C99688589E56C79A4B7EBB7FEF8D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D4DCEA35595251EC6B9BDC29A571E7B2 /* Build configuration list for PBXNativeTarget "Nimble" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3A931A7644CC926D3162E0BA9E4ACFA6 /* Debug */, - 4EF564BEA62C557AE8F9B8C1693AA239 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; -} + + + + + archiveVersion + 1 + classes + + objectVersion + 46 + objects + + 00A2B44E76415C42EF2AAC8751CF868D + + fileRef + 6250E95EA7EEE983E5F5EE3A9CB93B20 + isa + PBXBuildFile + + 029DCA4C656F3540DEC5388140F695A0 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + XCTestSuite+QuickTestSuiteBuilder.m + path + Sources/Quick/XCTestSuite+QuickTestSuiteBuilder.m + sourceTree + <group> + + 03A5E1C9B21E691F1EEDF840F4D28EDF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + ErrorUtility.swift + path + Sources/Quick/ErrorUtility.swift + sourceTree + <group> + + 041B01E0396D6248044C43EC4D8C73B4 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Quick.xcconfig + sourceTree + <group> + + 0435B780B17A7A610BC562E4104531B8 + + buildConfigurationList + 9361B1333B29E4F46E87E7F9B1E7A63E + buildPhases + + 3A00268FF52F974D115D486974BD81C3 + 0BE7119FA15ED8E2DC4A4B13388ED9CF + 401A337DA1FB1C62E799AD80891EA4FB + 71EF86DFACDAA368456B9796DD0B12CF + + buildRules + + dependencies + + CB4F4808700C12CABB2C0CC951721643 + + isa + PBXNativeTarget + name + Chirp + productName + Chirp + productReference + 1B3023BBC173E83D0F79A6917B12F26B + productType + com.apple.product-type.framework + + 05DA0A769E4C04ECD6FFD632708AF1FE + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + HooksPhase.swift + path + Sources/Quick/Hooks/HooksPhase.swift + sourceTree + <group> + + 060C632DAEE81B623F290540C8E1695E + + children + + B67CADB2CA2C600D8E46A3638F93AD34 + + isa + PBXGroup + name + Pod + path + Pod + sourceTree + <group> + + 068AA0F3C3865F5B3948E0BE92816AFF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + QuickSpec.m + path + Sources/Quick/QuickSpec.m + sourceTree + <group> + + 077B19ED216F02288546F6D507B16DF7 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NMBStringify.m + path + Sources/Nimble/Adapters/ObjectiveC/NMBStringify.m + sourceTree + <group> + + 07A40EBBC8E705FDFAA966E8AB4C36CF + + buildActionMask + 2147483647 + files + + EBEFB9215D7FAFB9829C368FF34B7729 + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 08B94A9690FC43102A39F64D237E4524 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + QuickConfiguration.m + path + Sources/Quick/Configuration/QuickConfiguration.m + sourceTree + <group> + + 08CE26224CEC08A2989C4FAF1CA18CA8 + + containerPortal + D41D8CD98F00B204E9800998ECF8427E + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 559A4F124A60124F67D8E85253E29790 + remoteInfo + Chirp-Chirp + + 08D93098E2A8B7DB9B9E0D2C45BFAC52 + + children + + 7201C4ADFD2EACC61F0B49EC4EBA82CB + F17E27060FE77E1C79F138223A444F72 + + isa + PBXGroup + name + Pods + sourceTree + <group> + + 0A1543178822915E460CA4F0546DF9C9 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + SourceLocation.swift + path + Sources/Nimble/Utils/SourceLocation.swift + sourceTree + <group> + + 0BE7119FA15ED8E2DC4A4B13388ED9CF + + buildActionMask + 2147483647 + files + + 85702A2C1F8B83CAF99B7055208C0DB7 + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 0C41D290BCA32F2CFF6276BF8773A739 + + fileRef + 3E07415049C7B244A3483A24AA9F3762 + isa + PBXBuildFile + settings + + ATTRIBUTES + + Public + + + + 0C6B012983F9FEF8CC65C1318F5F090C + + children + + E351727CD07BB90B2A3CAE2C2433F6C5 + 279AA6492631DEFA8C439A9C088EEB8A + + isa + PBXGroup + name + iOS + sourceTree + <group> + + 0CDF4D0F575F7095DD016CE2601DBD26 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + BeGreaterThan.swift + path + Sources/Nimble/Matchers/BeGreaterThan.swift + sourceTree + <group> + + 0D9EB6A683FD0CE2AB32D16E4223CD3F + + fileRef + 8A5CCB08C927B6029144EA30171B111E + isa + PBXBuildFile + + 0DF9659479BF1BDF735E7FBC0E4B56BD + + buildActionMask + 2147483647 + files + + CFE280B6445BAB9C1A218B2B9554D70C + B14C03FFA5E0110C854DF444F5BE782E + 40E78A56A520697E9E6DCEB285FFD9AC + A262A639734243651D20E2013EB0356F + B8ECE8E0DFB6670563123030758468D3 + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 0F8BAFED5C2A457DB203D317D3B270B7 + + fileRef + D3858FBA4C2D4AD6D6A31DBF85E032C5 + isa + PBXBuildFile + + 0FEBA8AD57CC5BDE39609C414DA521B4 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + MatcherProtocols.swift + path + Sources/Nimble/Matchers/MatcherProtocols.swift + sourceTree + <group> + + 10DE1947DAC0ED28F6C0A9F9BD75D546 + + 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.3 + STRIP_INSTALLED_PRODUCT + NO + SYMROOT + ${SRCROOT}/../build + VALIDATE_PRODUCT + YES + + isa + XCBuildConfiguration + name + Release + + 1136EF0265ED2C9CDCD843453470CBE6 + + buildActionMask + 2147483647 + files + + 31BC59BE44B402A3B833D6A1F861D515 + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 115214983B02D5307978B0FBC5154D44 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + DSL.swift + path + Sources/Quick/DSL/DSL.swift + sourceTree + <group> + + 11C4436BC41A7EAB099B9507D57D9235 + + fileRef + 6A0F5FCD9F2CE74E4BE18D1F39DC894D + isa + PBXBuildFile + + 123BF1874AC58B16BFE4DB6FCB3C09B0 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.plist.xml + path + Info.plist + sourceTree + <group> + + 1430425B9BFEC0461C205C8F926B27A4 + + containerPortal + D41D8CD98F00B204E9800998ECF8427E + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 4FA852B36637F5FBFB642C28D8B6C6BC + remoteInfo + Nimble + + 1492927335C976B1D0F127454C3C510C + + fileRef + B81685C0B8AC4D5D1210B55AE17DC6CB + isa + PBXBuildFile + + 1685C89236EEDDAD991555E59FFE4B69 + + children + + 347F839DEFD3C6E170BE2F32FFE51BC4 + 2C29424EED905C072F5DD84312E7E8EB + 041B01E0396D6248044C43EC4D8C73B4 + C761D93FA28F469DB276F56798770C34 + 2AEA98487B61A6C7872B1AE56BA4BC4B + DD4FC312CA6B2443068B19C8C9E360C2 + + isa + PBXGroup + name + Support Files + path + ../Target Support Files/Quick + sourceTree + <group> + + 170BDE2821810FFFF8F653EAB8273DC3 + + explicitFileType + wrapper.cfbundle + includeInIndex + 0 + isa + PBXFileReference + name + Chirp.bundle + path + Chirp.bundle + sourceTree + BUILT_PRODUCTS_DIR + + 18F424BE2F93BD71CB0C57335503A9E7 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + NMBObjCMatcher.swift + path + Sources/Nimble/Adapters/ObjectiveC/NMBObjCMatcher.swift + sourceTree + <group> + + 191D88768D9F688118E26454E4245F71 + + fileRef + D19627B4132C429EC833FF08BC9E3958 + isa + PBXBuildFile + + 19B351BE93B31CB2CCF81673D135760B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + String+FileName.swift + path + Sources/Quick/String+FileName.swift + sourceTree + <group> + + 19E8E8F91047DD8BFFC1179F968AFEFC + + fileRef + EAC5DC986655D8A1F5CB4A7C149ECF2F + isa + PBXBuildFile + + 1A506AD707244ECC9DDCB3EAD225E5F4 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.plist.xml + path + Pods-Chirp_Example-acknowledgements.plist + sourceTree + <group> + + 1B3023BBC173E83D0F79A6917B12F26B + + explicitFileType + wrapper.framework + includeInIndex + 0 + isa + PBXFileReference + name + Chirp.framework + path + Chirp.framework + sourceTree + BUILT_PRODUCTS_DIR + + 1C168EBF584B4F05BBE6D606FA0590A6 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.script.sh + path + Pods-Chirp_Example-frameworks.sh + sourceTree + <group> + + 1DDC3CB54F6A90687CF044481BFAC6BE + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text + path + Pods-Chirp_Tests-acknowledgements.markdown + sourceTree + <group> + + 1E77526043F11ADF0ABD8DEC93CE1D2E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NSString+QCKSelectorName.h + path + Sources/Quick/NSString+QCKSelectorName.h + sourceTree + <group> + + 1EAA94CE67393EAEBE4E454E3B0CF8A6 + + fileRef + 2B059F89FEC9F56369D37CEB65B9CA5B + isa + PBXBuildFile + + 1ECD9B3379938F36B9E56DF47348A110 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + DSL.h + path + Sources/Nimble/Adapters/ObjectiveC/DSL.h + sourceTree + <group> + + 20EBA3A37548C53AB3EEC8CC6CAF4349 + + fileRef + 7C3BF501E99F19F26CC197A6CF1E4246 + isa + PBXBuildFile + + 21C991F0436A1E09061FE9E79FE1204E + + fileRef + 8F158BB020436A2DE5CAF6FA6F0E3025 + isa + PBXBuildFile + + 232BF4061DB9B18C1090558DD616F5A0 + + fileRef + D721FF95101BF27415747350F49B7D46 + isa + PBXBuildFile + + 23A3FF988CB0B80F04DB9CC7FD01C78E + + buildConfigurations + + BF3C20E1C22AA3C45B78957975192B79 + CC87D014B67C6ACD0E95E1F5A09AE4ED + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 25AB30B08A311789AF140D0207053994 + + fileRef + 18F424BE2F93BD71CB0C57335503A9E7 + isa + PBXBuildFile + + 273AFC96EA4846DC45F6FEFAFCCD2AFB + + fileRef + F512682B0BD4C9172D7F91743132300D + isa + PBXBuildFile + settings + + ATTRIBUTES + + Project + + + + 278C692617A28D2461916DE81B79B62D + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + BeAKindOf.swift + path + Sources/Nimble/Matchers/BeAKindOf.swift + sourceTree + <group> + + 279AA6492631DEFA8C439A9C088EEB8A + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + XCTest.framework + path + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/XCTest.framework + sourceTree + DEVELOPER_DIR + + 280267E9F20EB03944791689F809C051 + + fileRef + B592A1D758960C300935692D84CBDACC + isa + PBXBuildFile + + 29ABFCB4C1382ADAD2483B16B97E642F + + fileRef + 6B55710418D76C9273751B3D754EC54E + isa + PBXBuildFile + settings + + ATTRIBUTES + + Public + + + + 29FA9ED95400E6B0CF2684EB54CB9334 + + buildConfigurationList + 6DAA3D986680461CB21A2F87EC5A66D6 + buildPhases + + 759A121E03678411807B431649F99856 + E1454083EE97F200DF906735D77D4A5B + C50C4EACDDA2F38FB9B296715DF18789 + + buildRules + + dependencies + + 7D49AD02B13B824A898862C667630CE0 + + isa + PBXNativeTarget + name + Pods-Chirp_Example + productName + Pods-Chirp_Example + productReference + F6C2CA3F29A11A3CA24693684C280A35 + productType + com.apple.product-type.framework + + 2AEA98487B61A6C7872B1AE56BA4BC4B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Quick-prefix.pch + sourceTree + <group> + + 2B059F89FEC9F56369D37CEB65B9CA5B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + PostNotification.swift + path + Sources/Nimble/Matchers/PostNotification.swift + sourceTree + <group> + + 2C29424EED905C072F5DD84312E7E8EB + + includeInIndex + 1 + isa + PBXFileReference + path + Quick.modulemap + sourceTree + <group> + + 2C4F0A21F26A6638140F2BBBA6A0ADA7 + + fileRef + 9B7895911C8449A43CE9C8E0D3638762 + isa + PBXBuildFile + + 2C81E2A5C0162EC89B2CD508C76F9D82 + + fileRef + 67AAF1B4146C70FE12D0180CFF33A7EF + isa + PBXBuildFile + + 2CC90B0C5391BA5C7C90377E28308DBB + + children + + 962C40C8C6FD336FADD6AAE51235B58C + DC2C9289CC730847F23BA922FFB13D7B + 1DDC3CB54F6A90687CF044481BFAC6BE + 37A473CAA6B7043A0BF2868A15D109EC + F43DF0F136DBD2A566C0B08DA3322D49 + 3472E223FCFF3134A95136CBF1A6EE3A + 2F7E632096EBB5E0931B4F3E1926165A + CC9D4B64F9B5EF312F80B146359316B9 + AA10E73A1A1A18A27DD11CDB40F0E4A5 + CB4849FC0E886B8F1D967410F57639BA + + isa + PBXGroup + name + Pods-Chirp_Tests + path + Target Support Files/Pods-Chirp_Tests + sourceTree + <group> + + 2D8C3ED6109EE35ADB0418461443D83A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + Async.swift + path + Sources/Nimble/Utils/Async.swift + sourceTree + <group> + + 2D8E8EC45A3A1A1D94AE762CB5028504 + + buildConfigurations + + 552D02D5BA751AC2E8790D2811D496CA + 10DE1947DAC0ED28F6C0A9F9BD75D546 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 2E814FDCF8B930B0ADCDE31916D3955F + + isa + PBXTargetDependency + name + Nimble + target + 4FA852B36637F5FBFB642C28D8B6C6BC + targetProxy + 1430425B9BFEC0461C205C8F926B27A4 + + 2F7E632096EBB5E0931B4F3E1926165A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.script.sh + path + Pods-Chirp_Tests-resources.sh + sourceTree + <group> + + 307CCA57F8C8E7BC85A99F8D82792029 + + fileRef + 077B19ED216F02288546F6D507B16DF7 + isa + PBXBuildFile + + 314A0B4253B4D606B6A53B9265AD4526 + + fileRef + D9F55DE602829CAA6ED19AB94156C293 + isa + PBXBuildFile + + 31BC59BE44B402A3B833D6A1F861D515 + + fileRef + E351727CD07BB90B2A3CAE2C2433F6C5 + isa + PBXBuildFile + + 334F8D3D47706C237ECDFFF39460B911 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NMBExceptionCapture.h + path + Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.h + sourceTree + <group> + + 33539A245113CC20C6057C876B0F43CD + + fileRef + D5BF9027B54BCA345FC3CD3FD0E5EC84 + isa + PBXBuildFile + + 3472E223FCFF3134A95136CBF1A6EE3A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.script.sh + path + Pods-Chirp_Tests-frameworks.sh + sourceTree + <group> + + 347F839DEFD3C6E170BE2F32FFE51BC4 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.plist.xml + path + Info.plist + sourceTree + <group> + + 348E1D84250C61E37B641E2AE83366FE + + fileRef + B0721C0BFDEA64385968E25E0A226452 + isa + PBXBuildFile + + 35375BD11DA9BB80FC6EA03A29F95782 + + fileRef + 3FB0BFFBF91DBB62D328145990493D6F + isa + PBXBuildFile + + 36ADB08168319308B642A1E248ED55CD + + fileRef + CC9D4B64F9B5EF312F80B146359316B9 + isa + PBXBuildFile + settings + + ATTRIBUTES + + Public + + + + 37A473CAA6B7043A0BF2868A15D109EC + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.plist.xml + path + Pods-Chirp_Tests-acknowledgements.plist + sourceTree + <group> + + 37EB0F2A72FFE6B035BBE73DBBA5A0D8 + + buildActionMask + 2147483647 + files + + 4838233F873DE3084BFD494C8EC3BF6E + 0D9EB6A683FD0CE2AB32D16E4223CD3F + 21C991F0436A1E09061FE9E79FE1204E + FAF9B9507FC660623DA6564F131D72A6 + AE6B08F02142CF0AFD76CBFB28DED2B7 + 6245A5228FA8FFABFF1F319FB972EF8D + A3FC6941B02E0EA2FB0142487E9F7F8A + E4E77A666B65A3F2CDB36891F8C18D10 + 6BD5771C9ADB428CEE0AA55708E8E827 + 55115804F58F41591AB08020A62F3FA7 + 5FCF7CCBF1A9021848E2F474C7A0F41F + 8D59F7E21143914411A6CE14B67D7008 + 33539A245113CC20C6057C876B0F43CD + E380AF912DAFFF9EECD7506A5272F649 + 54A534B7366430C02225DA5C69F06FF9 + C185C3AA3E4394A8B335EFC5CF30405D + 4F478B7E5936B3C0B7BE2E2CD767ED03 + C7A90C7497EA255F10CCD0CB4B1CEACD + D697CB7CE56A55A2DFC62BD0CD59C242 + 78F5C9BEC6A2917E9203F31113526007 + F3B4FA18209931D388B7A3F0B69F0C17 + 280267E9F20EB03944791689F809C051 + A96A9D18611B80A10DCC16E6A39096CB + CAA69891EEDDE642B1DF0A6F8F3CFFC4 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 3A00268FF52F974D115D486974BD81C3 + + buildActionMask + 2147483647 + files + + DFB314D1E613EDC7C82A474CBF2AD752 + 348E1D84250C61E37B641E2AE83366FE + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 3B006003CAC6E14BDBD20619C2DAAF89 + + fileRef + 7438700F3B6F94A4F66A46B7607E6BCD + isa + PBXBuildFile + + 3B51E460492575828C5C2CDDC563F428 + + containerPortal + D41D8CD98F00B204E9800998ECF8427E + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 0435B780B17A7A610BC562E4104531B8 + remoteInfo + Chirp + + 3B6CD83F01DCBB68813434BDF65AD321 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + Functional.swift + path + Sources/Nimble/Utils/Functional.swift + sourceTree + <group> + + 3C32D47CE6AE1352683960263F34BCD5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Chirp-dummy.m + sourceTree + <group> + + 3C8CB6305F5E8DEF2C366AB0A320B325 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + BeVoid.swift + path + Sources/Nimble/Matchers/BeVoid.swift + sourceTree + <group> + + 3E07415049C7B244A3483A24AA9F3762 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Chirp-umbrella.h + sourceTree + <group> + + 3EAA0B2BAC0E5D254A86DA186CE1CECC + + buildConfigurations + + 791C9E4396CA657351F028E83390EB88 + 4EDEB3D4FA67600E2F4F3D0FC3478D74 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 3FB0BFFBF91DBB62D328145990493D6F + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + AssertionDispatcher.swift + path + Sources/Nimble/Adapters/AssertionDispatcher.swift + sourceTree + <group> + + 3FEABA8853D57815778E11B6E44164E2 + + fileRef + 0A1543178822915E460CA4F0546DF9C9 + isa + PBXBuildFile + + 401A337DA1FB1C62E799AD80891EA4FB + + buildActionMask + 2147483647 + files + + F48910247CE414A86EBF5AF7BE0EF6D4 + + isa + PBXResourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 403A842A4BEA82759555932E64AB7FED + + fileRef + 88B39C18E753642428C924D3F40FCFD7 + isa + PBXBuildFile + + 40ABF2D758D86698977C4B7049DFD5E5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + BeNil.swift + path + Sources/Nimble/Matchers/BeNil.swift + sourceTree + <group> + + 40E78A56A520697E9E6DCEB285FFD9AC + + fileRef + B4D4E25C7FCF36777B1BE7D5B468F082 + isa + PBXBuildFile + settings + + ATTRIBUTES + + Public + + + + 4234BBA2AC372FD718DFF16C80D7E135 + + buildActionMask + 2147483647 + files + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 42E45F8E8C4E0516AB45EEC9C4870DD6 + + fileRef + 8F6376337E587A7FD2825770DA3A23D6 + isa + PBXBuildFile + settings + + ATTRIBUTES + + Public + + + + 433CD3331B6C3787F473C941B61FC68F + + children + + 0C6B012983F9FEF8CC65C1318F5F090C + + isa + PBXGroup + name + Frameworks + sourceTree + <group> + + 46EF1DE0144C5CBF5A62DDF10E1937BA + + buildActionMask + 2147483647 + files + + 5F2FBFD865A814846CEC5C74437134DA + B2C1EE06779F87ECFB1575347FF45928 + 35375BD11DA9BB80FC6EA03A29F95782 + 20EBA3A37548C53AB3EEC8CC6CAF4349 + B315B7404E59FBA741EF99EA4AE15B15 + 314A0B4253B4D606B6A53B9265AD4526 + EC4E6809F2A080539CB93A3490FAC951 + 2C81E2A5C0162EC89B2CD508C76F9D82 + 232BF4061DB9B18C1090558DD616F5A0 + D3B53C516FECE8973FCEB5321751FABA + 11C4436BC41A7EAB099B9507D57D9235 + D31F972E062CAC0A72D57896C456ADD2 + 19E8E8F91047DD8BFFC1179F968AFEFC + 4EF365812293BC9E425847B23286AA15 + 4FFD6830BC7670251E3DF4277CE66F33 + 54EC1109310747C798344547B265D42C + 403A842A4BEA82759555932E64AB7FED + 8E70A39BD76B21F34B9D70C9496F44E8 + AF3ADD7EF1B998C9674377583EBCD82B + 51253CE5C10A80DFB6671F22024B2251 + 9C306EB24EE17CDF8B9C6CE2B6E9F3FE + 3B006003CAC6E14BDBD20619C2DAAF89 + DD7921B3AF923AC4D2479A334C73ADF5 + FDC0BD42FC07FED3E20788F3B3C730A7 + 2C4F0A21F26A6638140F2BBBA6A0ADA7 + 8900D5810E0B8B61EB79A6AED20F23A7 + 6B38CA2278F7067E55EF0D8B4AB3AD28 + FD6BC22FF3630A6079EBA47D6F71F728 + 1492927335C976B1D0F127454C3C510C + CCAB84E49894A19F4BD3FE38341DC44D + 8EB5CB562A6FAF17D11C0A6709BD8162 + 00A2B44E76415C42EF2AAC8751CF868D + 191D88768D9F688118E26454E4245F71 + 96D9D80CFE0EDBAD59860FFD577E473E + C063808F9FF23D42364D03642FFF53C5 + 53D397C29F207C8A39BB738F48CA46E8 + 9627FE0ECCBC348113D55E0E8B3BBAB4 + EF114BCD0F38330DD45828958ADD3FE0 + B9D22E5ECFB791ADE90FADC3B6D7308D + 6BE59EEFFB77C3ADE8671992191A75B0 + 4FB9D17D03D2832453E948C88D18F806 + 25AB30B08A311789AF140D0207053994 + 307CCA57F8C8E7BC85A99F8D82792029 + 1EAA94CE67393EAEBE4E454E3B0CF8A6 + 631F82DD911442A614CFA6F0ACDACA2B + F14BD45D78BCBAA4EFDA0334C94DF298 + 3FEABA8853D57815778E11B6E44164E2 + C0C64EC5B9C558581E8EE40054857EDA + 0F8BAFED5C2A457DB203D317D3B270B7 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 46F5FF867B147465116CE447B59B1355 + + children + + 060C632DAEE81B623F290540C8E1695E + 6BF6BD15BF92F7905EBA5FCCDD60367F + + isa + PBXGroup + name + Chirp + path + ../.. + sourceTree + <group> + + 47F124C5F3B880D5BECAFB535C4E9823 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-Chirp_Example-umbrella.h + sourceTree + <group> + + 482DEB1F4FE66688D86639D749507A33 + + buildConfigurations + + 9E5E8D6DA1B4D7A0A344ED32446A6880 + CF14F9FF0EF57CE072113A02F769921E + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 4838233F873DE3084BFD494C8EC3BF6E + + fileRef + BA8540158DB99ECC95BC0BFF14A90B03 + isa + PBXBuildFile + + 4AFD16B209AD115446B6D0184DAA3175 + + baseConfigurationReference + B8182BF7B8B80091D8DEE980BA686817 + 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/Chirp/Chirp-prefix.pch + INFOPLIST_FILE + Target Support Files/Chirp/Info.plist + INSTALL_PATH + $(LOCAL_LIBRARY_DIR)/Frameworks + IPHONEOS_DEPLOYMENT_TARGET + 8.3 + LD_RUNPATH_SEARCH_PATHS + + $(inherited) + @executable_path/Frameworks + @loader_path/Frameworks + + MODULEMAP_FILE + Target Support Files/Chirp/Chirp.modulemap + MTL_ENABLE_DEBUG_INFO + NO + PRODUCT_NAME + Chirp + SDKROOT + iphoneos + SKIP_INSTALL + YES + TARGETED_DEVICE_FAMILY + 1,2 + VERSIONING_SYSTEM + apple-generic + VERSION_INFO_PREFIX + + + isa + XCBuildConfiguration + name + Release + + 4EDEB3D4FA67600E2F4F3D0FC3478D74 + + baseConfigurationReference + CB4849FC0E886B8F1D967410F57639BA + 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-Chirp_Tests/Info.plist + INSTALL_PATH + $(LOCAL_LIBRARY_DIR)/Frameworks + IPHONEOS_DEPLOYMENT_TARGET + 8.3 + LD_RUNPATH_SEARCH_PATHS + + $(inherited) + @executable_path/Frameworks + @loader_path/Frameworks + + MACH_O_TYPE + staticlib + MODULEMAP_FILE + Target Support Files/Pods-Chirp_Tests/Pods-Chirp_Tests.modulemap + MTL_ENABLE_DEBUG_INFO + NO + OTHER_LDFLAGS + + OTHER_LIBTOOLFLAGS + + PODS_ROOT + $(SRCROOT) + PRODUCT_NAME + Pods_Chirp_Tests + SDKROOT + iphoneos + SKIP_INSTALL + YES + TARGETED_DEVICE_FAMILY + 1,2 + VERSIONING_SYSTEM + apple-generic + VERSION_INFO_PREFIX + + + isa + XCBuildConfiguration + name + Release + + 4EF365812293BC9E425847B23286AA15 + + fileRef + 71C20EACB9DB0CD33F7DFD4C48101CD8 + isa + PBXBuildFile + + 4F478B7E5936B3C0B7BE2E2CD767ED03 + + fileRef + 8B04632D6632788332B697D018C5DD60 + isa + PBXBuildFile + + 4FA852B36637F5FBFB642C28D8B6C6BC + + buildConfigurationList + 23A3FF988CB0B80F04DB9CC7FD01C78E + buildPhases + + 46EF1DE0144C5CBF5A62DDF10E1937BA + 1136EF0265ED2C9CDCD843453470CBE6 + 0DF9659479BF1BDF735E7FBC0E4B56BD + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Nimble + productName + Nimble + productReference + B0A48A4BA8B87CD92D3790BEE3943058 + productType + com.apple.product-type.framework + + 4FB9D17D03D2832453E948C88D18F806 + + fileRef + BF2734840C918B05A12CE85A1868E57E + isa + PBXBuildFile + + 4FFD6830BC7670251E3DF4277CE66F33 + + fileRef + F08AC40385E2823282726F24592B8920 + isa + PBXBuildFile + + 51253CE5C10A80DFB6671F22024B2251 + + fileRef + DAE89AE52209C28E11B382811AED0A10 + isa + PBXBuildFile + + 5140C3AE3481694C4D2B73054570D9BE + + containerPortal + D41D8CD98F00B204E9800998ECF8427E + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + AE4C9880DA936780135AFC0791E15D25 + remoteInfo + Quick + + 52C908177CFC61716B8A5578A17936F0 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text + path + Pods-Chirp_Example-acknowledgements.markdown + sourceTree + <group> + + 53D397C29F207C8A39BB738F48CA46E8 + + fileRef + FCF5D69E28D8D83E453565A28D88B350 + isa + PBXBuildFile + + 545E4C7B644646540DCE347796026AA3 + + children + + CF54C234436827142B58ABAD8A7FBC4D + 2CC90B0C5391BA5C7C90377E28308DBB + + isa + PBXGroup + name + Targets Support Files + sourceTree + <group> + + 54A534B7366430C02225DA5C69F06FF9 + + fileRef + C761D93FA28F469DB276F56798770C34 + isa + PBXBuildFile + + 54EC1109310747C798344547B265D42C + + fileRef + EC1C65B167AA6A4EEEE1BC2FED109B44 + isa + PBXBuildFile + + 55115804F58F41591AB08020A62F3FA7 + + fileRef + 8498E04E1979BECEB001BD0875DEF4EC + isa + PBXBuildFile + + 552D02D5BA751AC2E8790D2811D496CA + + 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 + NO + GCC_C_LANGUAGE_STANDARD + gnu99 + GCC_DYNAMIC_NO_PIC + NO + GCC_OPTIMIZATION_LEVEL + 0 + GCC_PREPROCESSOR_DEFINITIONS + + DEBUG=1 + $(inherited) + + GCC_SYMBOLS_PRIVATE_EXTERN + NO + 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.3 + ONLY_ACTIVE_ARCH + YES + STRIP_INSTALLED_PRODUCT + NO + SYMROOT + ${SRCROOT}/../build + + isa + XCBuildConfiguration + name + Debug + + 559A4F124A60124F67D8E85253E29790 + + buildConfigurationList + 482DEB1F4FE66688D86639D749507A33 + buildPhases + + 4234BBA2AC372FD718DFF16C80D7E135 + 9FD6A3B3E894F3913B6F998BD9674A60 + E866DC771D3A562B6FC0BDD2A02E9DF2 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Chirp-Chirp + productName + Chirp-Chirp + productReference + 170BDE2821810FFFF8F653EAB8273DC3 + productType + com.apple.product-type.bundle + + 5684EF4AED7A6D0A84665D4B343EB60A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Nimble-umbrella.h + sourceTree + <group> + + 5698A2D90AE161B5790CE5B58BF41F47 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Chirp_Example.release.xcconfig + sourceTree + <group> + + 5A9991D0148015292FB1894ED71124D5 + + buildConfigurationList + 3EAA0B2BAC0E5D254A86DA186CE1CECC + buildPhases + + AE860E9FFDC8265351A198E106BD9D68 + 07A40EBBC8E705FDFAA966E8AB4C36CF + E8C8A8F029ED942CBFA9896CC8873EC1 + + buildRules + + dependencies + + 99F493677584D9EA7521546D00C4323F + 2E814FDCF8B930B0ADCDE31916D3955F + E55ED82E68CABF716EA45C2FFCEE612C + + isa + PBXNativeTarget + name + Pods-Chirp_Tests + productName + Pods-Chirp_Tests + productReference + 825D7B65E453145EBEC4A43C4A47A23A + productType + com.apple.product-type.framework + + 5BAB1335CE596E082318F53614A268B3 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + QuickTestSuite.swift + path + Sources/Quick/QuickTestSuite.swift + sourceTree + <group> + + 5C374A402A2DBCE7C46AAF19F63DFE3D + + containerPortal + D41D8CD98F00B204E9800998ECF8427E + isa + PBXContainerItemProxy + proxyType + 1 + remoteGlobalIDString + 0435B780B17A7A610BC562E4104531B8 + remoteInfo + Chirp + + 5F2FBFD865A814846CEC5C74437134DA + + fileRef + FF86C934F2B9044B574486EE4836F4EB + isa + PBXBuildFile + + 5FCF7CCBF1A9021848E2F474C7A0F41F + + fileRef + 05DA0A769E4C04ECD6FFD632708AF1FE + isa + PBXBuildFile + + 605D714F77EB699C5D062588E9FEEC9C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + ExampleMetadata.swift + path + Sources/Quick/ExampleMetadata.swift + sourceTree + <group> + + 6245A5228FA8FFABFF1F319FB972EF8D + + fileRef + ED69E3B1F44B618B75BC6661BF48BD39 + isa + PBXBuildFile + + 6250E95EA7EEE983E5F5EE3A9CB93B20 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + HaveCount.swift + path + Sources/Nimble/Matchers/HaveCount.swift + sourceTree + <group> + + 631F82DD911442A614CFA6F0ACDACA2B + + fileRef + 7155D5675C0A4777944C97AA488D9439 + isa + PBXBuildFile + + 644A7EE8C06524CDD9A51903009418C1 + + includeInIndex + 1 + isa + PBXFileReference + path + Nimble.modulemap + sourceTree + <group> + + 64DD0BA68F5443DC03D1E9DA570588AC + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + ExampleGroup.swift + path + Sources/Quick/ExampleGroup.swift + sourceTree + <group> + + 67AAF1B4146C70FE12D0180CFF33A7EF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + BeAnInstanceOf.swift + path + Sources/Nimble/Matchers/BeAnInstanceOf.swift + sourceTree + <group> + + 698D887E14F069B6D4A6298F204E6861 + + fileRef + E351727CD07BB90B2A3CAE2C2433F6C5 + isa + PBXBuildFile + + 69D0B2BF3492F2DE0936AD1C9E8D64F4 + + fileRef + 7DF329D4C9B0C03BE9E1CE150E9E0A95 + isa + PBXBuildFile + settings + + ATTRIBUTES + + Public + + + + 6A0F5FCD9F2CE74E4BE18D1F39DC894D + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + BeginWith.swift + path + Sources/Nimble/Matchers/BeginWith.swift + sourceTree + <group> + + 6B38CA2278F7067E55EF0D8B4AB3AD28 + + fileRef + FDA1F3A6045AE7EDDFAE426A8F8DF693 + isa + PBXBuildFile + + 6B55710418D76C9273751B3D754EC54E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + Quick.h + path + Sources/Quick/Quick.h + sourceTree + <group> + + 6BD5771C9ADB428CEE0AA55708E8E827 + + fileRef + 605D714F77EB699C5D062588E9FEEC9C + isa + PBXBuildFile + + 6BE59EEFFB77C3ADE8671992191A75B0 + + fileRef + F1F021FC57B9DAB7938266B14B920AA3 + isa + PBXBuildFile + + 6BF6BD15BF92F7905EBA5FCCDD60367F + + children + + BF4A0BD3FF1881730835440CDFCFBA0B + B8182BF7B8B80091D8DEE980BA686817 + 3C32D47CE6AE1352683960263F34BCD5 + EFC49133C85E8527B382701506740CEF + 3E07415049C7B244A3483A24AA9F3762 + A8165BBB1EE1DFD8507C1FA412A2C7AF + + isa + PBXGroup + name + Support Files + path + Example/Pods/Target Support Files/Chirp + sourceTree + <group> + + 6DAA3D986680461CB21A2F87EC5A66D6 + + buildConfigurations + + B067737D7206609B96CEFF63BC293068 + EDA7413626CB9C41D31654005A21B320 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 6E8B69FD1F2CC64E7BAEC74987868EDA + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + NMBStringify.h + path + Sources/Nimble/Adapters/ObjectiveC/NMBStringify.h + sourceTree + <group> + + 6F237707D8D2385FEC9D3EBF70EBEA87 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + SuiteHooks.swift + path + Sources/Quick/Hooks/SuiteHooks.swift + sourceTree + <group> + + 7155D5675C0A4777944C97AA488D9439 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + RaisesException.swift + path + Sources/Nimble/Matchers/RaisesException.swift + sourceTree + <group> + + 71C20EACB9DB0CD33F7DFD4C48101CD8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + BeIdenticalTo.swift + path + Sources/Nimble/Matchers/BeIdenticalTo.swift + sourceTree + <group> + + 71EF86DFACDAA368456B9796DD0B12CF + + buildActionMask + 2147483647 + files + + 0C41D290BCA32F2CFF6276BF8773A739 + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 7201C4ADFD2EACC61F0B49EC4EBA82CB + + children + + FF86C934F2B9044B574486EE4836F4EB + B2E55F91696B7112BA4E72D2E9443DE4 + 3FB0BFFBF91DBB62D328145990493D6F + 7C3BF501E99F19F26CC197A6CF1E4246 + 2D8C3ED6109EE35ADB0418461443D83A + D9F55DE602829CAA6ED19AB94156C293 + 278C692617A28D2461916DE81B79B62D + 67AAF1B4146C70FE12D0180CFF33A7EF + D721FF95101BF27415747350F49B7D46 + EEB91BD8DE52522D5AC6B6E371ED5827 + 6A0F5FCD9F2CE74E4BE18D1F39DC894D + 0CDF4D0F575F7095DD016CE2601DBD26 + EAC5DC986655D8A1F5CB4A7C149ECF2F + 71C20EACB9DB0CD33F7DFD4C48101CD8 + F08AC40385E2823282726F24592B8920 + EC1C65B167AA6A4EEEE1BC2FED109B44 + 88B39C18E753642428C924D3F40FCFD7 + 40ABF2D758D86698977C4B7049DFD5E5 + 3C8CB6305F5E8DEF2C366AB0A320B325 + DAE89AE52209C28E11B382811AED0A10 + 761F1826D4E6F0D9B809232F68137300 + 1ECD9B3379938F36B9E56DF47348A110 + C3E66A5FB5DC4B06CEC3CE2712C884B3 + 81FF987CE2B8B16137FB58ED1D2DDB57 + 7438700F3B6F94A4F66A46B7607E6BCD + 9B7895911C8449A43CE9C8E0D3638762 + E79DB561D01DB3D3E512756D77C1490B + FDA1F3A6045AE7EDDFAE426A8F8DF693 + CD595B5B80F96DAEB404EAEE934A22B1 + B81685C0B8AC4D5D1210B55AE17DC6CB + 7EA56394F5F532D183816002E6F3F85E + 3B6CD83F01DCBB68813434BDF65AD321 + 6250E95EA7EEE983E5F5EE3A9CB93B20 + D19627B4132C429EC833FF08BC9E3958 + A189D0600DA10ACA6C173EC92B1C8169 + 0FEBA8AD57CC5BDE39609C414DA521B4 + FCF5D69E28D8D83E453565A28D88B350 + B4D4E25C7FCF36777B1BE7D5B468F082 + D147B0BD2365CEC32335115829196D7C + E7F12CB4AC8D60A6645673024296A8A6 + 334F8D3D47706C237ECDFFF39460B911 + F1F021FC57B9DAB7938266B14B920AA3 + BF2734840C918B05A12CE85A1868E57E + 18F424BE2F93BD71CB0C57335503A9E7 + 6E8B69FD1F2CC64E7BAEC74987868EDA + 077B19ED216F02288546F6D507B16DF7 + 2B059F89FEC9F56369D37CEB65B9CA5B + 7155D5675C0A4777944C97AA488D9439 + D09E0F2C1B77255A16FFE7D9FB0BCB21 + 0A1543178822915E460CA4F0546DF9C9 + FFBBA0B6E48D492E09A0EFB9FDEEB923 + D3858FBA4C2D4AD6D6A31DBF85E032C5 + 8E2C74EE0D4D8B6FC1FAA860B6AF4BF6 + + isa + PBXGroup + name + Nimble + path + Nimble + sourceTree + <group> + + 7438700F3B6F94A4F66A46B7607E6BCD + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + DSL+Wait.swift + path + Sources/Nimble/DSL+Wait.swift + sourceTree + <group> + + 753CF489C0B6BDEB523F32E323CB9D8E + + buildActionMask + 2147483647 + files + + 698D887E14F069B6D4A6298F204E6861 + F1888D00F040D76B467386EBCBB90ECB + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 759A121E03678411807B431649F99856 + + buildActionMask + 2147483647 + files + + D68A544D8420A1A20875F8A41D9009E9 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 761F1826D4E6F0D9B809232F68137300 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + CurrentTestCaseTracker.m + path + Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.m + sourceTree + <group> + + 78F5C9BEC6A2917E9203F31113526007 + + fileRef + 19B351BE93B31CB2CCF81673D135760B + isa + PBXBuildFile + + 791C9E4396CA657351F028E83390EB88 + + baseConfigurationReference + AA10E73A1A1A18A27DD11CDB40F0E4A5 + 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-Chirp_Tests/Info.plist + INSTALL_PATH + $(LOCAL_LIBRARY_DIR)/Frameworks + IPHONEOS_DEPLOYMENT_TARGET + 8.3 + LD_RUNPATH_SEARCH_PATHS + + $(inherited) + @executable_path/Frameworks + @loader_path/Frameworks + + MACH_O_TYPE + staticlib + MODULEMAP_FILE + Target Support Files/Pods-Chirp_Tests/Pods-Chirp_Tests.modulemap + MTL_ENABLE_DEBUG_INFO + YES + OTHER_LDFLAGS + + OTHER_LIBTOOLFLAGS + + PODS_ROOT + $(SRCROOT) + PRODUCT_NAME + Pods_Chirp_Tests + SDKROOT + iphoneos + SKIP_INSTALL + YES + SWIFT_OPTIMIZATION_LEVEL + -Onone + TARGETED_DEVICE_FAMILY + 1,2 + VERSIONING_SYSTEM + apple-generic + VERSION_INFO_PREFIX + + + isa + XCBuildConfiguration + name + Debug + + 7C3BF501E99F19F26CC197A6CF1E4246 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + AssertionRecorder.swift + path + Sources/Nimble/Adapters/AssertionRecorder.swift + sourceTree + <group> + + 7D49AD02B13B824A898862C667630CE0 + + isa + PBXTargetDependency + name + Chirp + target + 0435B780B17A7A610BC562E4104531B8 + targetProxy + 5C374A402A2DBCE7C46AAF19F63DFE3D + + 7DB346D0F39D3F0E887471402A8071AB + + children + + BA6428E9F66FD5A23C0A2E06ED26CD2F + C36487BB2C093603449C46F4F476DE02 + 433CD3331B6C3787F473C941B61FC68F + 08D93098E2A8B7DB9B9E0D2C45BFAC52 + 8794728D2749985FD917DC470A7BA4C0 + 545E4C7B644646540DCE347796026AA3 + + isa + PBXGroup + sourceTree + <group> + + 7DF329D4C9B0C03BE9E1CE150E9E0A95 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + QuickConfiguration.h + path + Sources/Quick/Configuration/QuickConfiguration.h + sourceTree + <group> + + 7EA56394F5F532D183816002E6F3F85E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + FailureMessage.swift + path + Sources/Nimble/FailureMessage.swift + sourceTree + <group> + + 81FF987CE2B8B16137FB58ED1D2DDB57 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + DSL.swift + path + Sources/Nimble/DSL.swift + sourceTree + <group> + + 823F5D77C96216A1850B11C704852C92 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + World.h + path + Sources/Quick/World.h + sourceTree + <group> + + 825D7B65E453145EBEC4A43C4A47A23A + + explicitFileType + wrapper.framework + includeInIndex + 0 + isa + PBXFileReference + name + Pods_Chirp_Tests.framework + path + Pods_Chirp_Tests.framework + sourceTree + BUILT_PRODUCTS_DIR + + 828B6126488A4A3A8EEE3203DA9E6E3E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Nimble-dummy.m + sourceTree + <group> + + 8498E04E1979BECEB001BD0875DEF4EC + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + Filter.swift + path + Sources/Quick/Filter.swift + sourceTree + <group> + + 85702A2C1F8B83CAF99B7055208C0DB7 + + fileRef + E351727CD07BB90B2A3CAE2C2433F6C5 + isa + PBXBuildFile + + 8794728D2749985FD917DC470A7BA4C0 + + children + + 170BDE2821810FFFF8F653EAB8273DC3 + 1B3023BBC173E83D0F79A6917B12F26B + B0A48A4BA8B87CD92D3790BEE3943058 + F6C2CA3F29A11A3CA24693684C280A35 + 825D7B65E453145EBEC4A43C4A47A23A + CC441E7B2F9F623B1A07A52455CFB4CA + + isa + PBXGroup + name + Products + sourceTree + <group> + + 88B39C18E753642428C924D3F40FCFD7 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + BeLogical.swift + path + Sources/Nimble/Matchers/BeLogical.swift + sourceTree + <group> + + 8900D5810E0B8B61EB79A6AED20F23A7 + + fileRef + E79DB561D01DB3D3E512756D77C1490B + isa + PBXBuildFile + + 8A5CCB08C927B6029144EA30171B111E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + Closures.swift + path + Sources/Quick/Hooks/Closures.swift + sourceTree + <group> + + 8B04632D6632788332B697D018C5DD60 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + QuickSelectedTestSuiteBuilder.swift + path + Sources/Quick/QuickSelectedTestSuiteBuilder.swift + sourceTree + <group> + + 8D59F7E21143914411A6CE14B67D7008 + + fileRef + CF7EF7A75EBA355C333735FD8B06311E + isa + PBXBuildFile + + 8E2C74EE0D4D8B6FC1FAA860B6AF4BF6 + + children + + 123BF1874AC58B16BFE4DB6FCB3C09B0 + 644A7EE8C06524CDD9A51903009418C1 + D579FD5640905214B924E9E2C4E59B04 + 828B6126488A4A3A8EEE3203DA9E6E3E + B5DD320956E276800C14377128136EDF + 5684EF4AED7A6D0A84665D4B343EB60A + + isa + PBXGroup + name + Support Files + path + ../Target Support Files/Nimble + sourceTree + <group> + + 8E70A39BD76B21F34B9D70C9496F44E8 + + fileRef + 40ABF2D758D86698977C4B7049DFD5E5 + isa + PBXBuildFile + + 8EB5CB562A6FAF17D11C0A6709BD8162 + + fileRef + 3B6CD83F01DCBB68813434BDF65AD321 + isa + PBXBuildFile + + 8F158BB020436A2DE5CAF6FA6F0E3025 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + Configuration.swift + path + Sources/Quick/Configuration/Configuration.swift + sourceTree + <group> + + 8F6376337E587A7FD2825770DA3A23D6 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + QuickSpec.h + path + Sources/Quick/QuickSpec.h + sourceTree + <group> + + 9361B1333B29E4F46E87E7F9B1E7A63E + + buildConfigurations + + E661BB4E14C6ACE0EB2CD5F150584290 + 4AFD16B209AD115446B6D0184DAA3175 + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + 9627FE0ECCBC348113D55E0E8B3BBAB4 + + fileRef + 828B6126488A4A3A8EEE3203DA9E6E3E + isa + PBXBuildFile + + 962C40C8C6FD336FADD6AAE51235B58C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.plist.xml + path + Info.plist + sourceTree + <group> + + 9665434B4EE8CC5267AF907A469795D4 + + buildActionMask + 2147483647 + files + + E49C62A60D28CDADE01AC78FD0A6FDDB + 9AE73E4EA20B158163CE4C11E595E49B + CE3F911A490411EE0F9D0FE2D47A3804 + 29ABFCB4C1382ADAD2483B16B97E642F + 69D0B2BF3492F2DE0936AD1C9E8D64F4 + 42E45F8E8C4E0516AB45EEC9C4870DD6 + 273AFC96EA4846DC45F6FEFAFCCD2AFB + D4691EE554CC56008BBA3CE140DE8C5A + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + 96D9D80CFE0EDBAD59860FFD577E473E + + fileRef + A189D0600DA10ACA6C173EC92B1C8169 + isa + PBXBuildFile + + 97A7C99688589E56C79A4B7EBB7FEF8D + + baseConfigurationReference + 041B01E0396D6248044C43EC4D8C73B4 + 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/Quick/Quick-prefix.pch + INFOPLIST_FILE + Target Support Files/Quick/Info.plist + INSTALL_PATH + $(LOCAL_LIBRARY_DIR)/Frameworks + IPHONEOS_DEPLOYMENT_TARGET + 8.3 + LD_RUNPATH_SEARCH_PATHS + + $(inherited) + @executable_path/Frameworks + @loader_path/Frameworks + + MODULEMAP_FILE + Target Support Files/Quick/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 + + + isa + XCBuildConfiguration + name + Release + + 9849CC70EE76C7FD6FB071AE7BD16597 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + QCKDSL.h + path + Sources/Quick/DSL/QCKDSL.h + sourceTree + <group> + + 99F493677584D9EA7521546D00C4323F + + isa + PBXTargetDependency + name + Chirp + target + 0435B780B17A7A610BC562E4104531B8 + targetProxy + 3B51E460492575828C5C2CDDC563F428 + + 9AE73E4EA20B158163CE4C11E595E49B + + fileRef + 9849CC70EE76C7FD6FB071AE7BD16597 + isa + PBXBuildFile + settings + + ATTRIBUTES + + Public + + + + 9B7895911C8449A43CE9C8E0D3638762 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + EndWith.swift + path + Sources/Nimble/Matchers/EndWith.swift + sourceTree + <group> + + 9C306EB24EE17CDF8B9C6CE2B6E9F3FE + + fileRef + 761F1826D4E6F0D9B809232F68137300 + isa + PBXBuildFile + + 9E5E8D6DA1B4D7A0A344ED32446A6880 + + baseConfigurationReference + B8182BF7B8B80091D8DEE980BA686817 + buildSettings + + ENABLE_STRICT_OBJC_MSGSEND + YES + PRODUCT_NAME + Chirp + SDKROOT + iphoneos + SKIP_INSTALL + YES + WRAPPER_EXTENSION + bundle + + isa + XCBuildConfiguration + name + Debug + + 9FCCC8C24DFB810048EBF4E1351B5D3A + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + ExampleHooks.swift + path + Sources/Quick/Hooks/ExampleHooks.swift + sourceTree + <group> + + 9FD6607324C33A0191F230B4058FD223 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Chirp_Example.debug.xcconfig + sourceTree + <group> + + 9FD6A3B3E894F3913B6F998BD9674A60 + + buildActionMask + 2147483647 + files + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + A189D0600DA10ACA6C173EC92B1C8169 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + MatcherFunc.swift + path + Sources/Nimble/Matchers/MatcherFunc.swift + sourceTree + <group> + + A262A639734243651D20E2013EB0356F + + fileRef + 334F8D3D47706C237ECDFFF39460B911 + isa + PBXBuildFile + settings + + ATTRIBUTES + + Public + + + + A36BA17B11B676B79FAE0DEC754DEEF6 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.script.sh + path + Pods-Chirp_Example-resources.sh + sourceTree + <group> + + A3FC6941B02E0EA2FB0142487E9F7F8A + + fileRef + 64DD0BA68F5443DC03D1E9DA570588AC + isa + PBXBuildFile + + A8165BBB1EE1DFD8507C1FA412A2C7AF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.plist.xml + path + Info.plist + sourceTree + <group> + + A96A9D18611B80A10DCC16E6A39096CB + + fileRef + F3B8FCDCEB26F410FAFDE0EE8DAE94C8 + isa + PBXBuildFile + + AA10E73A1A1A18A27DD11CDB40F0E4A5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Chirp_Tests.debug.xcconfig + sourceTree + <group> + + AB1D0B33481D2F32A53859C398159AB0 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.plist.xml + path + Info.plist + sourceTree + <group> + + AE4C9880DA936780135AFC0791E15D25 + + buildConfigurationList + C04E5D8A0920D53194D0EACFDD25B800 + buildPhases + + 37EB0F2A72FFE6B035BBE73DBBA5A0D8 + 753CF489C0B6BDEB523F32E323CB9D8E + 9665434B4EE8CC5267AF907A469795D4 + + buildRules + + dependencies + + isa + PBXNativeTarget + name + Quick + productName + Quick + productReference + CC441E7B2F9F623B1A07A52455CFB4CA + productType + com.apple.product-type.framework + + AE6B08F02142CF0AFD76CBFB28DED2B7 + + fileRef + 03A5E1C9B21E691F1EEDF840F4D28EDF + isa + PBXBuildFile + + AE860E9FFDC8265351A198E106BD9D68 + + buildActionMask + 2147483647 + files + + C59B6E5E5A1913A29D7F30FB2B85AC84 + + isa + PBXSourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + AF3ADD7EF1B998C9674377583EBCD82B + + fileRef + 3C8CB6305F5E8DEF2C366AB0A320B325 + isa + PBXBuildFile + + B067737D7206609B96CEFF63BC293068 + + baseConfigurationReference + 9FD6607324C33A0191F230B4058FD223 + 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-Chirp_Example/Info.plist + INSTALL_PATH + $(LOCAL_LIBRARY_DIR)/Frameworks + IPHONEOS_DEPLOYMENT_TARGET + 8.3 + LD_RUNPATH_SEARCH_PATHS + + $(inherited) + @executable_path/Frameworks + @loader_path/Frameworks + + MACH_O_TYPE + staticlib + MODULEMAP_FILE + Target Support Files/Pods-Chirp_Example/Pods-Chirp_Example.modulemap + MTL_ENABLE_DEBUG_INFO + YES + OTHER_LDFLAGS + + OTHER_LIBTOOLFLAGS + + PODS_ROOT + $(SRCROOT) + PRODUCT_NAME + Pods_Chirp_Example + SDKROOT + iphoneos + SKIP_INSTALL + YES + SWIFT_OPTIMIZATION_LEVEL + -Onone + TARGETED_DEVICE_FAMILY + 1,2 + VERSIONING_SYSTEM + apple-generic + VERSION_INFO_PREFIX + + + isa + XCBuildConfiguration + name + Debug + + B0721C0BFDEA64385968E25E0A226452 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + path + Chirp.swift + sourceTree + <group> + + B0A48A4BA8B87CD92D3790BEE3943058 + + explicitFileType + wrapper.framework + includeInIndex + 0 + isa + PBXFileReference + name + Nimble.framework + path + Nimble.framework + sourceTree + BUILT_PRODUCTS_DIR + + B14C03FFA5E0110C854DF444F5BE782E + + fileRef + 5684EF4AED7A6D0A84665D4B343EB60A + isa + PBXBuildFile + settings + + ATTRIBUTES + + Public + + + + B2C1EE06779F87ECFB1575347FF45928 + + fileRef + B2E55F91696B7112BA4E72D2E9443DE4 + isa + PBXBuildFile + + B2E55F91696B7112BA4E72D2E9443DE4 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + AllPass.swift + path + Sources/Nimble/Matchers/AllPass.swift + sourceTree + <group> + + B315B7404E59FBA741EF99EA4AE15B15 + + fileRef + 2D8C3ED6109EE35ADB0418461443D83A + isa + PBXBuildFile + + B4D4E25C7FCF36777B1BE7D5B468F082 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + Nimble.h + path + Sources/Nimble/Nimble.h + sourceTree + <group> + + B4FDE815B95EFEF52906D506D28A424D + + includeInIndex + 1 + isa + PBXFileReference + path + Pods-Chirp_Example.modulemap + sourceTree + <group> + + B592A1D758960C300935692D84CBDACC + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + World+DSL.swift + path + Sources/Quick/DSL/World+DSL.swift + sourceTree + <group> + + B5DD320956E276800C14377128136EDF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Nimble-prefix.pch + sourceTree + <group> + + B66C7BD47B40546C751062E7C13ED470 + + baseConfigurationReference + 041B01E0396D6248044C43EC4D8C73B4 + 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/Quick/Quick-prefix.pch + INFOPLIST_FILE + Target Support Files/Quick/Info.plist + INSTALL_PATH + $(LOCAL_LIBRARY_DIR)/Frameworks + IPHONEOS_DEPLOYMENT_TARGET + 8.3 + LD_RUNPATH_SEARCH_PATHS + + $(inherited) + @executable_path/Frameworks + @loader_path/Frameworks + + MODULEMAP_FILE + Target Support Files/Quick/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 + + + isa + XCBuildConfiguration + name + Debug + + B67CADB2CA2C600D8E46A3638F93AD34 + + children + + B0721C0BFDEA64385968E25E0A226452 + + isa + PBXGroup + name + Classes + path + Classes + sourceTree + <group> + + B81685C0B8AC4D5D1210B55AE17DC6CB + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + Expression.swift + path + Sources/Nimble/Expression.swift + sourceTree + <group> + + B8182BF7B8B80091D8DEE980BA686817 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Chirp.xcconfig + sourceTree + <group> + + B8ECE8E0DFB6670563123030758468D3 + + fileRef + 6E8B69FD1F2CC64E7BAEC74987868EDA + isa + PBXBuildFile + settings + + ATTRIBUTES + + Public + + + + B9D22E5ECFB791ADE90FADC3B6D7308D + + fileRef + E7F12CB4AC8D60A6645673024296A8A6 + isa + PBXBuildFile + + BA6428E9F66FD5A23C0A2E06ED26CD2F + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text + name + Podfile + path + ../Podfile + sourceTree + SOURCE_ROOT + xcLanguageSpecificationIdentifier + xcode.lang.ruby + + BA8540158DB99ECC95BC0BFF14A90B03 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + Callsite.swift + path + Sources/Quick/Callsite.swift + sourceTree + <group> + + BED2C63E2D2C34D5511F39E398755C55 + + fileRef + 47F124C5F3B880D5BECAFB535C4E9823 + isa + PBXBuildFile + settings + + ATTRIBUTES + + Public + + + + BF2734840C918B05A12CE85A1868E57E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + NMBExpectation.swift + path + Sources/Nimble/Adapters/ObjectiveC/NMBExpectation.swift + sourceTree + <group> + + BF3C20E1C22AA3C45B78957975192B79 + + baseConfigurationReference + D579FD5640905214B924E9E2C4E59B04 + 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/Nimble/Nimble-prefix.pch + INFOPLIST_FILE + Target Support Files/Nimble/Info.plist + INSTALL_PATH + $(LOCAL_LIBRARY_DIR)/Frameworks + IPHONEOS_DEPLOYMENT_TARGET + 8.3 + LD_RUNPATH_SEARCH_PATHS + + $(inherited) + @executable_path/Frameworks + @loader_path/Frameworks + + MODULEMAP_FILE + Target Support Files/Nimble/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 + + + isa + XCBuildConfiguration + name + Debug + + BF4A0BD3FF1881730835440CDFCFBA0B + + includeInIndex + 1 + isa + PBXFileReference + path + Chirp.modulemap + sourceTree + <group> + + C04E5D8A0920D53194D0EACFDD25B800 + + buildConfigurations + + B66C7BD47B40546C751062E7C13ED470 + 97A7C99688589E56C79A4B7EBB7FEF8D + + defaultConfigurationIsVisible + 0 + defaultConfigurationName + Release + isa + XCConfigurationList + + C063808F9FF23D42364D03642FFF53C5 + + fileRef + 0FEBA8AD57CC5BDE39609C414DA521B4 + isa + PBXBuildFile + + C0C64EC5B9C558581E8EE40054857EDA + + fileRef + FFBBA0B6E48D492E09A0EFB9FDEEB923 + isa + PBXBuildFile + + C185C3AA3E4394A8B335EFC5CF30405D + + fileRef + 08B94A9690FC43102A39F64D237E4524 + isa + PBXBuildFile + + C36487BB2C093603449C46F4F476DE02 + + children + + 46F5FF867B147465116CE447B59B1355 + + isa + PBXGroup + name + Development Pods + sourceTree + <group> + + C3E66A5FB5DC4B06CEC3CE2712C884B3 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + DSL.m + path + Sources/Nimble/Adapters/ObjectiveC/DSL.m + sourceTree + <group> + + C50C4EACDDA2F38FB9B296715DF18789 + + buildActionMask + 2147483647 + files + + BED2C63E2D2C34D5511F39E398755C55 + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + C59B6E5E5A1913A29D7F30FB2B85AC84 + + fileRef + F43DF0F136DBD2A566C0B08DA3322D49 + isa + PBXBuildFile + + C761D93FA28F469DB276F56798770C34 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Quick-dummy.m + sourceTree + <group> + + C7A90C7497EA255F10CCD0CB4B1CEACD + + fileRef + 068AA0F3C3865F5B3948E0BE92816AFF + isa + PBXBuildFile + + CAA69891EEDDE642B1DF0A6F8F3CFFC4 + + fileRef + 029DCA4C656F3540DEC5388140F695A0 + isa + PBXBuildFile + + CB4849FC0E886B8F1D967410F57639BA + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Pods-Chirp_Tests.release.xcconfig + sourceTree + <group> + + CB4F4808700C12CABB2C0CC951721643 + + isa + PBXTargetDependency + name + Chirp-Chirp + target + 559A4F124A60124F67D8E85253E29790 + targetProxy + 08CE26224CEC08A2989C4FAF1CA18CA8 + + CC441E7B2F9F623B1A07A52455CFB4CA + + explicitFileType + wrapper.framework + includeInIndex + 0 + isa + PBXFileReference + name + Quick.framework + path + Quick.framework + sourceTree + BUILT_PRODUCTS_DIR + + CC87D014B67C6ACD0E95E1F5A09AE4ED + + baseConfigurationReference + D579FD5640905214B924E9E2C4E59B04 + 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/Nimble/Nimble-prefix.pch + INFOPLIST_FILE + Target Support Files/Nimble/Info.plist + INSTALL_PATH + $(LOCAL_LIBRARY_DIR)/Frameworks + IPHONEOS_DEPLOYMENT_TARGET + 8.3 + LD_RUNPATH_SEARCH_PATHS + + $(inherited) + @executable_path/Frameworks + @loader_path/Frameworks + + MODULEMAP_FILE + Target Support Files/Nimble/Nimble.modulemap + MTL_ENABLE_DEBUG_INFO + NO + PRODUCT_NAME + Nimble + SDKROOT + iphoneos + SKIP_INSTALL + YES + TARGETED_DEVICE_FAMILY + 1,2 + VERSIONING_SYSTEM + apple-generic + VERSION_INFO_PREFIX + + + isa + XCBuildConfiguration + name + Release + + CC9D4B64F9B5EF312F80B146359316B9 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Pods-Chirp_Tests-umbrella.h + sourceTree + <group> + + CCAB84E49894A19F4BD3FE38341DC44D + + fileRef + 7EA56394F5F532D183816002E6F3F85E + isa + PBXBuildFile + + CD595B5B80F96DAEB404EAEE934A22B1 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + Expectation.swift + path + Sources/Nimble/Expectation.swift + sourceTree + <group> + + CE3F911A490411EE0F9D0FE2D47A3804 + + fileRef + DD4FC312CA6B2443068B19C8C9E360C2 + isa + PBXBuildFile + settings + + ATTRIBUTES + + Public + + + + CF14F9FF0EF57CE072113A02F769921E + + baseConfigurationReference + B8182BF7B8B80091D8DEE980BA686817 + buildSettings + + ENABLE_STRICT_OBJC_MSGSEND + YES + PRODUCT_NAME + Chirp + SDKROOT + iphoneos + SKIP_INSTALL + YES + WRAPPER_EXTENSION + bundle + + isa + XCBuildConfiguration + name + Release + + CF54C234436827142B58ABAD8A7FBC4D + + children + + AB1D0B33481D2F32A53859C398159AB0 + B4FDE815B95EFEF52906D506D28A424D + 52C908177CFC61716B8A5578A17936F0 + 1A506AD707244ECC9DDCB3EAD225E5F4 + E053F5361987AE204F638A4C00C8ED99 + 1C168EBF584B4F05BBE6D606FA0590A6 + A36BA17B11B676B79FAE0DEC754DEEF6 + 47F124C5F3B880D5BECAFB535C4E9823 + 9FD6607324C33A0191F230B4058FD223 + 5698A2D90AE161B5790CE5B58BF41F47 + + isa + PBXGroup + name + Pods-Chirp_Example + path + Target Support Files/Pods-Chirp_Example + sourceTree + <group> + + CF7EF7A75EBA355C333735FD8B06311E + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + NSBundle+CurrentTestBundle.swift + path + Sources/Quick/NSBundle+CurrentTestBundle.swift + sourceTree + <group> + + CFE280B6445BAB9C1A218B2B9554D70C + + fileRef + 1ECD9B3379938F36B9E56DF47348A110 + isa + PBXBuildFile + settings + + ATTRIBUTES + + Public + + + + D09E0F2C1B77255A16FFE7D9FB0BCB21 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + SatisfyAnyOf.swift + path + Sources/Nimble/Matchers/SatisfyAnyOf.swift + sourceTree + <group> + + D147B0BD2365CEC32335115829196D7C + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + NimbleEnvironment.swift + path + Sources/Nimble/Adapters/NimbleEnvironment.swift + sourceTree + <group> + + D19627B4132C429EC833FF08BC9E3958 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + Match.swift + path + Sources/Nimble/Matchers/Match.swift + sourceTree + <group> + + D31F972E062CAC0A72D57896C456ADD2 + + fileRef + 0CDF4D0F575F7095DD016CE2601DBD26 + isa + PBXBuildFile + + D3858FBA4C2D4AD6D6A31DBF85E032C5 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + ThrowError.swift + path + Sources/Nimble/Matchers/ThrowError.swift + sourceTree + <group> + + D3B53C516FECE8973FCEB5321751FABA + + fileRef + EEB91BD8DE52522D5AC6B6E371ED5827 + isa + PBXBuildFile + + D41D8CD98F00B204E9800998ECF8427E + + attributes + + LastSwiftUpdateCheck + 0700 + LastUpgradeCheck + 0700 + + buildConfigurationList + 2D8E8EC45A3A1A1D94AE762CB5028504 + compatibilityVersion + Xcode 3.2 + developmentRegion + English + hasScannedForEncodings + 0 + isa + PBXProject + knownRegions + + en + + mainGroup + 7DB346D0F39D3F0E887471402A8071AB + productRefGroup + 8794728D2749985FD917DC470A7BA4C0 + projectDirPath + + projectReferences + + projectRoot + + targets + + 0435B780B17A7A610BC562E4104531B8 + 559A4F124A60124F67D8E85253E29790 + 4FA852B36637F5FBFB642C28D8B6C6BC + 29FA9ED95400E6B0CF2684EB54CB9334 + 5A9991D0148015292FB1894ED71124D5 + AE4C9880DA936780135AFC0791E15D25 + + + D4691EE554CC56008BBA3CE140DE8C5A + + fileRef + 823F5D77C96216A1850B11C704852C92 + isa + PBXBuildFile + settings + + ATTRIBUTES + + Project + + + + D579FD5640905214B924E9E2C4E59B04 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + text.xcconfig + path + Nimble.xcconfig + sourceTree + <group> + + D5BF9027B54BCA345FC3CD3FD0E5EC84 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NSString+QCKSelectorName.m + path + Sources/Quick/NSString+QCKSelectorName.m + sourceTree + <group> + + D68A544D8420A1A20875F8A41D9009E9 + + fileRef + E053F5361987AE204F638A4C00C8ED99 + isa + PBXBuildFile + + D697CB7CE56A55A2DFC62BD0CD59C242 + + fileRef + 5BAB1335CE596E082318F53614A268B3 + isa + PBXBuildFile + + D721FF95101BF27415747350F49B7D46 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + BeCloseTo.swift + path + Sources/Nimble/Matchers/BeCloseTo.swift + sourceTree + <group> + + D9F55DE602829CAA6ED19AB94156C293 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + AsyncMatcherWrapper.swift + path + Sources/Nimble/Matchers/AsyncMatcherWrapper.swift + sourceTree + <group> + + DAE89AE52209C28E11B382811AED0A10 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + Contain.swift + path + Sources/Nimble/Matchers/Contain.swift + sourceTree + <group> + + DC2C9289CC730847F23BA922FFB13D7B + + includeInIndex + 1 + isa + PBXFileReference + path + Pods-Chirp_Tests.modulemap + sourceTree + <group> + + DD4FC312CA6B2443068B19C8C9E360C2 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Quick-umbrella.h + sourceTree + <group> + + DD7921B3AF923AC4D2479A334C73ADF5 + + fileRef + C3E66A5FB5DC4B06CEC3CE2712C884B3 + isa + PBXBuildFile + + DFB314D1E613EDC7C82A474CBF2AD752 + + fileRef + 3C32D47CE6AE1352683960263F34BCD5 + isa + PBXBuildFile + + E053F5361987AE204F638A4C00C8ED99 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-Chirp_Example-dummy.m + sourceTree + <group> + + E1454083EE97F200DF906735D77D4A5B + + buildActionMask + 2147483647 + files + + FC10AD2963BF5047B16B087533946A7B + + isa + PBXFrameworksBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + E351727CD07BB90B2A3CAE2C2433F6C5 + + isa + PBXFileReference + lastKnownFileType + wrapper.framework + name + Foundation.framework + path + Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/System/Library/Frameworks/Foundation.framework + sourceTree + DEVELOPER_DIR + + E380AF912DAFFF9EECD7506A5272F649 + + fileRef + E40DAA879B338603E4B8E83DFBF88F4B + isa + PBXBuildFile + + E40DAA879B338603E4B8E83DFBF88F4B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + QCKDSL.m + path + Sources/Quick/DSL/QCKDSL.m + sourceTree + <group> + + E49C62A60D28CDADE01AC78FD0A6FDDB + + fileRef + 1E77526043F11ADF0ABD8DEC93CE1D2E + isa + PBXBuildFile + settings + + ATTRIBUTES + + Project + + + + E4E77A666B65A3F2CDB36891F8C18D10 + + fileRef + 9FCCC8C24DFB810048EBF4E1351B5D3A + isa + PBXBuildFile + + E55ED82E68CABF716EA45C2FFCEE612C + + isa + PBXTargetDependency + name + Quick + target + AE4C9880DA936780135AFC0791E15D25 + targetProxy + 5140C3AE3481694C4D2B73054570D9BE + + E661BB4E14C6ACE0EB2CD5F150584290 + + baseConfigurationReference + B8182BF7B8B80091D8DEE980BA686817 + 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/Chirp/Chirp-prefix.pch + INFOPLIST_FILE + Target Support Files/Chirp/Info.plist + INSTALL_PATH + $(LOCAL_LIBRARY_DIR)/Frameworks + IPHONEOS_DEPLOYMENT_TARGET + 8.3 + LD_RUNPATH_SEARCH_PATHS + + $(inherited) + @executable_path/Frameworks + @loader_path/Frameworks + + MODULEMAP_FILE + Target Support Files/Chirp/Chirp.modulemap + MTL_ENABLE_DEBUG_INFO + YES + PRODUCT_NAME + Chirp + SDKROOT + iphoneos + SKIP_INSTALL + YES + SWIFT_OPTIMIZATION_LEVEL + -Onone + TARGETED_DEVICE_FAMILY + 1,2 + VERSIONING_SYSTEM + apple-generic + VERSION_INFO_PREFIX + + + isa + XCBuildConfiguration + name + Debug + + E79DB561D01DB3D3E512756D77C1490B + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + Equal.swift + path + Sources/Nimble/Matchers/Equal.swift + sourceTree + <group> + + E7F12CB4AC8D60A6645673024296A8A6 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + NimbleXCTestHandler.swift + path + Sources/Nimble/Adapters/NimbleXCTestHandler.swift + sourceTree + <group> + + E866DC771D3A562B6FC0BDD2A02E9DF2 + + buildActionMask + 2147483647 + files + + isa + PBXResourcesBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + E8C8A8F029ED942CBFA9896CC8873EC1 + + buildActionMask + 2147483647 + files + + 36ADB08168319308B642A1E248ED55CD + + isa + PBXHeadersBuildPhase + runOnlyForDeploymentPostprocessing + 0 + + EAC5DC986655D8A1F5CB4A7C149ECF2F + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + BeGreaterThanOrEqualTo.swift + path + Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift + sourceTree + <group> + + EBEFB9215D7FAFB9829C368FF34B7729 + + fileRef + E351727CD07BB90B2A3CAE2C2433F6C5 + isa + PBXBuildFile + + EC1C65B167AA6A4EEEE1BC2FED109B44 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + BeLessThanOrEqual.swift + path + Sources/Nimble/Matchers/BeLessThanOrEqual.swift + sourceTree + <group> + + EC4E6809F2A080539CB93A3490FAC951 + + fileRef + 278C692617A28D2461916DE81B79B62D + isa + PBXBuildFile + + ED69E3B1F44B618B75BC6661BF48BD39 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + Example.swift + path + Sources/Quick/Example.swift + sourceTree + <group> + + EDA7413626CB9C41D31654005A21B320 + + baseConfigurationReference + 5698A2D90AE161B5790CE5B58BF41F47 + 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-Chirp_Example/Info.plist + INSTALL_PATH + $(LOCAL_LIBRARY_DIR)/Frameworks + IPHONEOS_DEPLOYMENT_TARGET + 8.3 + LD_RUNPATH_SEARCH_PATHS + + $(inherited) + @executable_path/Frameworks + @loader_path/Frameworks + + MACH_O_TYPE + staticlib + MODULEMAP_FILE + Target Support Files/Pods-Chirp_Example/Pods-Chirp_Example.modulemap + MTL_ENABLE_DEBUG_INFO + NO + OTHER_LDFLAGS + + OTHER_LIBTOOLFLAGS + + PODS_ROOT + $(SRCROOT) + PRODUCT_NAME + Pods_Chirp_Example + SDKROOT + iphoneos + SKIP_INSTALL + YES + TARGETED_DEVICE_FAMILY + 1,2 + VERSIONING_SYSTEM + apple-generic + VERSION_INFO_PREFIX + + + isa + XCBuildConfiguration + name + Release + + EEB91BD8DE52522D5AC6B6E371ED5827 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + BeEmpty.swift + path + Sources/Nimble/Matchers/BeEmpty.swift + sourceTree + <group> + + EF114BCD0F38330DD45828958ADD3FE0 + + fileRef + D147B0BD2365CEC32335115829196D7C + isa + PBXBuildFile + + EFC49133C85E8527B382701506740CEF + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + path + Chirp-prefix.pch + sourceTree + <group> + + F08AC40385E2823282726F24592B8920 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + BeLessThan.swift + path + Sources/Nimble/Matchers/BeLessThan.swift + sourceTree + <group> + + F14BD45D78BCBAA4EFDA0334C94DF298 + + fileRef + D09E0F2C1B77255A16FFE7D9FB0BCB21 + isa + PBXBuildFile + + F17E27060FE77E1C79F138223A444F72 + + children + + BA8540158DB99ECC95BC0BFF14A90B03 + 8A5CCB08C927B6029144EA30171B111E + 8F158BB020436A2DE5CAF6FA6F0E3025 + 115214983B02D5307978B0FBC5154D44 + 03A5E1C9B21E691F1EEDF840F4D28EDF + ED69E3B1F44B618B75BC6661BF48BD39 + 64DD0BA68F5443DC03D1E9DA570588AC + 9FCCC8C24DFB810048EBF4E1351B5D3A + 605D714F77EB699C5D062588E9FEEC9C + 8498E04E1979BECEB001BD0875DEF4EC + 05DA0A769E4C04ECD6FFD632708AF1FE + CF7EF7A75EBA355C333735FD8B06311E + 1E77526043F11ADF0ABD8DEC93CE1D2E + D5BF9027B54BCA345FC3CD3FD0E5EC84 + 9849CC70EE76C7FD6FB071AE7BD16597 + E40DAA879B338603E4B8E83DFBF88F4B + 6B55710418D76C9273751B3D754EC54E + 7DF329D4C9B0C03BE9E1CE150E9E0A95 + 08B94A9690FC43102A39F64D237E4524 + 8B04632D6632788332B697D018C5DD60 + 8F6376337E587A7FD2825770DA3A23D6 + 068AA0F3C3865F5B3948E0BE92816AFF + 5BAB1335CE596E082318F53614A268B3 + 19B351BE93B31CB2CCF81673D135760B + 6F237707D8D2385FEC9D3EBF70EBEA87 + 823F5D77C96216A1850B11C704852C92 + F3B8FCDCEB26F410FAFDE0EE8DAE94C8 + F512682B0BD4C9172D7F91743132300D + B592A1D758960C300935692D84CBDACC + 029DCA4C656F3540DEC5388140F695A0 + 1685C89236EEDDAD991555E59FFE4B69 + + isa + PBXGroup + name + Quick + path + Quick + sourceTree + <group> + + F1888D00F040D76B467386EBCBB90ECB + + fileRef + 279AA6492631DEFA8C439A9C088EEB8A + isa + PBXBuildFile + + F1F021FC57B9DAB7938266B14B920AA3 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + name + NMBExceptionCapture.m + path + Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.m + sourceTree + <group> + + F3B4FA18209931D388B7A3F0B69F0C17 + + fileRef + 6F237707D8D2385FEC9D3EBF70EBEA87 + isa + PBXBuildFile + + F3B8FCDCEB26F410FAFDE0EE8DAE94C8 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + World.swift + path + Sources/Quick/World.swift + sourceTree + <group> + + F43DF0F136DBD2A566C0B08DA3322D49 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.objc + path + Pods-Chirp_Tests-dummy.m + sourceTree + <group> + + F48910247CE414A86EBF5AF7BE0EF6D4 + + fileRef + 170BDE2821810FFFF8F653EAB8273DC3 + isa + PBXBuildFile + + F512682B0BD4C9172D7F91743132300D + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.c.h + name + World+DSL.h + path + Sources/Quick/DSL/World+DSL.h + sourceTree + <group> + + F6C2CA3F29A11A3CA24693684C280A35 + + explicitFileType + wrapper.framework + includeInIndex + 0 + isa + PBXFileReference + name + Pods_Chirp_Example.framework + path + Pods_Chirp_Example.framework + sourceTree + BUILT_PRODUCTS_DIR + + FAF9B9507FC660623DA6564F131D72A6 + + fileRef + 115214983B02D5307978B0FBC5154D44 + isa + PBXBuildFile + + FC10AD2963BF5047B16B087533946A7B + + fileRef + E351727CD07BB90B2A3CAE2C2433F6C5 + isa + PBXBuildFile + + FCF5D69E28D8D83E453565A28D88B350 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + MatchError.swift + path + Sources/Nimble/Matchers/MatchError.swift + sourceTree + <group> + + FD6BC22FF3630A6079EBA47D6F71F728 + + fileRef + CD595B5B80F96DAEB404EAEE934A22B1 + isa + PBXBuildFile + + FDA1F3A6045AE7EDDFAE426A8F8DF693 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + Errors.swift + path + Sources/Nimble/Utils/Errors.swift + sourceTree + <group> + + FDC0BD42FC07FED3E20788F3B3C730A7 + + fileRef + 81FF987CE2B8B16137FB58ED1D2DDB57 + isa + PBXBuildFile + + FF86C934F2B9044B574486EE4836F4EB + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + AdapterProtocols.swift + path + Sources/Nimble/Adapters/AdapterProtocols.swift + sourceTree + <group> + + FFBBA0B6E48D492E09A0EFB9FDEEB923 + + includeInIndex + 1 + isa + PBXFileReference + lastKnownFileType + sourcecode.swift + name + Stringers.swift + path + Sources/Nimble/Utils/Stringers.swift + sourceTree + <group> + + + rootObject + D41D8CD98F00B204E9800998ECF8427E + + diff --git a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Chirp.xcscheme b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Chirp.xcscheme index ea35d80..c0a020e 100644 --- a/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Chirp.xcscheme +++ b/Example/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Chirp.xcscheme @@ -1,39 +1,36 @@ + buildForArchiving = "YES"> + BuildableIdentifier = 'primary' + BlueprintIdentifier = 'C082E8234BEF0F8D21E2ACED' + BlueprintName = 'Chirp' + ReferencedContainer = 'container:Pods.xcodeproj' + BuildableName = 'Chirp.framework'> - - + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Debug"> - - - - + debugDocumentVersioning = "YES" + buildConfiguration = "Release" + shouldUseLaunchSchemeArgsEnv = "YES"> diff --git a/Example/Pods/Quick/Quick/DSL/World+DSL.swift b/Example/Pods/Quick/Quick/DSL/World+DSL.swift deleted file mode 100644 index 0b572b1..0000000 --- a/Example/Pods/Quick/Quick/DSL/World+DSL.swift +++ /dev/null @@ -1,102 +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 { - internal func beforeSuite(closure: BeforeSuiteClosure) { - suiteHooks.appendBefore(closure) - } - - internal func afterSuite(closure: AfterSuiteClosure) { - suiteHooks.appendAfter(closure) - } - - internal func sharedExamples(name: String, closure: SharedExampleClosure) { - registerSharedExample(name, closure: closure) - } - - internal func describe(description: String, flags: FilterFlags, closure: () -> ()) { - let group = ExampleGroup(description: description, flags: flags) - currentExampleGroup!.appendExampleGroup(group) - currentExampleGroup = group - closure() - currentExampleGroup = group.parent - } - - internal func context(description: String, flags: FilterFlags, closure: () -> ()) { - self.describe(description, flags: flags, closure: closure) - } - - internal func fdescribe(description: String, flags: FilterFlags, closure: () -> ()) { - var focusedFlags = flags - focusedFlags[Filter.focused] = true - self.describe(description, flags: focusedFlags, closure: closure) - } - - internal func xdescribe(description: String, flags: FilterFlags, closure: () -> ()) { - var pendingFlags = flags - pendingFlags[Filter.pending] = true - self.describe(description, flags: pendingFlags, closure: closure) - } - - internal func beforeEach(closure: BeforeExampleClosure) { - currentExampleGroup!.hooks.appendBefore(closure) - } - - @objc(beforeEachWithMetadata:) - internal func beforeEach(closure closure: BeforeExampleWithMetadataClosure) { - currentExampleGroup!.hooks.appendBefore(closure) - } - - internal func afterEach(closure: AfterExampleClosure) { - currentExampleGroup!.hooks.appendAfter(closure) - } - - @objc(afterEachWithMetadata:) - internal func afterEach(closure closure: AfterExampleWithMetadataClosure) { - currentExampleGroup!.hooks.appendAfter(closure) - } - - @objc(itWithDescription:flags:file:line:closure:) - internal func it(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { - let callsite = Callsite(file: file, line: line) - let example = Example(description: description, callsite: callsite, flags: flags, closure: closure) - currentExampleGroup!.appendExample(example) - } - - @objc(fitWithDescription:flags:file:line:closure:) - internal func fit(description: String, flags: FilterFlags, file: String, line: UInt, 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:) - internal func xit(description: String, flags: FilterFlags, file: String, line: UInt, 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:) - internal func itBehavesLike(name: String, sharedExampleContext: SharedExampleContext, flags: FilterFlags, file: String, line: UInt) { - let callsite = Callsite(file: file, line: line) - let closure = World.sharedWorld().sharedExample(name) - - let 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 - } - - internal func pending(description: String, closure: () -> ()) { - print("Pending: \(description)") - } -} diff --git a/Example/Pods/Quick/README.md b/Example/Pods/Quick/README.md index 049b0c0..2a50ebf 100644 --- a/Example/Pods/Quick/README.md +++ b/Example/Pods/Quick/README.md @@ -31,11 +31,11 @@ class TableOfContentsSpec: QuickSpec { } ``` #### Nimble -Quick comes together with [Nimble](https://github.com/Quick/Nimble) — a matcher framework for your tests. You can learn why `XCTAssert()` statements make your expectations unclear and how to fix that using Nimble assertions [here](./Documentation/NimbleAssertions.md). +Quick comes together with [Nimble](https://github.com/Quick/Nimble) — a matcher framework for your tests. You can learn why `XCTAssert()` statements make your expectations unclear and how to fix that using Nimble assertions [here](./Documentation/en-us/NimbleAssertions.md). ## Documentation -All documentation can be found in the [Documentation folder](./Documentation), including [detailed installation instructions](./Documentation/InstallingQuick.md) for CocoaPods, Carthage, Git submodules, and more. For example, you can install Quick and [Nimble](https://github.com/Quick/Nimble) using CocoaPods by adding the following to your Podfile: +All documentation can be found in the [Documentation folder](./Documentation), including [detailed installation instructions](./Documentation/en-us/InstallingQuick.md) for CocoaPods, Carthage, Git submodules, and more. For example, you can install Quick and [Nimble](https://github.com/Quick/Nimble) using CocoaPods by adding the following to your Podfile: ```rb # Podfile @@ -43,13 +43,8 @@ All documentation can be found in the [Documentation folder](./Documentation), i use_frameworks! def testing_pods - # If you're using Xcode 7 / Swift 2 - pod 'Quick', '~> 0.6.0' - pod 'Nimble', '2.0.0-rc.3' - - # If you're using Xcode 6 / Swift 1.2 - pod 'Quick', '~> 0.3.0' - pod 'Nimble', '~> 1.0.0' + pod 'Quick', '~> 0.9.0' + pod 'Nimble', '~> 3.2.0' end target 'MyTests' do diff --git a/Example/Pods/Quick/Quick/Callsite.swift b/Example/Pods/Quick/Sources/Quick/Callsite.swift similarity index 97% rename from Example/Pods/Quick/Quick/Callsite.swift rename to Example/Pods/Quick/Sources/Quick/Callsite.swift index e13a630..53496cd 100644 --- a/Example/Pods/Quick/Quick/Callsite.swift +++ b/Example/Pods/Quick/Sources/Quick/Callsite.swift @@ -1,3 +1,5 @@ +import Foundation + /** An object encapsulating the file and line number at which a particular example is defined. diff --git a/Example/Pods/Quick/Quick/Configuration/Configuration.swift b/Example/Pods/Quick/Sources/Quick/Configuration/Configuration.swift similarity index 94% rename from Example/Pods/Quick/Quick/Configuration/Configuration.swift rename to Example/Pods/Quick/Sources/Quick/Configuration/Configuration.swift index 2b54892..7b8c2db 100644 --- a/Example/Pods/Quick/Quick/Configuration/Configuration.swift +++ b/Example/Pods/Quick/Sources/Quick/Configuration/Configuration.swift @@ -1,3 +1,5 @@ +import Foundation + /** A closure that temporarily exposes a Configuration object within the scope of the closure. @@ -70,10 +72,16 @@ final public class Configuration: NSObject { provided with metadata on the example that the closure is being run prior to. */ +#if _runtime(_ObjC) @objc(beforeEachWithMetadata:) public func beforeEach(closure: BeforeExampleWithMetadataClosure) { exampleHooks.appendBefore(closure) } +#else + public func beforeEach(closure: BeforeExampleWithMetadataClosure) { + exampleHooks.appendBefore(closure) + } +#endif /** Like Quick.DSL.beforeEach, this configures Quick to execute the @@ -101,10 +109,16 @@ final public class Configuration: NSObject { is provided with metadata on the example that the closure is being run after. */ +#if _runtime(_ObjC) @objc(afterEachWithMetadata:) public func afterEach(closure: AfterExampleWithMetadataClosure) { exampleHooks.appendAfter(closure) } +#else + public func afterEach(closure: AfterExampleWithMetadataClosure) { + exampleHooks.appendAfter(closure) + } +#endif /** Like Quick.DSL.afterEach, this configures Quick to execute the diff --git a/Example/Pods/Quick/Quick/Configuration/QuickConfiguration.h b/Example/Pods/Quick/Sources/Quick/Configuration/QuickConfiguration.h similarity index 100% rename from Example/Pods/Quick/Quick/Configuration/QuickConfiguration.h rename to Example/Pods/Quick/Sources/Quick/Configuration/QuickConfiguration.h diff --git a/Example/Pods/Quick/Quick/Configuration/QuickConfiguration.m b/Example/Pods/Quick/Sources/Quick/Configuration/QuickConfiguration.m similarity index 100% rename from Example/Pods/Quick/Quick/Configuration/QuickConfiguration.m rename to Example/Pods/Quick/Sources/Quick/Configuration/QuickConfiguration.m diff --git a/Example/Pods/Quick/Quick/DSL/DSL.swift b/Example/Pods/Quick/Sources/Quick/DSL/DSL.swift similarity index 85% rename from Example/Pods/Quick/Quick/DSL/DSL.swift rename to Example/Pods/Quick/Sources/Quick/DSL/DSL.swift index 2c91753..bc0e0b4 100644 --- a/Example/Pods/Quick/Quick/DSL/DSL.swift +++ b/Example/Pods/Quick/Sources/Quick/DSL/DSL.swift @@ -9,7 +9,7 @@ - parameter closure: The closure to be run prior to any examples in the test suite. */ public func beforeSuite(closure: BeforeSuiteClosure) { - World.sharedWorld().beforeSuite(closure) + World.sharedWorld.beforeSuite(closure) } /** @@ -23,7 +23,7 @@ public func beforeSuite(closure: BeforeSuiteClosure) { - parameter closure: The closure to be run after all of the examples in the test suite. */ public func afterSuite(closure: AfterSuiteClosure) { - World.sharedWorld().afterSuite(closure) + World.sharedWorld.afterSuite(closure) } /** @@ -37,7 +37,7 @@ public func afterSuite(closure: AfterSuiteClosure) { 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() }) + World.sharedWorld.sharedExamples(name, closure: { (NSDictionary) in closure() }) } /** @@ -54,7 +54,7 @@ public func sharedExamples(name: String, closure: () -> ()) { 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) + World.sharedWorld.sharedExamples(name, closure: closure) } /** @@ -66,14 +66,14 @@ public func sharedExamples(name: String, closure: SharedExampleClosure) { - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups. */ public func describe(description: String, flags: FilterFlags = [:], closure: () -> ()) { - World.sharedWorld().describe(description, flags: flags, closure: closure) + World.sharedWorld.describe(description, flags: flags, closure: closure) } /** Defines an example group. Equivalent to `describe`. */ public func context(description: String, flags: FilterFlags = [:], closure: () -> ()) { - describe(description, flags: flags, closure: closure) + World.sharedWorld.context(description, flags: flags, closure: closure) } /** @@ -85,7 +85,7 @@ public func context(description: String, flags: FilterFlags = [:], closure: () - - parameter closure: The closure to be run prior to each example. */ public func beforeEach(closure: BeforeExampleClosure) { - World.sharedWorld().beforeEach(closure) + World.sharedWorld.beforeEach(closure) } /** @@ -93,7 +93,7 @@ public func beforeEach(closure: BeforeExampleClosure) { metadata on the example that the closure is being run prior to. */ public func beforeEach(closure: BeforeExampleWithMetadataClosure) { - World.sharedWorld().beforeEach(closure: closure) + World.sharedWorld.beforeEach(closure: closure) } /** @@ -105,7 +105,7 @@ public func beforeEach(closure: BeforeExampleWithMetadataClosure) { - parameter closure: The closure to be run after each example. */ public func afterEach(closure: AfterExampleClosure) { - World.sharedWorld().afterEach(closure) + World.sharedWorld.afterEach(closure) } /** @@ -113,7 +113,7 @@ public func afterEach(closure: AfterExampleClosure) { metadata on the example that the closure is being run after. */ public func afterEach(closure: AfterExampleWithMetadataClosure) { - World.sharedWorld().afterEach(closure: closure) + World.sharedWorld.afterEach(closure: closure) } /** @@ -127,8 +127,8 @@ public func afterEach(closure: AfterExampleWithMetadataClosure) { - parameter file: The absolute path to the file containing the example. A sensible default is provided. - parameter line: The line containing the example. A sensible default is provided. */ -public func it(description: String, flags: FilterFlags = [:], file: String = __FILE__, line: UInt = __LINE__, closure: () -> ()) { - World.sharedWorld().it(description, flags: flags, file: file, line: line, closure: closure) +public func it(description: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, closure: () -> ()) { + World.sharedWorld.it(description, flags: flags, file: file, line: line, closure: closure) } /** @@ -143,7 +143,7 @@ public func it(description: String, flags: FilterFlags = [:], file: String = __F - parameter file: The absolute path to the file containing the current example group. A sensible default is provided. - parameter line: The line containing the current example group. A sensible default is provided. */ -public func itBehavesLike(name: String, flags: FilterFlags = [:], file: String = __FILE__, line: UInt = __LINE__) { +public func itBehavesLike(name: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line) { itBehavesLike(name, flags: flags, file: file, line: line, sharedExampleContext: { return [:] }) } @@ -163,8 +163,8 @@ public func itBehavesLike(name: String, flags: FilterFlags = [:], file: String = - parameter file: The absolute path to the file containing the current example group. A sensible default is provided. - parameter line: The line containing the current example group. A sensible default is provided. */ -public func itBehavesLike(name: String, flags: FilterFlags = [:], file: String = __FILE__, line: UInt = __LINE__, sharedExampleContext: SharedExampleContext) { - World.sharedWorld().itBehavesLike(name, sharedExampleContext: sharedExampleContext, flags: flags, file: file, line: line) +public func itBehavesLike(name: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, sharedExampleContext: SharedExampleContext) { + World.sharedWorld.itBehavesLike(name, sharedExampleContext: sharedExampleContext, flags: flags, file: file, line: line) } /** @@ -175,7 +175,7 @@ public func itBehavesLike(name: String, flags: FilterFlags = [:], file: String = - parameter closure: A closure that will not be evaluated. */ public func pending(description: String, closure: () -> ()) { - World.sharedWorld().pending(description, closure: closure) + World.sharedWorld.pending(description, closure: closure) } /** @@ -183,7 +183,7 @@ public func pending(description: String, closure: () -> ()) { This disables all examples within the closure. */ public func xdescribe(description: String, flags: FilterFlags, closure: () -> ()) { - World.sharedWorld().xdescribe(description, flags: flags, closure: closure) + World.sharedWorld.xdescribe(description, flags: flags, closure: closure) } /** @@ -198,8 +198,8 @@ public func xcontext(description: String, flags: FilterFlags, closure: () -> ()) Use this to quickly mark an `it` closure as pending. This disables the example and ensures the code within the closure is never run. */ -public func xit(description: String, flags: FilterFlags = [:], file: String = __FILE__, line: UInt = __LINE__, closure: () -> ()) { - World.sharedWorld().xit(description, flags: flags, file: file, line: line, closure: closure) +public func xit(description: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, closure: () -> ()) { + World.sharedWorld.xit(description, flags: flags, file: file, line: line, closure: closure) } /** @@ -208,7 +208,7 @@ public func xit(description: String, flags: FilterFlags = [:], file: String = __ This trumps any explicitly focused or unfocused examples within the closure--they are all treated as focused. */ public func fdescribe(description: String, flags: FilterFlags = [:], closure: () -> ()) { - World.sharedWorld().fdescribe(description, flags: flags, closure: closure) + World.sharedWorld.fdescribe(description, flags: flags, closure: closure) } /** @@ -222,6 +222,6 @@ public func fcontext(description: String, flags: FilterFlags = [:], closure: () Use this to quickly focus an `it` closure, focusing the example. If any examples in the test suite are focused, only those examples are executed. */ -public func fit(description: String, flags: FilterFlags = [:], file: String = __FILE__, line: UInt = __LINE__, closure: () -> ()) { - World.sharedWorld().fit(description, flags: flags, file: file, line: line, closure: closure) +public func fit(description: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, closure: () -> ()) { + World.sharedWorld.fit(description, flags: flags, file: file, line: line, closure: closure) } diff --git a/Example/Pods/Quick/Quick/DSL/QCKDSL.h b/Example/Pods/Quick/Sources/Quick/DSL/QCKDSL.h similarity index 100% rename from Example/Pods/Quick/Quick/DSL/QCKDSL.h rename to Example/Pods/Quick/Sources/Quick/DSL/QCKDSL.h diff --git a/Example/Pods/Quick/Quick/DSL/QCKDSL.m b/Example/Pods/Quick/Sources/Quick/DSL/QCKDSL.m similarity index 100% rename from Example/Pods/Quick/Quick/DSL/QCKDSL.m rename to Example/Pods/Quick/Sources/Quick/DSL/QCKDSL.m diff --git a/Example/Pods/Quick/Quick/DSL/World+DSL.h b/Example/Pods/Quick/Sources/Quick/DSL/World+DSL.h similarity index 100% rename from Example/Pods/Quick/Quick/DSL/World+DSL.h rename to Example/Pods/Quick/Sources/Quick/DSL/World+DSL.h diff --git a/Example/Pods/Quick/Sources/Quick/DSL/World+DSL.swift b/Example/Pods/Quick/Sources/Quick/DSL/World+DSL.swift new file mode 100644 index 0000000..027d09c --- /dev/null +++ b/Example/Pods/Quick/Sources/Quick/DSL/World+DSL.swift @@ -0,0 +1,171 @@ +import Foundation + +/** + 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 { + internal func beforeSuite(closure: BeforeSuiteClosure) { + suiteHooks.appendBefore(closure) + } + + internal func afterSuite(closure: AfterSuiteClosure) { + suiteHooks.appendAfter(closure) + } + + internal func sharedExamples(name: String, closure: SharedExampleClosure) { + registerSharedExample(name, closure: closure) + } + + internal func describe(description: String, flags: FilterFlags, closure: () -> ()) { + guard currentExampleMetadata == nil else { + raiseError("'describe' cannot be used inside '\(currentPhase)', 'describe' may only be used inside 'context' or 'describe'. ") + } + guard currentExampleGroup != nil else { + raiseError("Error: example group was not created by its parent QuickSpec spec. Check that describe() or context() was used in QuickSpec.spec() and not a more general context (i.e. an XCTestCase test)") + } + let group = ExampleGroup(description: description, flags: flags) + currentExampleGroup.appendExampleGroup(group) + currentExampleGroup = group + closure() + currentExampleGroup = group.parent + } + + internal func context(description: String, flags: FilterFlags, closure: () -> ()) { + guard currentExampleMetadata == nil else { + raiseError("'context' cannot be used inside '\(currentPhase)', 'context' may only be used inside 'context' or 'describe'. ") + } + self.describe(description, flags: flags, closure: closure) + } + + internal func fdescribe(description: String, flags: FilterFlags, closure: () -> ()) { + var focusedFlags = flags + focusedFlags[Filter.focused] = true + self.describe(description, flags: focusedFlags, closure: closure) + } + + internal func xdescribe(description: String, flags: FilterFlags, closure: () -> ()) { + var pendingFlags = flags + pendingFlags[Filter.pending] = true + self.describe(description, flags: pendingFlags, closure: closure) + } + + internal func beforeEach(closure: BeforeExampleClosure) { + guard currentExampleMetadata == nil else { + raiseError("'beforeEach' cannot be used inside '\(currentPhase)', 'beforeEach' may only be used inside 'context' or 'describe'. ") + } + currentExampleGroup.hooks.appendBefore(closure) + } + +#if _runtime(_ObjC) + @objc(beforeEachWithMetadata:) + internal func beforeEach(closure closure: BeforeExampleWithMetadataClosure) { + currentExampleGroup.hooks.appendBefore(closure) + } +#else + internal func beforeEach(closure closure: BeforeExampleWithMetadataClosure) { + currentExampleGroup.hooks.appendBefore(closure) + } +#endif + + internal func afterEach(closure: AfterExampleClosure) { + guard currentExampleMetadata == nil else { + raiseError("'afterEach' cannot be used inside '\(currentPhase)', 'afterEach' may only be used inside 'context' or 'describe'. ") + } + currentExampleGroup.hooks.appendAfter(closure) + } + +#if _runtime(_ObjC) + @objc(afterEachWithMetadata:) + internal func afterEach(closure closure: AfterExampleWithMetadataClosure) { + currentExampleGroup.hooks.appendAfter(closure) + } +#else + internal func afterEach(closure closure: AfterExampleWithMetadataClosure) { + currentExampleGroup.hooks.appendAfter(closure) + } +#endif + + internal func it(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { + if beforesCurrentlyExecuting { + raiseError("'it' cannot be used inside 'beforeEach', 'it' may only be used inside 'context' or 'describe'. ") + } + if aftersCurrentlyExecuting { + raiseError("'it' cannot be used inside 'afterEach', 'it' may only be used inside 'context' or 'describe'. ") + } + guard currentExampleMetadata == nil else { + raiseError("'it' cannot be used inside 'it', 'it' may only be used inside 'context' or 'describe'. ") + } + let callsite = Callsite(file: file, line: line) + let example = Example(description: description, callsite: callsite, flags: flags, closure: closure) + currentExampleGroup.appendExample(example) + } + + internal func fit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { + var focusedFlags = flags + focusedFlags[Filter.focused] = true + self.it(description, flags: focusedFlags, file: file, line: line, closure: closure) + } + + internal func xit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { + var pendingFlags = flags + pendingFlags[Filter.pending] = true + self.it(description, flags: pendingFlags, file: file, line: line, closure: closure) + } + + internal func itBehavesLike(name: String, sharedExampleContext: SharedExampleContext, flags: FilterFlags, file: String, line: UInt) { + guard currentExampleMetadata == nil else { + raiseError("'itBehavesLike' cannot be used inside '\(currentPhase)', 'itBehavesLike' may only be used inside 'context' or 'describe'. ") + } + let callsite = Callsite(file: file, line: line) + let closure = World.sharedWorld.sharedExample(name) + + let 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 + } + +#if _runtime(_ObjC) + @objc(itWithDescription:flags:file:line:closure:) + private func objc_it(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { + it(description, flags: flags, file: file, line: line, closure: closure) + } + + @objc(fitWithDescription:flags:file:line:closure:) + private func objc_fit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { + fit(description, flags: flags, file: file, line: line, closure: closure) + } + + @objc(xitWithDescription:flags:file:line:closure:) + private func objc_xit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { + xit(description, flags: flags, file: file, line: line, closure: closure) + } + + @objc(itBehavesLikeSharedExampleNamed:sharedExampleContext:flags:file:line:) + private func objc_itBehavesLike(name: String, sharedExampleContext: SharedExampleContext, flags: FilterFlags, file: String, line: UInt) { + itBehavesLike(name, sharedExampleContext: sharedExampleContext, flags: flags, file: file, line: line) + } +#endif + + internal func pending(description: String, closure: () -> ()) { + print("Pending: \(description)") + } + + private var currentPhase: String { + if beforesCurrentlyExecuting { + return "beforeEach" + } else if aftersCurrentlyExecuting { + return "afterEach" + } + + return "it" + } +} diff --git a/Example/Pods/Quick/Sources/Quick/ErrorUtility.swift b/Example/Pods/Quick/Sources/Quick/ErrorUtility.swift new file mode 100644 index 0000000..3c4035a --- /dev/null +++ b/Example/Pods/Quick/Sources/Quick/ErrorUtility.swift @@ -0,0 +1,10 @@ +import Foundation + +@noreturn internal func raiseError(message: String) { +#if _runtime(_ObjC) + NSException(name: NSInternalInconsistencyException, reason: message, userInfo: nil).raise() +#endif + + // This won't be reached when ObjC is available and the exception above is raisd + fatalError(message) +} diff --git a/Example/Pods/Quick/Quick/Example.swift b/Example/Pods/Quick/Sources/Quick/Example.swift similarity index 92% rename from Example/Pods/Quick/Quick/Example.swift rename to Example/Pods/Quick/Sources/Quick/Example.swift index 734de10..8929525 100644 --- a/Example/Pods/Quick/Quick/Example.swift +++ b/Example/Pods/Quick/Sources/Quick/Example.swift @@ -1,3 +1,5 @@ +import Foundation + private var numberOfExamplesRun = 0 /** @@ -55,7 +57,7 @@ final public class Example: NSObject { closures defined in the its surrounding example groups. */ public func run() { - let world = World.sharedWorld() + let world = World.sharedWorld if numberOfExamplesRun == 0 { world.suiteHooks.executeBefores() @@ -65,20 +67,24 @@ final public class Example: NSObject { world.currentExampleMetadata = exampleMetadata world.exampleHooks.executeBefores(exampleMetadata) + group!.phase = .BeforesExecuting for before in group!.befores { before(exampleMetadata: exampleMetadata) } + group!.phase = .BeforesFinished closure() + group!.phase = .AftersExecuting for after in group!.afters { after(exampleMetadata: exampleMetadata) } + group!.phase = .AftersFinished world.exampleHooks.executeAfters(exampleMetadata) - ++numberOfExamplesRun + numberOfExamplesRun += 1 - if !world.isRunningAdditionalSuites && numberOfExamplesRun >= world.exampleCount { + if !world.isRunningAdditionalSuites && numberOfExamplesRun >= world.includedExampleCount { world.suiteHooks.executeAfters() } } diff --git a/Example/Pods/Quick/Quick/ExampleGroup.swift b/Example/Pods/Quick/Sources/Quick/ExampleGroup.swift similarity index 97% rename from Example/Pods/Quick/Quick/ExampleGroup.swift rename to Example/Pods/Quick/Sources/Quick/ExampleGroup.swift index 52bd841..cf2b983 100644 --- a/Example/Pods/Quick/Quick/ExampleGroup.swift +++ b/Example/Pods/Quick/Sources/Quick/ExampleGroup.swift @@ -1,3 +1,5 @@ +import Foundation + /** Example groups are logical groupings of examples, defined with the `describe` and `context` functions. Example groups can share @@ -6,6 +8,8 @@ final public class ExampleGroup: NSObject { weak internal var parent: ExampleGroup? internal let hooks = ExampleHooks() + + internal var phase: HooksPhase = .NothingExecuted private let internalDescription: String private let flags: FilterFlags @@ -18,7 +22,7 @@ final public class ExampleGroup: NSObject { self.flags = flags self.isInternalRootExampleGroup = isInternalRootExampleGroup } - + public override var description: String { return internalDescription } diff --git a/Example/Pods/Quick/Quick/ExampleMetadata.swift b/Example/Pods/Quick/Sources/Quick/ExampleMetadata.swift similarity index 96% rename from Example/Pods/Quick/Quick/ExampleMetadata.swift rename to Example/Pods/Quick/Sources/Quick/ExampleMetadata.swift index 81e90da..e7510f7 100644 --- a/Example/Pods/Quick/Quick/ExampleMetadata.swift +++ b/Example/Pods/Quick/Sources/Quick/ExampleMetadata.swift @@ -1,3 +1,5 @@ +import Foundation + /** A class that encapsulates information about an example, including the index at which the example was executed, as diff --git a/Example/Pods/Quick/Quick/Filter.swift b/Example/Pods/Quick/Sources/Quick/Filter.swift similarity index 100% rename from Example/Pods/Quick/Quick/Filter.swift rename to Example/Pods/Quick/Sources/Quick/Filter.swift diff --git a/Example/Pods/Quick/Quick/Hooks/Closures.swift b/Example/Pods/Quick/Sources/Quick/Hooks/Closures.swift similarity index 100% rename from Example/Pods/Quick/Quick/Hooks/Closures.swift rename to Example/Pods/Quick/Sources/Quick/Hooks/Closures.swift diff --git a/Example/Pods/Quick/Quick/Hooks/ExampleHooks.swift b/Example/Pods/Quick/Sources/Quick/Hooks/ExampleHooks.swift similarity index 85% rename from Example/Pods/Quick/Quick/Hooks/ExampleHooks.swift rename to Example/Pods/Quick/Sources/Quick/Hooks/ExampleHooks.swift index 75c9123..1d5fa91 100644 --- a/Example/Pods/Quick/Quick/Hooks/ExampleHooks.swift +++ b/Example/Pods/Quick/Sources/Quick/Hooks/ExampleHooks.swift @@ -2,9 +2,9 @@ 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 var phase: HooksPhase = .NothingExecuted internal func appendBefore(closure: BeforeExampleWithMetadataClosure) { befores.append(closure) @@ -23,14 +23,20 @@ final internal class ExampleHooks { } internal func executeBefores(exampleMetadata: ExampleMetadata) { + phase = .BeforesExecuting for before in befores { before(exampleMetadata: exampleMetadata) } + + phase = .BeforesFinished } internal func executeAfters(exampleMetadata: ExampleMetadata) { + phase = .AftersExecuting for after in afters { after(exampleMetadata: exampleMetadata) } + + phase = .AftersFinished } } diff --git a/Example/Pods/Quick/Sources/Quick/Hooks/HooksPhase.swift b/Example/Pods/Quick/Sources/Quick/Hooks/HooksPhase.swift new file mode 100644 index 0000000..8dc3784 --- /dev/null +++ b/Example/Pods/Quick/Sources/Quick/Hooks/HooksPhase.swift @@ -0,0 +1,11 @@ +/** + A description of the execution cycle of the current example with + respect to the hooks of that example. + */ +internal enum HooksPhase: Int { + case NothingExecuted = 0 + case BeforesExecuting + case BeforesFinished + case AftersExecuting + case AftersFinished +} diff --git a/Example/Pods/Quick/Quick/Hooks/SuiteHooks.swift b/Example/Pods/Quick/Sources/Quick/Hooks/SuiteHooks.swift similarity index 71% rename from Example/Pods/Quick/Quick/Hooks/SuiteHooks.swift rename to Example/Pods/Quick/Sources/Quick/Hooks/SuiteHooks.swift index 5e09702..59bdcf2 100644 --- a/Example/Pods/Quick/Quick/Hooks/SuiteHooks.swift +++ b/Example/Pods/Quick/Sources/Quick/Hooks/SuiteHooks.swift @@ -3,10 +3,8 @@ */ final internal class SuiteHooks { internal var befores: [BeforeSuiteClosure] = [] - internal var beforesAlreadyExecuted = false - internal var afters: [AfterSuiteClosure] = [] - internal var aftersAlreadyExecuted = false + internal var phase: HooksPhase = .NothingExecuted internal func appendBefore(closure: BeforeSuiteClosure) { befores.append(closure) @@ -17,18 +15,18 @@ final internal class SuiteHooks { } internal func executeBefores() { - assert(!beforesAlreadyExecuted) + phase = .BeforesExecuting for before in befores { before() } - beforesAlreadyExecuted = true + phase = .BeforesFinished } internal func executeAfters() { - assert(!aftersAlreadyExecuted) + phase = .AftersExecuting for after in afters { after() } - aftersAlreadyExecuted = true + phase = .AftersFinished } } diff --git a/Example/Pods/Quick/Sources/Quick/NSBundle+CurrentTestBundle.swift b/Example/Pods/Quick/Sources/Quick/NSBundle+CurrentTestBundle.swift new file mode 100644 index 0000000..e8709e0 --- /dev/null +++ b/Example/Pods/Quick/Sources/Quick/NSBundle+CurrentTestBundle.swift @@ -0,0 +1,20 @@ +#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) + +import Foundation + +extension NSBundle { + + /** + Locates the first bundle with a '.xctest' file extension. + */ + internal static var currentTestBundle: NSBundle? { + return allBundles().lazy + .filter { + $0.bundlePath.hasSuffix(".xctest") + } + .first + } + +} + +#endif diff --git a/Example/Pods/Quick/Quick/NSString+QCKSelectorName.h b/Example/Pods/Quick/Sources/Quick/NSString+QCKSelectorName.h similarity index 100% rename from Example/Pods/Quick/Quick/NSString+QCKSelectorName.h rename to Example/Pods/Quick/Sources/Quick/NSString+QCKSelectorName.h diff --git a/Example/Pods/Quick/Quick/NSString+QCKSelectorName.m b/Example/Pods/Quick/Sources/Quick/NSString+QCKSelectorName.m similarity index 91% rename from Example/Pods/Quick/Quick/NSString+QCKSelectorName.m rename to Example/Pods/Quick/Sources/Quick/NSString+QCKSelectorName.m index 8cf187d..d374be6 100644 --- a/Example/Pods/Quick/Quick/NSString+QCKSelectorName.m +++ b/Example/Pods/Quick/Sources/Quick/NSString+QCKSelectorName.m @@ -27,7 +27,11 @@ - (NSString *)qck_selectorName { NSArray *validComponents = [self componentsSeparatedByCharactersInSet:invalidCharacters]; - return [validComponents componentsJoinedByString:@"_"]; + NSString *result = [validComponents componentsJoinedByString:@"_"]; + + return ([result length] == 0 + ? @"_" + : result); } @end diff --git a/Example/Pods/Quick/Quick/Quick.h b/Example/Pods/Quick/Sources/Quick/Quick.h similarity index 100% rename from Example/Pods/Quick/Quick/Quick.h rename to Example/Pods/Quick/Sources/Quick/Quick.h diff --git a/Example/Pods/Quick/Sources/Quick/QuickSelectedTestSuiteBuilder.swift b/Example/Pods/Quick/Sources/Quick/QuickSelectedTestSuiteBuilder.swift new file mode 100644 index 0000000..5163a4e --- /dev/null +++ b/Example/Pods/Quick/Sources/Quick/QuickSelectedTestSuiteBuilder.swift @@ -0,0 +1,73 @@ +#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) + +/** + Responsible for building a "Selected tests" suite. This corresponds to a single + spec, and all its examples. + */ +internal class QuickSelectedTestSuiteBuilder: QuickTestSuiteBuilder { + + /** + The test spec class to run. + */ + let testCaseClass: AnyClass! + + /** + For Objective-C classes, returns the class name. For Swift classes without, + an explicit Objective-C name, returns a module-namespaced class name + (e.g., "FooTests.FooSpec"). + */ + var testSuiteClassName: String { + return NSStringFromClass(testCaseClass) + } + + /** + Given a test case name: + + FooSpec/testFoo + + Optionally constructs a test suite builder for the named test case class + in the running test bundle. + + If no test bundle can be found, or the test case class can't be found, + initialization fails and returns `nil`. + */ + init?(forTestCaseWithName name: String) { + guard let testCaseClass = testCaseClassForTestCaseWithName(name) else { + self.testCaseClass = nil + return nil + } + + self.testCaseClass = testCaseClass + } + + /** + Returns a `QuickTestSuite` that runs the associated test case class. + */ + func buildTestSuite() -> QuickTestSuite { + return QuickTestSuite(forTestCaseClass: testCaseClass) + } + +} + +/** + Searches `NSBundle.allBundles()` for an xctest bundle, then looks up the named + test case class in that bundle. + + Returns `nil` if a bundle or test case class cannot be found. + */ +private func testCaseClassForTestCaseWithName(name: String) -> AnyClass? { + func extractClassName(name: String) -> String? { + return name.characters.split("/").first.map(String.init) + } + + guard let className = extractClassName(name) else { return nil } + guard let bundle = NSBundle.currentTestBundle else { return nil } + + if let testCaseClass = bundle.classNamed(className) { return testCaseClass } + + guard let moduleName = bundle.bundlePath.fileName else { return nil } + + return NSClassFromString("\(moduleName).\(className)") +} + +#endif diff --git a/Example/Pods/Quick/Quick/QuickSpec.h b/Example/Pods/Quick/Sources/Quick/QuickSpec.h similarity index 93% rename from Example/Pods/Quick/Quick/QuickSpec.h rename to Example/Pods/Quick/Sources/Quick/QuickSpec.h index 08d0079..105a97e 100644 --- a/Example/Pods/Quick/Quick/QuickSpec.h +++ b/Example/Pods/Quick/Sources/Quick/QuickSpec.h @@ -33,13 +33,15 @@ Override this method in your spec to define a set of example groups and examples. - override class func spec() { - describe("winter") { - it("is coming") { - // ... - } + @code + override func spec() { + describe("winter") { + it("is coming") { + // ... } } + } + @endcode See DSL.swift for more information on what syntax is available. */ diff --git a/Example/Pods/Quick/Quick/QuickSpec.m b/Example/Pods/Quick/Sources/Quick/QuickSpec.m similarity index 91% rename from Example/Pods/Quick/Quick/QuickSpec.m rename to Example/Pods/Quick/Sources/Quick/QuickSpec.m index 6371067..57a9661 100644 --- a/Example/Pods/Quick/Quick/QuickSpec.m +++ b/Example/Pods/Quick/Sources/Quick/QuickSpec.m @@ -46,6 +46,7 @@ + (void)initialize { exception.name, exception.reason, exception.userInfo]; } [self testInvocations]; + world.currentExampleGroup = nil; } /** @@ -57,8 +58,11 @@ + (void)initialize { + (NSArray *)testInvocations { NSArray *examples = [[World sharedWorld] examplesForSpecClass:[self class]]; NSMutableArray *invocations = [NSMutableArray arrayWithCapacity:[examples count]]; + + NSMutableSet *selectorNames = [NSMutableSet set]; + for (Example *example in examples) { - SEL selector = [self addInstanceMethodForExample:example]; + SEL selector = [self addInstanceMethodForExample:example classSelectorNames:selectorNames]; NSInvocation *invocation = [self invocationForInstanceMethodWithSelector:selector example:example]; [invocations addObject:invocation]; @@ -99,7 +103,7 @@ - (void)spec { } @return The selector of the newly defined instance method. */ -+ (SEL)addInstanceMethodForExample:(Example *)example { ++ (SEL)addInstanceMethodForExample:(Example *)example classSelectorNames:(NSMutableSet *)selectorNames { IMP implementation = imp_implementationWithBlock(^(QuickSpec *self){ currentSpec = self; [example run]; @@ -114,10 +118,17 @@ + (SEL)addInstanceMethodForExample:(Example *)example { } const char *types = [[NSString stringWithFormat:@"%s%s%s", @encode(id), @encode(id), @encode(SEL)] UTF8String]; - NSString *selectorName = [NSString stringWithFormat:@"%@_%@_%ld", - example.name.qck_selectorName, - sanitizedFileName, - (long)example.callsite.line]; + + NSString *originalName = example.name.qck_selectorName; + NSString *selectorName = originalName; + NSUInteger i = 2; + + while ([selectorNames containsObject:selectorName]) { + selectorName = [NSString stringWithFormat:@"%@_%tu", originalName, i++]; + } + + [selectorNames addObject:selectorName]; + SEL selector = NSSelectorFromString(selectorName); class_addMethod(self, selector, implementation, types); diff --git a/Example/Pods/Quick/Sources/Quick/QuickTestSuite.swift b/Example/Pods/Quick/Sources/Quick/QuickTestSuite.swift new file mode 100644 index 0000000..0cb5187 --- /dev/null +++ b/Example/Pods/Quick/Sources/Quick/QuickTestSuite.swift @@ -0,0 +1,52 @@ +#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) + +import XCTest + +/** + This protocol defines the role of an object that builds test suites. + */ +internal protocol QuickTestSuiteBuilder { + + /** + Construct a `QuickTestSuite` instance with the appropriate test cases added as tests. + + Subsequent calls to this method should return equivalent test suites. + */ + func buildTestSuite() -> QuickTestSuite + +} + +/** + A base class for a class cluster of Quick test suites, that should correctly + build dynamic test suites for XCTest to execute. + */ +public class QuickTestSuite: XCTestSuite { + + private static var builtTestSuites: Set = Set() + + /** + Construct a test suite for a specific, selected subset of test cases (rather + than the default, which as all test cases). + + If this method is called multiple times for the same test case class, e.g.. + + FooSpec/testFoo + FooSpec/testBar + + It is expected that the first call should return a valid test suite, and + all subsequent calls should return `nil`. + */ + public static func selectedTestSuite(forTestCaseWithName name: String) -> QuickTestSuite? { + guard let builder = QuickSelectedTestSuiteBuilder(forTestCaseWithName: name) else { return nil } + + if builtTestSuites.contains(builder.testSuiteClassName) { + return nil + } else { + builtTestSuites.insert(builder.testSuiteClassName) + return builder.buildTestSuite() + } + } + +} + +#endif diff --git a/Example/Pods/Quick/Sources/Quick/String+FileName.swift b/Example/Pods/Quick/Sources/Quick/String+FileName.swift new file mode 100644 index 0000000..87cea7a --- /dev/null +++ b/Example/Pods/Quick/Sources/Quick/String+FileName.swift @@ -0,0 +1,12 @@ +import Foundation + +extension String { + + /** + If the receiver represents a path, returns its file name with a file extension. + */ + var fileName: String? { + return NSURL(string: self)?.URLByDeletingPathExtension?.lastPathComponent + } + +} diff --git a/Example/Pods/Quick/Quick/World.h b/Example/Pods/Quick/Sources/Quick/World.h similarity index 100% rename from Example/Pods/Quick/Quick/World.h rename to Example/Pods/Quick/Sources/Quick/World.h diff --git a/Example/Pods/Quick/Quick/World.swift b/Example/Pods/Quick/Sources/Quick/World.swift similarity index 79% rename from Example/Pods/Quick/Quick/World.swift rename to Example/Pods/Quick/Sources/Quick/World.swift index f24aab8..66e6239 100644 --- a/Example/Pods/Quick/Quick/World.swift +++ b/Example/Pods/Quick/Sources/Quick/World.swift @@ -29,7 +29,7 @@ final internal class World: NSObject { The DSL requires that this group is correctly set in order to build a correct hierarchy of example groups and their examples. */ - internal var currentExampleGroup: ExampleGroup? + internal var currentExampleGroup: ExampleGroup! /** The example metadata of the test that is currently being run. @@ -57,12 +57,7 @@ final internal class World: NSObject { // MARK: Singleton Constructor private override init() {} - private struct Shared { - static let instance = World() - } - internal class func sharedWorld() -> World { - return Shared.instance - } + static let sharedWorld = World() // MARK: Public Interface @@ -107,7 +102,12 @@ final internal class World: NSObject { - returns: The root example group for the class. */ internal func rootExampleGroupForSpecClass(cls: AnyClass) -> ExampleGroup { - let name = NSStringFromClass(cls) + #if _runtime(_ObjC) + let name = NSStringFromClass(cls) + #else + let name = String(cls) + #endif + if let group = specs[name] { return group } else { @@ -130,7 +130,6 @@ final internal class World: NSObject { - parameter specClass: The QuickSpec subclass for which examples are to be returned. - returns: A list of examples to be run as test invocations. */ - @objc(examplesForSpecClass:) internal func examples(specClass: AnyClass) -> [Example] { // 1. Grab all included examples. let included = includedExamples @@ -142,6 +141,13 @@ final internal class World: NSObject { } } +#if _runtime(_ObjC) + @objc(examplesForSpecClass:) + private func objc_examples(specClass: AnyClass) -> [Example] { + return examples(specClass) + } +#endif + // MARK: Internal internal func registerSharedExample(name: String, closure: SharedExampleClosure) { @@ -154,8 +160,30 @@ final internal class World: NSObject { return sharedExamples[name]! } - internal var exampleCount: Int { - return allExamples.count + internal var includedExampleCount: Int { + return includedExamples.count + } + + internal var beforesCurrentlyExecuting: Bool { + let suiteBeforesExecuting = suiteHooks.phase == .BeforesExecuting + let exampleBeforesExecuting = exampleHooks.phase == .BeforesExecuting + var groupBeforesExecuting = false + if let runningExampleGroup = currentExampleMetadata?.example.group { + groupBeforesExecuting = runningExampleGroup.phase == .BeforesExecuting + } + + return suiteBeforesExecuting || exampleBeforesExecuting || groupBeforesExecuting + } + + internal var aftersCurrentlyExecuting: Bool { + let suiteAftersExecuting = suiteHooks.phase == .AftersExecuting + let exampleAftersExecuting = exampleHooks.phase == .AftersExecuting + var groupAftersExecuting = false + if let runningExampleGroup = currentExampleMetadata?.example.group { + groupAftersExecuting = runningExampleGroup.phase == .AftersExecuting + } + + return suiteAftersExecuting || exampleAftersExecuting || groupAftersExecuting } private var allExamples: [Example] { @@ -181,17 +209,13 @@ final internal class World: NSObject { 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() + raiseError("A shared example named '\(name)' has already been registered.") } } 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() + raiseError("No shared example named '\(name)' has been registered. Registered shared examples: '\(Array(sharedExamples.keys))'") } } } diff --git a/Example/Pods/Quick/Sources/Quick/XCTestSuite+QuickTestSuiteBuilder.m b/Example/Pods/Quick/Sources/Quick/XCTestSuite+QuickTestSuiteBuilder.m new file mode 100644 index 0000000..e49939e --- /dev/null +++ b/Example/Pods/Quick/Sources/Quick/XCTestSuite+QuickTestSuiteBuilder.m @@ -0,0 +1,40 @@ +#import +#import +#import + +@interface XCTestSuite (QuickTestSuiteBuilder) +@end + +@implementation XCTestSuite (QuickTestSuiteBuilder) + +/** + In order to ensure we can correctly build dynamic test suites, we need to + replace some of the default test suite constructors. + */ ++ (void)load { + Method testCaseWithName = class_getClassMethod(self, @selector(testSuiteForTestCaseWithName:)); + Method hooked_testCaseWithName = class_getClassMethod(self, @selector(qck_hooked_testSuiteForTestCaseWithName:)); + method_exchangeImplementations(testCaseWithName, hooked_testCaseWithName); +} + +/** + The `+testSuiteForTestCaseWithName:` method is called when a specific test case + class is run from the Xcode test navigator. If the built test suite is `nil`, + Xcode will not run any tests for that test case. + + Given if the following test case class is run from the Xcode test navigator: + + FooSpec + testFoo + testBar + + XCTest will invoke this once per test case, with test case names following this format: + + FooSpec/testFoo + FooSpec/testBar + */ ++ (nullable instancetype)qck_hooked_testSuiteForTestCaseWithName:(nonnull NSString *)name { + return [QuickTestSuite selectedTestSuiteForTestCaseWithName:name]; +} + +@end diff --git a/Example/Pods/Target Support Files/Chirp/Info.plist b/Example/Pods/Target Support Files/Chirp/Info.plist index aa182b6..9f5393b 100644 --- a/Example/Pods/Target Support Files/Chirp/Info.plist +++ b/Example/Pods/Target Support Files/Chirp/Info.plist @@ -2,25 +2,25 @@ - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.1.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.1.1 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + diff --git a/Example/Pods/Target Support Files/Nimble/Info.plist b/Example/Pods/Target Support Files/Nimble/Info.plist index 0abb05e..d97d43e 100644 --- a/Example/Pods/Target Support Files/Nimble/Info.plist +++ b/Example/Pods/Target Support Files/Nimble/Info.plist @@ -2,25 +2,25 @@ - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 4.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + diff --git a/Example/Pods/Target Support Files/Nimble/Nimble-umbrella.h b/Example/Pods/Target Support Files/Nimble/Nimble-umbrella.h index 5e5b5c8..3701312 100644 --- a/Example/Pods/Target Support Files/Nimble/Nimble-umbrella.h +++ b/Example/Pods/Target Support Files/Nimble/Nimble-umbrella.h @@ -1,8 +1,9 @@ #import -#import "Nimble.h" #import "DSL.h" #import "NMBExceptionCapture.h" +#import "NMBStringify.h" +#import "Nimble.h" FOUNDATION_EXPORT double NimbleVersionNumber; FOUNDATION_EXPORT const unsigned char NimbleVersionString[]; diff --git a/Example/Pods/Target Support Files/Pods-Chirp_Example/Info.plist b/Example/Pods/Target Support Files/Pods-Chirp_Example/Info.plist index 11db4b7..6974542 100644 --- a/Example/Pods/Target Support Files/Pods-Chirp_Example/Info.plist +++ b/Example/Pods/Target Support Files/Pods-Chirp_Example/Info.plist @@ -2,25 +2,25 @@ - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + diff --git a/Example/Pods/Target Support Files/Pods-Chirp_Tests/Info.plist b/Example/Pods/Target Support Files/Pods-Chirp_Tests/Info.plist index 11db4b7..6974542 100644 --- a/Example/Pods/Target Support Files/Pods-Chirp_Tests/Info.plist +++ b/Example/Pods/Target Support Files/Pods-Chirp_Tests/Info.plist @@ -2,25 +2,25 @@ - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + diff --git a/Example/Pods/Target Support Files/Quick/Info.plist b/Example/Pods/Target Support Files/Quick/Info.plist index fda5845..638b960 100644 --- a/Example/Pods/Target Support Files/Quick/Info.plist +++ b/Example/Pods/Target Support Files/Quick/Info.plist @@ -2,25 +2,25 @@ - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 0.8.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + org.cocoapods.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 0.9.2 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass +