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