diff --git a/.gitignore b/.gitignore index 5a6e99c..55d25b9 100644 --- a/.gitignore +++ b/.gitignore @@ -47,7 +47,7 @@ Pods/ # Carthage # # Add this line if you want to avoid checking in source code from Carthage dependencies. -Carthage/Checkouts +Carthage/ Carthage/Build Frameworks/ diff --git a/.travis.yml b/.travis.yml index f85c8ae..c0d0992 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: objective-c -osx_image: xcode7.2 +osx_image: xcode7.3 before_install: - brew update diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a3b91f..ca7028c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ All notable changes to CreditCardRow will be documented in this file. ### [1.0.0](https://github.com/xmartlabs/CreditCardRow/releases/tag/1.0.0) - + * This is the initial version. diff --git a/Cartfile b/Cartfile index 5c4ddac..e4544a3 100644 --- a/Cartfile +++ b/Cartfile @@ -1,2 +1 @@ github "xmartlabs/Eureka" -github "MaxKramer/SwiftLuhn" diff --git a/Carthage/Checkouts/Nimble/.gitignore b/Carthage/Checkouts/Nimble/.gitignore deleted file mode 100644 index b067294..0000000 --- a/Carthage/Checkouts/Nimble/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -.DS_Store -xcuserdata/ -build/ -.idea -DerivedData/ -Nimble.framework.zip - -# Carthage -# -# Add this line if you want to avoid checking in source code from Carthage dependencies. -# Carthage/Checkouts - -Carthage/Build - -# Swift Package Manager -# -# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. -# Packages/ -.build/ diff --git a/Carthage/Checkouts/Nimble/.ruby-version b/Carthage/Checkouts/Nimble/.ruby-version deleted file mode 100644 index bec3a35..0000000 --- a/Carthage/Checkouts/Nimble/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -system diff --git a/Carthage/Checkouts/Nimble/.swift-version b/Carthage/Checkouts/Nimble/.swift-version deleted file mode 100644 index b814a38..0000000 --- a/Carthage/Checkouts/Nimble/.swift-version +++ /dev/null @@ -1 +0,0 @@ -DEVELOPMENT-SNAPSHOT-2016-02-25-a diff --git a/Carthage/Checkouts/Nimble/.travis.yml b/Carthage/Checkouts/Nimble/.travis.yml deleted file mode 100644 index 4d27258..0000000 --- a/Carthage/Checkouts/Nimble/.travis.yml +++ /dev/null @@ -1,33 +0,0 @@ -osx_image: xcode7.3 -language: generic -matrix: - include: - - os: osx - sudo: required - env: TYPE=podspec - - os: osx - env: NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 TYPE=ios - - os: osx - env: NIMBLE_RUNTIME_TVOS_SDK_VERSION=9.0 TYPE=tvos - - os: osx - env: NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 TYPE=osx - - os: osx - env: TYPE=swiftpm - - os: osx - env: NIMBLE_RUNTIME_IOS_SDK_VERSION=10.0 TYPE=ios - osx_image: xcode8 - - os: osx - env: NIMBLE_RUNTIME_TVOS_SDK_VERSION=10.0 TYPE=tvos - osx_image: xcode8 - - os: osx - env: NIMBLE_RUNTIME_OSX_SDK_VERSION=10.12 TYPE=osx - osx_image: xcode8 - - os: linux - dist: trusty - sudo: required - env: TYPE=swiftpm -install: - - if [[ "$TYPE" == "swiftpm" ]]; then eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)"; fi - - if [[ "$TYPE" == "podspec" ]]; then sudo gem install bundler; bundle install; fi -script: - - ./test $TYPE diff --git a/Carthage/Checkouts/Nimble/CONTRIBUTING.md b/Carthage/Checkouts/Nimble/CONTRIBUTING.md deleted file mode 100644 index a97114f..0000000 --- a/Carthage/Checkouts/Nimble/CONTRIBUTING.md +++ /dev/null @@ -1,112 +0,0 @@ - - - -- [Welcome to Nimble!](#welcome-to-nimble!) - - [Reporting Bugs](#reporting-bugs) - - [Building the Project](#building-the-project) - - [Pull Requests](#pull-requests) - - [Style Conventions](#style-conventions) - - [Core Members](#core-members) - - [Code of Conduct](#code-of-conduct) - - - -# Welcome to Nimble! - -We're building a testing framework for a new generation of Swift and -Objective-C developers. - -Nimble should be easy to use and easy to maintain. Let's keep things -simple and well-tested. - -**tl;dr:** If you've added a file to the project, make sure it's -included in both the OS X and iOS targets. - -## Reporting Bugs - -Nothing is off-limits. If you're having a problem, we want to hear about -it. - -- See a crash? File an issue. -- Code isn't compiling, but you don't know why? Sounds like you should - submit a new issue, bud. -- Went to the kitchen, only to forget why you went in the first place? - Better submit an issue. - -Be sure to include in your issue: - -- Your Xcode version (eg - Xcode 7.0.1 7A1001) -- Your version of Nimble (eg - v2.0.0 or git sha `20a3f3b4e63cc8d97c92c4164bf36f2a2c9a6e1b`) -- What are the steps to reproduce this issue? -- What platform are you using? (eg - OS X, iOS, watchOS, tvOS) -- If the problem is on a UI Testing Bundle, Unit Testing Bundle, or some other target configuration -- Are you using carthage or cocoapods? - -## Building the Project - -- Use `Nimble.xcodeproj` to work on Nimble. - -## Pull Requests - -- Nothing is trivial. Submit pull requests for anything: typos, - whitespace, you name it. -- Not all pull requests will be merged, but all will be acknowledged. If - no one has provided feedback on your request, ping one of the owners - by name. -- Make sure your pull request includes any necessary updates to the - README or other documentation. -- Be sure the unit tests for both the OS X and iOS targets of Nimble - before submitting your pull request. You can run all the OS X & iOS unit - tests using `./test`. -- If you've added a file to the project, make sure it's included in both - the OS X and iOS targets. -- The `master` branch will always support the stable Xcode version. Other - branches will point to their corresponding versions they support. -- If you're making a configuration change, make sure to edit both the xcode - project and the podspec file. - -### Style Conventions - -- Indent using 4 spaces. -- Keep lines 100 characters or shorter. Break long statements into - shorter ones over multiple lines. -- In Objective-C, use `#pragma mark -` to mark public, internal, - protocol, and superclass methods. - -## Core Members - -If a few of your pull requests have been merged, and you'd like a -controlling stake in the project, file an issue asking for write access -to the repository. - -### Code of Conduct - -Your conduct as a core member is your own responsibility, but here are -some "ground rules": - -- Feel free to push whatever you want to master, and (if you have - ownership permissions) to create any repositories you'd like. - - Ideally, however, all changes should be submitted as GitHub pull - requests. No one should merge their own pull request, unless no - other core members respond for at least a few days. - - If you'd like to create a new repository, it'd be nice if you created - a GitHub issue and gathered some feedback first. - -- It'd be awesome if you could review, provide feedback on, and close - issues or pull requests submitted to the project. Please provide kind, - constructive feedback. Please don't be sarcastic or snarky. - -### Creating a Release - -The process is relatively straight forward, but here's is a useful checklist for tagging: - -- Look at changes from the previously tagged release and write release notes: `git log v0.4.0...HEAD` -- Run the release script: `./script/release A.B.C release-notes-file` -- The script will prompt you to create a new [GitHub release](https://github.com/Quick/Nimble/releases). - - Use the same release notes you created for the tag, but tweak up formatting for GitHub. -- Update [Quick](https://github.com/Quick/Quick) - - Update Quick's submodule reference to the newly released Nimble version - - Update Nimble version in `README.md` and Documentation in [Quick](https://github.com/Quick/Quick) if it's not a patch version update. -- Announce! diff --git a/Carthage/Checkouts/Nimble/Gemfile b/Carthage/Checkouts/Nimble/Gemfile deleted file mode 100644 index 66d7eff..0000000 --- a/Carthage/Checkouts/Nimble/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -# A sample Gemfile -source "https://rubygems.org" - -gem 'cocoapods' diff --git a/Carthage/Checkouts/Nimble/Gemfile.lock b/Carthage/Checkouts/Nimble/Gemfile.lock deleted file mode 100644 index f5b24cf..0000000 --- a/Carthage/Checkouts/Nimble/Gemfile.lock +++ /dev/null @@ -1,63 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - activesupport (4.2.6) - i18n (~> 0.7) - json (~> 1.7, >= 1.7.7) - minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) - tzinfo (~> 1.1) - claide (0.9.1) - cocoapods (0.39.0) - activesupport (>= 4.0.2) - claide (~> 0.9.1) - cocoapods-core (= 0.39.0) - cocoapods-downloader (~> 0.9.3) - cocoapods-plugins (~> 0.4.2) - cocoapods-search (~> 0.1.0) - cocoapods-stats (~> 0.6.2) - cocoapods-trunk (~> 0.6.4) - cocoapods-try (~> 0.5.1) - colored (~> 1.2) - escape (~> 0.0.4) - molinillo (~> 0.4.0) - nap (~> 1.0) - xcodeproj (~> 0.28.2) - cocoapods-core (0.39.0) - activesupport (>= 4.0.2) - fuzzy_match (~> 2.0.4) - nap (~> 1.0) - cocoapods-downloader (0.9.3) - cocoapods-plugins (0.4.2) - nap - cocoapods-search (0.1.0) - cocoapods-stats (0.6.2) - cocoapods-trunk (0.6.4) - nap (>= 0.8, < 2.0) - netrc (= 0.7.8) - cocoapods-try (0.5.1) - colored (1.2) - escape (0.0.4) - fuzzy_match (2.0.4) - i18n (0.7.0) - json (1.8.3) - minitest (5.8.4) - molinillo (0.4.4) - nap (1.1.0) - netrc (0.7.8) - thread_safe (0.3.5) - tzinfo (1.2.2) - thread_safe (~> 0.1) - xcodeproj (0.28.2) - activesupport (>= 3) - claide (~> 0.9.1) - colored (~> 1.2) - -PLATFORMS - ruby - -DEPENDENCIES - cocoapods - -BUNDLED WITH - 1.11.2 diff --git a/Carthage/Checkouts/Nimble/LICENSE.md b/Carthage/Checkouts/Nimble/LICENSE.md deleted file mode 100644 index 0f3eb71..0000000 --- a/Carthage/Checkouts/Nimble/LICENSE.md +++ /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/Carthage/Checkouts/Nimble/Nimble.podspec b/Carthage/Checkouts/Nimble/Nimble.podspec deleted file mode 100644 index ba97d66..0000000 --- a/Carthage/Checkouts/Nimble/Nimble.podspec +++ /dev/null @@ -1,22 +0,0 @@ -Pod::Spec.new do |s| - s.name = "Nimble" - s.version = "4.1.0" - s.summary = "A Matcher Framework for Swift and Objective-C" - s.description = <<-DESC - Use Nimble to express the expected outcomes of Swift or Objective-C expressions. Inspired by Cedar. - DESC - s.homepage = "https://github.com/Quick/Nimble" - s.license = { :type => "Apache 2.0", :file => "LICENSE.md" } - s.author = "Quick Contributors" - s.ios.deployment_target = "7.0" - s.osx.deployment_target = "10.9" - s.tvos.deployment_target = "9.0" - s.source = { :git => "https://github.com/Quick/Nimble.git", :tag => "v#{s.version}" } - - s.source_files = "Sources/Nimble/**/*.{swift,h,m}" - s.private_header_files = "Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h" - s.exclude_files = "Sources/Nimble/Adapters/NonObjectiveC/*.swift" - s.weak_framework = "XCTest" - s.requires_arc = true - s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO', 'OTHER_LDFLAGS' => '-weak-lswiftXCTest', 'FRAMEWORK_SEARCH_PATHS' => '$(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks"' } -end diff --git a/Carthage/Checkouts/Nimble/Nimble.xcodeproj/project.pbxproj b/Carthage/Checkouts/Nimble/Nimble.xcodeproj/project.pbxproj deleted file mode 100644 index cfbc6af..0000000 --- a/Carthage/Checkouts/Nimble/Nimble.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1906 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; - 1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; - 1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; - 1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; - 1F14FB64194180C5009F2A08 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; - 1F1871C51CA89EDB00A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871C61CA89EDB00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F1871C71CA89EDB00A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871C81CA89EDB00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F1871C91CA89EDB00A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871CA1CA89EDB00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F1871CB1CA89EDB00A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; - 1F1871CC1CA89EDB00A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; - 1F1871D21CA89EEE00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F1871D31CA89EEE00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F1871D41CA89EEE00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F1871D61CA89EEF00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F1871D71CA89EEF00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F1871D81CA89EEF00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F1871D91CA89EF100A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; - 1F1871DA1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; - 1F1871DB1CA89EF100A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; - 1F1871DC1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; - 1F1871DD1CA89EF500A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871DE1CA89EF500A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871DF1CA89EF500A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871E01CA89EF600A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871E11CA89EF600A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871E21CA89EF600A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871E41CA89FB600A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; - 1F1871E61CA89FCD00A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; - 1F1871E71CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; - 1F1871E81CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; - 1F1871E91CA8A18700A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; - 1F1871EB1CA8A18800A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; - 1F1A742F1940169200FFFC47 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F1A74291940169200FFFC47 /* Nimble.framework */; }; - 1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; - 1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; - 1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; - 1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; - 1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; - 1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; - 1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; - 1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; - 1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; - 1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; - 1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */; }; - 1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; - 1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; - 1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; - 1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; - 1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; - 1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; - 1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; - 1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; - 1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; - 1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; - 1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; - 1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; - 1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; - 1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; - 1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; - 1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; - 1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; - 1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; - 1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; - 1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; - 1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; - 1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; - 1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; - 1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; - 1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; - 1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; - 1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; - 1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; - 1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; - 1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; - 1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; - 1F5DF18C1BDCA0F500C3A531 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; - 1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; - 1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; - 1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; - 1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; - 1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; - 1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; - 1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; - 1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; - 1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; - 1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; - 1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; - 1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; - 1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; - 1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; - 1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; - 1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; - 1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; - 1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; - 1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; - 1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; - 1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; - 1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; - 1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; - 1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; - 1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; - 1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; - 1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; - 1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; - 1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F91DD2D1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; - 1F91DD2E1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; - 1F91DD2F1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; - 1F91DD311C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; - 1F91DD321C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; - 1F91DD331C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; - 1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F925EAD195C0D6300ED456B /* Nimble.framework */; }; - 1F925EC7195C0DD100ED456B /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F925EE2195C0DFD00ED456B /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; - 1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; - 1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; - 1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; - 1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; - 1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; - 1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; - 1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; - 1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; - 1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; - 1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; - 1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; - 1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; - 1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; - 1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; - 1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; - 1F925F00195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; - 1F925F02195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; - 1F925F03195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; - 1F925F05195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; - 1F925F06195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; - 1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; - 1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; - 1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; - 1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; - 1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; - 1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; - 1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; - 1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; - 1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; - 1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; - 1FC494AA1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; - 1FC494AB1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; - 1FC494AC1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; - 1FCF914F1C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; - 1FCF91501C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; - 1FCF91511C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; - 1FCF91531C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; - 1FCF91541C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; - 1FCF91551C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; - 1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; - 1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; - 1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; - 1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; - 1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; - 1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; - 1FD8CD341968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; - 1FD8CD351968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; - 1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; - 1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; - 1FD8CD381968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; - 1FD8CD391968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; - 1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; - 1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; - 1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; - 1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; - 1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; - 1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; - 1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; - 1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; - 1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; - 1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; - 1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; - 1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; - 1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; - 1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; - 1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; - 1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; - 1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; - 1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; - 1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; - 1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; - 1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; - 1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; - 1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; - 1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; - 1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; - 1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; - 1FD8CD561968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; - 1FD8CD571968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; - 1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; - 1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; - 1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; - 1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; - 1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; - 1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; - 1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; - 1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; - 1FD8CD6A1968AB07008ED995 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; - 1FD8CD6B1968AB07008ED995 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; - 1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; - 1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; - 29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; - 29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; - 29EA59661B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; - 29EA59671B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; - 347155CA1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; - 347155CB1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; - 347155CC1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; - 472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; - 472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; - 472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; - 472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; - 4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 7B5358BA1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; - 7B5358BB1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; - 7B5358BC1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; - 7B5358BE1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; - 7B5358BF1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; - 7B5358C01C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; - 7B5358C51C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 7B5358C61C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 8DF1C3F71C94FC75004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 8DF1C3F81C94FC75004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 8DF1C3F91C94FD0C004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - 965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; - 965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; - AE4BA9AD1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; - AE4BA9AE1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; - AE4BA9AF1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; - AE7ADE451C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; - AE7ADE461C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; - AE7ADE471C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; - AE7ADE491C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; - AE7ADE4A1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; - AE7ADE4B1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; - DA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; - DA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; - DD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; - DD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; - DD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; - DD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; - DDB1BC791A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; - DDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; - DDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; - DDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; - DDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; - DDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; - DDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - DDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - F8A1BE2F1CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - F8A1BE301CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; - F8A1BE311CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 1F1A74361940169200FFFC47 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1A74281940169200FFFC47; - remoteInfo = "Nimble-iOS"; - }; - 1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F5DF1541BDCA0CE00C3A531; - remoteInfo = "Nimble-tvOS"; - }; - 1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1A74281940169200FFFC47; - remoteInfo = "Nimble-iOS"; - }; - 1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1A74281940169200FFFC47; - remoteInfo = Nimble; - }; - 1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1A74281940169200FFFC47; - remoteInfo = Nimble; - }; - 1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F925EAC195C0D6300ED456B; - remoteInfo = "Nimble-OSX"; - }; - 1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F925EAC195C0D6300ED456B; - remoteInfo = "Nimble-OSX"; - }; - 1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F925EAC195C0D6300ED456B; - remoteInfo = "Nimble-OSX"; - }; - 1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F925EAC195C0D6300ED456B; - remoteInfo = "Nimble-OSX"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectWithLazyProperty.swift; sourceTree = ""; }; - 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronousTests.swift; sourceTree = ""; }; - 1F14FB63194180C5009F2A08 /* utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = utils.swift; sourceTree = ""; }; - 1F1871BC1CA89EDB00A34BF2 /* DSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DSL.h; sourceTree = ""; }; - 1F1871BD1CA89EDB00A34BF2 /* DSL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DSL.m; sourceTree = ""; }; - 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMBExceptionCapture.h; sourceTree = ""; }; - 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMBExceptionCapture.m; sourceTree = ""; }; - 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMBStringify.h; sourceTree = ""; }; - 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMBStringify.m; sourceTree = ""; }; - 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMBExpectation.swift; sourceTree = ""; }; - 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMBObjCMatcher.swift; sourceTree = ""; }; - 1F1871CD1CA89EE000A34BF2 /* ExceptionCapture.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExceptionCapture.swift; sourceTree = ""; }; - 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncMatcherWrapper.swift; sourceTree = ""; }; - 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherFunc.swift; sourceTree = ""; }; - 1F1A74291940169200FFFC47 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F1A742D1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1F1A742E1940169200FFFC47 /* Nimble.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Nimble.h; sourceTree = ""; }; - 1F1A74341940169200FFFC47 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F1A743A1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAKindOfTest.swift; sourceTree = ""; }; - 1F2752D119445B8400052A26 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; lineEnding = 0; path = README.md; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.markdown; }; - 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmptyTest.swift; sourceTree = ""; }; - 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAsyncTest.m; sourceTree = ""; }; - 1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NimbleSpecHelper.h; sourceTree = ""; }; - 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeAnInstanceOfTest.m; sourceTree = ""; }; - 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeKindOfTest.m; sourceTree = ""; }; - 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeCloseToTest.m; sourceTree = ""; }; - 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeginWithTest.m; sourceTree = ""; }; - 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanTest.m; sourceTree = ""; }; - 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanOrEqualToTest.m; sourceTree = ""; }; - 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeIdenticalToTest.m; sourceTree = ""; }; - 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanTest.m; sourceTree = ""; }; - 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanOrEqualToTest.m; sourceTree = ""; }; - 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTruthyTest.m; sourceTree = ""; }; - 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalsyTest.m; sourceTree = ""; }; - 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTrueTest.m; sourceTree = ""; }; - 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalseTest.m; sourceTree = ""; }; - 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeNilTest.m; sourceTree = ""; }; - 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCContainTest.m; sourceTree = ""; }; - 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEndWithTest.m; sourceTree = ""; }; - 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEqualTest.m; sourceTree = ""; }; - 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCMatchTest.m; sourceTree = ""; }; - 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCRaiseExceptionTest.m; sourceTree = ""; }; - 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSyncTest.m; sourceTree = ""; }; - 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeVoidTest.swift; sourceTree = ""; }; - 1F91DD301C74BF61002C309F /* BeVoid.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeVoid.swift; sourceTree = ""; }; - 1F925EAD195C0D6300ED456B /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F925EE5195C121200ED456B /* AsynchronousTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsynchronousTest.swift; sourceTree = ""; }; - 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOfTest.swift; sourceTree = ""; }; - 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RaisesExceptionTest.swift; sourceTree = ""; }; - 1F925EEE195C136500ED456B /* BeLogicalTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLogicalTest.swift; sourceTree = ""; }; - 1F925EF5195C147800ED456B /* BeCloseToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseToTest.swift; sourceTree = ""; }; - 1F925EF8195C175000ED456B /* BeNilTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeNilTest.swift; sourceTree = ""; }; - 1F925EFB195C186800ED456B /* BeginWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeginWithTest.swift; sourceTree = ""; }; - 1F925EFE195C187600ED456B /* EndWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWithTest.swift; sourceTree = ""; }; - 1F925F01195C189500ED456B /* ContainTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContainTest.swift; sourceTree = ""; }; - 1F925F04195C18B700ED456B /* EqualTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EqualTest.swift; sourceTree = ""; }; - 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanTest.swift; sourceTree = ""; }; - 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanTest.swift; sourceTree = ""; }; - 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanOrEqualToTest.swift; sourceTree = ""; }; - 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanOrEqualToTest.swift; sourceTree = ""; }; - 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeEmptyTest.m; sourceTree = ""; }; - 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToTest.swift; sourceTree = ""; }; - 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NimbleEnvironment.swift; sourceTree = ""; }; - 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostNotificationTest.swift; sourceTree = ""; }; - 1FCF91521C61C8A400B15DCB /* PostNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostNotification.swift; sourceTree = ""; }; - 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionRecorder.swift; sourceTree = ""; }; - 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdapterProtocols.swift; sourceTree = ""; }; - 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NimbleXCTestHandler.swift; sourceTree = ""; }; - 1FD8CD081968AB07008ED995 /* DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DSL.swift; sourceTree = ""; }; - 1FD8CD091968AB07008ED995 /* Expectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expectation.swift; sourceTree = ""; }; - 1FD8CD0A1968AB07008ED995 /* Expression.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expression.swift; sourceTree = ""; }; - 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FailureMessage.swift; sourceTree = ""; }; - 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOf.swift; sourceTree = ""; }; - 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeAKindOf.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseTo.swift; sourceTree = ""; }; - 1FD8CD101968AB07008ED995 /* BeEmpty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmpty.swift; sourceTree = ""; }; - 1FD8CD111968AB07008ED995 /* BeginWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeginWith.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThan.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThanOrEqualTo.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeIdenticalTo.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD151968AB07008ED995 /* BeLessThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThan.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThanOrEqual.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD171968AB07008ED995 /* BeLogical.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLogical.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD181968AB07008ED995 /* BeNil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeNil.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD1A1968AB07008ED995 /* Contain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Contain.swift; sourceTree = ""; }; - 1FD8CD1B1968AB07008ED995 /* EndWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWith.swift; sourceTree = ""; }; - 1FD8CD1C1968AB07008ED995 /* Equal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Equal.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherProtocols.swift; sourceTree = ""; }; - 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = RaisesException.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD251968AB07008ED995 /* Functional.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Functional.swift; sourceTree = ""; }; - 1FD8CD261968AB07008ED995 /* Async.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Async.swift; sourceTree = ""; }; - 1FD8CD271968AB07008ED995 /* SourceLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SourceLocation.swift; sourceTree = ""; }; - 1FD8CD281968AB07008ED995 /* Stringers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Stringers.swift; sourceTree = ""; }; - 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionDispatcher.swift; sourceTree = ""; }; - 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowErrorTest.swift; sourceTree = ""; }; - 29EA59651B551EE6002D767E /* ThrowError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowError.swift; sourceTree = ""; }; - 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XCTestCaseProvider.swift; sourceTree = ""; }; - 472FD1341B9E085700C7B8DA /* HaveCount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCount.swift; sourceTree = ""; }; - 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCountTest.swift; sourceTree = ""; }; - 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCHaveCount.m; sourceTree = ""; }; - 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SatisfyAnyOfTest.swift; sourceTree = ""; }; - 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SatisfyAnyOf.swift; sourceTree = ""; }; - 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSatisfyAnyOfTest.m; sourceTree = ""; }; - 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjcStringersTest.m; sourceTree = ""; }; - 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCUserDescriptionTest.m; sourceTree = ""; }; - 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDescriptionTest.swift; sourceTree = ""; }; - AE4BA9AC1C88DDB500B73906 /* Errors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; - AE7ADE441C80BF8000B94CD3 /* MatchError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchError.swift; sourceTree = ""; }; - AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchErrorTest.swift; sourceTree = ""; }; - DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DSL+Wait.swift"; sourceTree = ""; }; - DD72EC631A93874A002F7651 /* AllPassTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPassTest.swift; sourceTree = ""; }; - DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToObjectTest.swift; sourceTree = ""; }; - DDB1BC781A92235600F743C3 /* AllPass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPass.swift; sourceTree = ""; }; - DDB4D5EC19FE43C200E9D9FE /* Match.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Match.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchTest.swift; sourceTree = ""; }; - DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAllPassTest.m; sourceTree = ""; }; - F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestObservationCenter+Register.m"; sourceTree = ""; }; - F8A1BE321CB3777F00031679 /* CurrentTestCaseTracker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CurrentTestCaseTracker.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 1F1A74251940169200FFFC47 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F1A74311940169200FFFC47 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F5DF1511BDCA0CE00C3A531 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F5DF15B1BDCA0CE00C3A531 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F925EA9195C0D6300ED456B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F925EB4195C0D6300ED456B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 1F14FB61194180A7009F2A08 /* Helpers */ = { - isa = PBXGroup; - children = ( - 1F14FB63194180C5009F2A08 /* utils.swift */, - 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */, - 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */, - ); - path = Helpers; - sourceTree = ""; - }; - 1F1871B91CA89E1B00A34BF2 /* ObjectiveC */ = { - isa = PBXGroup; - children = ( - F8A1BE321CB3777F00031679 /* CurrentTestCaseTracker.h */, - 1F1871BC1CA89EDB00A34BF2 /* DSL.h */, - 1F1871BD1CA89EDB00A34BF2 /* DSL.m */, - 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */, - 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */, - 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */, - 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */, - 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */, - 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */, - F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */, - ); - path = ObjectiveC; - sourceTree = ""; - }; - 1F1871BA1CA89E2500A34BF2 /* NonObjectiveC */ = { - isa = PBXGroup; - children = ( - 1F1871CD1CA89EE000A34BF2 /* ExceptionCapture.swift */, - ); - path = NonObjectiveC; - sourceTree = ""; - }; - 1F1A741F1940169200FFFC47 = { - isa = PBXGroup; - children = ( - 1F2752D119445B8400052A26 /* README.md */, - 1F1A742B1940169200FFFC47 /* Nimble */, - 1F1A74381940169200FFFC47 /* NimbleTests */, - 1F1A742A1940169200FFFC47 /* Products */, - ); - sourceTree = ""; - }; - 1F1A742A1940169200FFFC47 /* Products */ = { - isa = PBXGroup; - children = ( - 1F1A74291940169200FFFC47 /* Nimble.framework */, - 1F1A74341940169200FFFC47 /* NimbleTests.xctest */, - 1F925EAD195C0D6300ED456B /* Nimble.framework */, - 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */, - 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */, - 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 1F1A742B1940169200FFFC47 /* Nimble */ = { - isa = PBXGroup; - children = ( - 1FD8CD041968AB07008ED995 /* Adapters */, - 1FD8CD081968AB07008ED995 /* DSL.swift */, - DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */, - 1FD8CD091968AB07008ED995 /* Expectation.swift */, - 1FD8CD0A1968AB07008ED995 /* Expression.swift */, - 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */, - 1F1A742D1940169200FFFC47 /* Info.plist */, - 1FD8CD0C1968AB07008ED995 /* Matchers */, - 1F1A742E1940169200FFFC47 /* Nimble.h */, - 1FD8CD241968AB07008ED995 /* Utils */, - ); - name = Nimble; - path = Sources/Nimble; - sourceTree = ""; - }; - 1F1A74381940169200FFFC47 /* NimbleTests */ = { - isa = PBXGroup; - children = ( - 1F925EE5195C121200ED456B /* AsynchronousTest.swift */, - 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */, - 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */, - 1FFD729A1963FC8200CD29A2 /* objc */, - 1F14FB61194180A7009F2A08 /* Helpers */, - 1F925EE3195C11B000ED456B /* Matchers */, - 1F1A74391940169200FFFC47 /* Supporting Files */, - ); - name = NimbleTests; - path = Tests/Nimble; - sourceTree = ""; - }; - 1F1A74391940169200FFFC47 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 1F1A743A1940169200FFFC47 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 1F925EE3195C11B000ED456B /* Matchers */ = { - isa = PBXGroup; - children = ( - DD72EC631A93874A002F7651 /* AllPassTest.swift */, - 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */, - 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */, - 1F925EF5195C147800ED456B /* BeCloseToTest.swift */, - 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */, - 1F925EFB195C186800ED456B /* BeginWithTest.swift */, - 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */, - 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */, - DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */, - 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */, - 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */, - 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */, - 1F925EEE195C136500ED456B /* BeLogicalTest.swift */, - 1F925EF8195C175000ED456B /* BeNilTest.swift */, - 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */, - 1F925F01195C189500ED456B /* ContainTest.swift */, - 1F925EFE195C187600ED456B /* EndWithTest.swift */, - 1F925F04195C18B700ED456B /* EqualTest.swift */, - 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */, - DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */, - 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */, - 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */, - 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */, - 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */, - AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */, - ); - path = Matchers; - sourceTree = ""; - }; - 1FD8CD041968AB07008ED995 /* Adapters */ = { - isa = PBXGroup; - children = ( - 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */, - 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */, - 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */, - 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */, - 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */, - 1F1871BA1CA89E2500A34BF2 /* NonObjectiveC */, - 1F1871B91CA89E1B00A34BF2 /* ObjectiveC */, - ); - path = Adapters; - sourceTree = ""; - }; - 1FD8CD0C1968AB07008ED995 /* Matchers */ = { - isa = PBXGroup; - children = ( - DDB1BC781A92235600F743C3 /* AllPass.swift */, - 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */, - 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */, - 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */, - 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */, - 1FD8CD101968AB07008ED995 /* BeEmpty.swift */, - 1FD8CD111968AB07008ED995 /* BeginWith.swift */, - 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */, - 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */, - 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */, - 1FD8CD151968AB07008ED995 /* BeLessThan.swift */, - 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */, - 1FD8CD171968AB07008ED995 /* BeLogical.swift */, - 1FD8CD181968AB07008ED995 /* BeNil.swift */, - 1F91DD301C74BF61002C309F /* BeVoid.swift */, - 1FD8CD1A1968AB07008ED995 /* Contain.swift */, - 1FD8CD1B1968AB07008ED995 /* EndWith.swift */, - 1FD8CD1C1968AB07008ED995 /* Equal.swift */, - 472FD1341B9E085700C7B8DA /* HaveCount.swift */, - DDB4D5EC19FE43C200E9D9FE /* Match.swift */, - 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */, - 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */, - AE7ADE441C80BF8000B94CD3 /* MatchError.swift */, - 1FCF91521C61C8A400B15DCB /* PostNotification.swift */, - 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */, - 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */, - 29EA59651B551EE6002D767E /* ThrowError.swift */, - ); - path = Matchers; - sourceTree = ""; - }; - 1FD8CD241968AB07008ED995 /* Utils */ = { - isa = PBXGroup; - children = ( - 1FD8CD251968AB07008ED995 /* Functional.swift */, - 1FD8CD261968AB07008ED995 /* Async.swift */, - 1FD8CD271968AB07008ED995 /* SourceLocation.swift */, - 1FD8CD281968AB07008ED995 /* Stringers.swift */, - AE4BA9AC1C88DDB500B73906 /* Errors.swift */, - ); - path = Utils; - sourceTree = ""; - }; - 1FFD729A1963FC8200CD29A2 /* objc */ = { - isa = PBXGroup; - children = ( - 1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */, - 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */, - 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */, - 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */, - 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */, - 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */, - 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */, - 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */, - 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */, - 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */, - 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */, - 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */, - 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */, - 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */, - 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */, - 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */, - 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */, - 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */, - 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */, - 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */, - 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */, - 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */, - 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */, - 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */, - 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */, - DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */, - 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */, - 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */, - ); - path = objc; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 1F1A74261940169200FFFC47 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F1871C91CA89EDB00A34BF2 /* NMBStringify.h in Headers */, - 1F1871C51CA89EDB00A34BF2 /* DSL.h in Headers */, - 1F1871C71CA89EDB00A34BF2 /* NMBExceptionCapture.h in Headers */, - 1F1A742F1940169200FFFC47 /* Nimble.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F5DF1521BDCA0CE00C3A531 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F1871E21CA89EF600A34BF2 /* NMBStringify.h in Headers */, - 1F1871E01CA89EF600A34BF2 /* DSL.h in Headers */, - 1F1871E11CA89EF600A34BF2 /* NMBExceptionCapture.h in Headers */, - 1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F925EAA195C0D6300ED456B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F1871DF1CA89EF500A34BF2 /* NMBStringify.h in Headers */, - 1F1871DD1CA89EF500A34BF2 /* DSL.h in Headers */, - 1F1871DE1CA89EF500A34BF2 /* NMBExceptionCapture.h in Headers */, - 1F925EC7195C0DD100ED456B /* Nimble.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 1F1A74281940169200FFFC47 /* Nimble-iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOS" */; - buildPhases = ( - 1F1A74241940169200FFFC47 /* Sources */, - 1F1A74251940169200FFFC47 /* Frameworks */, - 1F1A74261940169200FFFC47 /* Headers */, - 1F1A74271940169200FFFC47 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Nimble-iOS"; - productName = "Nimble-iOS"; - productReference = 1F1A74291940169200FFFC47 /* Nimble.framework */; - productType = "com.apple.product-type.framework"; - }; - 1F1A74331940169200FFFC47 /* Nimble-iOSTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOSTests" */; - buildPhases = ( - 1F1A74301940169200FFFC47 /* Sources */, - 1F1A74311940169200FFFC47 /* Frameworks */, - 1F1A74321940169200FFFC47 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1F1A74371940169200FFFC47 /* PBXTargetDependency */, - 1F925EA5195C0C8500ED456B /* PBXTargetDependency */, - 1F925EA7195C0C8500ED456B /* PBXTargetDependency */, - 1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */, - ); - name = "Nimble-iOSTests"; - productName = "Nimble-iOSTests"; - productReference = 1F1A74341940169200FFFC47 /* NimbleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOS" */; - buildPhases = ( - 1F5DF1501BDCA0CE00C3A531 /* Sources */, - 1F5DF1511BDCA0CE00C3A531 /* Frameworks */, - 1F5DF1521BDCA0CE00C3A531 /* Headers */, - 1F5DF1531BDCA0CE00C3A531 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Nimble-tvOS"; - productName = "Nimble-tvOS"; - productReference = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */; - productType = "com.apple.product-type.framework"; - }; - 1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOSTests" */; - buildPhases = ( - 1F5DF15A1BDCA0CE00C3A531 /* Sources */, - 1F5DF15B1BDCA0CE00C3A531 /* Frameworks */, - 1F5DF15C1BDCA0CE00C3A531 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */, - ); - name = "Nimble-tvOSTests"; - productName = "Nimble-tvOSTests"; - productReference = 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 1F925EAC195C0D6300ED456B /* Nimble-OSX */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSX" */; - buildPhases = ( - 1F925EA8195C0D6300ED456B /* Sources */, - 1F925EA9195C0D6300ED456B /* Frameworks */, - 1F925EAA195C0D6300ED456B /* Headers */, - 1F925EAB195C0D6300ED456B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Nimble-OSX"; - productName = "Nimble-OSX"; - productReference = 1F925EAD195C0D6300ED456B /* Nimble.framework */; - productType = "com.apple.product-type.framework"; - }; - 1F925EB6195C0D6300ED456B /* Nimble-OSXTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSXTests" */; - buildPhases = ( - 1F925EB3195C0D6300ED456B /* Sources */, - 1F925EB4195C0D6300ED456B /* Frameworks */, - 1F925EB5195C0D6300ED456B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1F925EBA195C0D6300ED456B /* PBXTargetDependency */, - 1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */, - 1F9B7C001968AD760094EB8F /* PBXTargetDependency */, - 1F9B7C021968AD820094EB8F /* PBXTargetDependency */, - ); - name = "Nimble-OSXTests"; - productName = "Nimble-OSXTests"; - productReference = 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 1F1A74201940169200FFFC47 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0730; - LastUpgradeCheck = 0710; - ORGANIZATIONNAME = "Jeff Hui"; - TargetAttributes = { - 1F1A74281940169200FFFC47 = { - CreatedOnToolsVersion = 6.0; - }; - 1F1A74331940169200FFFC47 = { - CreatedOnToolsVersion = 6.0; - TestTargetID = 1F1A74281940169200FFFC47; - }; - 1F5DF1541BDCA0CE00C3A531 = { - CreatedOnToolsVersion = 7.1; - }; - 1F5DF15D1BDCA0CE00C3A531 = { - CreatedOnToolsVersion = 7.1; - }; - 1F925EAC195C0D6300ED456B = { - CreatedOnToolsVersion = 6.0; - }; - 1F925EB6195C0D6300ED456B = { - CreatedOnToolsVersion = 6.0; - TestTargetID = 1F925EAC195C0D6300ED456B; - }; - }; - }; - buildConfigurationList = 1F1A74231940169200FFFC47 /* Build configuration list for PBXProject "Nimble" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 1F1A741F1940169200FFFC47; - productRefGroup = 1F1A742A1940169200FFFC47 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 1F1A74281940169200FFFC47 /* Nimble-iOS */, - 1F1A74331940169200FFFC47 /* Nimble-iOSTests */, - 1F925EAC195C0D6300ED456B /* Nimble-OSX */, - 1F925EB6195C0D6300ED456B /* Nimble-OSXTests */, - 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */, - 1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 1F1A74271940169200FFFC47 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F1A74321940169200FFFC47 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F5DF1531BDCA0CE00C3A531 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F5DF15C1BDCA0CE00C3A531 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F925EAB195C0D6300ED456B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F925EB5195C0D6300ED456B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 1F1A74241940169200FFFC47 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */, - 1F1871C81CA89EDB00A34BF2 /* NMBExceptionCapture.m in Sources */, - 1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */, - 1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */, - 1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */, - 1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */, - 1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */, - 1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */, - 1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */, - AE4BA9AD1C88DDB500B73906 /* Errors.swift in Sources */, - 1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */, - 1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */, - 1F1871CB1CA89EDB00A34BF2 /* NMBExpectation.swift in Sources */, - DA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */, - DDB1BC791A92235600F743C3 /* AllPass.swift in Sources */, - 1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */, - DDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */, - 1F91DD311C74BF61002C309F /* BeVoid.swift in Sources */, - 1FCF91531C61C8A400B15DCB /* PostNotification.swift in Sources */, - 1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */, - 29EA59661B551EE6002D767E /* ThrowError.swift in Sources */, - 1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */, - 1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */, - 1F1871CC1CA89EDB00A34BF2 /* NMBObjCMatcher.swift in Sources */, - 1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */, - F8A1BE2F1CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, - 1F1871C61CA89EDB00A34BF2 /* DSL.m in Sources */, - 1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */, - AE7ADE451C80BF8000B94CD3 /* MatchError.swift in Sources */, - 1FC494AA1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, - 1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */, - 1FD8CD561968AB07008ED995 /* Contain.swift in Sources */, - 1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */, - 1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */, - 1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */, - 1F1871E61CA89FCD00A34BF2 /* MatcherFunc.swift in Sources */, - 1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */, - 1F1871E41CA89FB600A34BF2 /* AsyncMatcherWrapper.swift in Sources */, - 1F1871CA1CA89EDB00A34BF2 /* NMBStringify.m in Sources */, - 1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */, - 1FD8CD6A1968AB07008ED995 /* Async.swift in Sources */, - 1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */, - 1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */, - 1FD8CD341968AB07008ED995 /* DSL.swift in Sources */, - 7B5358BE1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, - 1FD8CD381968AB07008ED995 /* Expression.swift in Sources */, - 1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */, - 472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F1A74301940169200FFFC47 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */, - 1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */, - 1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */, - 1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */, - 1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */, - 1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */, - 1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */, - 1F14FB64194180C5009F2A08 /* utils.swift in Sources */, - DDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */, - 1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */, - 1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */, - 8DF1C3F71C94FC75004B2D36 /* ObjcStringersTest.m in Sources */, - 1F925F02195C189500ED456B /* ContainTest.swift in Sources */, - 1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */, - 1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */, - 1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */, - 1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */, - 1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */, - 1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */, - 1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */, - 1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */, - 1F91DD2D1C74BF36002C309F /* BeVoidTest.swift in Sources */, - 1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */, - 1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */, - 1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */, - 1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */, - 1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */, - 965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */, - 1FCF914F1C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, - 965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */, - 1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */, - 1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */, - 1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */, - 1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */, - 1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */, - 1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, - AE7ADE491C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, - 1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */, - DDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */, - 1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */, - 1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */, - 1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */, - 1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */, - DD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */, - 1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */, - 347155CA1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, - 4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */, - 1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */, - 7B5358BA1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, - 1F925F05195C18B700ED456B /* EqualTest.swift in Sources */, - 1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */, - DD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */, - 7B5358C51C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */, - 1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */, - 1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */, - 29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */, - 1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */, - 472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F5DF1501BDCA0CE00C3A531 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */, - 1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */, - 1F1871D71CA89EEF00A34BF2 /* NMBExceptionCapture.m in Sources */, - 1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */, - 1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */, - 1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */, - 1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */, - 1F1871E81CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */, - 1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */, - 1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */, - 1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */, - AE4BA9AF1C88DDB500B73906 /* Errors.swift in Sources */, - 1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */, - 1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */, - 1F1871DB1CA89EF100A34BF2 /* NMBExpectation.swift in Sources */, - 1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */, - 1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */, - 1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */, - 1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */, - 1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */, - 1F91DD331C74BF61002C309F /* BeVoid.swift in Sources */, - 1FCF91551C61C8A400B15DCB /* PostNotification.swift in Sources */, - 1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */, - 1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */, - 1F1871DC1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */, - F8A1BE311CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, - 1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */, - 1F1871D61CA89EEF00A34BF2 /* DSL.m in Sources */, - 1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */, - AE7ADE471C80BF8000B94CD3 /* MatchError.swift in Sources */, - 1FC494AC1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, - 1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */, - 1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */, - 1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */, - 1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */, - 1F1871E91CA8A18700A34BF2 /* MatcherFunc.swift in Sources */, - 1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */, - 1F5DF18C1BDCA0F500C3A531 /* Async.swift in Sources */, - 1F1871D81CA89EEF00A34BF2 /* NMBStringify.m in Sources */, - 1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */, - 1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */, - 1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */, - 1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */, - 1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */, - 1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */, - 7B5358C01C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, - 1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */, - 1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F5DF15A1BDCA0CE00C3A531 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */, - 1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */, - 1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */, - 1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */, - 7B5358BC1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, - 1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */, - 1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */, - 1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */, - 1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */, - AE7ADE4B1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, - 1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */, - 1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */, - 1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */, - 1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */, - 1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */, - 1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */, - 1FCF91511C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, - 1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */, - 1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */, - 1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */, - 1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */, - 1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */, - 1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */, - 1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */, - 1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */, - 347155CC1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, - 1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */, - 8DF1C3F91C94FD0C004B2D36 /* ObjcStringersTest.m in Sources */, - 1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */, - 1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */, - 1F91DD2F1C74BF36002C309F /* BeVoidTest.swift in Sources */, - 1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F925EA8195C0D6300ED456B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */, - 1F1871D31CA89EEE00A34BF2 /* NMBExceptionCapture.m in Sources */, - 1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */, - 1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */, - 1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */, - 1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */, - 1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */, - 1F1871E71CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */, - 1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */, - 1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */, - AE4BA9AE1C88DDB500B73906 /* Errors.swift in Sources */, - 1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */, - 1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */, - 1F1871D91CA89EF100A34BF2 /* NMBExpectation.swift in Sources */, - DA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */, - DDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */, - 1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */, - 1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */, - 1F91DD321C74BF61002C309F /* BeVoid.swift in Sources */, - 1FCF91541C61C8A400B15DCB /* PostNotification.swift in Sources */, - DDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */, - 29EA59671B551EE6002D767E /* ThrowError.swift in Sources */, - 1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */, - 1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */, - 1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */, - F8A1BE301CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, - 1F1871DA1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */, - 1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */, - 1F1871D21CA89EEE00A34BF2 /* DSL.m in Sources */, - AE7ADE461C80BF8000B94CD3 /* MatchError.swift in Sources */, - 1FC494AB1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, - 1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */, - 1FD8CD571968AB07008ED995 /* Contain.swift in Sources */, - 1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */, - 1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */, - 1F1871EB1CA8A18800A34BF2 /* MatcherFunc.swift in Sources */, - 1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */, - 1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */, - 1F1871D41CA89EEE00A34BF2 /* NMBStringify.m in Sources */, - 1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */, - 1FD8CD6B1968AB07008ED995 /* Async.swift in Sources */, - 1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */, - 1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */, - 1FD8CD351968AB07008ED995 /* DSL.swift in Sources */, - 7B5358BF1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, - 1FD8CD391968AB07008ED995 /* Expression.swift in Sources */, - 1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */, - 472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F925EB3195C0D6300ED456B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */, - 1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */, - 1F925F00195C187600ED456B /* EndWithTest.swift in Sources */, - 1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */, - 1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */, - 1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */, - 1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */, - 1F925EE2195C0DFD00ED456B /* utils.swift in Sources */, - DDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */, - 1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */, - 1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */, - 8DF1C3F81C94FC75004B2D36 /* ObjcStringersTest.m in Sources */, - 1F925F03195C189500ED456B /* ContainTest.swift in Sources */, - 1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */, - 1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */, - 1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */, - 1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */, - 1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */, - 1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */, - 1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */, - 1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */, - 1F91DD2E1C74BF36002C309F /* BeVoidTest.swift in Sources */, - 1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */, - 1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */, - 1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */, - 1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */, - 1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */, - 965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */, - 1FCF91501C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, - 965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */, - 1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */, - 1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */, - 1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */, - 1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */, - 1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */, - 1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, - AE7ADE4A1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, - 1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */, - DDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */, - 1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */, - 1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */, - 1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */, - 1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */, - DD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */, - 1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */, - 347155CB1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, - 4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */, - 1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */, - 7B5358BB1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, - 1F925F06195C18B700ED456B /* EqualTest.swift in Sources */, - 1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */, - DD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */, - 7B5358C61C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */, - 1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */, - 1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */, - 29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */, - 1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */, - 472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 1F1A74371940169200FFFC47 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; - targetProxy = 1F1A74361940169200FFFC47 /* PBXContainerItemProxy */; - }; - 1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */; - targetProxy = 1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */; - }; - 1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; - targetProxy = 1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */; - }; - 1F925EA5195C0C8500ED456B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; - targetProxy = 1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */; - }; - 1F925EA7195C0C8500ED456B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; - targetProxy = 1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */; - }; - 1F925EBA195C0D6300ED456B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; - targetProxy = 1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */; - }; - 1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; - targetProxy = 1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */; - }; - 1F9B7C001968AD760094EB8F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; - targetProxy = 1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */; - }; - 1F9B7C021968AD820094EB8F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; - targetProxy = 1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 1F1A743D1940169200FFFC47 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = NO; - CLANG_LINK_OBJC_RUNTIME = NO; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - METAL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 2.3; - TARGETED_DEVICE_FAMILY = "1,2,3"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 1F1A743E1940169200FFFC47 /* 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 = NO; - CLANG_LINK_OBJC_RUNTIME = NO; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - METAL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_VERSION = 2.3; - TARGETED_DEVICE_FAMILY = "1,2,3"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 1F1A74401940169200FFFC47 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_TREAT_WARNINGS_AS_ERRORS = YES; - INFOPLIST_FILE = Sources/Nimble/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - ONLY_ACTIVE_ARCH = NO; - OTHER_LDFLAGS = ( - "-weak_framework", - XCTest, - "-weak-lswiftXCTest", - ); - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Nimble; - PRODUCT_NAME = Nimble; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 1F1A74411940169200FFFC47 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_TREAT_WARNINGS_AS_ERRORS = YES; - INFOPLIST_FILE = Sources/Nimble/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "-weak_framework", - XCTest, - "-weak-lswiftXCTest", - ); - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Nimble; - PRODUCT_NAME = Nimble; - SKIP_INSTALL = YES; - }; - name = Release; - }; - 1F1A74431940169200FFFC47 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = Tests/Nimble/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - METAL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = NimbleTests; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 1F1A74441940169200FFFC47 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - INFOPLIST_FILE = Tests/Nimble/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - METAL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = NimbleTests; - }; - name = Release; - }; - 1F5DF1661BDCA0CE00C3A531 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = Sources/Nimble/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ( - "-weak_framework", - XCTest, - "-weak-lswiftXCTest", - ); - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Nimble; - PRODUCT_NAME = Nimble; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Debug; - }; - 1F5DF1671BDCA0CE00C3A531 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = Sources/Nimble/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ( - "-weak_framework", - XCTest, - "-weak-lswiftXCTest", - ); - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Nimble; - PRODUCT_NAME = Nimble; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Release; - }; - 1F5DF1681BDCA0CE00C3A531 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = dwarf; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = Tests/Nimble/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = NimbleTests; - SDKROOT = appletvos; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Debug; - }; - 1F5DF1691BDCA0CE00C3A531 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = Tests/Nimble/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = NimbleTests; - SDKROOT = appletvos; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Release; - }; - 1F925EC1195C0D6300ED456B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - FRAMEWORK_VERSION = A; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_TREAT_WARNINGS_AS_ERRORS = YES; - INFOPLIST_FILE = Sources/Nimble/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.9; - METAL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ( - "-weak_framework", - XCTest, - "-weak-lswiftXCTest", - ); - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Nimble; - PRODUCT_NAME = Nimble; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VALID_ARCHS = x86_64; - }; - name = Debug; - }; - 1F925EC2195C0D6300ED456B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - FRAMEWORK_VERSION = A; - GCC_TREAT_WARNINGS_AS_ERRORS = YES; - INFOPLIST_FILE = Sources/Nimble/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.9; - METAL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ( - "-weak_framework", - XCTest, - "-weak-lswiftXCTest", - ); - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Nimble; - PRODUCT_NAME = Nimble; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VALID_ARCHS = x86_64; - }; - name = Release; - }; - 1F925EC4195C0D6300ED456B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(DEVELOPER_FRAMEWORKS_DIR)", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = Tests/Nimble/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.9; - METAL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = NimbleTests; - SDKROOT = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 1F925EC5195C0D6300ED456B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(DEVELOPER_FRAMEWORKS_DIR)", - "$(inherited)", - ); - INFOPLIST_FILE = Tests/Nimble/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.9; - METAL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = NimbleTests; - SDKROOT = macosx; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1F1A74231940169200FFFC47 /* Build configuration list for PBXProject "Nimble" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F1A743D1940169200FFFC47 /* Debug */, - 1F1A743E1940169200FFFC47 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F1A74401940169200FFFC47 /* Debug */, - 1F1A74411940169200FFFC47 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOSTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F1A74431940169200FFFC47 /* Debug */, - 1F1A74441940169200FFFC47 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F5DF1661BDCA0CE00C3A531 /* Debug */, - 1F5DF1671BDCA0CE00C3A531 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOSTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F5DF1681BDCA0CE00C3A531 /* Debug */, - 1F5DF1691BDCA0CE00C3A531 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSX" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F925EC1195C0D6300ED456B /* Debug */, - 1F925EC2195C0D6300ED456B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSXTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F925EC4195C0D6300ED456B /* Debug */, - 1F925EC5195C0D6300ED456B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 1F1A74201940169200FFFC47 /* Project object */; -} diff --git a/Carthage/Checkouts/Nimble/Nimble.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Carthage/Checkouts/Nimble/Nimble.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index a822b74..0000000 --- a/Carthage/Checkouts/Nimble/Nimble.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-OSX.xcscheme b/Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-OSX.xcscheme deleted file mode 100644 index e02d8ff..0000000 --- a/Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-OSX.xcscheme +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-iOS.xcscheme b/Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-iOS.xcscheme deleted file mode 100644 index 9c1e8a4..0000000 --- a/Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-iOS.xcscheme +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-tvOS.xcscheme b/Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-tvOS.xcscheme deleted file mode 100644 index 5e03159..0000000 --- a/Carthage/Checkouts/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-tvOS.xcscheme +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/Nimble/Package.swift b/Carthage/Checkouts/Nimble/Package.swift deleted file mode 100644 index 7843547..0000000 --- a/Carthage/Checkouts/Nimble/Package.swift +++ /dev/null @@ -1,5 +0,0 @@ -import PackageDescription - -let package = Package( - name: "Nimble" -) diff --git a/Carthage/Checkouts/Nimble/README.md b/Carthage/Checkouts/Nimble/README.md deleted file mode 100644 index 6a71957..0000000 --- a/Carthage/Checkouts/Nimble/README.md +++ /dev/null @@ -1,1237 +0,0 @@ -# Nimble - -Use Nimble to express the expected outcomes of Swift -or Objective-C expressions. Inspired by -[Cedar](https://github.com/pivotal/cedar). - -```swift -// Swift - -expect(1 + 1).to(equal(2)) -expect(1.2).to(beCloseTo(1.1, within: 0.1)) -expect(3) > 2 -expect("seahorse").to(contain("sea")) -expect(["Atlantic", "Pacific"]).toNot(contain("Mississippi")) -expect(ocean.isClean).toEventually(beTruthy()) -``` - -# How to Use Nimble - - - -**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)* - -- [Some Background: Expressing Outcomes Using Assertions in XCTest](#some-background-expressing-outcomes-using-assertions-in-xctest) -- [Nimble: Expectations Using `expect(...).to`](#nimble-expectations-using-expectto) - - [Custom Failure Messages](#custom-failure-messages) - - [Type Checking](#type-checking) - - [Operator Overloads](#operator-overloads) - - [Lazily Computed Values](#lazily-computed-values) - - [C Primitives](#c-primitives) - - [Asynchronous Expectations](#asynchronous-expectations) - - [Objective-C Support](#objective-c-support) - - [Disabling Objective-C Shorthand](#disabling-objective-c-shorthand) -- [Built-in Matcher Functions](#built-in-matcher-functions) - - [Equivalence](#equivalence) - - [Identity](#identity) - - [Comparisons](#comparisons) - - [Types/Classes](#typesclasses) - - [Truthiness](#truthiness) - - [Swift Error Handling](#swift-error-handling) - - [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) - - [Verify collection count](#verify-collection-count) - - [Matching a value to any of a group of matchers](#matching-a-value-to-any-of-a-group-of-matchers) -- [Writing Your Own Matchers](#writing-your-own-matchers) - - [Lazy Evaluation](#lazy-evaluation) - - [Type Checking via Swift Generics](#type-checking-via-swift-generics) - - [Customizing Failure Messages](#customizing-failure-messages) - - [Supporting Objective-C](#supporting-objective-c) - - [Properly Handling `nil` in Objective-C Matchers](#properly-handling-nil-in-objective-c-matchers) -- [Installing Nimble](#installing-nimble) - - [Installing Nimble as a Submodule](#installing-nimble-as-a-submodule) - - [Installing Nimble via CocoaPods](#installing-nimble-via-cocoapods) - - [Using Nimble without XCTest](#using-nimble-without-xctest) - - - -# Some Background: Expressing Outcomes Using Assertions in XCTest - -Apple's Xcode includes the XCTest framework, which provides -assertion macros to test whether code behaves properly. -For example, to assert that `1 + 1 = 2`, XCTest has you write: - -```swift -// Swift - -XCTAssertEqual(1 + 1, 2, "expected one plus one to equal two") -``` - -Or, in Objective-C: - -```objc -// Objective-C - -XCTAssertEqual(1 + 1, 2, @"expected one plus one to equal two"); -``` - -XCTest assertions have a couple of drawbacks: - -1. **Not enough macros.** There's no easy way to assert that a string - contains a particular substring, or that a number is less than or - equal to another. -2. **It's hard to write asynchronous tests.** XCTest forces you to write - a lot of boilerplate code. - -Nimble addresses these concerns. - -# Nimble: Expectations Using `expect(...).to` - -Nimble allows you to express expectations using a natural, -easily understood language: - -```swift -// Swift - -import Nimble - -expect(seagull.squawk).to(equal("Squee!")) -``` - -```objc -// Objective-C - -@import Nimble; - -expect(seagull.squawk).to(equal(@"Squee!")); -``` - -> The `expect` function autocompletes to include `file:` and `line:`, - but these parameters are optional. Use the default values to have - Xcode highlight the correct line when an expectation is not met. - -To perform the opposite expectation--to assert something is *not* -equal--use `toNot` or `notTo`: - -```swift -// Swift - -import Nimble - -expect(seagull.squawk).toNot(equal("Oh, hello there!")) -expect(seagull.squawk).notTo(equal("Oh, hello there!")) -``` - -```objc -// Objective-C - -@import Nimble; - -expect(seagull.squawk).toNot(equal(@"Oh, hello there!")); -expect(seagull.squawk).notTo(equal(@"Oh, hello there!")); -``` - -## Custom Failure Messages - -Would you like to add more information to the test's failure messages? Use the `description` optional argument to add your own text: - -```swift -// Swift - -expect(1 + 1).to(equal(3)) -// failed - expected to equal <3>, got <2> - -expect(1 + 1).to(equal(3), description: "Make sure libKindergartenMath is loaded") -// failed - Make sure libKindergartenMath is loaded -// expected to equal <3>, got <2> -``` - -Or the *WithDescription version in Objective-C: - -```objc -// Objective-C - -@import Nimble; - -expect(@(1+1)).to(equal(@3)); -// failed - expected to equal <3.0000>, got <2.0000> - -expect(@(1+1)).toWithDescription(equal(@3), @"Make sure libKindergartenMath is loaded"); -// failed - Make sure libKindergartenMath is loaded -// expected to equal <3.0000>, got <2.0000> -``` - -## Type Checking - -Nimble makes sure you don't compare two types that don't match: - -```swift -// Swift - -// Does not compile: -expect(1 + 1).to(equal("Squee!")) -``` - -> Nimble uses generics--only available in Swift--to ensure - type correctness. That means type checking is - not available when using Nimble in Objective-C. :sob: - -## Operator Overloads - -Tired of so much typing? With Nimble, you can use overloaded operators -like `==` for equivalence, or `>` for comparisons: - -```swift -// Swift - -// Passes if squawk does not equal "Hi!": -expect(seagull.squawk) != "Hi!" - -// Passes if 10 is greater than 2: -expect(10) > 2 -``` - -> Operator overloads are only available in Swift, so you won't be able - to use this syntax in Objective-C. :broken_heart: - -## Lazily Computed Values - -The `expect` function doesn't evaluate the value it's given until it's -time to match. So Nimble can test whether an expression raises an -exception once evaluated: - -```swift -// Swift - -// Note: Swift currently doesn't have exceptions. -// Only Objective-C code can raise exceptions -// that Nimble will catch. -// (see https://github.com/Quick/Nimble/issues/220#issuecomment-172667064) -let exception = NSException( - name: NSInternalInconsistencyException, - reason: "Not enough fish in the sea.", - userInfo: ["something": "is fishy"]) -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( - named: NSInternalInconsistencyException, - reason: "Not enough fish in the sea")) -expect { exception.raise() }.to(raiseException( - named: NSInternalInconsistencyException, - reason: "Not enough fish in the sea", - userInfo: ["something": "is fishy"])) -``` - -Objective-C works the same way, but you must use the `expectAction` -macro when making an expectation on an expression that has no return -value: - -```objc -// Objective-C - -NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException - reason:@"Not enough fish in the sea." - userInfo:nil]; -expectAction(^{ [exception raise]; }).to(raiseException()); - -// Use the property-block syntax to be more specific. -expectAction(^{ [exception raise]; }).to(raiseException().named(NSInternalInconsistencyException)); -expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInternalInconsistencyException). - reason("Not enough fish in the sea")); -expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInternalInconsistencyException). - reason("Not enough fish in the sea"). - userInfo(@{@"something": @"is fishy"})); - -// You can also pass a block for custom matching of the raised exception -expectAction(exception.raise()).to(raiseException().satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(beginWith(NSInternalInconsistencyException)); -})); -``` - -## C Primitives - -Some testing frameworks make it hard to test primitive C values. -In Nimble, it just works: - -```swift -// Swift - -let actual: CInt = 1 -let expectedValue: CInt = 1 -expect(actual).to(equal(expectedValue)) -``` - -In fact, Nimble uses type inference, so you can write the above -without explicitly specifying both types: - -```swift -// Swift - -expect(1 as CInt).to(equal(1)) -``` - -> In Objective-C, Nimble only supports Objective-C objects. To - make expectations on primitive C values, wrap then in an object - literal: - - ```objc - expect(@(1 + 1)).to(equal(@2)); - ``` - -## Asynchronous Expectations - -In Nimble, it's easy to make expectations on values that are updated -asynchronously. Just use `toEventually` or `toEventuallyNot`: - -```swift -// Swift - -dispatch_async(dispatch_get_main_queue()) { - ocean.add("dolphins") - ocean.add("whales") -} -expect(ocean).toEventually(contain("dolphins", "whales")) -``` - - -```objc -// Objective-C -dispatch_async(dispatch_get_main_queue(), ^{ - [ocean add:@"dolphins"]; - [ocean add:@"whales"]; -}); -expect(ocean).toEventually(contain(@"dolphins", @"whales")); -``` - -Note: toEventually triggers its polls on the main thread. Blocking the main -thread will cause Nimble to stop the run loop. This can cause test pollution -for whatever incomplete code that was running on the main thread. Blocking the -main thread can be caused by blocking IO, calls to sleep(), deadlocks, and -synchronous IPC. - -In the above example, `ocean` is constantly re-evaluated. If it ever -contains dolphins and whales, the expectation passes. If `ocean` still -doesn't contain them, even after being continuously re-evaluated for one -whole second, the expectation fails. - -Sometimes it takes more than a second for a value to update. In those -cases, use the `timeout` parameter: - -```swift -// Swift - -// Waits three seconds for ocean to contain "starfish": -expect(ocean).toEventually(contain("starfish"), timeout: 3) -``` - -```objc -// Objective-C - -// Waits three seconds for ocean to contain "starfish": -expect(ocean).withTimeout(3).toEventually(contain(@"starfish")); -``` - -You can also provide a callback by using the `waitUntil` function: - -```swift -// Swift - -waitUntil { done in - // do some stuff that takes a while... - NSThread.sleepForTimeInterval(0.5) - done() -} -``` - -```objc -// Objective-C - -waitUntil(^(void (^done)(void)){ - // do some stuff that takes a while... - [NSThread sleepForTimeInterval:0.5]; - done(); -}); -``` - -`waitUntil` also optionally takes a timeout parameter: - -```swift -// Swift - -waitUntil(timeout: 10) { done in - // do some stuff that takes a while... - NSThread.sleepForTimeInterval(1) - done() -} -``` - -```objc -// Objective-C - -waitUntilTimeout(10, ^(void (^done)(void)){ - // do some stuff that takes a while... - [NSThread sleepForTimeInterval:1]; - done(); -}); -``` - -Note: waitUntil triggers its timeout code on the main thread. Blocking the main -thread will cause Nimble to stop the run loop to continue. This can cause test -pollution for whatever incomplete code that was running on the main thread. -Blocking the main thread can be caused by blocking IO, calls to sleep(), -deadlocks, and synchronous IPC. - -In some cases (e.g. when running on slower machines) it can be useful to modify -the default timeout and poll interval values. This can be done as follows: - -```swift -// Swift - -// Increase the global timeout to 5 seconds: -Nimble.AsyncDefaults.Timeout = 5 - -// Slow the polling interval to 0.1 seconds: -Nimble.AsyncDefaults.PollInterval = 0.1 -``` - -## Objective-C Support - -Nimble has full support for Objective-C. However, there are two things -to keep in mind when using Nimble in Objective-C: - -1. All parameters passed to the `expect` function, as well as matcher - functions like `equal`, must be Objective-C objects: - - ```objc - // Objective-C - - @import Nimble; - - expect(@(1 + 1)).to(equal(@2)); - expect(@"Hello world").to(contain(@"world")); - ``` - -2. To make an expectation on an expression that does not return a value, - such as `-[NSException raise]`, use `expectAction` instead of - `expect`: - - ```objc - // Objective-C - - expectAction(^{ [exception raise]; }).to(raiseException()); - ``` - -## Disabling Objective-C Shorthand - -Nimble provides a shorthand for expressing expectations using the -`expect` function. To disable this shorthand in Objective-C, define the -`NIMBLE_DISABLE_SHORT_SYNTAX` macro somewhere in your code before -importing Nimble: - -```objc -#define NIMBLE_DISABLE_SHORT_SYNTAX 1 - -@import Nimble; - -NMB_expect(^{ return seagull.squawk; }, __FILE__, __LINE__).to(NMB_equal(@"Squee!")); -``` - -> Disabling the shorthand is useful if you're testing functions with - names that conflict with Nimble functions, such as `expect` or - `equal`. If that's not the case, there's no point in disabling the - shorthand. - -# Built-in Matcher Functions - -Nimble includes a wide variety of matcher functions. - -## Equivalence - -```swift -// Swift - -// Passes if actual is equivalent to expected: -expect(actual).to(equal(expected)) -expect(actual) == expected - -// Passes if actual is not equivalent to expected: -expect(actual).toNot(equal(expected)) -expect(actual) != expected -``` - -```objc -// Objective-C - -// Passes if actual is equivalent to expected: -expect(actual).to(equal(expected)) - -// Passes if actual is not equivalent to expected: -expect(actual).toNot(equal(expected)) -``` - -Values must be `Equatable`, `Comparable`, or subclasses of `NSObject`. -`equal` will always fail when used to compare one or more `nil` values. - -## Identity - -```swift -// Swift - -// Passes if actual has the same pointer address as expected: -expect(actual).to(beIdenticalTo(expected)) -expect(actual) === expected - -// Passes if actual does not have the same pointer address as expected: -expect(actual).toNot(beIdenticalTo(expected)) -expect(actual) !== expected -``` - -Its important to remember that `beIdenticalTo` only makes sense when comparing types with reference semantics, which have a notion of identity. In Swift, that means a `class`. This matcher will not work with types with value semantics such as `struct` or `enum`. If you need to compare two value types, you can either compare individual properties or if it makes sense to do so, make your type implement `Equatable` and use Nimble's equivalence matchers instead. - - -```objc -// Objective-C - -// Passes if actual has the same pointer address as expected: -expect(actual).to(beIdenticalTo(expected)); - -// Passes if actual does not have the same pointer address as expected: -expect(actual).toNot(beIdenticalTo(expected)); -``` - -## Comparisons - -```swift -// Swift - -expect(actual).to(beLessThan(expected)) -expect(actual) < expected - -expect(actual).to(beLessThanOrEqualTo(expected)) -expect(actual) <= expected - -expect(actual).to(beGreaterThan(expected)) -expect(actual) > expected - -expect(actual).to(beGreaterThanOrEqualTo(expected)) -expect(actual) >= expected -``` - -```objc -// Objective-C - -expect(actual).to(beLessThan(expected)); -expect(actual).to(beLessThanOrEqualTo(expected)); -expect(actual).to(beGreaterThan(expected)); -expect(actual).to(beGreaterThanOrEqualTo(expected)); -``` - -> Values given to the comparison matchers above must implement - `Comparable`. - -Because of how computers represent floating point numbers, assertions -that two floating point numbers be equal will sometimes fail. To express -that two numbers should be close to one another within a certain margin -of error, use `beCloseTo`: - -```swift -// Swift - -expect(actual).to(beCloseTo(expected, within: delta)) -``` - -```objc -// Objective-C - -expect(actual).to(beCloseTo(expected).within(delta)); -``` - -For example, to assert that `10.01` is close to `10`, you can write: - -```swift -// Swift - -expect(10.01).to(beCloseTo(10, within: 0.1)) -``` - -```objc -// Objective-C - -expect(@(10.01)).to(beCloseTo(@10).within(0.1)); -``` - -There is also an operator shortcut available in Swift: - -```swift -// Swift - -expect(actual) ≈ expected -expect(actual) ≈ (expected, delta) - -``` -(Type Option-x to get ≈ on a U.S. keyboard) - -The former version uses the default delta of 0.0001. Here is yet another way to do this: - -```swift -// Swift - -expect(actual) ≈ expected ± delta -expect(actual) == expected ± delta - -``` -(Type Option-Shift-= to get ± on a U.S. keyboard) - -If you are comparing arrays of floating point numbers, you'll find the following useful: - -```swift -// Swift - -expect([0.0, 2.0]) ≈ [0.0001, 2.0001] -expect([0.0, 2.0]).to(beCloseTo([0.1, 2.1], within: 0.1)) - -``` - -> Values given to the `beCloseTo` matcher must be coercable into a - `Double`. - -## Types/Classes - -```swift -// Swift - -// Passes if instance is an instance of aClass: -expect(instance).to(beAnInstanceOf(aClass)) - -// Passes if instance is an instance of aClass or any of its subclasses: -expect(instance).to(beAKindOf(aClass)) -``` - -```objc -// Objective-C - -// Passes if instance is an instance of aClass: -expect(instance).to(beAnInstanceOf(aClass)); - -// Passes if instance is an instance of aClass or any of its subclasses: -expect(instance).to(beAKindOf(aClass)); -``` - -> Instances must be Objective-C objects: subclasses of `NSObject`, - or Swift objects bridged to Objective-C with the `@objc` prefix. - -For example, to assert that `dolphin` is a kind of `Mammal`: - -```swift -// Swift - -expect(dolphin).to(beAKindOf(Mammal)) -``` - -```objc -// Objective-C - -expect(dolphin).to(beAKindOf([Mammal class])); -``` - -> `beAnInstanceOf` uses the `-[NSObject isMemberOfClass:]` method to - test membership. `beAKindOf` uses `-[NSObject isKindOfClass:]`. - -## Truthiness - -```swift -// Passes if actual is not nil, true, or an object with a boolean value of true: -expect(actual).to(beTruthy()) - -// Passes if actual is only true (not nil or an object conforming to BooleanType true): -expect(actual).to(beTrue()) - -// Passes if actual is nil, false, or an object with a boolean value of false: -expect(actual).to(beFalsy()) - -// Passes if actual is only false (not nil or an object conforming to BooleanType false): -expect(actual).to(beFalse()) - -// Passes if actual is nil: -expect(actual).to(beNil()) -``` - -```objc -// Objective-C - -// Passes if actual is not nil, true, or an object with a boolean value of true: -expect(actual).to(beTruthy()); - -// Passes if actual is only true (not nil or an object conforming to BooleanType true): -expect(actual).to(beTrue()); - -// Passes if actual is nil, false, or an object with a boolean value of false: -expect(actual).to(beFalsy()); - -// Passes if actual is only false (not nil or an object conforming to BooleanType false): -expect(actual).to(beFalse()); - -// Passes if actual is nil: -expect(actual).to(beNil()); -``` - -## Swift Error Handling - -If you're using Swift 2.0+, you can use the `throwError` matcher to check if an error is thrown. - -```swift -// Swift - -// Passes if somethingThatThrows() throws an ErrorType: -expect{ try somethingThatThrows() }.to(throwError()) - -// Passes if somethingThatThrows() throws an error with a given domain: -expect{ try somethingThatThrows() }.to(throwError { (error: ErrorType) in - expect(error._domain).to(equal(NSCocoaErrorDomain)) -}) - -// Passes if somethingThatThrows() throws an error with a given case: -expect{ try somethingThatThrows() }.to(throwError(NSCocoaError.PropertyListReadCorruptError)) - -// Passes if somethingThatThrows() throws an error with a given type: -expect{ try somethingThatThrows() }.to(throwError(errorType: MyError.self)) -``` - -If you are working directly with `ErrorType` values, as is sometimes the case when using `Result` or `Promise` types, you can use the `matchError` matcher to check if the error is the same error is is supposed to be, without requiring explicit casting. - -```swift -// Swift - -let actual: ErrorType = … - -// Passes if actual contains any error value from the MyErrorEnum type: -expect(actual).to(matchError(MyErrorEnum)) - -// Passes if actual contains the Timeout value from the MyErrorEnum type: -expect(actual).to(matchError(MyErrorEnum.Timeout)) - -// Passes if actual contains an NSError equal to the given one: -expect(actual).to(matchError(NSError(domain: "err", code: 123, userInfo: nil))) -``` - -Note: This feature is only available in Swift. - -## Exceptions - -```swift -// Swift - -// 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 and it passes expectations in the block -// (in this case, if name begins with 'a r') -expect { exception.raise() }.to(raiseException { (exception: NSException) in - expect(exception.name).to(beginWith("a r")) -}) -``` - -```objc -// Objective-C - -// 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 and it passes expectations in the block -// (in this case, if name begins with 'a r') -expect(actual).to(raiseException().satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(beginWith(@"a r")); -})); -``` - -Note: Swift currently doesn't have exceptions (see [#220](https://github.com/Quick/Nimble/issues/220#issuecomment-172667064)). Only Objective-C code can raise -exceptions that Nimble will catch. - -## Collection Membership - -```swift -// Swift - -// Passes if all of the expected values are members of actual: -expect(actual).to(contain(expected...)) - -// Passes if actual is an empty collection (it contains no elements): -expect(actual).to(beEmpty()) -``` - -```objc -// Objective-C - -// Passes if expected is a member of actual: -expect(actual).to(contain(expected)); - -// Passes if actual is an empty collection (it contains no elements): -expect(actual).to(beEmpty()); -``` - -> In Swift `contain` takes any number of arguments. The expectation - passes if all of them are members of the collection. In Objective-C, - `contain` only takes one argument [for now](https://github.com/Quick/Nimble/issues/27). - -For example, to assert that a list of sea creature names contains -"dolphin" and "starfish": - -```swift -// Swift - -expect(["whale", "dolphin", "starfish"]).to(contain("dolphin", "starfish")) -``` - -```objc -// Objective-C - -expect(@[@"whale", @"dolphin", @"starfish"]).to(contain(@"dolphin")); -expect(@[@"whale", @"dolphin", @"starfish"]).to(contain(@"starfish")); -``` - -> `contain` and `beEmpty` expect collections to be instances of - `NSArray`, `NSSet`, or a Swift collection composed of `Equatable` elements. - -To test whether a set of elements is present at the beginning or end of -an ordered collection, use `beginWith` and `endWith`: - -```swift -// Swift - -// Passes if the elements in expected appear at the beginning of actual: -expect(actual).to(beginWith(expected...)) - -// Passes if the the elements in expected come at the end of actual: -expect(actual).to(endWith(expected...)) -``` - -```objc -// Objective-C - -// Passes if the elements in expected appear at the beginning of actual: -expect(actual).to(beginWith(expected)); - -// Passes if the the elements in expected come at the end of actual: -expect(actual).to(endWith(expected)); -``` - -> `beginWith` and `endWith` expect collections to be instances of - `NSArray`, or ordered Swift collections composed of `Equatable` - elements. - - Like `contain`, in Objective-C `beginWith` and `endWith` only support - a single argument [for now](https://github.com/Quick/Nimble/issues/27). - -## Strings - -```swift -// Swift - -// Passes if actual contains substring expected: -expect(actual).to(contain(expected)) - -// Passes if actual begins with substring: -expect(actual).to(beginWith(expected)) - -// Passes if actual ends with substring: -expect(actual).to(endWith(expected)) - -// Passes if actual is an empty string, "": -expect(actual).to(beEmpty()) - -// Passes if actual matches the regular expression defined in expected: -expect(actual).to(match(expected)) -``` - -```objc -// Objective-C - -// Passes if actual contains substring expected: -expect(actual).to(contain(expected)); - -// Passes if actual begins with substring: -expect(actual).to(beginWith(expected)); - -// Passes if actual ends with substring: -expect(actual).to(endWith(expected)); - -// Passes if actual is an empty string, "": -expect(actual).to(beEmpty()); - -// Passes if actual matches the regular expression defined in expected: -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. - -## Verify collection count - -```swift -// passes if actual collection's count is equal to expected -expect(actual).to(haveCount(expected)) - -// passes if actual collection's count is not equal to expected -expect(actual).notTo(haveCount(expected)) -``` - -```objc -// passes if actual collection's count is equal to expected -expect(actual).to(haveCount(expected)) - -// passes if actual collection's count is not equal to expected -expect(actual).notTo(haveCount(expected)) -``` - -For Swift the actual value must be a `CollectionType` such as array, dictionary or set. - -For Objective-C the actual value has to be one of the following classes `NSArray`, `NSDictionary`, `NSSet`, `NSHashTable` or one of their subclasses. - -## Matching a value to any of a group of matchers - -```swift -// passes if actual is either less than 10 or greater than 20 -expect(actual).to(satisfyAnyOf(beLessThan(10), beGreaterThan(20))) - -// can include any number of matchers -- the following will pass -// **be careful** -- too many matchers can be the sign of an unfocused test -expect(6).to(satisfyAnyOf(equal(2), equal(3), equal(4), equal(5), equal(6), equal(7))) - -// in Swift you also have the option to use the || operator to achieve a similar function -expect(82).to(beLessThan(50) || beGreaterThan(80)) -``` - -```objc -// passes if actual is either less than 10 or greater than 20 -expect(actual).to(satisfyAnyOf(beLessThan(@10), beGreaterThan(@20))) - -// can include any number of matchers -- the following will pass -// **be careful** -- too many matchers can be the sign of an unfocused test -expect(@6).to(satisfyAnyOf(equal(@2), equal(@3), equal(@4), equal(@5), equal(@6), equal(@7))) -``` - -Note: This matcher allows you to chain any number of matchers together. This provides flexibility, - but if you find yourself chaining many matchers together in one test, consider whether you - could instead refactor that single test into multiple, more precisely focused tests for - better coverage. - -# Writing Your Own Matchers - -In Nimble, matchers are Swift functions that take an expected -value and return a `MatcherFunc` closure. Take `equal`, for example: - -```swift -// Swift - -public func equal(expectedValue: T?) -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "equal <\(expectedValue)>" - return actualExpression.evaluate() == expectedValue - } -} -``` - -The return value of a `MatcherFunc` closure is a `Bool` that indicates -whether the actual value matches the expectation: `true` if it does, or -`false` if it doesn't. - -> The actual `equal` matcher function does not match when either - `actual` or `expected` are nil; the example above has been edited for - brevity. - -Since matchers are just Swift functions, you can define them anywhere: -at the top of your test file, in a file shared by all of your tests, or -in an Xcode project you distribute to others. - -> If you write a matcher you think everyone can use, consider adding it - to Nimble's built-in set of matchers by sending a pull request! Or - distribute it yourself via GitHub. - -For examples of how to write your own matchers, just check out the -[`Matchers` directory](https://github.com/Quick/Nimble/tree/master/Sources/Nimble/Matchers) -to see how Nimble's built-in set of matchers are implemented. You can -also check out the tips below. - -## Lazy Evaluation - -`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 - -public func beNil() -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be nil" - return actualExpression.evaluate() == nil - } -} -``` - -In the above example, `actualExpression` is not `nil`--it is a closure -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 -passed to the `expect` function by modifying the return type. - -For example, the following matcher, `haveDescription`, only accepts actual -values that implement the `Printable` protocol. It checks their `description` -against the one provided to the matcher function, and passes if they are the same: - -```swift -// Swift - -public func haveDescription(description: String) -> MatcherFunc { - return MatcherFunc { actual, failureMessage in - return actual.evaluate().description == description - } -} -``` - -## Customizing Failure Messages - -By default, Nimble outputs the following failure message when an -expectation fails: - -``` -expected to match, got <\(actual)> -``` - -You can customize this message by modifying the `failureMessage` struct -from within your `MatcherFunc` closure. To change the verb "match" to -something else, update the `postfixMessage` property: - -```swift -// Swift - -// Outputs: expected to be under the sea, got <\(actual)> -failureMessage.postfixMessage = "be under the sea" -``` - -You can change how the `actual` value is displayed by updating -`failureMessage.actualValue`. Or, to remove it altogether, set it to -`nil`: - -```swift -// Swift - -// Outputs: expected to be under the sea -failureMessage.actualValue = nil -failureMessage.postfixMessage = "be under the sea" -``` - -## Supporting Objective-C - -To use a custom matcher written in Swift from Objective-C, you'll have -to extend the `NMBObjCMatcher` class, adding a new class method for your -custom matcher. The example below defines the class method -`+[NMBObjCMatcher beNilMatcher]`: - -```swift -// Swift - -extension NMBObjCMatcher { - public class func beNilMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher { actualBlock, failureMessage, location in - let block = ({ actualBlock() as NSObject? }) - let expr = Expression(expression: block, location: location) - return beNil().matches(expr, failureMessage: failureMessage) - } - } -} -``` - -The above allows you to use the matcher from Objective-C: - -```objc -// Objective-C - -expect(actual).to([NMBObjCMatcher beNilMatcher]()); -``` - -To make the syntax easier to use, define a C function that calls the -class method: - -```objc -// Objective-C - -FOUNDATION_EXPORT id beNil() { - return [NMBObjCMatcher beNilMatcher]; -} -``` - -### Properly Handling `nil` in Objective-C Matchers - -When supporting Objective-C, make sure you handle `nil` appropriately. -Like [Cedar](https://github.com/pivotal/cedar/issues/100), -**most matchers do not match with nil**. This is to bring prevent test -writers from being surprised by `nil` values where they did not expect -them. - -Nimble provides the `beNil` matcher function for test writer that want -to make expectations on `nil` objects: - -```objc -// Objective-C - -expect(nil).to(equal(nil)); // fails -expect(nil).to(beNil()); // passes -``` - -If your matcher does not want to match with nil, you use `NonNilMatcherFunc` -and the `canMatchNil` constructor on `NMBObjCMatcher`. Using both types will -automatically generate expected value failure messages when they're nil. - -```swift - -public func beginWith(startingElement: T) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "begin with <\(startingElement)>" - if let actualValue = actualExpression.evaluate() { - var actualGenerator = actualValue.generate() - return actualGenerator.next() == startingElement - } - return false - } -} - -extension NMBObjCMatcher { - public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let actual = actualExpression.evaluate() - let expr = actualExpression.cast { $0 as? NMBOrderedCollection } - return beginWith(expected).matches(expr, failureMessage: failureMessage) - } - } -} -``` - -# Installing Nimble - -> Nimble can be used on its own, or in conjunction with its sister - project, [Quick](https://github.com/Quick/Quick). To install both - 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 CocoaPods, or with -git submodules. - -## Installing Nimble as a Submodule - -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 the Xcode workspace for your project -3. Link Nimble.framework to your test target -4. Start writing expectations! - -For more detailed instructions on each of these steps, -read [How to Install Quick](https://github.com/Quick/Quick#how-to-install-quick). -Ignore the steps involving adding Quick to your project in order to -install just Nimble. - -## Installing Nimble via CocoaPods - -To use Nimble in CocoaPods to test your iOS or OS X applications, add Nimble to -your podfile and add the ```use_frameworks!``` line to enable Swift support for -CocoaPods. - -```ruby -platform :ios, '8.0' - -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 - use_frameworks! - pod 'Nimble', '~> 4.0.0' -end -``` - -Finally run `pod install`. - -## Using Nimble without XCTest - -Nimble is integrated with XCTest to allow it work well when used in Xcode test -bundles, however it can also be used in a standalone app. After installing -Nimble using one of the above methods, there are two additional steps required -to make this work. - -1. Create a custom assertion handler and assign an instance of it to the - global `NimbleAssertionHandler` variable. For example: - -```swift -class MyAssertionHandler : AssertionHandler { - func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { - if (!assertion) { - print("Expectation failed: \(message.stringValue)") - } - } -} -``` -```swift -// Somewhere before you use any assertions -NimbleAssertionHandler = MyAssertionHandler() -``` - -2. Add a post-build action to fix an issue with the Swift XCTest support - library being unnecessarily copied into your app - * Edit your scheme in Xcode, and navigate to Build -> Post-actions - * Click the "+" icon and select "New Run Script Action" - * Open the "Provide build settings from" dropdown and select your target - * Enter the following script contents: -``` -rm "${SWIFT_STDLIB_TOOL_DESTINATION_DIR}/libswiftXCTest.dylib" -``` - -You can now use Nimble assertions in your code and handle failures as you see -fit. diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift deleted file mode 100644 index 306d4ce..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift +++ /dev/null @@ -1,17 +0,0 @@ -import Foundation - -/// Protocol for the assertion handler that Nimble uses for all expectations. -public protocol AssertionHandler { - func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) -} - -/// Global backing interface for assertions that Nimble creates. -/// Defaults to a private test handler that passes through to XCTest. -/// -/// If XCTest is not available, you must assign your own assertion handler -/// before using any matchers, otherwise Nimble will abort the program. -/// -/// @see AssertionHandler -public var NimbleAssertionHandler: AssertionHandler = { () -> AssertionHandler in - return isXCTestAvailable() ? NimbleXCTestHandler() : NimbleXCTestUnavailableHandler() -}() diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/AssertionDispatcher.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/AssertionDispatcher.swift deleted file mode 100644 index 09caf2a..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/AssertionDispatcher.swift +++ /dev/null @@ -1,20 +0,0 @@ - -/// AssertionDispatcher allows multiple AssertionHandlers to receive -/// assertion messages. -/// -/// @warning Does not fully dispatch if one of the handlers raises an exception. -/// This is possible with XCTest-based assertion handlers. -/// -public class AssertionDispatcher: AssertionHandler { - let handlers: [AssertionHandler] - - public init(handlers: [AssertionHandler]) { - self.handlers = handlers - } - - public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { - for handler in handlers { - handler.assert(assertion, message: message, location: location) - } - } -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift deleted file mode 100644 index a1615a7..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift +++ /dev/null @@ -1,100 +0,0 @@ -import Foundation - -/// A data structure that stores information about an assertion when -/// AssertionRecorder is set as the Nimble assertion handler. -/// -/// @see AssertionRecorder -/// @see AssertionHandler -public struct AssertionRecord: CustomStringConvertible { - /// Whether the assertion succeeded or failed - public let success: Bool - /// The failure message the assertion would display on failure. - public let message: FailureMessage - /// The source location the expectation occurred on. - public let location: SourceLocation - - public var description: String { - return "AssertionRecord { success=\(success), message='\(message.stringValue)', location=\(location) }" - } -} - -/// An AssertionHandler that silently records assertions that Nimble makes. -/// This is useful for testing failure messages for matchers. -/// -/// @see AssertionHandler -public class AssertionRecorder : AssertionHandler { - /// All the assertions that were captured by this recorder - public var assertions = [AssertionRecord]() - - public init() {} - - public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { - assertions.append( - AssertionRecord( - success: assertion, - message: message, - location: location)) - } -} - -/// Allows you to temporarily replace the current Nimble assertion handler with -/// the one provided for the scope of the closure. -/// -/// Once the closure finishes, then the original Nimble assertion handler is restored. -/// -/// @see AssertionHandler -public func withAssertionHandler(tempAssertionHandler: AssertionHandler, closure: () throws -> Void) { - let environment = NimbleEnvironment.activeInstance - let oldRecorder = environment.assertionHandler - let capturer = NMBExceptionCapture(handler: nil, finally: ({ - environment.assertionHandler = oldRecorder - })) - environment.assertionHandler = tempAssertionHandler - capturer.tryBlock { - try! closure() - } -} - -/// Captures expectations that occur in the given closure. Note that all -/// expectations will still go through to the default Nimble handler. -/// -/// This can be useful if you want to gather information about expectations -/// that occur within a closure. -/// -/// @param silently expectations are no longer send to the default Nimble -/// assertion handler when this is true. Defaults to false. -/// -/// @see gatherFailingExpectations -public func gatherExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] { - let previousRecorder = NimbleEnvironment.activeInstance.assertionHandler - let recorder = AssertionRecorder() - let handlers: [AssertionHandler] - - if silently { - handlers = [recorder] - } else { - handlers = [recorder, previousRecorder] - } - - let dispatcher = AssertionDispatcher(handlers: handlers) - withAssertionHandler(dispatcher, closure: closure) - return recorder.assertions -} - -/// Captures failed expectations that occur in the given closure. Note that all -/// expectations will still go through to the default Nimble handler. -/// -/// This can be useful if you want to gather information about failed -/// expectations that occur within a closure. -/// -/// @param silently expectations are no longer send to the default Nimble -/// assertion handler when this is true. Defaults to false. -/// -/// @see gatherExpectations -/// @see raiseException source for an example use case. -public func gatherFailingExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] { - let assertions = gatherExpectations(silently: silently, closure: closure) - return assertions.filter { assertion in - !assertion.success - } -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift deleted file mode 100644 index 27cdac9..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift +++ /dev/null @@ -1,38 +0,0 @@ -import Foundation - -/// "Global" state of Nimble is stored here. Only DSL functions should access / be aware of this -/// class' existance -internal class NimbleEnvironment { - static var activeInstance: NimbleEnvironment { - get { - let env = NSThread.currentThread().threadDictionary["NimbleEnvironment"] - if let env = env as? NimbleEnvironment { - return env - } else { - let newEnv = NimbleEnvironment() - self.activeInstance = newEnv - return newEnv - } - } - set { - NSThread.currentThread().threadDictionary["NimbleEnvironment"] = newValue - } - } - - // TODO: eventually migrate the global to this environment value - var assertionHandler: AssertionHandler { - get { return NimbleAssertionHandler } - set { NimbleAssertionHandler = newValue } - } - -#if _runtime(_ObjC) - var awaiter: Awaiter - - init() { - awaiter = Awaiter( - waitLock: AssertionWaitLock(), - asyncQueue: dispatch_get_main_queue(), - timeoutQueue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) - } -#endif -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift deleted file mode 100644 index 7d84f45..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift +++ /dev/null @@ -1,77 +0,0 @@ -import Foundation -import XCTest - -/// Default handler for Nimble. This assertion handler passes failures along to -/// XCTest. -public class NimbleXCTestHandler : AssertionHandler { - public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { - if !assertion { - recordFailure("\(message.stringValue)\n", location: location) - } - } -} - -/// Alternative handler for Nimble. This assertion handler passes failures along -/// to XCTest by attempting to reduce the failure message size. -public class NimbleShortXCTestHandler: AssertionHandler { - public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { - if !assertion { - let msg: String - if let actual = message.actualValue { - msg = "got: \(actual) \(message.postfixActual)" - } else { - msg = "expected \(message.to) \(message.postfixMessage)" - } - recordFailure("\(msg)\n", location: location) - } - } -} - -/// Fallback handler in case XCTest is unavailable. This assertion handler will abort -/// the program if it is invoked. -class NimbleXCTestUnavailableHandler : AssertionHandler { - func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { - fatalError("XCTest is not available and no custom assertion handler was configured. Aborting.") - } -} - -#if _runtime(_ObjC) - /// Helper class providing access to the currently executing XCTestCase instance, if any -@objc final internal class CurrentTestCaseTracker: NSObject, XCTestObservation { - @objc static let sharedInstance = CurrentTestCaseTracker() - - private(set) var currentTestCase: XCTestCase? - - @objc func testCaseWillStart(testCase: XCTestCase) { - currentTestCase = testCase - } - - @objc func testCaseDidFinish(testCase: XCTestCase) { - currentTestCase = nil - } -} -#endif - - -func isXCTestAvailable() -> Bool { -#if _runtime(_ObjC) - // XCTest is weakly linked and so may not be present - return NSClassFromString("XCTestCase") != nil -#else - return true -#endif -} - -private func recordFailure(message: String, location: SourceLocation) { -#if _runtime(_ObjC) - if let testCase = CurrentTestCaseTracker.sharedInstance.currentTestCase { - testCase.recordFailureWithDescription(message, inFile: location.file, atLine: location.line, expected: true) - } else { - let msg = "Attempted to report a test failure to XCTest while no test case was running. " + - "The failure was:\n\"\(message)\"\nIt occurred at: \(location.file):\(location.line)" - NSException(name: NSInternalInconsistencyException, reason: msg, userInfo: nil).raise() - } -#else - XCTFail("\(message)\n", file: location.file, line: location.line) -#endif -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/NonObjectiveC/ExceptionCapture.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/NonObjectiveC/ExceptionCapture.swift deleted file mode 100644 index e94c45f..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/NonObjectiveC/ExceptionCapture.swift +++ /dev/null @@ -1,31 +0,0 @@ -import Foundation - -#if !_runtime(_ObjC) -// swift-corelibs-foundation doesn't provide NSException at all, so provide a dummy -class NSException {} -#endif - -// NOTE: This file is not intended to be included in the Xcode project. It -// is picked up by the Swift Package Manager during its build process. - -/// A dummy reimplementation of the `NMBExceptionCapture` class to serve -/// as a stand-in for build and runtime environments that don't support -/// Objective C. -internal class ExceptionCapture { - let finally: (() -> Void)? - - init(handler: ((NSException!) -> Void)?, finally: (() -> Void)?) { - self.finally = finally - } - - func tryBlock(unsafeBlock: (() -> Void)) { - // We have no way of handling Objective C exceptions in Swift, - // so we just go ahead and run the unsafeBlock as-is - unsafeBlock() - - finally?() - } -} - -/// Compatibility with the actual Objective-C implementation -typealias NMBExceptionCapture = ExceptionCapture diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h deleted file mode 100644 index 5d416e4..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h +++ /dev/null @@ -1,9 +0,0 @@ -#import -#import - -SWIFT_CLASS("_TtC6Nimble22CurrentTestCaseTracker") -@interface CurrentTestCaseTracker : NSObject -+ (CurrentTestCaseTracker *)sharedInstance; -@end - -@interface CurrentTestCaseTracker (Register) @end diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.h b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.h deleted file mode 100644 index a499059..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.h +++ /dev/null @@ -1,145 +0,0 @@ -#import - -@class NMBExpectation; -@class NMBObjCBeCloseToMatcher; -@class NMBObjCRaiseExceptionMatcher; -@protocol NMBMatcher; - - -#define NIMBLE_EXPORT FOUNDATION_EXPORT - -#ifdef NIMBLE_DISABLE_SHORT_SYNTAX -#define NIMBLE_SHORT(PROTO, ORIGINAL) -#else -#define NIMBLE_SHORT(PROTO, ORIGINAL) FOUNDATION_STATIC_INLINE PROTO { return (ORIGINAL); } -#endif - -NIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line); -NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line); - -NIMBLE_EXPORT id NMB_equal(id expectedValue); -NIMBLE_SHORT(id equal(id expectedValue), - NMB_equal(expectedValue)); - -NIMBLE_EXPORT id NMB_haveCount(id expectedValue); -NIMBLE_SHORT(id haveCount(id expectedValue), - NMB_haveCount(expectedValue)); - -NIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue); -NIMBLE_SHORT(NMBObjCBeCloseToMatcher *beCloseTo(id expectedValue), - NMB_beCloseTo(expectedValue)); - -NIMBLE_EXPORT id NMB_beAnInstanceOf(Class expectedClass); -NIMBLE_SHORT(id beAnInstanceOf(Class expectedClass), - NMB_beAnInstanceOf(expectedClass)); - -NIMBLE_EXPORT id NMB_beAKindOf(Class expectedClass); -NIMBLE_SHORT(id beAKindOf(Class expectedClass), - NMB_beAKindOf(expectedClass)); - -NIMBLE_EXPORT id NMB_beginWith(id itemElementOrSubstring); -NIMBLE_SHORT(id beginWith(id itemElementOrSubstring), - NMB_beginWith(itemElementOrSubstring)); - -NIMBLE_EXPORT id NMB_beGreaterThan(NSNumber *expectedValue); -NIMBLE_SHORT(id beGreaterThan(NSNumber *expectedValue), - NMB_beGreaterThan(expectedValue)); - -NIMBLE_EXPORT id NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue); -NIMBLE_SHORT(id beGreaterThanOrEqualTo(NSNumber *expectedValue), - NMB_beGreaterThanOrEqualTo(expectedValue)); - -NIMBLE_EXPORT id NMB_beIdenticalTo(id expectedInstance); -NIMBLE_SHORT(id beIdenticalTo(id expectedInstance), - NMB_beIdenticalTo(expectedInstance)); - -NIMBLE_EXPORT id NMB_be(id expectedInstance); -NIMBLE_SHORT(id be(id expectedInstance), - NMB_be(expectedInstance)); - -NIMBLE_EXPORT id NMB_beLessThan(NSNumber *expectedValue); -NIMBLE_SHORT(id beLessThan(NSNumber *expectedValue), - NMB_beLessThan(expectedValue)); - -NIMBLE_EXPORT id NMB_beLessThanOrEqualTo(NSNumber *expectedValue); -NIMBLE_SHORT(id beLessThanOrEqualTo(NSNumber *expectedValue), - NMB_beLessThanOrEqualTo(expectedValue)); - -NIMBLE_EXPORT id NMB_beTruthy(void); -NIMBLE_SHORT(id beTruthy(void), - NMB_beTruthy()); - -NIMBLE_EXPORT id NMB_beFalsy(void); -NIMBLE_SHORT(id beFalsy(void), - NMB_beFalsy()); - -NIMBLE_EXPORT id NMB_beTrue(void); -NIMBLE_SHORT(id beTrue(void), - NMB_beTrue()); - -NIMBLE_EXPORT id NMB_beFalse(void); -NIMBLE_SHORT(id beFalse(void), - NMB_beFalse()); - -NIMBLE_EXPORT id NMB_beNil(void); -NIMBLE_SHORT(id beNil(void), - NMB_beNil()); - -NIMBLE_EXPORT id NMB_beEmpty(void); -NIMBLE_SHORT(id beEmpty(void), - NMB_beEmpty()); - -NIMBLE_EXPORT id NMB_containWithNilTermination(id itemOrSubstring, ...) NS_REQUIRES_NIL_TERMINATION; -#define NMB_contain(...) NMB_containWithNilTermination(__VA_ARGS__, nil) -#ifndef NIMBLE_DISABLE_SHORT_SYNTAX -#define contain(...) NMB_contain(__VA_ARGS__) -#endif - -NIMBLE_EXPORT id NMB_endWith(id itemElementOrSubstring); -NIMBLE_SHORT(id endWith(id itemElementOrSubstring), - NMB_endWith(itemElementOrSubstring)); - -NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException(void); -NIMBLE_SHORT(NMBObjCRaiseExceptionMatcher *raiseException(void), - NMB_raiseException()); - -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)); - -NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers); -#define NMB_satisfyAnyOf(...) NMB_satisfyAnyOfWithMatchers(@[__VA_ARGS__]) -#ifndef NIMBLE_DISABLE_SHORT_SYNTAX -#define satisfyAnyOf(...) NMB_satisfyAnyOf(__VA_ARGS__) -#endif - -// In order to preserve breakpoint behavior despite using macros to fill in __FILE__ and __LINE__, -// define a builder that populates __FILE__ and __LINE__, and returns a block that takes timeout -// and action arguments. See https://github.com/Quick/Quick/pull/185 for details. -typedef void (^NMBWaitUntilTimeoutBlock)(NSTimeInterval timeout, void (^action)(void (^)(void))); -typedef void (^NMBWaitUntilBlock)(void (^action)(void (^)(void))); - -NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line); - -NIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line); -NIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line); - -NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line); - -#define NMB_waitUntilTimeout NMB_waitUntilTimeoutBuilder(@(__FILE__), __LINE__) -#define NMB_waitUntil NMB_waitUntilBuilder(@(__FILE__), __LINE__) - -#ifndef NIMBLE_DISABLE_SHORT_SYNTAX -#define expect(...) NMB_expect(^id{ return (__VA_ARGS__); }, @(__FILE__), __LINE__) -#define expectAction(BLOCK) NMB_expectAction((BLOCK), @(__FILE__), __LINE__) -#define failWithMessage(msg) NMB_failWithMessage(msg, @(__FILE__), __LINE__) -#define fail() failWithMessage(@"fail() always fails") - - -#define waitUntilTimeout NMB_waitUntilTimeout -#define waitUntil NMB_waitUntil -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.m b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.m deleted file mode 100644 index 2170238..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.m +++ /dev/null @@ -1,150 +0,0 @@ -#import -#import - -SWIFT_CLASS("_TtC6Nimble7NMBWait") -@interface NMBWait : NSObject - -+ (void)untilTimeout:(NSTimeInterval)timeout file:(NSString *)file line:(NSUInteger)line action:(void(^)())action; -+ (void)untilFile:(NSString *)file line:(NSUInteger)line action:(void(^)())action; - -@end - -NIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line) { - return [[NMBExpectation alloc] initWithActualBlock:actualBlock - negative:NO - file:file - line:line]; -} - -NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line) { - return NMB_expect(^id{ - actualBlock(); - return nil; - }, file, line); -} - -NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line) { - return [NMBExpectation failWithMessage:msg file:file line:line]; -} - -NIMBLE_EXPORT id NMB_beAnInstanceOf(Class expectedClass) { - return [NMBObjCMatcher beAnInstanceOfMatcher:expectedClass]; -} - -NIMBLE_EXPORT id NMB_beAKindOf(Class expectedClass) { - return [NMBObjCMatcher beAKindOfMatcher:expectedClass]; -} - -NIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue) { - return [NMBObjCMatcher beCloseToMatcher:expectedValue within:0.001]; -} - -NIMBLE_EXPORT id NMB_beginWith(id itemElementOrSubstring) { - return [NMBObjCMatcher beginWithMatcher:itemElementOrSubstring]; -} - -NIMBLE_EXPORT id NMB_beGreaterThan(NSNumber *expectedValue) { - return [NMBObjCMatcher beGreaterThanMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue) { - return [NMBObjCMatcher beGreaterThanOrEqualToMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_beIdenticalTo(id expectedInstance) { - return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; -} - -NIMBLE_EXPORT id NMB_be(id expectedInstance) { - return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; -} - -NIMBLE_EXPORT id NMB_beLessThan(NSNumber *expectedValue) { - return [NMBObjCMatcher beLessThanMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_beLessThanOrEqualTo(NSNumber *expectedValue) { - return [NMBObjCMatcher beLessThanOrEqualToMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_beTruthy() { - return [NMBObjCMatcher beTruthyMatcher]; -} - -NIMBLE_EXPORT id NMB_beFalsy() { - return [NMBObjCMatcher beFalsyMatcher]; -} - -NIMBLE_EXPORT id NMB_beTrue() { - return [NMBObjCMatcher beTrueMatcher]; -} - -NIMBLE_EXPORT id NMB_beFalse() { - return [NMBObjCMatcher beFalseMatcher]; -} - -NIMBLE_EXPORT id NMB_beNil() { - return [NMBObjCMatcher beNilMatcher]; -} - -NIMBLE_EXPORT id NMB_beEmpty() { - return [NMBObjCMatcher beEmptyMatcher]; -} - -NIMBLE_EXPORT id NMB_containWithNilTermination(id itemOrSubstring, ...) { - NSMutableArray *itemOrSubstringArray = [NSMutableArray array]; - - if (itemOrSubstring) { - [itemOrSubstringArray addObject:itemOrSubstring]; - - va_list args; - va_start(args, itemOrSubstring); - id next; - while ((next = va_arg(args, id))) { - [itemOrSubstringArray addObject:next]; - } - va_end(args); - } - - return [NMBObjCMatcher containMatcher:itemOrSubstringArray]; -} - -NIMBLE_EXPORT id NMB_endWith(id itemElementOrSubstring) { - return [NMBObjCMatcher endWithMatcher:itemElementOrSubstring]; -} - -NIMBLE_EXPORT id NMB_equal(id expectedValue) { - return [NMBObjCMatcher equalMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_haveCount(id expectedValue) { - return [NMBObjCMatcher haveCountMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_match(id expectedValue) { - return [NMBObjCMatcher matchMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_allPass(id expectedValue) { - return [NMBObjCMatcher allPassMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers) { - return [NMBObjCMatcher satisfyAnyOfMatcher:matchers]; -} - -NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException() { - return [NMBObjCMatcher raiseExceptionMatcher]; -} - -NIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line) { - return ^(NSTimeInterval timeout, void (^action)(void (^)(void))) { - [NMBWait untilTimeout:timeout file:file line:line action:action]; - }; -} - -NIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line) { - return ^(void (^action)(void (^)(void))) { - [NMBWait untilFile:file line:line action:action]; - }; -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.h b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.h deleted file mode 100644 index 7e5fb07..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.h +++ /dev/null @@ -1,11 +0,0 @@ -#import -#import - -@interface NMBExceptionCapture : NSObject - -- (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally; -- (void)tryBlock:(void(^)())unsafeBlock; - -@end - -typedef void(^NMBSourceCallbackBlock)(BOOL successful); diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.m b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.m deleted file mode 100644 index d19d5d9..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.m +++ /dev/null @@ -1,35 +0,0 @@ -#import "NMBExceptionCapture.h" - -@interface NMBExceptionCapture () -@property (nonatomic, copy) void(^handler)(NSException *exception); -@property (nonatomic, copy) void(^finally)(); -@end - -@implementation NMBExceptionCapture - -- (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally { - self = [super init]; - if (self) { - self.handler = handler; - self.finally = finally; - } - return self; -} - -- (void)tryBlock:(void(^)())unsafeBlock { - @try { - unsafeBlock(); - } - @catch (NSException *exception) { - if (self.handler) { - self.handler(exception); - } - } - @finally { - if (self.finally) { - self.finally(); - } - } -} - -@end diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExpectation.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExpectation.swift deleted file mode 100644 index 3f18d06..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExpectation.swift +++ /dev/null @@ -1,131 +0,0 @@ -import Foundation - -#if _runtime(_ObjC) - -internal struct ObjCMatcherWrapper : Matcher { - let matcher: NMBMatcher - - func matches(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { - return matcher.matches( - ({ try! actualExpression.evaluate() }), - failureMessage: failureMessage, - location: actualExpression.location) - } - - func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { - return matcher.doesNotMatch( - ({ try! actualExpression.evaluate() }), - failureMessage: failureMessage, - location: actualExpression.location) - } -} - -// Equivalent to Expectation, but for Nimble's Objective-C interface -public class NMBExpectation : NSObject { - internal let _actualBlock: () -> NSObject! - internal var _negative: Bool - internal let _file: FileString - internal let _line: UInt - internal var _timeout: NSTimeInterval = 1.0 - - public init(actualBlock: () -> NSObject!, negative: Bool, file: FileString, line: UInt) { - self._actualBlock = actualBlock - self._negative = negative - self._file = file - self._line = line - } - - private var expectValue: Expectation { - return expect(_file, line: _line){ - self._actualBlock() as NSObject? - } - } - - public var withTimeout: (NSTimeInterval) -> NMBExpectation { - return ({ timeout in self._timeout = timeout - return self - }) - } - - public var to: (NMBMatcher) -> Void { - return ({ matcher in - self.expectValue.to(ObjCMatcherWrapper(matcher: matcher)) - }) - } - - public var toWithDescription: (NMBMatcher, String) -> Void { - return ({ matcher, description in - self.expectValue.to(ObjCMatcherWrapper(matcher: matcher), description: description) - }) - } - - public var toNot: (NMBMatcher) -> Void { - return ({ matcher in - self.expectValue.toNot( - ObjCMatcherWrapper(matcher: matcher) - ) - }) - } - - public var toNotWithDescription: (NMBMatcher, String) -> Void { - return ({ matcher, description in - self.expectValue.toNot( - ObjCMatcherWrapper(matcher: matcher), description: description - ) - }) - } - - public var notTo: (NMBMatcher) -> Void { return toNot } - - public var notToWithDescription: (NMBMatcher, String) -> Void { return toNotWithDescription } - - public var toEventually: (NMBMatcher) -> Void { - return ({ matcher in - self.expectValue.toEventually( - ObjCMatcherWrapper(matcher: matcher), - timeout: self._timeout, - description: nil - ) - }) - } - - public var toEventuallyWithDescription: (NMBMatcher, String) -> Void { - return ({ matcher, description in - self.expectValue.toEventually( - ObjCMatcherWrapper(matcher: matcher), - timeout: self._timeout, - description: description - ) - }) - } - - public var toEventuallyNot: (NMBMatcher) -> Void { - return ({ matcher in - self.expectValue.toEventuallyNot( - ObjCMatcherWrapper(matcher: matcher), - timeout: self._timeout, - description: nil - ) - }) - } - - public var toEventuallyNotWithDescription: (NMBMatcher, String) -> Void { - return ({ matcher, description in - self.expectValue.toEventuallyNot( - ObjCMatcherWrapper(matcher: matcher), - timeout: self._timeout, - description: description - ) - }) - } - - public var toNotEventually: (NMBMatcher) -> Void { return toEventuallyNot } - - public var toNotEventuallyWithDescription: (NMBMatcher, String) -> Void { return toEventuallyNotWithDescription } - - public class func failWithMessage(message: String, file: FileString, line: UInt) { - fail(message, location: SourceLocation(file: file, line: line)) - } -} - -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBObjCMatcher.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBObjCMatcher.swift deleted file mode 100644 index 9f31d42..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBObjCMatcher.swift +++ /dev/null @@ -1,81 +0,0 @@ -import Foundation - -#if _runtime(_ObjC) - -public typealias MatcherBlock = (actualExpression: Expression, failureMessage: FailureMessage) -> Bool -public typealias FullMatcherBlock = (actualExpression: Expression, failureMessage: FailureMessage, shouldNotMatch: Bool) -> Bool - -public class NMBObjCMatcher : NSObject, NMBMatcher { - let _match: MatcherBlock - let _doesNotMatch: MatcherBlock - let canMatchNil: Bool - - public init(canMatchNil: Bool, matcher: MatcherBlock, notMatcher: MatcherBlock) { - self.canMatchNil = canMatchNil - self._match = matcher - self._doesNotMatch = notMatcher - } - - public convenience init(matcher: MatcherBlock) { - self.init(canMatchNil: true, matcher: matcher) - } - - public convenience init(canMatchNil: Bool, matcher: MatcherBlock) { - self.init(canMatchNil: canMatchNil, matcher: matcher, notMatcher: ({ actualExpression, failureMessage in - return !matcher(actualExpression: actualExpression, failureMessage: failureMessage) - })) - } - - public convenience init(matcher: FullMatcherBlock) { - self.init(canMatchNil: true, matcher: matcher) - } - - public convenience init(canMatchNil: Bool, matcher: FullMatcherBlock) { - self.init(canMatchNil: canMatchNil, matcher: ({ actualExpression, failureMessage in - return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: false) - }), notMatcher: ({ actualExpression, failureMessage in - return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: true) - })) - } - - private func canMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { - do { - if !canMatchNil { - if try actualExpression.evaluate() == nil { - failureMessage.postfixActual = " (use beNil() to match nils)" - return false - } - } - } catch let error { - failureMessage.actualValue = "an unexpected error thrown: \(error)" - return false - } - return true - } - - public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - let expr = Expression(expression: actualBlock, location: location) - let result = _match( - actualExpression: expr, - failureMessage: failureMessage) - if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) { - return result - } else { - return false - } - } - - public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - let expr = Expression(expression: actualBlock, location: location) - let result = _doesNotMatch( - actualExpression: expr, - failureMessage: failureMessage) - if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) { - return result - } else { - return false - } - } -} - -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.h b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.h deleted file mode 100644 index e5d5ddd..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.h +++ /dev/null @@ -1,18 +0,0 @@ -@class NSString; - -/** - * Returns a string appropriate for displaying in test output - * from the provided value. - * - * @param value A value that will show up in a test's output. - * - * @return The string that is returned can be - * customized per type by conforming a type to the `TestOutputStringConvertible` - * protocol. When stringifying a non-`TestOutputStringConvertible` type, this - * function will return the value's debug description and then its - * normal description if available and in that order. Otherwise it - * will return the result of constructing a string from the value. - * - * @see `TestOutputStringConvertible` - */ -extern NSString *_Nonnull NMBStringify(id _Nullable anyObject) __attribute__((warn_unused_result)); diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.m b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.m deleted file mode 100644 index 329d39a..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.m +++ /dev/null @@ -1,6 +0,0 @@ -#import "NMBStringify.h" -#import - -NSString *_Nonnull NMBStringify(id _Nullable anyObject) { - return [NMBStringer stringify:anyObject]; -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/XCTestObservationCenter+Register.m b/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/XCTestObservationCenter+Register.m deleted file mode 100644 index 35f26fd..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Adapters/ObjectiveC/XCTestObservationCenter+Register.m +++ /dev/null @@ -1,78 +0,0 @@ -#import "CurrentTestCaseTracker.h" -#import -#import - -#pragma mark - Method Swizzling - -/// Swaps the implementations between two instance methods. -/// -/// @param class The class containing `originalSelector`. -/// @param originalSelector Original method to replace. -/// @param replacementSelector Replacement method. -void swizzleSelectors(Class class, SEL originalSelector, SEL replacementSelector) { - Method originalMethod = class_getInstanceMethod(class, originalSelector); - Method replacementMethod = class_getInstanceMethod(class, replacementSelector); - - BOOL didAddMethod = - class_addMethod(class, - originalSelector, - method_getImplementation(replacementMethod), - method_getTypeEncoding(replacementMethod)); - - if (didAddMethod) { - class_replaceMethod(class, - replacementSelector, - method_getImplementation(originalMethod), - method_getTypeEncoding(originalMethod)); - } else { - method_exchangeImplementations(originalMethod, replacementMethod); - } -} - -#pragma mark - Private - -@interface XCTestObservationCenter (Private) -- (void)_addLegacyTestObserver:(id)observer; -@end - -@implementation XCTestObservationCenter (Register) - -/// Uses objc method swizzling to register `CurrentTestCaseTracker` as a test observer. This is necessary -/// because Xcode 7.3 introduced timing issues where if a custom `XCTestObservation` is registered too early -/// it suppresses all console output (generated by `XCTestLog`), breaking any tools that depend on this output. -/// This approach waits to register our custom test observer until XCTest adds its first "legacy" observer, -/// falling back to registering after the first normal observer if this private method ever changes. -+ (void)load { - if (class_getInstanceMethod([self class], @selector(_addLegacyTestObserver:))) { - // Swizzle -_addLegacyTestObserver: - swizzleSelectors([self class], @selector(_addLegacyTestObserver:), @selector(NMB_original__addLegacyTestObserver:)); - } else { - // Swizzle -addTestObserver:, only if -_addLegacyTestObserver: is not implemented - swizzleSelectors([self class], @selector(addTestObserver:), @selector(NMB_original_addTestObserver:)); - } -} - -#pragma mark - Replacement Methods - -/// Registers `CurrentTestCaseTracker` as a test observer after `XCTestLog` has been added. -- (void)NMB_original__addLegacyTestObserver:(id)observer { - [self NMB_original__addLegacyTestObserver:observer]; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [self addTestObserver:[CurrentTestCaseTracker sharedInstance]]; - }); -} - -/// Registers `CurrentTestCaseTracker` as a test observer after `XCTestLog` has been added. -/// This method is only used if `-_addLegacyTestObserver:` is not impelemented. (added in Xcode 7.3) -- (void)NMB_original_addTestObserver:(id)observer { - [self NMB_original_addTestObserver:observer]; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [self NMB_original_addTestObserver:[CurrentTestCaseTracker sharedInstance]]; - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/DSL+Wait.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/DSL+Wait.swift deleted file mode 100644 index 9124964..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/DSL+Wait.swift +++ /dev/null @@ -1,93 +0,0 @@ -import Foundation - -#if _runtime(_ObjC) -private enum ErrorResult { - case Exception(NSException) - case Error(ErrorType) - case None -} - -/// Only classes, protocols, methods, properties, and subscript declarations can be -/// bridges to Objective-C via the @objc keyword. This class encapsulates callback-style -/// asynchronous waiting logic so that it may be called from Objective-C and Swift. -internal class NMBWait: NSObject { - internal class func until( - timeout timeout: NSTimeInterval, - file: FileString = #file, - line: UInt = #line, - action: (() -> Void) -> Void) -> Void { - return throwableUntil(timeout: timeout, file: file, line: line) { (done: () -> Void) throws -> Void in - action() { done() } - } - } - - // Using a throwable closure makes this method not objc compatible. - internal class func throwableUntil( - timeout timeout: NSTimeInterval, - file: FileString = #file, - line: UInt = #line, - action: (() -> Void) throws -> Void) -> Void { - let awaiter = NimbleEnvironment.activeInstance.awaiter - let leeway = timeout / 2.0 - let result = awaiter.performBlock { (done: (ErrorResult) -> Void) throws -> Void in - dispatch_async(dispatch_get_main_queue()) { - let capture = NMBExceptionCapture( - handler: ({ exception in - done(.Exception(exception)) - }), - finally: ({ }) - ) - capture.tryBlock { - do { - try action() { - done(.None) - } - } catch let e { - done(.Error(e)) - } - } - } - }.timeout(timeout, forcefullyAbortTimeout: leeway).wait("waitUntil(...)", file: file, line: line) - - switch result { - case .Incomplete: internalError("Reached .Incomplete state for waitUntil(...).") - case .BlockedRunLoop: - fail(blockedRunLoopErrorMessageFor("-waitUntil()", leeway: leeway), - file: file, line: line) - case .TimedOut: - let pluralize = (timeout == 1 ? "" : "s") - fail("Waited more than \(timeout) second\(pluralize)", file: file, line: line) - case let .RaisedException(exception): - fail("Unexpected exception raised: \(exception)") - case let .ErrorThrown(error): - fail("Unexpected error thrown: \(error)") - case .Completed(.Exception(let exception)): - fail("Unexpected exception raised: \(exception)") - case .Completed(.Error(let error)): - fail("Unexpected error thrown: \(error)") - case .Completed(.None): // success - break - } - } - - @objc(untilFile:line:action:) - internal class func until(file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { - until(timeout: 1, file: file, line: line, action: action) - } -} - -internal func blockedRunLoopErrorMessageFor(fnName: String, leeway: NSTimeInterval) -> String { - return "\(fnName) timed out but was unable to run the timeout handler because the main thread is unresponsive (\(leeway) seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run." -} - -/// Wait asynchronously until the done closure is called or the timeout has been reached. -/// -/// @discussion -/// Call the done() closure to indicate the waiting has completed. -/// -/// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function -/// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. -public func waitUntil(timeout timeout: NSTimeInterval = 1, file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { - NMBWait.until(timeout: timeout, file: file, line: line, action: action) -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/DSL.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/DSL.swift deleted file mode 100644 index b43a933..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/DSL.swift +++ /dev/null @@ -1,68 +0,0 @@ -import Foundation - -/// Make an expectation on a given actual value. The value given is lazily evaluated. -@warn_unused_result(message="Follow 'expect(…)' with '.to(…)', '.toNot(…)', 'toEventually(…)', '==', etc.") -public func expect(@autoclosure(escaping) expression: () throws -> T?, file: FileString = #file, line: UInt = #line) -> Expectation { - return Expectation( - expression: Expression( - expression: expression, - location: SourceLocation(file: file, line: line), - isClosure: true)) -} - -/// Make an expectation on a given actual value. The closure is lazily invoked. -@warn_unused_result(message="Follow 'expect(…)' with '.to(…)', '.toNot(…)', 'toEventually(…)', '==', etc.") -public func expect(file: FileString = #file, line: UInt = #line, expression: () throws -> T?) -> Expectation { - return Expectation( - expression: Expression( - expression: expression, - location: SourceLocation(file: file, line: line), - isClosure: true)) -} - -/// Always fails the test with a message and a specified location. -public func fail(message: String, location: SourceLocation) { - let handler = NimbleEnvironment.activeInstance.assertionHandler - handler.assert(false, message: FailureMessage(stringValue: message), location: location) -} - -/// Always fails the test with a message. -public func fail(message: String, file: FileString = #file, line: UInt = #line) { - fail(message, location: SourceLocation(file: file, line: line)) -} - -/// Always fails the test. -public func fail(file: FileString = #file, line: UInt = #line) { - fail("fail() always fails", file: file, line: line) -} - -/// Like Swift's precondition(), but raises NSExceptions instead of sigaborts -internal func nimblePrecondition( - @autoclosure expr: () -> Bool, - @autoclosure _ name: () -> String, - @autoclosure _ message: () -> String, - file: StaticString = #file, - line: UInt = #line) -> Bool { - let result = expr() - if !result { -#if _runtime(_ObjC) - let e = NSException( - name: name(), - reason: message(), - userInfo: nil) - e.raise() -#else - preconditionFailure("\(name()) - \(message())", file: file, line: line) -#endif - } - return result -} - -@noreturn -internal func internalError(msg: String, file: FileString = #file, line: UInt = #line) { - fatalError( - "Nimble Bug Found: \(msg) at \(file):\(line).\n" + - "Please file a bug to Nimble: https://github.com/Quick/Nimble/issues with the " + - "code snippet that caused this error." - ) -} \ No newline at end of file diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Expectation.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Expectation.swift deleted file mode 100644 index 5baf258..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Expectation.swift +++ /dev/null @@ -1,66 +0,0 @@ -import Foundation - -internal func expressionMatches(expression: Expression, matcher: U, to: String, description: String?) -> (Bool, FailureMessage) { - let msg = FailureMessage() - msg.userDescription = description - msg.to = to - do { - let pass = try matcher.matches(expression, failureMessage: msg) - if msg.actualValue == "" { - msg.actualValue = "<\(stringify(try expression.evaluate()))>" - } - return (pass, msg) - } catch let error { - msg.actualValue = "an unexpected error thrown: <\(error)>" - return (false, msg) - } -} - -internal func expressionDoesNotMatch(expression: Expression, matcher: U, toNot: String, description: String?) -> (Bool, FailureMessage) { - let msg = FailureMessage() - msg.userDescription = description - msg.to = toNot - do { - let pass = try matcher.doesNotMatch(expression, failureMessage: msg) - if msg.actualValue == "" { - msg.actualValue = "<\(stringify(try expression.evaluate()))>" - } - return (pass, msg) - } catch let error { - msg.actualValue = "an unexpected error thrown: <\(error)>" - return (false, msg) - } -} - -public struct Expectation { - - public let expression: Expression - - public func verify(pass: Bool, _ message: FailureMessage) { - let handler = NimbleEnvironment.activeInstance.assertionHandler - handler.assert(pass, message: message, location: expression.location) - } - - /// Tests the actual value using a matcher to match. - public func to(matcher: U, description: String? = nil) { - let (pass, msg) = expressionMatches(expression, matcher: matcher, to: "to", description: description) - verify(pass, msg) - } - - /// Tests the actual value using a matcher to not match. - public func toNot(matcher: U, description: String? = nil) { - let (pass, msg) = expressionDoesNotMatch(expression, matcher: matcher, toNot: "to not", description: description) - verify(pass, msg) - } - - /// Tests the actual value using a matcher to not match. - /// - /// Alias to toNot(). - public func notTo(matcher: U, description: String? = nil) { - toNot(matcher, description: description) - } - - // see: - // - AsyncMatcherWrapper for extension - // - NMBExpectation for Objective-C interface -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Expression.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Expression.swift deleted file mode 100644 index f64ee24..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Expression.swift +++ /dev/null @@ -1,90 +0,0 @@ -import Foundation - -// Memoizes the given closure, only calling the passed -// closure once; even if repeat calls to the returned closure -internal func memoizedClosure(closure: () throws -> T) -> (Bool) throws -> T { - var cache: T? - return ({ withoutCaching in - if (withoutCaching || cache == nil) { - cache = try closure() - } - return cache! - }) -} - -/// Expression represents the closure of the value inside expect(...). -/// Expressions are memoized by default. This makes them safe to call -/// evaluate() multiple times without causing a re-evaluation of the underlying -/// closure. -/// -/// @warning Since the closure can be any code, Objective-C code may choose -/// to raise an exception. Currently, Expression does not memoize -/// exception raising. -/// -/// This provides a common consumable API for matchers to utilize to allow -/// Nimble to change internals to how the captured closure is managed. -public struct Expression { - internal let _expression: (Bool) throws -> T? - internal let _withoutCaching: Bool - public let location: SourceLocation - public let isClosure: Bool - - /// Creates a new expression struct. Normally, expect(...) will manage this - /// creation process. The expression is memoized. - /// - /// @param expression The closure that produces a given value. - /// @param location The source location that this closure originates from. - /// @param isClosure A bool indicating if the captured expression is a - /// closure or internally produced closure. Some matchers - /// may require closures. For example, toEventually() - /// requires an explicit closure. This gives Nimble - /// flexibility if @autoclosure behavior changes between - /// Swift versions. Nimble internals always sets this true. - public init(expression: () throws -> T?, location: SourceLocation, isClosure: Bool = true) { - self._expression = memoizedClosure(expression) - self.location = location - self._withoutCaching = false - self.isClosure = isClosure - } - - /// Creates a new expression struct. Normally, expect(...) will manage this - /// creation process. - /// - /// @param expression The closure that produces a given value. - /// @param location The source location that this closure originates from. - /// @param withoutCaching Indicates if the struct should memoize the given - /// closure's result. Subsequent evaluate() calls will - /// not call the given closure if this is true. - /// @param isClosure A bool indicating if the captured expression is a - /// closure or internally produced closure. Some matchers - /// may require closures. For example, toEventually() - /// requires an explicit closure. This gives Nimble - /// flexibility if @autoclosure behavior changes between - /// Swift versions. Nimble internals always sets this true. - public init(memoizedExpression: (Bool) throws -> T?, location: SourceLocation, withoutCaching: Bool, isClosure: Bool = true) { - self._expression = memoizedExpression - self.location = location - self._withoutCaching = withoutCaching - self.isClosure = isClosure - } - - /// Returns a new Expression from the given expression. Identical to a map() - /// on this type. This should be used only to typecast the Expression's - /// closure value. - /// - /// The returned expression will preserve location and isClosure. - /// - /// @param block The block that can cast the current Expression value to a - /// new type. - public func cast(block: (T?) throws -> U?) -> Expression { - return Expression(expression: ({ try block(self.evaluate()) }), location: self.location, isClosure: self.isClosure) - } - - public func evaluate() throws -> T? { - return try self._expression(_withoutCaching) - } - - public func withoutCaching() -> Expression { - return Expression(memoizedExpression: self._expression, location: location, withoutCaching: true, isClosure: isClosure) - } -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/FailureMessage.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/FailureMessage.swift deleted file mode 100644 index 4d23bc8..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/FailureMessage.swift +++ /dev/null @@ -1,56 +0,0 @@ -import Foundation - -/// Encapsulates the failure message that matchers can report to the end user. -/// -/// This is shared state between Nimble and matchers that mutate this value. -public class FailureMessage: NSObject { - public var expected: String = "expected" - public var actualValue: String? = "" // empty string -> use default; nil -> exclude - public var to: String = "to" - public var postfixMessage: String = "match" - public var postfixActual: String = "" - public var userDescription: String? = nil - - public var stringValue: String { - get { - if let value = _stringValueOverride { - return value - } else { - return computeStringValue() - } - } - set { - _stringValueOverride = newValue - } - } - - internal var _stringValueOverride: String? - - public override init() { - } - - public init(stringValue: String) { - _stringValueOverride = stringValue - } - - internal func stripNewlines(str: String) -> String { - var lines: [String] = NSString(string: str).componentsSeparatedByString("\n") as [String] - let whitespace = NSCharacterSet.whitespaceAndNewlineCharacterSet() - lines = lines.map { line in NSString(string: line).stringByTrimmingCharactersInSet(whitespace) } - return lines.joinWithSeparator("") - } - - internal func computeStringValue() -> String { - var value = "\(expected) \(to) \(postfixMessage)" - if let actualValue = actualValue { - value = "\(expected) \(to) \(postfixMessage), got \(actualValue)\(postfixActual)" - } - value = stripNewlines(value) - - if let userDescription = userDescription { - return "\(userDescription)\n\(value)" - } - - return value - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Info.plist b/Carthage/Checkouts/Nimble/Sources/Nimble/Info.plist deleted file mode 100644 index 6ac80b8..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Info.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSHumanReadableCopyright - Copyright © 2014 Jeff Hui. All rights reserved. - NSPrincipalClass - - - diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/AllPass.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/AllPass.swift deleted file mode 100644 index d67714b..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/AllPass.swift +++ /dev/null @@ -1,92 +0,0 @@ -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(try expression.evaluate()) - } -} - -public func allPass - (matcher: V) -> NonNilMatcherFunc { - return createAllPassMatcher() { - try matcher.matches($0, failureMessage: $1) - } -} - -private func createAllPassMatcher - (elementEvaluator:(Expression, FailureMessage) throws -> Bool) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.actualValue = nil - if let actualValue = try actualExpression.evaluate() { - for currentElement in actualValue { - let exp = Expression( - expression: {currentElement}, location: actualExpression.location) - if try !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 - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func allPassMatcher(matcher: NMBObjCMatcher) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let location = actualExpression.location - let actualValue = try! 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( - {try! expression.evaluate()}, failureMessage: failureMessage, location: expr.location) - } - return try! createAllPassMatcher(elementEvaluator).matches( - expr, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/AsyncMatcherWrapper.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/AsyncMatcherWrapper.swift deleted file mode 100644 index 3df6eb6..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/AsyncMatcherWrapper.swift +++ /dev/null @@ -1,140 +0,0 @@ -import Foundation - -#if _runtime(_ObjC) - -public struct AsyncDefaults { - public static var Timeout: NSTimeInterval = 1 - public static var PollInterval: NSTimeInterval = 0.01 -} - -internal struct AsyncMatcherWrapper: Matcher { - let fullMatcher: U - let timeoutInterval: NSTimeInterval - let pollInterval: NSTimeInterval - - init(fullMatcher: U, timeoutInterval: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval) { - self.fullMatcher = fullMatcher - self.timeoutInterval = timeoutInterval - self.pollInterval = pollInterval - } - - func matches(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { - let uncachedExpression = actualExpression.withoutCaching() - let fnName = "expect(...).toEventually(...)" - let result = pollBlock( - pollInterval: pollInterval, - timeoutInterval: timeoutInterval, - file: actualExpression.location.file, - line: actualExpression.location.line, - fnName: fnName) { - try self.fullMatcher.matches(uncachedExpression, failureMessage: failureMessage) - } - switch (result) { - case let .Completed(isSuccessful): return isSuccessful - case .TimedOut: return false - case let .ErrorThrown(error): - failureMessage.actualValue = "an unexpected error thrown: <\(error)>" - return false - case let .RaisedException(exception): - failureMessage.actualValue = "an unexpected exception thrown: <\(exception)>" - return false - case .BlockedRunLoop: - failureMessage.postfixMessage += " (timed out, but main thread was unresponsive)." - return false - case .Incomplete: - internalError("Reached .Incomplete state for toEventually(...).") - } - } - - func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { - let uncachedExpression = actualExpression.withoutCaching() - let result = pollBlock( - pollInterval: pollInterval, - timeoutInterval: timeoutInterval, - file: actualExpression.location.file, - line: actualExpression.location.line, - fnName: "expect(...).toEventuallyNot(...)") { - try self.fullMatcher.doesNotMatch(uncachedExpression, failureMessage: failureMessage) - } - switch (result) { - case let .Completed(isSuccessful): return isSuccessful - case .TimedOut: return false - case let .ErrorThrown(error): - failureMessage.actualValue = "an unexpected error thrown: <\(error)>" - return false - case let .RaisedException(exception): - failureMessage.actualValue = "an unexpected exception thrown: <\(exception)>" - return false - case .BlockedRunLoop: - failureMessage.postfixMessage += " (timed out, but main thread was unresponsive)." - return false - case .Incomplete: - internalError("Reached .Incomplete state for toEventuallyNot(...).") - } - } -} - -private let toEventuallyRequiresClosureError = FailureMessage(stringValue: "expect(...).toEventually(...) requires an explicit closure (eg - expect { ... }.toEventually(...) )\nSwift 1.2 @autoclosure behavior has changed in an incompatible way for Nimble to function") - - -extension Expectation { - /// Tests the actual value using a matcher to match by checking continuously - /// at each pollInterval until the timeout is reached. - /// - /// @discussion - /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function - /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. - public func toEventually(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { - if expression.isClosure { - let (pass, msg) = expressionMatches( - expression, - matcher: AsyncMatcherWrapper( - fullMatcher: matcher, - timeoutInterval: timeout, - pollInterval: pollInterval), - to: "to eventually", - description: description - ) - verify(pass, msg) - } else { - verify(false, toEventuallyRequiresClosureError) - } - } - - /// Tests the actual value using a matcher to not match by checking - /// continuously at each pollInterval until the timeout is reached. - /// - /// @discussion - /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function - /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. - public func toEventuallyNot(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { - if expression.isClosure { - let (pass, msg) = expressionDoesNotMatch( - expression, - matcher: AsyncMatcherWrapper( - fullMatcher: matcher, - timeoutInterval: timeout, - pollInterval: pollInterval), - toNot: "to eventually not", - description: description - ) - verify(pass, msg) - } else { - verify(false, toEventuallyRequiresClosureError) - } - } - - /// Tests the actual value using a matcher to not match by checking - /// continuously at each pollInterval until the timeout is reached. - /// - /// Alias of toEventuallyNot() - /// - /// @discussion - /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function - /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. - public func toNotEventually(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { - return toEventuallyNot(matcher, timeout: timeout, pollInterval: pollInterval, description: description) - } -} - -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift deleted file mode 100644 index d1f3737..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift +++ /dev/null @@ -1,38 +0,0 @@ -import Foundation - -#if _runtime(_ObjC) - -// A Nimble matcher that catches attempts to use beAKindOf with non Objective-C types -public func beAKindOf(expectedClass: Any) -> NonNilMatcherFunc { - return NonNilMatcherFunc {actualExpression, failureMessage in - failureMessage.stringValue = "beAKindOf only works on Objective-C types since" - + " the Swift compiler will automatically type check Swift-only types." - + " This expectation is redundant." - return false - } -} - -/// A Nimble matcher that succeeds when the actual value is an instance of the given class. -/// @see beAnInstanceOf if you want to match against the exact class -public func beAKindOf(expectedClass: AnyClass) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - let instance = try actualExpression.evaluate() - if let validInstance = instance { - failureMessage.actualValue = "<\(classAsString(validInstance.dynamicType)) instance>" - } else { - failureMessage.actualValue = "" - } - failureMessage.postfixMessage = "be a kind of \(classAsString(expectedClass))" - return instance != nil && instance!.isKindOfClass(expectedClass) - } -} - -extension NMBObjCMatcher { - public class func beAKindOfMatcher(expected: AnyClass) -> NMBMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - return try! beAKindOf(expected).matches(actualExpression, failureMessage: failureMessage) - } - } -} - -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift deleted file mode 100644 index 32477dd..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift +++ /dev/null @@ -1,40 +0,0 @@ -import Foundation - -// A Nimble matcher that catches attempts to use beAnInstanceOf with non Objective-C types -public func beAnInstanceOf(expectedClass: Any) -> NonNilMatcherFunc { - return NonNilMatcherFunc {actualExpression, failureMessage in - failureMessage.stringValue = "beAnInstanceOf only works on Objective-C types since" - + " the Swift compiler will automatically type check Swift-only types." - + " This expectation is redundant." - return false - } -} - -/// A Nimble matcher that succeeds when the actual value is an instance of the given class. -/// @see beAKindOf if you want to match against subclasses -public func beAnInstanceOf(expectedClass: AnyClass) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - let instance = try actualExpression.evaluate() - if let validInstance = instance { - failureMessage.actualValue = "<\(classAsString(validInstance.dynamicType)) instance>" - } else { - failureMessage.actualValue = "" - } - failureMessage.postfixMessage = "be an instance of \(classAsString(expectedClass))" -#if _runtime(_ObjC) - return instance != nil && instance!.isMemberOfClass(expectedClass) -#else - return instance != nil && instance!.dynamicType == expectedClass -#endif - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beAnInstanceOfMatcher(expected: AnyClass) -> NMBMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - return try! beAnInstanceOf(expected).matches(actualExpression, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift deleted file mode 100644 index 2ba9d2f..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift +++ /dev/null @@ -1,124 +0,0 @@ -#if os(Linux) -import Glibc -#endif -import Foundation - -internal let DefaultDelta = 0.0001 - -internal func isCloseTo(actualValue: NMBDoubleConvertible?, expectedValue: NMBDoubleConvertible, delta: Double, failureMessage: FailureMessage) -> Bool { - failureMessage.postfixMessage = "be close to <\(stringify(expectedValue))> (within \(stringify(delta)))" - failureMessage.actualValue = "<\(stringify(actualValue))>" - return actualValue != nil && abs(actualValue!.doubleValue - expectedValue.doubleValue) < delta -} - -/// A Nimble matcher that succeeds when a value is close to another. This is used for floating -/// point values which can have imprecise results when doing arithmetic on them. -/// -/// @see equal -public func beCloseTo(expectedValue: Double, within delta: Double = DefaultDelta) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage) - } -} - -/// A Nimble matcher that succeeds when a value is close to another. This is used for floating -/// point values which can have imprecise results when doing arithmetic on them. -/// -/// @see equal -public func beCloseTo(expectedValue: NMBDoubleConvertible, within delta: Double = DefaultDelta) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage) - } -} - -#if _runtime(_ObjC) -public class NMBObjCBeCloseToMatcher : NSObject, NMBMatcher { - var _expected: NSNumber - var _delta: CDouble - init(expected: NSNumber, within: CDouble) { - _expected = expected - _delta = within - } - - public func matches(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - let actualBlock: () -> NMBDoubleConvertible? = ({ - return actualExpression() as? NMBDoubleConvertible - }) - let expr = Expression(expression: actualBlock, location: location) - let matcher = beCloseTo(self._expected, within: self._delta) - return try! matcher.matches(expr, failureMessage: failureMessage) - } - - public func doesNotMatch(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - let actualBlock: () -> NMBDoubleConvertible? = ({ - return actualExpression() as? NMBDoubleConvertible - }) - let expr = Expression(expression: actualBlock, location: location) - let matcher = beCloseTo(self._expected, within: self._delta) - return try! matcher.doesNotMatch(expr, failureMessage: failureMessage) - } - - public var within: (CDouble) -> NMBObjCBeCloseToMatcher { - return ({ delta in - return NMBObjCBeCloseToMatcher(expected: self._expected, within: delta) - }) - } -} - -extension NMBObjCMatcher { - public class func beCloseToMatcher(expected: NSNumber, within: CDouble) -> NMBObjCBeCloseToMatcher { - return NMBObjCBeCloseToMatcher(expected: expected, within: within) - } -} -#endif - -public func beCloseTo(expectedValues: [Double], within delta: Double = DefaultDelta) -> NonNilMatcherFunc <[Double]> { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be close to <\(stringify(expectedValues))> (each within \(stringify(delta)))" - if let actual = try actualExpression.evaluate() { - failureMessage.actualValue = "<\(stringify(actual))>" - - if actual.count != expectedValues.count { - return false - } else { - for (index, actualItem) in actual.enumerate() { - if fabs(actualItem - expectedValues[index]) > delta { - return false - } - } - return true - } - } - return false - } -} - -// MARK: - Operators - -infix operator ≈ { - associativity none - precedence 130 -} - -public func ≈(lhs: Expectation<[Double]>, rhs: [Double]) { - lhs.to(beCloseTo(rhs)) -} - -public func ≈(lhs: Expectation, rhs: NMBDoubleConvertible) { - lhs.to(beCloseTo(rhs)) -} - -public func ≈(lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { - lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) -} - -public func ==(lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { - lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) -} - -// make this higher precedence than exponents so the Doubles either end aren't pulled in -// unexpectantly -infix operator ± { precedence 170 } -public func ±(lhs: NMBDoubleConvertible, rhs: Double) -> (expected: NMBDoubleConvertible, delta: Double) { - return (expected: lhs, delta: rhs) -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeEmpty.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeEmpty.swift deleted file mode 100644 index cebd82d..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeEmpty.swift +++ /dev/null @@ -1,92 +0,0 @@ -import Foundation - - -/// A Nimble matcher that succeeds when a value is "empty". For collections, this -/// means the are no items in that collection. For strings, it is an empty string. -public func beEmpty() -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be empty" - let actualSeq = try actualExpression.evaluate() - if actualSeq == nil { - return true - } - var generator = actualSeq!.generate() - return generator.next() == nil - } -} - -/// A Nimble matcher that succeeds when a value is "empty". For collections, this -/// means the are no items in that collection. For strings, it is an empty string. -public func beEmpty() -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be empty" - let actualString = try actualExpression.evaluate() - return actualString == nil || NSString(string: actualString!).length == 0 - } -} - -/// A Nimble matcher that succeeds when a value is "empty". For collections, this -/// means the are no items in that collection. For NSString instances, it is an empty string. -public func beEmpty() -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be empty" - let actualString = try actualExpression.evaluate() - return actualString == nil || actualString!.length == 0 - } -} - -// Without specific overrides, beEmpty() is ambiguous for NSDictionary, NSArray, -// etc, since they conform to SequenceType as well as NMBCollection. - -/// A Nimble matcher that succeeds when a value is "empty". For collections, this -/// means the are no items in that collection. For strings, it is an empty string. -public func beEmpty() -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be empty" - let actualDictionary = try actualExpression.evaluate() - return actualDictionary == nil || actualDictionary!.count == 0 - } -} - -/// A Nimble matcher that succeeds when a value is "empty". For collections, this -/// means the are no items in that collection. For strings, it is an empty string. -public func beEmpty() -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be empty" - let actualArray = try actualExpression.evaluate() - return actualArray == nil || actualArray!.count == 0 - } -} - -/// A Nimble matcher that succeeds when a value is "empty". For collections, this -/// means the are no items in that collection. For strings, it is an empty string. -public func beEmpty() -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be empty" - let actual = try actualExpression.evaluate() - return actual == nil || actual!.count == 0 - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beEmptyMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let location = actualExpression.location - let actualValue = try! actualExpression.evaluate() - failureMessage.postfixMessage = "be empty" - if let value = actualValue as? NMBCollection { - let expr = Expression(expression: ({ value as NMBCollection }), location: location) - return try! beEmpty().matches(expr, failureMessage: failureMessage) - } else if let value = actualValue as? NSString { - let expr = Expression(expression: ({ value as String }), location: location) - return try! beEmpty().matches(expr, failureMessage: failureMessage) - } else if let actualValue = actualValue { - failureMessage.postfixMessage = "be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings)" - failureMessage.actualValue = "\(classAsString(actualValue.dynamicType)) type" - } - return false - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift deleted file mode 100644 index 0f24ab5..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift +++ /dev/null @@ -1,39 +0,0 @@ -import Foundation - - -/// A Nimble matcher that succeeds when the actual value is greater than the expected value. -public func beGreaterThan(expectedValue: T?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be greater than <\(stringify(expectedValue))>" - return try actualExpression.evaluate() > expectedValue - } -} - -/// A Nimble matcher that succeeds when the actual value is greater than the expected value. -public func beGreaterThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be greater than <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedDescending - return matches - } -} - -public func >(lhs: Expectation, rhs: T) { - lhs.to(beGreaterThan(rhs)) -} - -public func >(lhs: Expectation, rhs: NMBComparable?) { - lhs.to(beGreaterThan(rhs)) -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beGreaterThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let expr = actualExpression.cast { $0 as? NMBComparable } - return try! beGreaterThan(expected).matches(expr, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift deleted file mode 100644 index c89ff07..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift +++ /dev/null @@ -1,41 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual value is greater than -/// or equal to the expected value. -public func beGreaterThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be greater than or equal to <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - return actualValue >= expectedValue - } -} - -/// A Nimble matcher that succeeds when the actual value is greater than -/// or equal to the expected value. -public func beGreaterThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be greater than or equal to <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedAscending - return matches - } -} - -public func >=(lhs: Expectation, rhs: T) { - lhs.to(beGreaterThanOrEqualTo(rhs)) -} - -public func >=(lhs: Expectation, rhs: T) { - lhs.to(beGreaterThanOrEqualTo(rhs)) -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beGreaterThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let expr = actualExpression.cast { $0 as? NMBComparable } - return try! beGreaterThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift deleted file mode 100644 index a369501..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift +++ /dev/null @@ -1,39 +0,0 @@ -import Foundation - - -/// A Nimble matcher that succeeds when the actual value is the same instance -/// as the expected instance. -public func beIdenticalTo(expected: AnyObject?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - let actual = try actualExpression.evaluate() - failureMessage.actualValue = "\(identityAsString(actual))" - failureMessage.postfixMessage = "be identical to \(identityAsString(expected))" - return actual === expected && actual !== nil - } -} - -public func ===(lhs: Expectation, rhs: AnyObject?) { - lhs.to(beIdenticalTo(rhs)) -} -public func !==(lhs: Expectation, rhs: AnyObject?) { - lhs.toNot(beIdenticalTo(rhs)) -} - -/// A Nimble matcher that succeeds when the actual value is the same instance -/// as the expected instance. -/// -/// Alias for "beIdenticalTo". -public func be(expected: AnyObject?) -> NonNilMatcherFunc { - return beIdenticalTo(expected) -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beIdenticalToMatcher(expected: NSObject?) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let aExpr = actualExpression.cast { $0 as AnyObject? } - return try! beIdenticalTo(expected).matches(aExpr, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeLessThan.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeLessThan.swift deleted file mode 100644 index ea4725b..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeLessThan.swift +++ /dev/null @@ -1,38 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual value is less than the expected value. -public func beLessThan(expectedValue: T?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be less than <\(stringify(expectedValue))>" - return try actualExpression.evaluate() < expectedValue - } -} - -/// A Nimble matcher that succeeds when the actual value is less than the expected value. -public func beLessThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be less than <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedAscending - return matches - } -} - -public func <(lhs: Expectation, rhs: T) { - lhs.to(beLessThan(rhs)) -} - -public func <(lhs: Expectation, rhs: NMBComparable?) { - lhs.to(beLessThan(rhs)) -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beLessThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let expr = actualExpression.cast { $0 as! NMBComparable? } - return try! beLessThan(expected).matches(expr, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift deleted file mode 100644 index a24cf8c..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift +++ /dev/null @@ -1,39 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual value is less than -/// or equal to the expected value. -public func beLessThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be less than or equal to <\(stringify(expectedValue))>" - return try actualExpression.evaluate() <= expectedValue - } -} - -/// A Nimble matcher that succeeds when the actual value is less than -/// or equal to the expected value. -public func beLessThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be less than or equal to <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - return actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedDescending - } -} - -public func <=(lhs: Expectation, rhs: T) { - lhs.to(beLessThanOrEqualTo(rhs)) -} - -public func <=(lhs: Expectation, rhs: T) { - lhs.to(beLessThanOrEqualTo(rhs)) -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beLessThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil:false) { actualExpression, failureMessage in - let expr = actualExpression.cast { $0 as? NMBComparable } - return try! beLessThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeLogical.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeLogical.swift deleted file mode 100644 index ac729b2..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeLogical.swift +++ /dev/null @@ -1,89 +0,0 @@ -import Foundation - -internal func matcherWithFailureMessage(matcher: NonNilMatcherFunc, postprocessor: (FailureMessage) -> Void) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - defer { postprocessor(failureMessage) } - return try matcher.matcher(actualExpression, failureMessage) - } -} - -// MARK: beTrue() / beFalse() - -/// A Nimble matcher that succeeds when the actual value is exactly true. -/// This matcher will not match against nils. -public func beTrue() -> NonNilMatcherFunc { - return matcherWithFailureMessage(equal(true)) { failureMessage in - failureMessage.postfixMessage = "be true" - } -} - -/// A Nimble matcher that succeeds when the actual value is exactly false. -/// This matcher will not match against nils. -public func beFalse() -> NonNilMatcherFunc { - return matcherWithFailureMessage(equal(false)) { failureMessage in - failureMessage.postfixMessage = "be false" - } -} - -// MARK: beTruthy() / beFalsy() - -/// A Nimble matcher that succeeds when the actual value is not logically false. -public func beTruthy() -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be truthy" - let actualValue = try actualExpression.evaluate() - if let actualValue = actualValue { - if let actualValue = actualValue as? BooleanType { - return actualValue.boolValue == true - } - } - return actualValue != nil - } -} - -/// A Nimble matcher that succeeds when the actual value is logically false. -/// This matcher will match against nils. -public func beFalsy() -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be falsy" - let actualValue = try actualExpression.evaluate() - if let actualValue = actualValue { - if let actualValue = actualValue as? BooleanType { - return actualValue.boolValue != true - } - } - return actualValue == nil - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beTruthyMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher { actualExpression, failureMessage in - let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? } - return try! beTruthy().matches(expr, failureMessage: failureMessage) - } - } - - public class func beFalsyMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher { actualExpression, failureMessage in - let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? } - return try! beFalsy().matches(expr, failureMessage: failureMessage) - } - } - - public class func beTrueMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher { actualExpression, failureMessage in - let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? } - return try! beTrue().matches(expr, failureMessage: failureMessage) - } - } - - public class func beFalseMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? } - return try! beFalse().matches(expr, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeNil.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeNil.swift deleted file mode 100644 index a6fb31f..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeNil.swift +++ /dev/null @@ -1,20 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual value is nil. -public func beNil() -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be nil" - let actualValue = try actualExpression.evaluate() - return actualValue == nil - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beNilMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher { actualExpression, failureMessage in - return try! beNil().matches(actualExpression, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeVoid.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeVoid.swift deleted file mode 100644 index 8f86265..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeVoid.swift +++ /dev/null @@ -1,18 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual value is Void. -public func beVoid() -> MatcherFunc<()> { - return MatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be void" - let actualValue: ()? = try actualExpression.evaluate() - return actualValue != nil - } -} - -public func ==(lhs: Expectation<()>, rhs: ()) { - lhs.to(beVoid()) -} - -public func !=(lhs: Expectation<()>, rhs: ()) { - lhs.toNot(beVoid()) -} \ No newline at end of file diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeginWith.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeginWith.swift deleted file mode 100644 index 0b5e0e1..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/BeginWith.swift +++ /dev/null @@ -1,55 +0,0 @@ -import Foundation - - -/// A Nimble matcher that succeeds when the actual sequence's first element -/// is equal to the expected value. -public func beginWith(startingElement: T) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "begin with <\(startingElement)>" - if let actualValue = try actualExpression.evaluate() { - var actualGenerator = actualValue.generate() - return actualGenerator.next() == startingElement - } - return false - } -} - -/// A Nimble matcher that succeeds when the actual collection's first element -/// is equal to the expected object. -public func beginWith(startingElement: AnyObject) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "begin with <\(startingElement)>" - let collection = try actualExpression.evaluate() - return collection != nil && collection!.indexOfObject(startingElement) == 0 - } -} - -/// A Nimble matcher that succeeds when the actual string contains expected substring -/// where the expected substring's location is zero. -public func beginWith(startingSubstring: String) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "begin with <\(startingSubstring)>" - if let actual = try actualExpression.evaluate() { - let range = actual.rangeOfString(startingSubstring) - return range != nil && range!.startIndex == actual.startIndex - } - return false - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let actual = try! actualExpression.evaluate() - if let _ = actual as? String { - let expr = actualExpression.cast { $0 as? String } - return try! beginWith(expected as! String).matches(expr, failureMessage: failureMessage) - } else { - let expr = actualExpression.cast { $0 as? NMBOrderedCollection } - return try! beginWith(expected).matches(expr, failureMessage: failureMessage) - } - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/Contain.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/Contain.swift deleted file mode 100644 index cc08768..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/Contain.swift +++ /dev/null @@ -1,92 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual sequence contains the expected value. -public func contain(items: T...) -> NonNilMatcherFunc { - return contain(items) -} - -public func contain(items: [T]) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "contain <\(arrayAsString(items))>" - if let actual = try actualExpression.evaluate() { - return items.all { - return actual.contains($0) - } - } - return false - } -} - -/// A Nimble matcher that succeeds when the actual string contains the expected substring. -public func contain(substrings: String...) -> NonNilMatcherFunc { - return contain(substrings) -} - -public func contain(substrings: [String]) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "contain <\(arrayAsString(substrings))>" - if let actual = try actualExpression.evaluate() { - return substrings.all { - let range = actual.rangeOfString($0) - return range != nil && !range!.isEmpty - } - } - return false - } -} - -/// A Nimble matcher that succeeds when the actual string contains the expected substring. -public func contain(substrings: NSString...) -> NonNilMatcherFunc { - return contain(substrings) -} - -public func contain(substrings: [NSString]) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "contain <\(arrayAsString(substrings))>" - if let actual = try actualExpression.evaluate() { - return substrings.all { actual.rangeOfString($0.description).length != 0 } - } - return false - } -} - -/// A Nimble matcher that succeeds when the actual collection contains the expected object. -public func contain(items: AnyObject?...) -> NonNilMatcherFunc { - return contain(items) -} - -public func contain(items: [AnyObject?]) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "contain <\(arrayAsString(items))>" - guard let actual = try actualExpression.evaluate() else { return false } - return items.all { item in - return item != nil && actual.containsObject(item!) - } - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func containMatcher(expected: [NSObject]) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let location = actualExpression.location - let actualValue = try! actualExpression.evaluate() - if let value = actualValue as? NMBContainer { - let expr = Expression(expression: ({ value as NMBContainer }), location: location) - - // A straightforward cast on the array causes this to crash, so we have to cast the individual items - let expectedOptionals: [AnyObject?] = expected.map({ $0 as AnyObject? }) - return try! contain(expectedOptionals).matches(expr, failureMessage: failureMessage) - } else if let value = actualValue as? NSString { - let expr = Expression(expression: ({ value as String }), location: location) - return try! contain(expected as! [String]).matches(expr, failureMessage: failureMessage) - } else if actualValue != nil { - failureMessage.postfixMessage = "contain <\(arrayAsString(expected))> (only works for NSArrays, NSSets, NSHashTables, and NSStrings)" - } else { - failureMessage.postfixMessage = "contain <\(arrayAsString(expected))>" - } - return false - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/EndWith.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/EndWith.swift deleted file mode 100644 index ff2bd9e..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/EndWith.swift +++ /dev/null @@ -1,65 +0,0 @@ -import Foundation - - -/// A Nimble matcher that succeeds when the actual sequence's last element -/// is equal to the expected value. -public func endWith(endingElement: T) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "end with <\(endingElement)>" - - if let actualValue = try actualExpression.evaluate() { - var actualGenerator = actualValue.generate() - var lastItem: T? - var item: T? - repeat { - lastItem = item - item = actualGenerator.next() - } while(item != nil) - - return lastItem == endingElement - } - return false - } -} - -/// A Nimble matcher that succeeds when the actual collection's last element -/// is equal to the expected object. -public func endWith(endingElement: AnyObject) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "end with <\(endingElement)>" - let collection = try actualExpression.evaluate() - return collection != nil && collection!.indexOfObject(endingElement) == collection!.count - 1 - } -} - - -/// A Nimble matcher that succeeds when the actual string contains the expected substring -/// where the expected substring's location is the actual string's length minus the -/// expected substring's length. -public func endWith(endingSubstring: String) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "end with <\(endingSubstring)>" - if let collection = try actualExpression.evaluate() { - let range = collection.rangeOfString(endingSubstring) - return range != nil && range!.endIndex == collection.endIndex - } - return false - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func endWithMatcher(expected: AnyObject) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let actual = try! actualExpression.evaluate() - if let _ = actual as? String { - let expr = actualExpression.cast { $0 as? String } - return try! endWith(expected as! String).matches(expr, failureMessage: failureMessage) - } else { - let expr = actualExpression.cast { $0 as? NMBOrderedCollection } - return try! endWith(expected).matches(expr, failureMessage: failureMessage) - } - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/Equal.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/Equal.swift deleted file mode 100644 index 6373d8c..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/Equal.swift +++ /dev/null @@ -1,181 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual value is equal to the expected value. -/// Values can support equal by supporting the Equatable protocol. -/// -/// @see beCloseTo if you want to match imprecise types (eg - floats, doubles). -public func equal(expectedValue: T?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - let matches = actualValue == expectedValue && expectedValue != nil - if expectedValue == nil || actualValue == nil { - if expectedValue == nil { - failureMessage.postfixActual = " (use beNil() to match nils)" - } - return false - } - return matches - } -} - -/// A Nimble matcher that succeeds when the actual value is equal to the expected value. -/// Values can support equal by supporting the Equatable protocol. -/// -/// @see beCloseTo if you want to match imprecise types (eg - floats, doubles). -public func equal(expectedValue: [T: C]?) -> NonNilMatcherFunc<[T: C]> { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - if expectedValue == nil || actualValue == nil { - if expectedValue == nil { - failureMessage.postfixActual = " (use beNil() to match nils)" - } - return false - } - return expectedValue! == actualValue! - } -} - -/// A Nimble matcher that succeeds when the actual collection is equal to the expected collection. -/// Items must implement the Equatable protocol. -public func equal(expectedValue: [T]?) -> NonNilMatcherFunc<[T]> { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - if expectedValue == nil || actualValue == nil { - if expectedValue == nil { - failureMessage.postfixActual = " (use beNil() to match nils)" - } - return false - } - return expectedValue! == actualValue! - } -} - -/// A Nimble matcher allowing comparison of collection with optional type -public func equal(expectedValue: [T?]) -> NonNilMatcherFunc<[T?]> { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" - if let actualValue = try actualExpression.evaluate() { - if expectedValue.count != actualValue.count { - return false - } - - for (index, item) in actualValue.enumerate() { - let otherItem = expectedValue[index] - if item == nil && otherItem == nil { - continue - } else if item == nil && otherItem != nil { - return false - } else if item != nil && otherItem == nil { - return false - } else if item! != otherItem! { - return false - } - } - - return true - } else { - failureMessage.postfixActual = " (use beNil() to match nils)" - } - - return false - } -} - -/// A Nimble matcher that succeeds when the actual set is equal to the expected set. -public func equal(expectedValue: Set?) -> NonNilMatcherFunc> { - return equal(expectedValue, stringify: stringify) -} - -/// 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).sort { $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 = try 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)) -} - -public func !=(lhs: Expectation, rhs: T?) { - lhs.toNot(equal(rhs)) -} - -public func ==(lhs: Expectation<[T]>, rhs: [T]?) { - lhs.to(equal(rhs)) -} - -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)) -} - -public func !=(lhs: Expectation<[T: C]>, rhs: [T: C]?) { - lhs.toNot(equal(rhs)) -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func equalMatcher(expected: NSObject) -> NMBMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - return try! equal(expected).matches(actualExpression, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/HaveCount.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/HaveCount.swift deleted file mode 100644 index a17cca2..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/HaveCount.swift +++ /dev/null @@ -1,50 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual CollectionType's count equals -/// the expected value -public func haveCount(expectedValue: T.Index.Distance) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - if let actualValue = try actualExpression.evaluate() { - failureMessage.postfixMessage = "have \(stringify(actualValue)) with count \(stringify(expectedValue))" - let result = expectedValue == actualValue.count - failureMessage.actualValue = "\(actualValue.count)" - return result - } else { - return false - } - } -} - -/// A Nimble matcher that succeeds when the actual collection's count equals -/// the expected value -public func haveCount(expectedValue: Int) -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - if let actualValue = try actualExpression.evaluate() { - failureMessage.postfixMessage = "have \(stringify(actualValue)) with count \(stringify(expectedValue))" - let result = expectedValue == actualValue.count - failureMessage.actualValue = "\(actualValue.count)" - return result - } else { - return false - } - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func haveCountMatcher(expected: NSNumber) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let location = actualExpression.location - let actualValue = try! actualExpression.evaluate() - if let value = actualValue as? NMBCollection { - let expr = Expression(expression: ({ value as NMBCollection}), location: location) - return try! haveCount(expected.integerValue).matches(expr, failureMessage: failureMessage) - } else if let actualValue = actualValue { - failureMessage.postfixMessage = "get type of NSArray, NSSet, NSDictionary, or NSHashTable" - failureMessage.actualValue = "\(classAsString(actualValue.dynamicType))" - } - return false - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/Match.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/Match.swift deleted file mode 100644 index 586e616..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/Match.swift +++ /dev/null @@ -1,30 +0,0 @@ -import Foundation - -#if _runtime(_ObjC) - -/// A Nimble matcher that succeeds when the actual string satisfies the regular expression -/// described by the expected string. -public func match(expectedValue: String?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "match <\(stringify(expectedValue))>" - - if let actual = try actualExpression.evaluate() { - if let regexp = expectedValue { - return actual.rangeOfString(regexp, options: .RegularExpressionSearch) != nil - } - } - - return false - } -} - -extension NMBObjCMatcher { - public class func matchMatcher(expected: NSString) -> NMBMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let actual = actualExpression.cast { $0 as? String } - return try! match(expected.description).matches(actual, failureMessage: failureMessage) - } - } -} - -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/MatchError.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/MatchError.swift deleted file mode 100644 index cba70c2..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/MatchError.swift +++ /dev/null @@ -1,26 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual expression evaluates to an -/// error from the specified case. -/// -/// Errors are tried to be compared by their implementation of Equatable, -/// otherwise they fallback to comparision by _domain and _code. -public func matchError(error: T) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - let actualError: ErrorType? = try actualExpression.evaluate() - - setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, error: error) - return errorMatchesNonNilFieldsOrClosure(actualError, error: error) - } -} - -/// A Nimble matcher that succeeds when the actual expression evaluates to an -/// error of the specified type -public func matchError(errorType: T.Type) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - let actualError: ErrorType? = try actualExpression.evaluate() - - setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, errorType: errorType) - return errorMatchesNonNilFieldsOrClosure(actualError, errorType: errorType) - } -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift deleted file mode 100644 index c8a9217..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift +++ /dev/null @@ -1,69 +0,0 @@ -/// A convenience API to build matchers that don't need special negation -/// behavior. The toNot() behavior is the negation of to(). -/// -/// @see NonNilMatcherFunc if you prefer to have this matcher fail when nil -/// values are recieved in an expectation. -/// -/// You may use this when implementing your own custom matchers. -/// -/// Use the Matcher protocol instead of this type to accept custom matchers as -/// input parameters. -/// @see allPass for an example that uses accepts other matchers as input. -public struct MatcherFunc: Matcher { - public let matcher: (Expression, FailureMessage) throws -> Bool - - public init(_ matcher: (Expression, FailureMessage) throws -> Bool) { - self.matcher = matcher - } - - public func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { - return try matcher(actualExpression, failureMessage) - } - - public func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { - return try !matcher(actualExpression, failureMessage) - } -} - -/// A convenience API to build matchers that don't need special negation -/// behavior. The toNot() behavior is the negation of to(). -/// -/// Unlike MatcherFunc, this will always fail if an expectation contains nil. -/// This applies regardless of using to() or toNot(). -/// -/// You may use this when implementing your own custom matchers. -/// -/// Use the Matcher protocol instead of this type to accept custom matchers as -/// input parameters. -/// @see allPass for an example that uses accepts other matchers as input. -public struct NonNilMatcherFunc: Matcher { - public let matcher: (Expression, FailureMessage) throws -> Bool - - public init(_ matcher: (Expression, FailureMessage) throws -> Bool) { - self.matcher = matcher - } - - public func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { - let pass = try matcher(actualExpression, failureMessage) - if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) { - return false - } - return pass - } - - public func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { - let pass = try !matcher(actualExpression, failureMessage) - if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) { - return false - } - return pass - } - - internal func attachNilErrorIfNeeded(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { - if try actualExpression.evaluate() == nil { - failureMessage.postfixActual = " (use beNil() to match nils)" - return true - } - return false - } -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift deleted file mode 100644 index 978d54c..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift +++ /dev/null @@ -1,143 +0,0 @@ -import Foundation - -/// Implement this protocol to implement a custom matcher for Swift -public protocol Matcher { - associatedtype ValueType - func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool - func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool -} - -#if _runtime(_ObjC) -/// Objective-C interface to the Swift variant of Matcher. -@objc public protocol NMBMatcher { - func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool - func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool -} -#endif - -#if _runtime(_ObjC) -/// Protocol for types that support contain() matcher. -@objc public protocol NMBContainer { - func containsObject(object: AnyObject!) -> Bool -} - -extension NSHashTable : NMBContainer {} // Corelibs Foundation does not include this class yet -#else -public protocol NMBContainer { - func containsObject(object: AnyObject) -> Bool -} -#endif - -extension NSArray : NMBContainer {} -extension NSSet : NMBContainer {} - -#if _runtime(_ObjC) -/// Protocol for types that support only beEmpty(), haveCount() matchers -@objc public protocol NMBCollection { - var count: Int { get } -} - -extension NSHashTable : NMBCollection {} // Corelibs Foundation does not include these classes yet -extension NSMapTable : NMBCollection {} -#else -public protocol NMBCollection { - var count: Int { get } -} -#endif - -extension NSSet : NMBCollection {} -extension NSIndexSet : NMBCollection {} -extension NSDictionary : NMBCollection {} - -#if _runtime(_ObjC) -/// Protocol for types that support beginWith(), endWith(), beEmpty() matchers -@objc public protocol NMBOrderedCollection : NMBCollection { - func indexOfObject(object: AnyObject!) -> Int -} -#else -public protocol NMBOrderedCollection : NMBCollection { - func indexOfObject(object: AnyObject) -> Int -} -#endif - -extension NSArray : NMBOrderedCollection {} - -#if _runtime(_ObjC) -/// Protocol for types to support beCloseTo() matcher -@objc public protocol NMBDoubleConvertible { - var doubleValue: CDouble { get } -} -#else -public protocol NMBDoubleConvertible { - var doubleValue: CDouble { get } -} - -extension Double : NMBDoubleConvertible { - public var doubleValue: CDouble { - get { - return self - } - } -} - -extension Float : NMBDoubleConvertible { - public var doubleValue: CDouble { - get { - return CDouble(self) - } - } -} -#endif - -extension NSNumber : NMBDoubleConvertible { -} - -private let dateFormatter: NSDateFormatter = { - let formatter = NSDateFormatter() - formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSS" - formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") - - return formatter -}() - -#if _runtime(_ObjC) -extension NSDate: NMBDoubleConvertible { - public var doubleValue: CDouble { - get { - return self.timeIntervalSinceReferenceDate - } - } -} -#endif - -extension NSDate: TestOutputStringConvertible { - public var testDescription: String { - return dateFormatter.stringFromDate(self) - } -} - -/// Protocol for types to support beLessThan(), beLessThanOrEqualTo(), -/// beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers. -/// -/// Types that conform to Swift's Comparable protocol will work implicitly too -#if _runtime(_ObjC) -@objc public protocol NMBComparable { - func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult -} -#else -// This should become obsolete once Corelibs Foundation adds Comparable conformance to NSNumber -public protocol NMBComparable { - func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult -} -#endif - -extension NSNumber : NMBComparable { - public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult { - return compare(otherObject as! NSNumber) - } -} -extension NSString : NMBComparable { - public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult { - return compare(otherObject as! String) - } -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/PostNotification.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/PostNotification.swift deleted file mode 100644 index 0191f88..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/PostNotification.swift +++ /dev/null @@ -1,66 +0,0 @@ -import Foundation - -internal class NotificationCollector { - private(set) var observedNotifications: [NSNotification] - private let notificationCenter: NSNotificationCenter - #if _runtime(_ObjC) - private var token: AnyObject? - #else - private var token: NSObjectProtocol? - #endif - - required init(notificationCenter: NSNotificationCenter) { - self.notificationCenter = notificationCenter - self.observedNotifications = [] - } - - func startObserving() { - self.token = self.notificationCenter.addObserverForName(nil, object: nil, queue: nil) { - // linux-swift gets confused by .append(n) - [weak self] n in self?.observedNotifications += [n] - } - } - - deinit { - #if _runtime(_ObjC) - if let token = self.token { - self.notificationCenter.removeObserver(token) - } - #else - if let token = self.token as? AnyObject { - self.notificationCenter.removeObserver(token) - } - #endif - } -} - -private let mainThread = pthread_self() - -public func postNotifications( - notificationsMatcher: T, - fromNotificationCenter center: NSNotificationCenter = NSNotificationCenter.defaultCenter()) - -> MatcherFunc { - let _ = mainThread // Force lazy-loading of this value - let collector = NotificationCollector(notificationCenter: center) - collector.startObserving() - var once: Bool = false - return MatcherFunc { actualExpression, failureMessage in - let collectorNotificationsExpression = Expression(memoizedExpression: { _ in - return collector.observedNotifications - }, location: actualExpression.location, withoutCaching: true) - - assert(pthread_equal(mainThread, pthread_self()) != 0, "Only expecting closure to be evaluated on main thread.") - if !once { - once = true - try actualExpression.evaluate() - } - - let match = try notificationsMatcher.matches(collectorNotificationsExpression, failureMessage: failureMessage) - if collector.observedNotifications.isEmpty { - failureMessage.actualValue = "no notifications" - } else { - failureMessage.actualValue = "<\(stringify(collector.observedNotifications))>" - } - return match - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/RaisesException.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/RaisesException.swift deleted file mode 100644 index ff6b74a..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/RaisesException.swift +++ /dev/null @@ -1,182 +0,0 @@ -import Foundation - -// This matcher requires the Objective-C, and being built by Xcode rather than the Swift Package Manager -#if _runtime(_ObjC) && !SWIFT_PACKAGE - -/// A Nimble matcher that succeeds when the actual expression raises an -/// exception with the specified name, reason, and/or userInfo. -/// -/// Alternatively, you can pass a closure to do any arbitrary custom matching -/// to the raised exception. The closure only gets called when an exception -/// is raised. -/// -/// nil arguments indicates that the matcher should not attempt to match against -/// that parameter. -public func raiseException( - named named: String? = nil, - reason: String? = nil, - userInfo: NSDictionary? = nil, - closure: ((NSException) -> Void)? = nil) -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - - var exception: NSException? - let capture = NMBExceptionCapture(handler: ({ e in - exception = e - }), finally: nil) - - capture.tryBlock { - try! actualExpression.evaluate() - return - } - - setFailureMessageForException(failureMessage, exception: exception, named: named, reason: reason, userInfo: userInfo, closure: closure) - return exceptionMatchesNonNilFieldsOrClosure(exception, named: named, reason: reason, userInfo: userInfo, closure: closure) - } -} - -internal func setFailureMessageForException( - failureMessage: FailureMessage, - exception: NSException?, - named: String?, - reason: String?, - userInfo: NSDictionary?, - closure: ((NSException) -> Void)?) { - failureMessage.postfixMessage = "raise exception" - - if let named = named { - failureMessage.postfixMessage += " with name <\(named)>" - } - if let reason = reason { - failureMessage.postfixMessage += " with reason <\(reason)>" - } - if let userInfo = userInfo { - failureMessage.postfixMessage += " with userInfo <\(userInfo)>" - } - if let _ = closure { - failureMessage.postfixMessage += " that satisfies block" - } - if named == nil && reason == nil && userInfo == nil && closure == nil { - failureMessage.postfixMessage = "raise any exception" - } - - if let exception = exception { - failureMessage.actualValue = "\(classAsString(exception.dynamicType)) { name=\(exception.name), reason='\(stringify(exception.reason))', userInfo=\(stringify(exception.userInfo)) }" - } else { - failureMessage.actualValue = "no exception" - } -} - -internal func exceptionMatchesNonNilFieldsOrClosure( - exception: NSException?, - named: String?, - reason: String?, - userInfo: NSDictionary?, - closure: ((NSException) -> Void)?) -> Bool { - var matches = false - - if let exception = exception { - matches = true - - if named != nil && exception.name != named { - matches = false - } - if reason != nil && exception.reason != reason { - matches = false - } - if userInfo != nil && exception.userInfo != userInfo { - matches = false - } - if let closure = closure { - let assertions = gatherFailingExpectations { - closure(exception) - } - let messages = assertions.map { $0.message } - if messages.count > 0 { - matches = false - } - } - } - - return matches -} - -public class NMBObjCRaiseExceptionMatcher : NSObject, NMBMatcher { - internal var _name: String? - internal var _reason: String? - internal var _userInfo: NSDictionary? - internal var _block: ((NSException) -> Void)? - - internal init(name: String?, reason: String?, userInfo: NSDictionary?, block: ((NSException) -> Void)?) { - _name = name - _reason = reason - _userInfo = userInfo - _block = block - } - - public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - let block: () -> Any? = ({ actualBlock(); return nil }) - let expr = Expression(expression: block, location: location) - - return try! raiseException( - named: _name, - reason: _reason, - userInfo: _userInfo, - closure: _block - ).matches(expr, failureMessage: failureMessage) - } - - public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - return !matches(actualBlock, failureMessage: failureMessage, location: location) - } - - public var named: (name: String) -> NMBObjCRaiseExceptionMatcher { - return ({ name in - return NMBObjCRaiseExceptionMatcher( - name: name, - reason: self._reason, - userInfo: self._userInfo, - block: self._block - ) - }) - } - - public var reason: (reason: String?) -> NMBObjCRaiseExceptionMatcher { - return ({ reason in - return NMBObjCRaiseExceptionMatcher( - name: self._name, - reason: reason, - userInfo: self._userInfo, - block: self._block - ) - }) - } - - public var userInfo: (userInfo: NSDictionary?) -> NMBObjCRaiseExceptionMatcher { - return ({ userInfo in - return NMBObjCRaiseExceptionMatcher( - name: self._name, - reason: self._reason, - userInfo: userInfo, - block: self._block - ) - }) - } - - public var satisfyingBlock: (block: ((NSException) -> Void)?) -> NMBObjCRaiseExceptionMatcher { - return ({ block in - return NMBObjCRaiseExceptionMatcher( - name: self._name, - reason: self._reason, - userInfo: self._userInfo, - block: block - ) - }) - } -} - -extension NMBObjCMatcher { - public class func raiseExceptionMatcher() -> NMBObjCRaiseExceptionMatcher { - return NMBObjCRaiseExceptionMatcher(name: nil, reason: nil, userInfo: nil, block: nil) - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift deleted file mode 100644 index d383a31..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift +++ /dev/null @@ -1,61 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual value matches with any of the matchers -/// provided in the variable list of matchers. -public func satisfyAnyOf(matchers: U...) -> NonNilMatcherFunc { - return satisfyAnyOf(matchers) -} - -internal func satisfyAnyOf(matchers: [U]) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - let postfixMessages = NSMutableArray() - var matches = false - for matcher in matchers { - if try matcher.matches(actualExpression, failureMessage: failureMessage) { - matches = true - } - postfixMessages.addObject(NSString(string: "{\(failureMessage.postfixMessage)}")) - } - - failureMessage.postfixMessage = "match one of: " + postfixMessages.componentsJoinedByString(", or ") - if let actualValue = try actualExpression.evaluate() { - failureMessage.actualValue = "\(actualValue)" - } - - return matches - } -} - -public func ||(left: NonNilMatcherFunc, right: NonNilMatcherFunc) -> NonNilMatcherFunc { - return satisfyAnyOf(left, right) -} - -public func ||(left: MatcherFunc, right: MatcherFunc) -> NonNilMatcherFunc { - return satisfyAnyOf(left, right) -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func satisfyAnyOfMatcher(matchers: [NMBObjCMatcher]) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - if matchers.isEmpty { - failureMessage.stringValue = "satisfyAnyOf must be called with at least one matcher" - return false - } - - var elementEvaluators = [NonNilMatcherFunc]() - for matcher in matchers { - let elementEvaluator: (Expression, FailureMessage) -> Bool = { - expression, failureMessage in - return matcher.matches( - {try! expression.evaluate()}, failureMessage: failureMessage, location: actualExpression.location) - } - - elementEvaluators.append(NonNilMatcherFunc(elementEvaluator)) - } - - return try! satisfyAnyOf(elementEvaluators).matches(actualExpression, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/ThrowError.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/ThrowError.swift deleted file mode 100644 index 9563565..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Matchers/ThrowError.swift +++ /dev/null @@ -1,53 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual expression throws an -/// error of the specified type or from the specified case. -/// -/// Errors are tried to be compared by their implementation of Equatable, -/// otherwise they fallback to comparision by _domain and _code. -/// -/// Alternatively, you can pass a closure to do any arbitrary custom matching -/// to the thrown error. The closure only gets called when an error was thrown. -/// -/// nil arguments indicates that the matcher should not attempt to match against -/// that parameter. -public func throwError( - error: T? = nil, - errorType: T.Type? = nil, - closure: ((T) -> Void)? = nil) -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - - var actualError: ErrorType? - do { - try actualExpression.evaluate() - } catch let catchedError { - actualError = catchedError - } - - setFailureMessageForError(failureMessage, actualError: actualError, error: error, errorType: errorType, closure: closure) - return errorMatchesNonNilFieldsOrClosure(actualError, error: error, errorType: errorType, closure: closure) - } -} - -/// A Nimble matcher that succeeds when the actual expression throws any -/// error or when the passed closures' arbitrary custom matching succeeds. -/// -/// This duplication to it's generic adequate is required to allow to receive -/// values of the existential type ErrorType in the closure. -/// -/// The closure only gets called when an error was thrown. -public func throwError( - closure closure: ((ErrorType) -> Void)? = nil) -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - - var actualError: ErrorType? - do { - try actualExpression.evaluate() - } catch let catchedError { - actualError = catchedError - } - - setFailureMessageForError(failureMessage, actualError: actualError, closure: closure) - return errorMatchesNonNilFieldsOrClosure(actualError, closure: closure) - } -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Nimble.h b/Carthage/Checkouts/Nimble/Sources/Nimble/Nimble.h deleted file mode 100644 index 1eab61a..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Nimble.h +++ /dev/null @@ -1,7 +0,0 @@ -#import -#import "NMBExceptionCapture.h" -#import "NMBStringify.h" -#import "DSL.h" - -FOUNDATION_EXPORT double NimbleVersionNumber; -FOUNDATION_EXPORT const unsigned char NimbleVersionString[]; diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Async.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Async.swift deleted file mode 100644 index 8f1a6de..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Async.swift +++ /dev/null @@ -1,358 +0,0 @@ -import Foundation - -#if _runtime(_ObjC) -import Dispatch - -private let timeoutLeeway: UInt64 = NSEC_PER_MSEC -private let pollLeeway: UInt64 = NSEC_PER_MSEC - -/// Stores debugging information about callers -internal struct WaitingInfo: CustomStringConvertible { - let name: String - let file: FileString - let lineNumber: UInt - - var description: String { - return "\(name) at \(file):\(lineNumber)" - } -} - -internal protocol WaitLock { - func acquireWaitingLock(fnName: String, file: FileString, line: UInt) - func releaseWaitingLock() - func isWaitingLocked() -> Bool -} - -internal class AssertionWaitLock: WaitLock { - private var currentWaiter: WaitingInfo? = nil - init() { } - - func acquireWaitingLock(fnName: String, file: FileString, line: UInt) { - let info = WaitingInfo(name: fnName, file: file, lineNumber: line) - nimblePrecondition( - NSThread.isMainThread(), - "InvalidNimbleAPIUsage", - "\(fnName) can only run on the main thread." - ) - nimblePrecondition( - currentWaiter == nil, - "InvalidNimbleAPIUsage", - "Nested async expectations are not allowed to avoid creating flaky tests.\n\n" + - "The call to\n\t\(info)\n" + - "triggered this exception because\n\t\(currentWaiter!)\n" + - "is currently managing the main run loop." - ) - currentWaiter = info - } - - func isWaitingLocked() -> Bool { - return currentWaiter != nil - } - - func releaseWaitingLock() { - currentWaiter = nil - } -} - -internal enum AwaitResult { - /// Incomplete indicates None (aka - this value hasn't been fulfilled yet) - case Incomplete - /// TimedOut indicates the result reached its defined timeout limit before returning - case TimedOut - /// BlockedRunLoop indicates the main runloop is too busy processing other blocks to trigger - /// the timeout code. - /// - /// This may also mean the async code waiting upon may have never actually ran within the - /// required time because other timers & sources are running on the main run loop. - case BlockedRunLoop - /// The async block successfully executed and returned a given result - case Completed(T) - /// When a Swift Error is thrown - case ErrorThrown(ErrorType) - /// When an Objective-C Exception is raised - case RaisedException(NSException) - - func isIncomplete() -> Bool { - switch self { - case .Incomplete: return true - default: return false - } - } - - func isCompleted() -> Bool { - switch self { - case .Completed(_): return true - default: return false - } - } -} - -/// Holds the resulting value from an asynchronous expectation. -/// This class is thread-safe at receiving an "response" to this promise. -internal class AwaitPromise { - private(set) internal var asyncResult: AwaitResult = .Incomplete - private var signal: dispatch_semaphore_t - - init() { - signal = dispatch_semaphore_create(1) - } - - /// Resolves the promise with the given result if it has not been resolved. Repeated calls to - /// this method will resolve in a no-op. - /// - /// @returns a Bool that indicates if the async result was accepted or rejected because another - /// value was recieved first. - func resolveResult(result: AwaitResult) -> Bool { - if dispatch_semaphore_wait(signal, DISPATCH_TIME_NOW) == 0 { - self.asyncResult = result - return true - } else { - return false - } - } -} - -internal struct AwaitTrigger { - let timeoutSource: dispatch_source_t - let actionSource: dispatch_source_t? - let start: () throws -> Void -} - -/// Factory for building fully configured AwaitPromises and waiting for their results. -/// -/// This factory stores all the state for an async expectation so that Await doesn't -/// doesn't have to manage it. -internal class AwaitPromiseBuilder { - let awaiter: Awaiter - let waitLock: WaitLock - let trigger: AwaitTrigger - let promise: AwaitPromise - - internal init( - awaiter: Awaiter, - waitLock: WaitLock, - promise: AwaitPromise, - trigger: AwaitTrigger) { - self.awaiter = awaiter - self.waitLock = waitLock - self.promise = promise - self.trigger = trigger - } - - func timeout(timeoutInterval: NSTimeInterval, forcefullyAbortTimeout: NSTimeInterval) -> Self { - // = Discussion = - // - // There's a lot of technical decisions here that is useful to elaborate on. This is - // definitely more lower-level than the previous NSRunLoop based implementation. - // - // - // Why Dispatch Source? - // - // - // We're using a dispatch source to have better control of the run loop behavior. - // A timer source gives us deferred-timing control without having to rely as much on - // a run loop's traditional dispatching machinery (eg - NSTimers, DefaultRunLoopMode, etc.) - // which is ripe for getting corrupted by application code. - // - // And unlike dispatch_async(), we can control how likely our code gets prioritized to - // executed (see leeway parameter) + DISPATCH_TIMER_STRICT. - // - // This timer is assumed to run on the HIGH priority queue to ensure it maintains the - // highest priority over normal application / test code when possible. - // - // - // Run Loop Management - // - // In order to properly interrupt the waiting behavior performed by this factory class, - // this timer stops the main run loop to tell the waiter code that the result should be - // checked. - // - // In addition, stopping the run loop is used to halt code executed on the main run loop. - dispatch_source_set_timer( - trigger.timeoutSource, - dispatch_time(DISPATCH_TIME_NOW, Int64(timeoutInterval * Double(NSEC_PER_SEC))), - DISPATCH_TIME_FOREVER, - timeoutLeeway - ) - dispatch_source_set_event_handler(trigger.timeoutSource) { - guard self.promise.asyncResult.isIncomplete() else { return } - let timedOutSem = dispatch_semaphore_create(0) - let semTimedOutOrBlocked = dispatch_semaphore_create(0) - dispatch_semaphore_signal(semTimedOutOrBlocked) - let runLoop = CFRunLoopGetMain() - CFRunLoopPerformBlock(runLoop, kCFRunLoopDefaultMode) { - if dispatch_semaphore_wait(semTimedOutOrBlocked, DISPATCH_TIME_NOW) == 0 { - dispatch_semaphore_signal(timedOutSem) - dispatch_semaphore_signal(semTimedOutOrBlocked) - if self.promise.resolveResult(.TimedOut) { - CFRunLoopStop(CFRunLoopGetMain()) - } - } - } - // potentially interrupt blocking code on run loop to let timeout code run - CFRunLoopStop(runLoop) - let now = dispatch_time(DISPATCH_TIME_NOW, Int64(forcefullyAbortTimeout * Double(NSEC_PER_SEC))) - let didNotTimeOut = dispatch_semaphore_wait(timedOutSem, now) != 0 - let timeoutWasNotTriggered = dispatch_semaphore_wait(semTimedOutOrBlocked, 0) == 0 - if didNotTimeOut && timeoutWasNotTriggered { - if self.promise.resolveResult(.BlockedRunLoop) { - CFRunLoopStop(CFRunLoopGetMain()) - } - } - } - return self - } - - /// Blocks for an asynchronous result. - /// - /// @discussion - /// This function must be executed on the main thread and cannot be nested. This is because - /// this function (and it's related methods) coordinate through the main run loop. Tampering - /// with the run loop can cause undesireable behavior. - /// - /// This method will return an AwaitResult in the following cases: - /// - /// - The main run loop is blocked by other operations and the async expectation cannot be - /// be stopped. - /// - The async expectation timed out - /// - The async expectation succeeded - /// - The async expectation raised an unexpected exception (objc) - /// - The async expectation raised an unexpected error (swift) - /// - /// The returned AwaitResult will NEVER be .Incomplete. - func wait(fnName: String = #function, file: FileString = #file, line: UInt = #line) -> AwaitResult { - waitLock.acquireWaitingLock( - fnName, - file: file, - line: line) - - let capture = NMBExceptionCapture(handler: ({ exception in - self.promise.resolveResult(.RaisedException(exception)) - }), finally: ({ - self.waitLock.releaseWaitingLock() - })) - capture.tryBlock { - do { - try self.trigger.start() - } catch let error { - self.promise.resolveResult(.ErrorThrown(error)) - } - dispatch_resume(self.trigger.timeoutSource) - while self.promise.asyncResult.isIncomplete() { - // Stopping the run loop does not work unless we run only 1 mode - NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate.distantFuture()) - } - dispatch_suspend(self.trigger.timeoutSource) - dispatch_source_cancel(self.trigger.timeoutSource) - if let asyncSource = self.trigger.actionSource { - dispatch_source_cancel(asyncSource) - } - } - - return promise.asyncResult - } -} - -internal class Awaiter { - let waitLock: WaitLock - let timeoutQueue: dispatch_queue_t - let asyncQueue: dispatch_queue_t - - internal init( - waitLock: WaitLock, - asyncQueue: dispatch_queue_t, - timeoutQueue: dispatch_queue_t) { - self.waitLock = waitLock - self.asyncQueue = asyncQueue - self.timeoutQueue = timeoutQueue - } - - private func createTimerSource(queue: dispatch_queue_t) -> dispatch_source_t { - return dispatch_source_create( - DISPATCH_SOURCE_TYPE_TIMER, - 0, - DISPATCH_TIMER_STRICT, - queue - ) - } - - func performBlock( - closure: ((T) -> Void) throws -> Void) -> AwaitPromiseBuilder { - let promise = AwaitPromise() - let timeoutSource = createTimerSource(timeoutQueue) - var completionCount = 0 - let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: nil) { - try closure() { - completionCount += 1 - nimblePrecondition( - completionCount < 2, - "InvalidNimbleAPIUsage", - "Done closure's was called multiple times. waitUntil(..) expects its " + - "completion closure to only be called once.") - if promise.resolveResult(.Completed($0)) { - CFRunLoopStop(CFRunLoopGetMain()) - } - } - } - - return AwaitPromiseBuilder( - awaiter: self, - waitLock: waitLock, - promise: promise, - trigger: trigger) - } - - func poll(pollInterval: NSTimeInterval, closure: () throws -> T?) -> AwaitPromiseBuilder { - let promise = AwaitPromise() - let timeoutSource = createTimerSource(timeoutQueue) - let asyncSource = createTimerSource(asyncQueue) - let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: asyncSource) { - let interval = UInt64(pollInterval * Double(NSEC_PER_SEC)) - dispatch_source_set_timer(asyncSource, DISPATCH_TIME_NOW, interval, pollLeeway) - dispatch_source_set_event_handler(asyncSource) { - do { - if let result = try closure() { - if promise.resolveResult(.Completed(result)) { - CFRunLoopStop(CFRunLoopGetCurrent()) - } - } - } catch let error { - if promise.resolveResult(.ErrorThrown(error)) { - CFRunLoopStop(CFRunLoopGetCurrent()) - } - } - } - dispatch_resume(asyncSource) - } - - return AwaitPromiseBuilder( - awaiter: self, - waitLock: waitLock, - promise: promise, - trigger: trigger) - } -} - -internal func pollBlock( - pollInterval pollInterval: NSTimeInterval, - timeoutInterval: NSTimeInterval, - file: FileString, - line: UInt, - fnName: String = #function, - expression: () throws -> Bool) -> AwaitResult { - let awaiter = NimbleEnvironment.activeInstance.awaiter - let result = awaiter.poll(pollInterval) { () throws -> Bool? in - do { - if try expression() { - return true - } - return nil - } catch let error { - throw error - } - }.timeout(timeoutInterval, forcefullyAbortTimeout: timeoutInterval / 2.0).wait(fnName, file: file, line: line) - - return result -} - -#endif diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Errors.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Errors.swift deleted file mode 100644 index 29c4723..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Errors.swift +++ /dev/null @@ -1,133 +0,0 @@ -import Foundation - -// Generic - -internal func setFailureMessageForError( - failureMessage: FailureMessage, - postfixMessageVerb: String = "throw", - actualError: ErrorType?, - error: T? = nil, - errorType: T.Type? = nil, - closure: ((T) -> Void)? = nil) { - failureMessage.postfixMessage = "\(postfixMessageVerb) error" - - if let error = error { - if let error = error as? CustomDebugStringConvertible { - failureMessage.postfixMessage += " <\(error.debugDescription)>" - } else { - failureMessage.postfixMessage += " <\(error)>" - } - } else if errorType != nil || closure != nil { - failureMessage.postfixMessage += " from type <\(T.self)>" - } - if let _ = closure { - failureMessage.postfixMessage += " that satisfies block" - } - if error == nil && errorType == nil && closure == nil { - failureMessage.postfixMessage = "\(postfixMessageVerb) any error" - } - - if let actualError = actualError { - failureMessage.actualValue = "<\(actualError)>" - } else { - failureMessage.actualValue = "no error" - } -} - -internal func errorMatchesExpectedError( - actualError: ErrorType, - expectedError: T) -> Bool { - return actualError._domain == expectedError._domain - && actualError._code == expectedError._code -} - -internal func errorMatchesExpectedError( - actualError: ErrorType, - expectedError: T) -> Bool { - if let actualError = actualError as? T { - return actualError == expectedError - } - return false -} - -internal func errorMatchesNonNilFieldsOrClosure( - actualError: ErrorType?, - error: T? = nil, - errorType: T.Type? = nil, - closure: ((T) -> Void)? = nil) -> Bool { - var matches = false - - if let actualError = actualError { - matches = true - - if let error = error { - if !errorMatchesExpectedError(actualError, expectedError: error) { - matches = false - } - } - if let actualError = actualError as? T { - if let closure = closure { - let assertions = gatherFailingExpectations { - closure(actualError as T) - } - let messages = assertions.map { $0.message } - if messages.count > 0 { - matches = false - } - } - } else if errorType != nil && closure != nil { - // The closure expects another ErrorType as argument, so this - // is _supposed_ to fail, so that it becomes more obvious. - let assertions = gatherExpectations { - expect(actualError is T).to(equal(true)) - } - precondition(assertions.map { $0.message }.count > 0) - matches = false - } - } - - return matches -} - -// Non-generic - -internal func setFailureMessageForError( - failureMessage: FailureMessage, - actualError: ErrorType?, - closure: ((ErrorType) -> Void)?) { - failureMessage.postfixMessage = "throw error" - - if let _ = closure { - failureMessage.postfixMessage += " that satisfies block" - } else { - failureMessage.postfixMessage = "throw any error" - } - - if let actualError = actualError { - failureMessage.actualValue = "<\(actualError)>" - } else { - failureMessage.actualValue = "no error" - } -} - -internal func errorMatchesNonNilFieldsOrClosure( - actualError: ErrorType?, - closure: ((ErrorType) -> Void)?) -> Bool { - var matches = false - - if let actualError = actualError { - matches = true - - if let closure = closure { - let assertions = gatherFailingExpectations { - closure(actualError) - } - let messages = assertions.map { $0.message } - if messages.count > 0 { - matches = false - } - } - } - - return matches -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Functional.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Functional.swift deleted file mode 100644 index e85c755..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Functional.swift +++ /dev/null @@ -1,12 +0,0 @@ -import Foundation - -extension SequenceType { - internal func all(fn: Generator.Element -> Bool) -> Bool { - for item in self { - if !fn(item) { - return false - } - } - return true - } -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/SourceLocation.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/SourceLocation.swift deleted file mode 100644 index a7279aa..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/SourceLocation.swift +++ /dev/null @@ -1,31 +0,0 @@ -import Foundation - -// Ideally we would always use `StaticString` as the type for tracking the file name -// that expectations originate from, for consistency with `assert` etc. from the -// stdlib, and because recent versions of the XCTest overlay require `StaticString` -// when calling `XCTFail`. Under the Objective-C runtime (i.e. building on Mac), we -// have to use `String` instead because StaticString can't be generated from Objective-C -#if _runtime(_ObjC) -public typealias FileString = String -#else -public typealias FileString = StaticString -#endif - -public final class SourceLocation : NSObject { - public let file: FileString - public let line: UInt - - override init() { - file = "Unknown File" - line = 0 - } - - init(file: FileString, line: UInt) { - self.file = file - self.line = line - } - - override public var description: String { - return "\(file):\(line)" - } -} diff --git a/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Stringers.swift b/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Stringers.swift deleted file mode 100644 index 4edead3..0000000 --- a/Carthage/Checkouts/Nimble/Sources/Nimble/Utils/Stringers.swift +++ /dev/null @@ -1,171 +0,0 @@ -import Foundation - - -internal func identityAsString(value: AnyObject?) -> String { - if let value = value { - return NSString(format: "<%p>", unsafeBitCast(value, Int.self)).description - } else { - return "nil" - } -} - -internal func classAsString(cls: AnyClass) -> String { -#if _runtime(_ObjC) - return NSStringFromClass(cls) -#else - return String(cls) -#endif -} - -internal func arrayAsString(items: [T], joiner: String = ", ") -> String { - return items.reduce("") { accum, item in - let prefix = (accum.isEmpty ? "" : joiner) - return accum + prefix + "\(stringify(item))" - } -} - -/// A type with a customized test output text representation. -/// -/// This textual representation is produced when values will be -/// printed in test runs, and may be useful when producing -/// error messages in custom matchers. -/// -/// - SeeAlso: `CustomDebugStringConvertible` -public protocol TestOutputStringConvertible { - var testDescription: String { get } -} - -extension Double: TestOutputStringConvertible { - public var testDescription: String { - return NSNumber(double: self).testDescription - } -} - -extension Float: TestOutputStringConvertible { - public var testDescription: String { - return NSNumber(float: self).testDescription - } -} - -extension NSNumber: TestOutputStringConvertible { - // This is using `NSString(format:)` instead of - // `String(format:)` because the latter somehow breaks - // the travis CI build on linux. - public var testDescription: String { - let description = self.description - - if description.containsString(".") { - // Travis linux swiftpm build doesn't like casting String to NSString, - // which is why this annoying nested initializer thing is here. - // Maybe this will change in a future snapshot. - let decimalPlaces = NSString(string: NSString(string: description) - .componentsSeparatedByString(".")[1]) - - if decimalPlaces.length > 4 { - return NSString(format: "%0.4f", self.doubleValue).description - } - } - return self.description - } -} - -extension Array: TestOutputStringConvertible { - public var testDescription: String { - let list = self.map(Nimble.stringify).joinWithSeparator(", ") - return "[\(list)]" - } -} - -extension AnySequence: TestOutputStringConvertible { - public var testDescription: String { - let generator = self.generate() - var strings = [String]() - var value: AnySequence.Generator.Element? - - repeat { - value = generator.next() - if let value = value { - strings.append(stringify(value)) - } - } while value != nil - - let list = strings.joinWithSeparator(", ") - return "[\(list)]" - } -} - -extension NSArray: TestOutputStringConvertible { - public var testDescription: String { - let list = Array(self).map(Nimble.stringify).joinWithSeparator(", ") - return "(\(list))" - } -} - -extension NSIndexSet: TestOutputStringConvertible { - public var testDescription: String { - let list = Array(self).map(Nimble.stringify).joinWithSeparator(", ") - return "(\(list))" - } -} - -extension String: TestOutputStringConvertible { - public var testDescription: String { - return self - } -} - -extension NSData: TestOutputStringConvertible { - public var testDescription: String { - #if os(Linux) - // FIXME: Swift on Linux triggers a segfault when calling NSData's hash() (last checked on 03-11-16) - return "NSData" - #else - return "NSData" - #endif - } -} - -/// -/// Returns a string appropriate for displaying in test output -/// from the provided value. -/// -/// - parameter value: A value that will show up in a test's output. -/// -/// - returns: The string that is returned can be -/// customized per type by conforming a type to the `TestOutputStringConvertible` -/// protocol. When stringifying a non-`TestOutputStringConvertible` type, this -/// function will return the value's debug description and then its -/// normal description if available and in that order. Otherwise it -/// will return the result of constructing a string from the value. -/// -/// - SeeAlso: `TestOutputStringConvertible` -@warn_unused_result -public func stringify(value: T) -> String { - if let value = value as? TestOutputStringConvertible { - return value.testDescription - } - - if let value = value as? CustomDebugStringConvertible { - return value.debugDescription - } - - return String(value) -} - -/// -SeeAlso: `stringify(value: T)` -@warn_unused_result -public func stringify(value: T?) -> String { - if let unboxed = value { - return stringify(unboxed) - } - return "nil" -} - -#if _runtime(_ObjC) -@objc public class NMBStringer: NSObject { - @warn_unused_result - @objc public class func stringify(obj: AnyObject?) -> String { - return Nimble.stringify(obj) - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Tests/LinuxMain.swift b/Carthage/Checkouts/Nimble/Tests/LinuxMain.swift deleted file mode 100644 index 5a58a7b..0000000 --- a/Carthage/Checkouts/Nimble/Tests/LinuxMain.swift +++ /dev/null @@ -1,37 +0,0 @@ -import XCTest -@testable import Nimbletest - -// This is the entry point for NimbleTests on Linux - -XCTMain([ - // AsynchronousTests(), - SynchronousTest(), - UserDescriptionTest(), - - // Matchers - AllPassTest(), - // BeAKindOfTest(), - BeAnInstanceOfTest(), - BeCloseToTest(), - BeginWithTest(), - BeGreaterThanOrEqualToTest(), - BeGreaterThanTest(), - BeIdenticalToObjectTest(), - BeIdenticalToTest(), - BeLessThanOrEqualToTest(), - BeLessThanTest(), - BeTruthyTest(), - BeTrueTest(), - BeFalsyTest(), - BeFalseTest(), - BeNilTest(), - ContainTest(), - EndWithTest(), - EqualTest(), - HaveCountTest(), - // MatchTest(), - // RaisesExceptionTest(), - ThrowErrorTest(), - SatisfyAnyOfTest(), - PostNotificationTest(), -]) diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/AsynchronousTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/AsynchronousTest.swift deleted file mode 100644 index 90c19ec..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/AsynchronousTest.swift +++ /dev/null @@ -1,200 +0,0 @@ -import Foundation -import XCTest -import Nimble - -// These tests require the ObjC runtimes do not currently have the GCD and run loop facilities -// required for working with Nimble's async matchers -#if _runtime(_ObjC) - -class AsyncTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testToEventuallyPositiveMatches", testToEventuallyPositiveMatches), - ("testToEventuallyNegativeMatches", testToEventuallyNegativeMatches), - ("testWaitUntilPositiveMatches", testWaitUntilPositiveMatches), - ("testToEventuallyWithCustomDefaultTimeout", testToEventuallyWithCustomDefaultTimeout), - ("testWaitUntilTimesOutIfNotCalled", testWaitUntilTimesOutIfNotCalled), - ("testWaitUntilTimesOutWhenExceedingItsTime", testWaitUntilTimesOutWhenExceedingItsTime), - ("testWaitUntilNegativeMatches", testWaitUntilNegativeMatches), - ("testWaitUntilDetectsStalledMainThreadActivity", testWaitUntilDetectsStalledMainThreadActivity), - ("testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed", testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed), - ("testWaitUntilErrorsIfDoneIsCalledMultipleTimes", testWaitUntilErrorsIfDoneIsCalledMultipleTimes), - ("testWaitUntilMustBeInMainThread", testWaitUntilMustBeInMainThread), - ("testToEventuallyMustBeInMainThread", testToEventuallyMustBeInMainThread), - ] - } - - let errorToThrow = NSError(domain: NSInternalInconsistencyException, code: 42, userInfo: nil) - - private func doThrowError() throws -> Int { - throw errorToThrow - } - - func testToEventuallyPositiveMatches() { - var value = 0 - deferToMainQueue { value = 1 } - expect { value }.toEventually(equal(1)) - - deferToMainQueue { value = 0 } - expect { value }.toEventuallyNot(equal(1)) - } - - func testToEventuallyNegativeMatches() { - let value = 0 - failsWithErrorMessage("expected to eventually not equal <0>, got <0>") { - expect { value }.toEventuallyNot(equal(0)) - } - failsWithErrorMessage("expected to eventually equal <1>, got <0>") { - expect { value }.toEventually(equal(1)) - } - failsWithErrorMessage("expected to eventually equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { - expect { try self.doThrowError() }.toEventually(equal(1)) - } - failsWithErrorMessage("expected to eventually not equal <0>, got an unexpected error thrown: <\(errorToThrow)>") { - expect { try self.doThrowError() }.toEventuallyNot(equal(0)) - } - } - - func testToEventuallyWithCustomDefaultTimeout() { - AsyncDefaults.Timeout = 2 - defer { - AsyncDefaults.Timeout = 1 - } - - var value = 0 - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { - NSThread.sleepForTimeInterval(1.1) - value = 1 - } - expect { value }.toEventually(equal(1)) - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { - NSThread.sleepForTimeInterval(1.1) - value = 0 - } - expect { value }.toEventuallyNot(equal(1)) - } - - func testWaitUntilPositiveMatches() { - waitUntil { done in - done() - } - waitUntil { done in - deferToMainQueue { - done() - } - } - } - - func testWaitUntilTimesOutIfNotCalled() { - failsWithErrorMessage("Waited more than 1.0 second") { - waitUntil(timeout: 1) { done in return } - } - } - - func testWaitUntilTimesOutWhenExceedingItsTime() { - var waiting = true - failsWithErrorMessage("Waited more than 0.01 seconds") { - waitUntil(timeout: 0.01) { done in - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { - NSThread.sleepForTimeInterval(0.1) - done() - waiting = false - } - } - } - - // "clear" runloop to ensure this test doesn't poison other tests - repeat { - NSRunLoop.mainRunLoop().runUntilDate(NSDate().dateByAddingTimeInterval(0.2)) - } while(waiting) - } - - func testWaitUntilNegativeMatches() { - failsWithErrorMessage("expected to equal <2>, got <1>") { - waitUntil { done in - NSThread.sleepForTimeInterval(0.1) - expect(1).to(equal(2)) - done() - } - } - } - - func testWaitUntilDetectsStalledMainThreadActivity() { - let msg = "-waitUntil() timed out but was unable to run the timeout handler because the main thread is unresponsive (0.5 seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run." - failsWithErrorMessage(msg) { - waitUntil(timeout: 1) { done in - NSThread.sleepForTimeInterval(5.0) - done() - } - } - } - - func testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed() { - // Currently we are unable to catch Objective-C exceptions when built by the Swift Package Manager -#if !SWIFT_PACKAGE - let referenceLine = #line + 9 - var msg = "Unexpected exception raised: Nested async expectations are not allowed " - msg += "to avoid creating flaky tests." - msg += "\n\n" - msg += "The call to\n\t" - msg += "expect(...).toEventually(...) at \(#file):\(referenceLine + 7)\n" - msg += "triggered this exception because\n\t" - msg += "waitUntil(...) at \(#file):\(referenceLine + 1)\n" - msg += "is currently managing the main run loop." - failsWithErrorMessage(msg) { // reference line - waitUntil(timeout: 2.0) { done in - var protected: Int = 0 - dispatch_async(dispatch_get_main_queue()) { - protected = 1 - } - - expect(protected).toEventually(equal(1)) - done() - } - } -#endif - } - - func testWaitUntilErrorsIfDoneIsCalledMultipleTimes() { -#if !SWIFT_PACKAGE - waitUntil { done in - deferToMainQueue { - done() - expect { - done() - }.to(raiseException(named: "InvalidNimbleAPIUsage")) - } - } -#endif - } - - func testWaitUntilMustBeInMainThread() { -#if !SWIFT_PACKAGE - var executedAsyncBlock: Bool = false - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { - expect { - waitUntil { done in done() } - }.to(raiseException(named: "InvalidNimbleAPIUsage")) - executedAsyncBlock = true - } - expect(executedAsyncBlock).toEventually(beTruthy()) -#endif - } - - func testToEventuallyMustBeInMainThread() { -#if !SWIFT_PACKAGE - var executedAsyncBlock: Bool = false - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { - expect { - expect(1).toEventually(equal(2)) - }.to(raiseException(named: "InvalidNimbleAPIUsage")) - executedAsyncBlock = true - } - expect(executedAsyncBlock).toEventually(beTruthy()) -#endif - } -} -#endif - diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Helpers/ObjectWithLazyProperty.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Helpers/ObjectWithLazyProperty.swift deleted file mode 100644 index 26e5a98..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Helpers/ObjectWithLazyProperty.swift +++ /dev/null @@ -1,7 +0,0 @@ -import Foundation - -class ObjectWithLazyProperty { - init() {} - lazy var value: String = "hello" - lazy var anotherValue: String = { return "world" }() -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Helpers/XCTestCaseProvider.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Helpers/XCTestCaseProvider.swift deleted file mode 100644 index c1465f6..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Helpers/XCTestCaseProvider.swift +++ /dev/null @@ -1,35 +0,0 @@ -import Foundation -import XCTest - -// XCTestCaseProvider is defined in swift-corelibs-xctest, but is not available -// in the XCTest that ships with Xcode. By defining this protocol on Apple platforms, -// we ensure that the tests fail in Xcode if they haven't been configured properly to -// be run with the open-source tools. - -#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) - -public protocol XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { get } -} - -extension XCTestCase { - override public func tearDown() { - if let provider = self as? XCTestCaseProvider { - provider.assertContainsTest(invocation!.selector.description) - } - - super.tearDown() - } -} - -extension XCTestCaseProvider { - private func assertContainsTest(name: String) { - let contains = self.allTests.contains({ test in - return test.0 == name - }) - - XCTAssert(contains, "Test '\(name)' is missing from the allTests array") - } -} - -#endif diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Helpers/utils.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Helpers/utils.swift deleted file mode 100644 index 9b29a0e..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Helpers/utils.swift +++ /dev/null @@ -1,92 +0,0 @@ -import Foundation -@testable import Nimble -import XCTest - -func failsWithErrorMessage(messages: [String], file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () throws -> Void) { - var filePath = file - var lineNumber = line - - let recorder = AssertionRecorder() - withAssertionHandler(recorder, closure: closure) - - for msg in messages { - var lastFailure: AssertionRecord? - var foundFailureMessage = false - - for assertion in recorder.assertions { - lastFailure = assertion - if assertion.message.stringValue == msg { - foundFailureMessage = true - break - } - } - - if foundFailureMessage { - continue - } - - if preferOriginalSourceLocation { - if let failure = lastFailure { - filePath = failure.location.file - lineNumber = failure.location.line - } - } - - let message: String - if let lastFailure = lastFailure { - message = "Got failure message: \"\(lastFailure.message.stringValue)\", but expected \"\(msg)\"" - } else { - message = "expected failure message, but got none" - } - NimbleAssertionHandler.assert(false, - message: FailureMessage(stringValue: message), - location: SourceLocation(file: filePath, line: lineNumber)) - } -} - -func failsWithErrorMessage(message: String, file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () -> Void) { - return failsWithErrorMessage( - [message], - file: file, - line: line, - preferOriginalSourceLocation: preferOriginalSourceLocation, - closure: closure - ) -} - -func failsWithErrorMessageForNil(message: String, file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () -> Void) { - failsWithErrorMessage("\(message) (use beNil() to match nils)", file: file, line: line, preferOriginalSourceLocation: preferOriginalSourceLocation, closure: closure) -} - -#if _runtime(_ObjC) - func deferToMainQueue(action: () -> Void) { - dispatch_async(dispatch_get_main_queue()) { - NSThread.sleepForTimeInterval(0.01) - action() - } - } -#endif - -public class NimbleHelper : NSObject { - public class func expectFailureMessage(message: NSString, block: () -> Void, file: FileString, line: UInt) { - failsWithErrorMessage(String(message), file: file, line: line, preferOriginalSourceLocation: true, closure: block) - } - - public class func expectFailureMessages(messages: [NSString], block: () -> Void, file: FileString, line: UInt) { - failsWithErrorMessage(messages.map({ String($0) }), file: file, line: line, preferOriginalSourceLocation: true, closure: block) - } - - public class func expectFailureMessageForNil(message: NSString, block: () -> Void, file: FileString, line: UInt) { - failsWithErrorMessageForNil(String(message), file: file, line: line, preferOriginalSourceLocation: true, closure: block) - } -} - -extension NSDate { - convenience init(dateTimeString:String) { - let dateFormatter = NSDateFormatter() - dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" - dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") - let date = dateFormatter.dateFromString(dateTimeString)! - self.init(timeInterval:0, sinceDate:date) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Info.plist b/Carthage/Checkouts/Nimble/Tests/Nimble/Info.plist deleted file mode 100644 index 6d32c15..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/AllPassTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/AllPassTest.swift deleted file mode 100644 index 8519b9f..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/AllPassTest.swift +++ /dev/null @@ -1,85 +0,0 @@ -import XCTest -import Nimble - -class AllPassTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testAllPassArray", testAllPassArray), - ("testAllPassMatcher", testAllPassMatcher), - ("testAllPassCollectionsWithOptionalsDontWork", testAllPassCollectionsWithOptionalsDontWork), - ("testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer", testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer), - ("testAllPassSet", testAllPassSet), - ("testAllPassWithNilAsExpectedValue", testAllPassWithNilAsExpectedValue), - ] - } - - func testAllPassArray() { - expect([1,2,3,4]).to(allPass({$0 < 5})) - expect([1,2,3,4]).toNot(allPass({$0 > 5})) - - failsWithErrorMessage( - "expected to all pass a condition, but failed first at element <3> in <[1, 2, 3, 4]>") { - expect([1,2,3,4]).to(allPass({$0 < 3})) - } - failsWithErrorMessage("expected to not all pass a condition") { - expect([1,2,3,4]).toNot(allPass({$0 < 5})) - } - failsWithErrorMessage( - "expected to all be something, but failed first at element <3> in <[1, 2, 3, 4]>") { - expect([1,2,3,4]).to(allPass("be something", {$0 < 3})) - } - failsWithErrorMessage("expected to not all be something") { - expect([1,2,3,4]).toNot(allPass("be something", {$0 < 5})) - } - } - - func testAllPassMatcher() { - expect([1,2,3,4]).to(allPass(beLessThan(5))) - expect([1,2,3,4]).toNot(allPass(beGreaterThan(5))) - - failsWithErrorMessage( - "expected to all be less than <3>, but failed first at element <3> in <[1, 2, 3, 4]>") { - expect([1,2,3,4]).to(allPass(beLessThan(3))) - } - failsWithErrorMessage("expected to not all be less than <5>") { - expect([1,2,3,4]).toNot(allPass(beLessThan(5))) - } - } - - func testAllPassCollectionsWithOptionalsDontWork() { - failsWithErrorMessage("expected to all be nil, but failed first at element in <[nil, nil, nil]>") { - expect([nil, nil, nil] as [Int?]).to(allPass(beNil())) - } - failsWithErrorMessage("expected to all pass a condition, but failed first at element in <[nil, nil, nil]>") { - expect([nil, nil, nil] as [Int?]).to(allPass({$0 == nil})) - } - } - - func testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer() { - expect([nil, nil, nil] as [Int?]).to(allPass({$0! == nil})) - expect([nil, 1, nil] as [Int?]).toNot(allPass({$0! == nil})) - expect([1, 1, 1] as [Int?]).to(allPass({$0! == 1})) - expect([1, 1, nil] as [Int?]).toNot(allPass({$0! == 1})) - expect([1, 2, 3] as [Int?]).to(allPass({$0! < 4})) - expect([1, 2, 3] as [Int?]).toNot(allPass({$0! < 3})) - expect([1, 2, nil] as [Int?]).to(allPass({$0! < 3})) - } - - func testAllPassSet() { - expect(Set([1,2,3,4])).to(allPass({$0 < 5})) - expect(Set([1,2,3,4])).toNot(allPass({$0 > 5})) - - failsWithErrorMessage("expected to not all pass a condition") { - expect(Set([1,2,3,4])).toNot(allPass({$0 < 5})) - } - failsWithErrorMessage("expected to not all be something") { - expect(Set([1,2,3,4])).toNot(allPass("be something", {$0 < 5})) - } - } - - func testAllPassWithNilAsExpectedValue() { - failsWithErrorMessageForNil("expected to all pass") { - expect(nil as [Int]?).to(allPass(beLessThan(5))) - } - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeAKindOfTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeAKindOfTest.swift deleted file mode 100644 index 0202b17..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeAKindOfTest.swift +++ /dev/null @@ -1,56 +0,0 @@ -import XCTest -import Nimble - -#if _runtime(_ObjC) - -class TestNull : NSNull {} - -class BeAKindOfTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testPositiveMatch", testPositiveMatch), - ("testFailureMessages", testFailureMessages), - ("testSwiftTypesFailureMessages", testSwiftTypesFailureMessages), - ] - } - - func testPositiveMatch() { - expect(TestNull()).to(beAKindOf(NSNull)) - expect(NSObject()).to(beAKindOf(NSObject)) - expect(NSNumber(integer:1)).toNot(beAKindOf(NSDate)) - } - - func testFailureMessages() { - failsWithErrorMessageForNil("expected to not be a kind of NSNull, got ") { - expect(nil as NSNull?).toNot(beAKindOf(NSNull)) - } - failsWithErrorMessageForNil("expected to be a kind of NSString, got ") { - expect(nil as NSString?).to(beAKindOf(NSString)) - } - failsWithErrorMessage("expected to be a kind of NSString, got <__NSCFNumber instance>") { - expect(NSNumber(integer:1)).to(beAKindOf(NSString)) - } - failsWithErrorMessage("expected to not be a kind of NSNumber, got <__NSCFNumber instance>") { - expect(NSNumber(integer:1)).toNot(beAKindOf(NSNumber)) - } - } - - func testSwiftTypesFailureMessages() { - enum TestEnum { - case One, Two - } - failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" - + " will automatically type check Swift-only types. This expectation is redundant.") { - expect(1).to(beAKindOf(Int)) - } - failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" - + " will automatically type check Swift-only types. This expectation is redundant.") { - expect("test").to(beAKindOf(String)) - } - failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" - + " will automatically type check Swift-only types. This expectation is redundant.") { - expect(TestEnum.One).to(beAKindOf(TestEnum)) - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeAnInstanceOfTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeAnInstanceOfTest.swift deleted file mode 100644 index 41233db..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeAnInstanceOfTest.swift +++ /dev/null @@ -1,58 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeAnInstanceOfTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testPositiveMatch", testPositiveMatch), - ("testFailureMessages", testFailureMessages), - ("testSwiftTypesFailureMessages", testSwiftTypesFailureMessages), - ] - } - - func testPositiveMatch() { - expect(NSNull()).to(beAnInstanceOf(NSNull)) - expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSDate)) - } - - func testFailureMessages() { - failsWithErrorMessageForNil("expected to not be an instance of NSNull, got ") { - expect(nil as NSNull?).toNot(beAnInstanceOf(NSNull)) - } - failsWithErrorMessageForNil("expected to be an instance of NSString, got ") { - expect(nil as NSString?).to(beAnInstanceOf(NSString)) - } -#if _runtime(_ObjC) - let numberTypeName = "__NSCFNumber" -#else - let numberTypeName = "NSNumber" -#endif - failsWithErrorMessage("expected to be an instance of NSString, got <\(numberTypeName) instance>") { - expect(NSNumber(integer:1)).to(beAnInstanceOf(NSString)) - } - failsWithErrorMessage("expected to not be an instance of NSNumber, got <\(numberTypeName) instance>") { - expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSNumber)) - } - } - - func testSwiftTypesFailureMessages() { - enum TestEnum { - case One, Two - } - - failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" - + " will automatically type check Swift-only types. This expectation is redundant.") { - expect(1).to(beAnInstanceOf(Int)) - } - failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" - + " will automatically type check Swift-only types. This expectation is redundant.") { - expect("test").to(beAnInstanceOf(String)) - } - failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" - + " will automatically type check Swift-only types. This expectation is redundant.") { - expect(TestEnum.One).to(beAnInstanceOf(TestEnum)) - } - } - -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeCloseToTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeCloseToTest.swift deleted file mode 100644 index 7ca2020..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeCloseToTest.swift +++ /dev/null @@ -1,154 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeCloseToTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testBeCloseTo", testBeCloseTo), - ("testBeCloseToWithin", testBeCloseToWithin), - ("testBeCloseToWithNSNumber", testBeCloseToWithNSNumber), - ("testBeCloseToWithNSDate", testBeCloseToWithNSDate), - ("testBeCloseToOperator", testBeCloseToOperator), - ("testBeCloseToWithinOperator", testBeCloseToWithinOperator), - ("testPlusMinusOperator", testPlusMinusOperator), - ("testBeCloseToOperatorWithNSDate", testBeCloseToOperatorWithNSDate), - ("testBeCloseToWithinOperatorWithNSDate", testBeCloseToWithinOperatorWithNSDate), - ("testPlusMinusOperatorWithNSDate", testPlusMinusOperatorWithNSDate), - ("testBeCloseToArray", testBeCloseToArray), - ] - } - - func testBeCloseTo() { - expect(1.2).to(beCloseTo(1.2001)) - expect(1.2 as CDouble).to(beCloseTo(1.2001)) - expect(1.2 as Float).to(beCloseTo(1.2001)) - - failsWithErrorMessage("expected to not be close to <1.2001> (within 0.0001), got <1.2>") { - expect(1.2).toNot(beCloseTo(1.2001)) - } - } - - func testBeCloseToWithin() { - expect(1.2).to(beCloseTo(9.300, within: 10)) - - failsWithErrorMessage("expected to not be close to <1.2001> (within 1), got <1.2>") { - expect(1.2).toNot(beCloseTo(1.2001, within: 1.0)) - } - } - - func testBeCloseToWithNSNumber() { - expect(NSNumber(double:1.2)).to(beCloseTo(9.300, within: 10)) - expect(NSNumber(double:1.2)).to(beCloseTo(NSNumber(double:9.300), within: 10)) - expect(1.2).to(beCloseTo(NSNumber(double:9.300), within: 10)) - - failsWithErrorMessage("expected to not be close to <1.2001> (within 1), got <1.2>") { - expect(NSNumber(double:1.2)).toNot(beCloseTo(1.2001, within: 1.0)) - } - } - - func testBeCloseToWithNSDate() { -#if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")).to(beCloseTo(NSDate(dateTimeString: "2015-08-26 11:43:05"), within: 10)) - - failsWithErrorMessage("expected to not be close to <2015-08-26 11:43:00.0050> (within 0.004), got <2015-08-26 11:43:00.0000>") { - - let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")).toNot(beCloseTo(expectedDate, within: 0.004)) - } -#endif - } - - func testBeCloseToOperator() { - expect(1.2) ≈ 1.2001 - expect(1.2 as CDouble) ≈ 1.2001 - - failsWithErrorMessage("expected to be close to <1.2002> (within 0.0001), got <1.2>") { - expect(1.2) ≈ 1.2002 - } - } - - func testBeCloseToWithinOperator() { - expect(1.2) ≈ (9.300, 10) - expect(1.2) == (9.300, 10) - - failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { - expect(1.2) ≈ (1.0, 0.1) - } - failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { - expect(1.2) == (1.0, 0.1) - } - } - - func testPlusMinusOperator() { - expect(1.2) ≈ 9.300 ± 10 - expect(1.2) == 9.300 ± 10 - - failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { - expect(1.2) ≈ 1.0 ± 0.1 - } - failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { - expect(1.2) == 1.0 ± 0.1 - } - } - - func testBeCloseToOperatorWithNSDate() { -#if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ NSDate(dateTimeString: "2015-08-26 11:43:00") - - failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.0001), got <2015-08-26 11:43:00.0000>") { - - let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ expectedDate - } -#endif - } - - func testBeCloseToWithinOperatorWithNSDate() { -#if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ (NSDate(dateTimeString: "2015-08-26 11:43:05"), 10) - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == (NSDate(dateTimeString: "2015-08-26 11:43:05"), 10) - - failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { - - let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ (expectedDate, 0.006) - } - failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { - - let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == (expectedDate, 0.006) - } -#endif - } - - func testPlusMinusOperatorWithNSDate() { -#if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ NSDate(dateTimeString: "2015-08-26 11:43:05") ± 10 - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == NSDate(dateTimeString: "2015-08-26 11:43:05") ± 10 - - failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { - - let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ expectedDate ± 0.006 - } - failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { - - let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == expectedDate ± 0.006 - } -#endif - } - - func testBeCloseToArray() { - expect([0.0, 1.1, 2.2]) ≈ [0.0001, 1.1001, 2.2001] - expect([0.0, 1.1, 2.2]).to(beCloseTo([0.1, 1.2, 2.3], within: 0.1)) - - failsWithErrorMessage("expected to be close to <[0, 1]> (each within 0.0001), got <[0, 1.1]>") { - expect([0.0, 1.1]) ≈ [0.0, 1.0] - } - failsWithErrorMessage("expected to be close to <[0.2, 1.2]> (each within 0.1), got <[0, 1.1]>") { - expect([0.0, 1.1]).to(beCloseTo([0.2, 1.2], within: 0.1)) - } - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeEmptyTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeEmptyTest.swift deleted file mode 100644 index 541327f..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeEmptyTest.swift +++ /dev/null @@ -1,82 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeEmptyTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testBeEmptyPositive", testBeEmptyPositive), - ("testBeEmptyNegative", testBeEmptyNegative), - ] - } - - func testBeEmptyPositive() { - expect([] as [Int]).to(beEmpty()) - expect([1]).toNot(beEmpty()) - - expect([] as [CInt]).to(beEmpty()) - expect([1] as [CInt]).toNot(beEmpty()) - -#if _runtime(_ObjC) - expect(NSDictionary() as? [Int:Int]).to(beEmpty()) - expect(NSDictionary(object: 1, forKey: 1) as? [Int:Int]).toNot(beEmpty()) -#endif - - expect(Dictionary()).to(beEmpty()) - expect(["hi": 1]).toNot(beEmpty()) - -#if _runtime(_ObjC) - expect(NSArray() as? [Int]).to(beEmpty()) - expect(NSArray(array: [1]) as? [Int]).toNot(beEmpty()) -#endif - - expect(NSSet()).to(beEmpty()) - expect(NSSet(array: [NSNumber(integer: 1)])).toNot(beEmpty()) - - expect(NSIndexSet()).to(beEmpty()) - expect(NSIndexSet(index: 1)).toNot(beEmpty()) - - expect(NSString()).to(beEmpty()) - expect(NSString(string: "hello")).toNot(beEmpty()) - - expect("").to(beEmpty()) - expect("foo").toNot(beEmpty()) - } - - func testBeEmptyNegative() { - failsWithErrorMessageForNil("expected to be empty, got ") { - expect(nil as NSString?).to(beEmpty()) - } - failsWithErrorMessageForNil("expected to not be empty, got ") { - expect(nil as [CInt]?).toNot(beEmpty()) - } - - failsWithErrorMessage("expected to not be empty, got <()>") { - expect(NSArray()).toNot(beEmpty()) - } - failsWithErrorMessage("expected to be empty, got <[1]>") { - expect([1]).to(beEmpty()) - } - - failsWithErrorMessage("expected to not be empty, got <{()}>") { - expect(NSSet()).toNot(beEmpty()); - } - failsWithErrorMessage("expected to be empty, got <{(1)}>") { - expect(NSSet(object: NSNumber(int: 1))).to(beEmpty()); - } - - failsWithErrorMessage("expected to not be empty, got <()>") { - expect(NSIndexSet()).toNot(beEmpty()); - } - failsWithErrorMessage("expected to be empty, got <(1)>") { - expect(NSIndexSet(index: 1)).to(beEmpty()); - } - - failsWithErrorMessage("expected to not be empty, got <>") { - expect("").toNot(beEmpty()) - } - failsWithErrorMessage("expected to be empty, got ") { - expect("foo").to(beEmpty()) - } - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeGreaterThanOrEqualToTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeGreaterThanOrEqualToTest.swift deleted file mode 100644 index 4a59c59..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeGreaterThanOrEqualToTest.swift +++ /dev/null @@ -1,50 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeGreaterThanOrEqualToTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testGreaterThanOrEqualTo", testGreaterThanOrEqualTo), - ("testGreaterThanOrEqualToOperator", testGreaterThanOrEqualToOperator), - ] - } - - func testGreaterThanOrEqualTo() { - expect(10).to(beGreaterThanOrEqualTo(10)) - expect(10).to(beGreaterThanOrEqualTo(2)) - expect(1).toNot(beGreaterThanOrEqualTo(2)) - expect(NSNumber(int:1)).toNot(beGreaterThanOrEqualTo(2)) - expect(NSNumber(int:2)).to(beGreaterThanOrEqualTo(NSNumber(int:2))) -#if _runtime(_ObjC) - expect(1).to(beGreaterThanOrEqualTo(NSNumber(int:0))) -#endif - - failsWithErrorMessage("expected to be greater than or equal to <2>, got <0>") { - expect(0).to(beGreaterThanOrEqualTo(2)) - return - } - failsWithErrorMessage("expected to not be greater than or equal to <1>, got <1>") { - expect(1).toNot(beGreaterThanOrEqualTo(1)) - return - } - failsWithErrorMessageForNil("expected to be greater than or equal to <-2>, got ") { - expect(nil as Int?).to(beGreaterThanOrEqualTo(-2)) - } - failsWithErrorMessageForNil("expected to not be greater than or equal to <1>, got ") { - expect(nil as Int?).toNot(beGreaterThanOrEqualTo(1)) - } - } - - func testGreaterThanOrEqualToOperator() { - expect(0) >= 0 - expect(1) >= 0 - expect(NSNumber(int:1)) >= 1 - expect(NSNumber(int:1)) >= NSNumber(int:1) - - failsWithErrorMessage("expected to be greater than or equal to <2>, got <1>") { - expect(1) >= 2 - return - } - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeGreaterThanTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeGreaterThanTest.swift deleted file mode 100644 index a0e5e4b..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeGreaterThanTest.swift +++ /dev/null @@ -1,46 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeGreaterThanTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testGreaterThan", testGreaterThan), - ("testGreaterThanOperator", testGreaterThanOperator), - ] - } - - func testGreaterThan() { - expect(10).to(beGreaterThan(2)) - expect(1).toNot(beGreaterThan(2)) -#if _runtime(_ObjC) - expect(NSNumber(int:3)).to(beGreaterThan(2)) -#endif - expect(NSNumber(int:1)).toNot(beGreaterThan(NSNumber(int:2))) - - failsWithErrorMessage("expected to be greater than <2>, got <0>") { - expect(0).to(beGreaterThan(2)) - } - failsWithErrorMessage("expected to not be greater than <0>, got <1>") { - expect(1).toNot(beGreaterThan(0)) - } - failsWithErrorMessageForNil("expected to be greater than <-2>, got ") { - expect(nil as Int?).to(beGreaterThan(-2)) - } - failsWithErrorMessageForNil("expected to not be greater than <0>, got ") { - expect(nil as Int?).toNot(beGreaterThan(0)) - } - } - - func testGreaterThanOperator() { - expect(1) > 0 - expect(NSNumber(int:1)) > NSNumber(int:0) -#if _runtime(_ObjC) - expect(NSNumber(int:1)) > 0 -#endif - failsWithErrorMessage("expected to be greater than <2>, got <1>") { - expect(1) > 2 - return - } - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeIdenticalToObjectTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeIdenticalToObjectTest.swift deleted file mode 100644 index c9c1fd8..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeIdenticalToObjectTest.swift +++ /dev/null @@ -1,64 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeIdenticalToObjectTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testBeIdenticalToPositive", testBeIdenticalToPositive), - ("testBeIdenticalToNegative", testBeIdenticalToNegative), - ("testBeIdenticalToPositiveMessage", testBeIdenticalToPositiveMessage), - ("testBeIdenticalToNegativeMessage", testBeIdenticalToNegativeMessage), - ("testFailsOnNils", testFailsOnNils), - ("testOperators", testOperators), - ] - } - - private class BeIdenticalToObjectTester {} - private let testObjectA = BeIdenticalToObjectTester() - private let testObjectB = BeIdenticalToObjectTester() - - func testBeIdenticalToPositive() { - expect(self.testObjectA).to(beIdenticalTo(testObjectA)) - } - - func testBeIdenticalToNegative() { - expect(self.testObjectA).toNot(beIdenticalTo(testObjectB)) - } - - func testBeIdenticalToPositiveMessage() { - let message = String(NSString(format: "expected to be identical to <%p>, got <%p>", - unsafeBitCast(testObjectB, Int.self), unsafeBitCast(testObjectA, Int.self))) - failsWithErrorMessage(message) { - expect(self.testObjectA).to(beIdenticalTo(self.testObjectB)) - } - } - - func testBeIdenticalToNegativeMessage() { - let message = String(NSString(format: "expected to not be identical to <%p>, got <%p>", - unsafeBitCast(testObjectA, Int.self), unsafeBitCast(testObjectA, Int.self))) - failsWithErrorMessage(message) { - expect(self.testObjectA).toNot(beIdenticalTo(self.testObjectA)) - } - } - - func testFailsOnNils() { - let message1 = String(NSString(format: "expected to be identical to <%p>, got nil", - unsafeBitCast(testObjectA, Int.self))) - failsWithErrorMessageForNil(message1) { - expect(nil as BeIdenticalToObjectTester?).to(beIdenticalTo(self.testObjectA)) - } - - let message2 = String(NSString(format: "expected to not be identical to <%p>, got nil", - unsafeBitCast(testObjectA, Int.self))) - failsWithErrorMessageForNil(message2) { - expect(nil as BeIdenticalToObjectTester?).toNot(beIdenticalTo(self.testObjectA)) - } - } - - func testOperators() { - expect(self.testObjectA) === testObjectA - expect(self.testObjectA) !== testObjectB - } - -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeIdenticalToTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeIdenticalToTest.swift deleted file mode 100644 index 1d80b5c..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeIdenticalToTest.swift +++ /dev/null @@ -1,68 +0,0 @@ -import Foundation -import XCTest -@testable import Nimble - -class BeIdenticalToTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testBeIdenticalToPositive", testBeIdenticalToPositive), - ("testBeIdenticalToNegative", testBeIdenticalToNegative), - ("testBeIdenticalToPositiveMessage", testBeIdenticalToPositiveMessage), - ("testBeIdenticalToNegativeMessage", testBeIdenticalToNegativeMessage), - ("testOperators", testOperators), - ("testBeAlias", testBeAlias) - ] - } - - func testBeIdenticalToPositive() { - let value = NSDate() - expect(value).to(beIdenticalTo(value)) - } - - func testBeIdenticalToNegative() { - expect(NSNumber(integer:1)).toNot(beIdenticalTo(NSString(string: "yo"))) - expect(NSArray(array: [NSNumber(integer: 1)])).toNot(beIdenticalTo(NSArray(array: [NSNumber(integer: 1)]))) - } - - func testBeIdenticalToPositiveMessage() { - let num1 = NSNumber(integer:1) - let num2 = NSNumber(integer:2) - let message = "expected to be identical to \(identityAsString(num2)), got \(identityAsString(num1))" - failsWithErrorMessage(message) { - expect(num1).to(beIdenticalTo(num2)) - } - } - - func testBeIdenticalToNegativeMessage() { - let value1 = NSArray(array: []) - let value2 = NSArray(array: []) - let message = "expected to not be identical to \(identityAsString(value2)), got \(identityAsString(value1))" - failsWithErrorMessage(message) { - expect(value1).toNot(beIdenticalTo(value2)) - } - } - - func testOperators() { - let value = NSDate() - expect(value) === value - expect(NSNumber(integer:1)) !== NSNumber(integer:2) - } - - func testBeAlias() { - let value = NSDate() - expect(value).to(be(value)) - expect(NSNumber(integer:1)).toNot(be(NSString(stringLiteral: "turtles"))) - #if _runtime(_ObjC) - expect([1]).toNot(be([1])) - #else - expect(NSArray(array: [NSNumber(integer: 1)])).toNot(beIdenticalTo(NSArray(array: [NSNumber(integer: 1)]))) - #endif - - let value1 = NSArray(array: []) - let value2 = NSArray(array: []) - let message = "expected to not be identical to \(identityAsString(value2)), got \(identityAsString(value1))" - failsWithErrorMessage(message) { - expect(value1).toNot(be(value2)) - } - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeLessThanOrEqualToTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeLessThanOrEqualToTest.swift deleted file mode 100644 index 7d2d7d0..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeLessThanOrEqualToTest.swift +++ /dev/null @@ -1,52 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeLessThanOrEqualToTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testLessThanOrEqualTo", testLessThanOrEqualTo), - ("testLessThanOrEqualToOperator", testLessThanOrEqualToOperator), - ] - } - - func testLessThanOrEqualTo() { - expect(10).to(beLessThanOrEqualTo(10)) - expect(2).to(beLessThanOrEqualTo(10)) - expect(2).toNot(beLessThanOrEqualTo(1)) - - expect(NSNumber(int:2)).to(beLessThanOrEqualTo(10)) - expect(NSNumber(int:2)).toNot(beLessThanOrEqualTo(1)) -#if _runtime(_ObjC) - expect(2).to(beLessThanOrEqualTo(NSNumber(int:10))) - expect(2).toNot(beLessThanOrEqualTo(NSNumber(int:1))) -#endif - - failsWithErrorMessage("expected to be less than or equal to <0>, got <2>") { - expect(2).to(beLessThanOrEqualTo(0)) - return - } - failsWithErrorMessage("expected to not be less than or equal to <0>, got <0>") { - expect(0).toNot(beLessThanOrEqualTo(0)) - return - } - failsWithErrorMessageForNil("expected to be less than or equal to <2>, got ") { - expect(nil as Int?).to(beLessThanOrEqualTo(2)) - return - } - failsWithErrorMessageForNil("expected to not be less than or equal to <-2>, got ") { - expect(nil as Int?).toNot(beLessThanOrEqualTo(-2)) - return - } - } - - func testLessThanOrEqualToOperator() { - expect(0) <= 1 - expect(1) <= 1 - - failsWithErrorMessage("expected to be less than or equal to <1>, got <2>") { - expect(2) <= 1 - return - } - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeLessThanTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeLessThanTest.swift deleted file mode 100644 index d21ccc6..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeLessThanTest.swift +++ /dev/null @@ -1,49 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeLessThanTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testLessThan", testLessThan), - ("testLessThanOperator", testLessThanOperator), - ] - } - - func testLessThan() { - expect(2).to(beLessThan(10)) - expect(2).toNot(beLessThan(1)) -#if _runtime(_ObjC) - expect(NSNumber(integer:2)).to(beLessThan(10)) - expect(NSNumber(integer:2)).toNot(beLessThan(1)) - - expect(2).to(beLessThan(NSNumber(integer:10))) - expect(2).toNot(beLessThan(NSNumber(integer:1))) -#endif - - failsWithErrorMessage("expected to be less than <0>, got <2>") { - expect(2).to(beLessThan(0)) - } - failsWithErrorMessage("expected to not be less than <1>, got <0>") { - expect(0).toNot(beLessThan(1)) - } - - failsWithErrorMessageForNil("expected to be less than <2>, got ") { - expect(nil as Int?).to(beLessThan(2)) - } - failsWithErrorMessageForNil("expected to not be less than <-1>, got ") { - expect(nil as Int?).toNot(beLessThan(-1)) - } - } - - func testLessThanOperator() { - expect(0) < 1 -#if _runtime(_ObjC) - expect(NSNumber(int:0)) < 1 -#endif - failsWithErrorMessage("expected to be less than <1>, got <2>") { - expect(2) < 1 - return - } - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeLogicalTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeLogicalTest.swift deleted file mode 100644 index 720c197..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeLogicalTest.swift +++ /dev/null @@ -1,204 +0,0 @@ -import XCTest -import Nimble - -enum ConvertsToBool : BooleanType, CustomStringConvertible { - case TrueLike, FalseLike - - var boolValue : Bool { - switch self { - case .TrueLike: return true - case .FalseLike: return false - } - } - - var description : String { - switch self { - case .TrueLike: return "TrueLike" - case .FalseLike: return "FalseLike" - } - } -} - -class BeTruthyTest : XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testShouldMatchNonNilTypes", testShouldMatchNonNilTypes), - ("testShouldMatchTrue", testShouldMatchTrue), - ("testShouldNotMatchNilTypes", testShouldNotMatchNilTypes), - ("testShouldNotMatchFalse", testShouldNotMatchFalse), - ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), - ("testShouldMatchBoolConvertibleTypesThatConvertToTrue", testShouldMatchBoolConvertibleTypesThatConvertToTrue), - ("testShouldNotMatchBoolConvertibleTypesThatConvertToFalse", testShouldNotMatchBoolConvertibleTypesThatConvertToFalse), - ] - } - - func testShouldMatchNonNilTypes() { - expect(true as Bool?).to(beTruthy()) - expect(1 as Int?).to(beTruthy()) - } - - func testShouldMatchTrue() { - expect(true).to(beTruthy()) - - failsWithErrorMessage("expected to not be truthy, got ") { - expect(true).toNot(beTruthy()) - } - } - - func testShouldNotMatchNilTypes() { - expect(false as Bool?).toNot(beTruthy()) - expect(nil as Bool?).toNot(beTruthy()) - expect(nil as Int?).toNot(beTruthy()) - } - - func testShouldNotMatchFalse() { - expect(false).toNot(beTruthy()) - - failsWithErrorMessage("expected to be truthy, got ") { - expect(false).to(beTruthy()) - } - } - - func testShouldNotMatchNilBools() { - expect(nil as Bool?).toNot(beTruthy()) - - failsWithErrorMessage("expected to be truthy, got ") { - expect(nil as Bool?).to(beTruthy()) - } - } - - func testShouldMatchBoolConvertibleTypesThatConvertToTrue() { - expect(ConvertsToBool.TrueLike).to(beTruthy()) - - failsWithErrorMessage("expected to not be truthy, got ") { - expect(ConvertsToBool.TrueLike).toNot(beTruthy()) - } - } - - func testShouldNotMatchBoolConvertibleTypesThatConvertToFalse() { - expect(ConvertsToBool.FalseLike).toNot(beTruthy()) - - failsWithErrorMessage("expected to be truthy, got ") { - expect(ConvertsToBool.FalseLike).to(beTruthy()) - } - } -} - -class BeTrueTest : XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testShouldMatchTrue", testShouldMatchTrue), - ("testShouldNotMatchFalse", testShouldNotMatchFalse), - ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), - ] - } - - func testShouldMatchTrue() { - expect(true).to(beTrue()) - - failsWithErrorMessage("expected to not be true, got ") { - expect(true).toNot(beTrue()) - } - } - - func testShouldNotMatchFalse() { - expect(false).toNot(beTrue()) - - failsWithErrorMessage("expected to be true, got ") { - expect(false).to(beTrue()) - } - } - - func testShouldNotMatchNilBools() { - failsWithErrorMessageForNil("expected to not be true, got ") { - expect(nil as Bool?).toNot(beTrue()) - } - - failsWithErrorMessageForNil("expected to be true, got ") { - expect(nil as Bool?).to(beTrue()) - } - } -} - -class BeFalsyTest : XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testShouldMatchNilTypes", testShouldMatchNilTypes), - ("testShouldNotMatchTrue", testShouldNotMatchTrue), - ("testShouldNotMatchNonNilTypes", testShouldNotMatchNonNilTypes), - ("testShouldMatchFalse", testShouldMatchFalse), - ("testShouldMatchNilBools", testShouldMatchNilBools), - ] - } - - func testShouldMatchNilTypes() { - expect(false as Bool?).to(beFalsy()) - expect(nil as Bool?).to(beFalsy()) - expect(nil as Int?).to(beFalsy()) - } - - func testShouldNotMatchTrue() { - expect(true).toNot(beFalsy()) - - failsWithErrorMessage("expected to be falsy, got ") { - expect(true).to(beFalsy()) - } - } - - func testShouldNotMatchNonNilTypes() { - expect(true as Bool?).toNot(beFalsy()) - expect(1 as Int?).toNot(beFalsy()) - } - - func testShouldMatchFalse() { - expect(false).to(beFalsy()) - - failsWithErrorMessage("expected to not be falsy, got ") { - expect(false).toNot(beFalsy()) - } - } - - func testShouldMatchNilBools() { - expect(nil as Bool?).to(beFalsy()) - - failsWithErrorMessage("expected to not be falsy, got ") { - expect(nil as Bool?).toNot(beFalsy()) - } - } -} - -class BeFalseTest : XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testShouldNotMatchTrue", testShouldNotMatchTrue), - ("testShouldMatchFalse", testShouldMatchFalse), - ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), - ] - } - - func testShouldNotMatchTrue() { - expect(true).toNot(beFalse()) - - failsWithErrorMessage("expected to be false, got ") { - expect(true).to(beFalse()) - } - } - - func testShouldMatchFalse() { - expect(false).to(beFalse()) - - failsWithErrorMessage("expected to not be false, got ") { - expect(false).toNot(beFalse()) - } - } - - func testShouldNotMatchNilBools() { - failsWithErrorMessageForNil("expected to be false, got ") { - expect(nil as Bool?).to(beFalse()) - } - - failsWithErrorMessageForNil("expected to not be false, got ") { - expect(nil as Bool?).toNot(beFalse()) - } - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeNilTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeNilTest.swift deleted file mode 100644 index 261b6d4..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeNilTest.swift +++ /dev/null @@ -1,28 +0,0 @@ -import XCTest -import Nimble - -class BeNilTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testBeNil", testBeNil), - ] - } - - func producesNil() -> Array? { - return nil - } - - func testBeNil() { - expect(nil as Int?).to(beNil()) - expect(1 as Int?).toNot(beNil()) - expect(self.producesNil()).to(beNil()) - - failsWithErrorMessage("expected to not be nil, got ") { - expect(nil as Int?).toNot(beNil()) - } - - failsWithErrorMessage("expected to be nil, got <1>") { - expect(1 as Int?).to(beNil()) - } - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeVoidTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeVoidTest.swift deleted file mode 100644 index eb3886e..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeVoidTest.swift +++ /dev/null @@ -1,32 +0,0 @@ -import XCTest -import Nimble - -class BeVoidTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testBeVoid", testBeVoid), - ] - } - - func testBeVoid() { - expect(()).to(beVoid()) - expect(() as ()?).to(beVoid()) - expect(nil as ()?).toNot(beVoid()) - - expect(()) == () - expect(() as ()?) == () - expect(nil as ()?) != () - - failsWithErrorMessage("expected to not be void, got <()>") { - expect(()).toNot(beVoid()) - } - - failsWithErrorMessage("expected to not be void, got <()>") { - expect(() as ()?).toNot(beVoid()) - } - - failsWithErrorMessage("expected to be void, got ") { - expect(nil as ()?).to(beVoid()) - } - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeginWithTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeginWithTest.swift deleted file mode 100644 index cdef99a..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/BeginWithTest.swift +++ /dev/null @@ -1,51 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeginWithTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testPositiveMatches", testPositiveMatches), - ("testNegativeMatches", testNegativeMatches), - ] - } - - func testPositiveMatches() { - expect([1, 2, 3]).to(beginWith(1)) - expect([1, 2, 3]).toNot(beginWith(2)) - - expect("foobar").to(beginWith("foo")) - expect("foobar").toNot(beginWith("oo")) - - expect(NSString(string: "foobar").description).to(beginWith("foo")) - expect(NSString(string: "foobar").description).toNot(beginWith("oo")) - -#if _runtime(_ObjC) - expect(NSArray(array: ["a", "b"])).to(beginWith("a")) - expect(NSArray(array: ["a", "b"])).toNot(beginWith("b")) -#endif - } - - func testNegativeMatches() { - failsWithErrorMessageForNil("expected to begin with , got ") { - expect(nil as NSArray?).to(beginWith(NSString(string: "b"))) - } - failsWithErrorMessageForNil("expected to not begin with , got ") { - expect(nil as NSArray?).toNot(beginWith(NSString(string: "b"))) - } - - failsWithErrorMessage("expected to begin with <2>, got <[1, 2, 3]>") { - expect([1, 2, 3]).to(beginWith(2)) - } - failsWithErrorMessage("expected to not begin with <1>, got <[1, 2, 3]>") { - expect([1, 2, 3]).toNot(beginWith(1)) - } - failsWithErrorMessage("expected to begin with , got ") { - expect("batman").to(beginWith("atm")) - } - failsWithErrorMessage("expected to not begin with , got ") { - expect("batman").toNot(beginWith("bat")) - } - } - -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/ContainTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/ContainTest.swift deleted file mode 100644 index 359d190..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/ContainTest.swift +++ /dev/null @@ -1,95 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class ContainTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testContain", testContain), - ("testContainSubstring", testContainSubstring), - ("testContainObjCSubstring", testContainObjCSubstring), - ("testVariadicArguments", testVariadicArguments), - ("testCollectionArguments", testCollectionArguments), - ] - } - - func testContain() { - expect([1, 2, 3]).to(contain(1)) - expect([1, 2, 3] as [CInt]).to(contain(1 as CInt)) - expect([1, 2, 3] as Array).to(contain(1 as CInt)) - expect(["foo", "bar", "baz"]).to(contain("baz")) - expect([1, 2, 3]).toNot(contain(4)) - expect(["foo", "bar", "baz"]).toNot(contain("ba")) -#if _runtime(_ObjC) - expect(NSArray(array: ["a"])).to(contain(NSString(string: "a"))) - expect(NSArray(array: ["a"])).toNot(contain(NSString(string:"b"))) - expect(NSArray(object: 1) as NSArray?).to(contain(1)) -#endif - - failsWithErrorMessage("expected to contain , got <[a, b, c]>") { - expect(["a", "b", "c"]).to(contain("bar")) - } - failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { - expect(["a", "b", "c"]).toNot(contain("b")) - } - - failsWithErrorMessageForNil("expected to contain , got ") { - expect(nil as [String]?).to(contain("bar")) - } - failsWithErrorMessageForNil("expected to not contain , got ") { - expect(nil as [String]?).toNot(contain("b")) - } - } - - func testContainSubstring() { - expect("foo").to(contain("o")) - expect("foo").to(contain("oo")) - expect("foo").toNot(contain("z")) - expect("foo").toNot(contain("zz")) - - failsWithErrorMessage("expected to contain , got ") { - expect("foo").to(contain("bar")) - } - failsWithErrorMessage("expected to not contain , got ") { - expect("foo").toNot(contain("oo")) - } - } - - func testContainObjCSubstring() { - let str = NSString(string: "foo") - expect(str).to(contain(NSString(string: "o"))) - expect(str).to(contain(NSString(string: "oo"))) - expect(str).toNot(contain(NSString(string: "z"))) - expect(str).toNot(contain(NSString(string: "zz"))) - } - - func testVariadicArguments() { - expect([1, 2, 3]).to(contain(1, 2)) - expect([1, 2, 3]).toNot(contain(1, 4)) - - failsWithErrorMessage("expected to contain , got <[a, b, c]>") { - expect(["a", "b", "c"]).to(contain("a", "bar")) - } - - failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { - expect(["a", "b", "c"]).toNot(contain("bar", "b")) - } - } - - func testCollectionArguments() { - expect([1, 2, 3]).to(contain([1, 2])) - expect([1, 2, 3]).toNot(contain([1, 4])) - - let collection = Array(1...10) - let slice = Array(collection[3...5]) - expect(collection).to(contain(slice)) - - failsWithErrorMessage("expected to contain , got <[a, b, c]>") { - expect(["a", "b", "c"]).to(contain(["a", "bar"])) - } - - failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { - expect(["a", "b", "c"]).toNot(contain(["bar", "b"])) - } - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/EndWithTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/EndWithTest.swift deleted file mode 100644 index 01020af..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/EndWithTest.swift +++ /dev/null @@ -1,51 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class EndWithTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testEndWithPositives", testEndWithPositives), - ("testEndWithNegatives", testEndWithNegatives), - ] - } - - func testEndWithPositives() { - expect([1, 2, 3]).to(endWith(3)) - expect([1, 2, 3]).toNot(endWith(2)) - - expect("foobar").to(endWith("bar")) - expect("foobar").toNot(endWith("oo")) - - expect(NSString(string: "foobar").description).to(endWith("bar")) - expect(NSString(string: "foobar").description).toNot(endWith("oo")) - -#if _runtime(_ObjC) - expect(NSArray(array: ["a", "b"])).to(endWith("b")) - expect(NSArray(array: ["a", "b"])).toNot(endWith("a")) -#endif - } - - func testEndWithNegatives() { - failsWithErrorMessageForNil("expected to end with <2>, got ") { - expect(nil as [Int]?).to(endWith(2)) - } - failsWithErrorMessageForNil("expected to not end with <2>, got ") { - expect(nil as [Int]?).toNot(endWith(2)) - } - - failsWithErrorMessage("expected to end with <2>, got <[1, 2, 3]>") { - expect([1, 2, 3]).to(endWith(2)) - } - failsWithErrorMessage("expected to not end with <3>, got <[1, 2, 3]>") { - expect([1, 2, 3]).toNot(endWith(3)) - } - failsWithErrorMessage("expected to end with , got ") { - expect("batman").to(endWith("atm")) - } - failsWithErrorMessage("expected to not end with , got ") { - expect("batman").toNot(endWith("man")) - } - } - -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/EqualTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/EqualTest.swift deleted file mode 100644 index 366f64e..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/EqualTest.swift +++ /dev/null @@ -1,274 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class EqualTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testEquality", testEquality), - ("testArrayEquality", testArrayEquality), - ("testSetEquality", testSetEquality), - ("testDoesNotMatchNils", testDoesNotMatchNils), - ("testDictionaryEquality", testDictionaryEquality), - ("testDataEquality", testDataEquality), - ("testNSObjectEquality", testNSObjectEquality), - ("testOperatorEquality", testOperatorEquality), - ("testOperatorEqualityWithArrays", testOperatorEqualityWithArrays), - ("testOperatorEqualityWithDictionaries", testOperatorEqualityWithDictionaries), - ("testOptionalEquality", testOptionalEquality), - ("testArrayOfOptionalsEquality", testArrayOfOptionalsEquality), - ("testDictionariesWithDifferentSequences", testDictionariesWithDifferentSequences), - ] - } - - func testEquality() { - expect(1 as CInt).to(equal(1 as CInt)) - expect(1 as CInt).to(equal(1)) - expect(1).to(equal(1)) - expect("hello").to(equal("hello")) - expect("hello").toNot(equal("world")) - - expect { - 1 - }.to(equal(1)) - - failsWithErrorMessage("expected to equal , got ") { - expect("hello").to(equal("world")) - } - failsWithErrorMessage("expected to not equal , got ") { - expect("hello").toNot(equal("hello")) - } - } - - func testArrayEquality() { - expect([1, 2, 3]).to(equal([1, 2, 3])) - expect([1, 2, 3]).toNot(equal([1, 2])) - expect([1, 2, 3]).toNot(equal([1, 2, 4])) - - let array1: Array = [1, 2, 3] - let array2: Array = [1, 2, 3] - expect(array1).to(equal(array2)) - expect(array1).to(equal([1, 2, 3])) - expect(array1).toNot(equal([1, 2] as Array)) - -#if _runtime(_ObjC) - expect(NSArray(array: [1, 2, 3])).to(equal(NSArray(array: [1, 2, 3]))) -#endif - - failsWithErrorMessage("expected to equal <[1, 2]>, got <[1, 2, 3]>") { - expect([1, 2, 3]).to(equal([1, 2])) - } - } - - func testSetEquality() { - expect(Set([1, 2])).to(equal(Set([1, 2]))) - expect(Set()).to(equal(Set())) - expect(Set()) == Set() - expect(Set([1, 2])) != Set() - - failsWithErrorMessageForNil("expected to equal <[1, 2]>, got ") { - expect(nil as Set?).to(equal(Set([1, 2]))) - } - - failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3]>, missing <[1]>") { - expect(Set([2, 3])).to(equal(Set([1, 2, 3]))) - } - - failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[1, 2, 3, 4]>, extra <[4]>") { - expect(Set([1, 2, 3, 4])).to(equal(Set([1, 2, 3]))) - } - - failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>") { - expect(Set([2, 3, 4])).to(equal(Set([1, 2, 3]))) - } - - failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>") { - expect(Set([2, 3, 4])) == Set([1, 2, 3]) - } - - failsWithErrorMessage("expected to not equal <[1, 2, 3]>, got <[1, 2, 3]>") { - expect(Set([1, 2, 3])) != Set([1, 2, 3]) - } - } - - func testDoesNotMatchNils() { - failsWithErrorMessageForNil("expected to equal , got ") { - expect(nil as String?).to(equal(nil as String?)) - } - failsWithErrorMessageForNil("expected to not equal , got ") { - expect("foo").toNot(equal(nil as String?)) - } - failsWithErrorMessageForNil("expected to not equal , got ") { - expect(nil as String?).toNot(equal("bar")) - } - - failsWithErrorMessageForNil("expected to equal , got ") { - expect(nil as [Int]?).to(equal(nil as [Int]?)) - } - failsWithErrorMessageForNil("expected to not equal <[1]>, got ") { - expect(nil as [Int]?).toNot(equal([1])) - } - failsWithErrorMessageForNil("expected to not equal , got <[1]>") { - expect([1]).toNot(equal(nil as [Int]?)) - } - - failsWithErrorMessageForNil("expected to equal , got ") { - expect(nil as [Int: Int]?).to(equal(nil as [Int: Int]?)) - } - failsWithErrorMessageForNil("expected to not equal <[1: 1]>, got ") { - expect(nil as [Int: Int]?).toNot(equal([1: 1])) - } - failsWithErrorMessageForNil("expected to not equal , got <[1: 1]>") { - expect([1: 1]).toNot(equal(nil as [Int: Int]?)) - } - } - - func testDictionaryEquality() { - expect(["foo": "bar"]).to(equal(["foo": "bar"])) - expect(["foo": "bar"]).toNot(equal(["foo": "baz"])) - - let actual = ["foo": "bar"] - let expected = ["foo": "bar"] - let unexpected = ["foo": "baz"] - expect(actual).to(equal(expected)) - expect(actual).toNot(equal(unexpected)) - -#if _runtime(_ObjC) - expect(NSDictionary(object: "bar", forKey: "foo")).to(equal(["foo": "bar"])) - expect(NSDictionary(object: "bar", forKey: "foo")).to(equal(expected)) -#endif - } - - func testDataEquality() { - let actual = "foobar".dataUsingEncoding(NSUTF8StringEncoding) - let expected = "foobar".dataUsingEncoding(NSUTF8StringEncoding) - let unexpected = "foobarfoo".dataUsingEncoding(NSUTF8StringEncoding) - - expect(actual).to(equal(expected)) - expect(actual).toNot(equal(unexpected)) - - #if os(Linux) - // FIXME: Swift on Linux triggers a segfault when calling NSData's hash() (last checked on 03-11) - let expectedErrorMessage = "expected to equal >, got >" - #else - let expectedErrorMessage = "expected to equal >," - + " got >" - #endif - - failsWithErrorMessage(expectedErrorMessage) { - expect(actual).to(equal(unexpected)) - } - } - - func testNSObjectEquality() { - expect(NSNumber(integer:1)).to(equal(NSNumber(integer:1))) - expect(NSNumber(integer:1)) == NSNumber(integer:1) - expect(NSNumber(integer:1)) != NSNumber(integer:2) - expect { NSNumber(integer:1) }.to(equal(1)) - } - - func testOperatorEquality() { - expect("foo") == "foo" - expect("foo") != "bar" - - failsWithErrorMessage("expected to equal , got ") { - expect("hello") == "world" - return - } - failsWithErrorMessage("expected to not equal , got ") { - expect("hello") != "hello" - return - } - } - - func testOperatorEqualityWithArrays() { - let array1: Array = [1, 2, 3] - let array2: Array = [1, 2, 3] - let array3: Array = [1, 2] - expect(array1) == array2 - expect(array1) != array3 - } - - func testOperatorEqualityWithDictionaries() { - let dict1 = ["foo": "bar"] - let dict2 = ["foo": "bar"] - let dict3 = ["foo": "baz"] - expect(dict1) == dict2 - expect(dict1) != dict3 - } - - func testOptionalEquality() { - expect(1 as CInt?).to(equal(1)) - expect(1 as CInt?).to(equal(1 as CInt?)) - - expect(1).toNot(equal(nil)) - } - - func testArrayOfOptionalsEquality() { - let array1: Array = [1, nil, 3] - let array2: Array = [nil, 2, 3] - let array3: Array = [1, nil, 3] - - expect(array1).toNot(equal(array2)) - expect(array1).to(equal(array3)) - expect(array2).toNot(equal(array3)) - - let allNils1: Array = [nil, nil, nil, nil] - let allNils2: Array = [nil, nil, nil, nil] - let notReallyAllNils: Array = [nil, nil, nil, "turtles"] - - expect(allNils1).to(equal(allNils2)) - expect(allNils1).toNot(equal(notReallyAllNils)) - - let noNils1: Array = [1, 2, 3, 4, 5] - let noNils2: Array = [1, 3, 5, 7, 9] - - expect(noNils1).toNot(equal(noNils2)) - - failsWithErrorMessage("expected to equal <[Optional(1), nil]>, got <[nil, Optional(2)]>") { - let arrayOfOptionalInts: Array = [nil, 2] - let anotherArrayOfOptionalInts: Array = [1, nil] - expect(arrayOfOptionalInts).to(equal(anotherArrayOfOptionalInts)) - return - } - } - - func testDictionariesWithDifferentSequences() { - // see: https://github.com/Quick/Nimble/issues/61 - // these dictionaries generate different orderings of sequences. - let result = ["how":1, "think":1, "didnt":2, "because":1, - "interesting":1, "always":1, "right":1, "such":1, - "to":3, "say":1, "cool":1, "you":1, - "weather":3, "be":1, "went":1, "was":2, - "sometimes":1, "and":3, "mind":1, "rain":1, - "whole":1, "everything":1, "weather.":1, "down":1, - "kind":1, "mood.":1, "it":2, "everyday":1, "might":1, - "more":1, "have":2, "person":1, "could":1, "tenth":2, - "night":1, "write":1, "Youd":1, "affects":1, "of":3, - "Who":1, "us":1, "an":1, "I":4, "my":1, "much":2, - "wrong.":1, "peacefully.":1, "amazing":3, "would":4, - "just":1, "grade.":1, "Its":2, "The":2, "had":1, "that":1, - "the":5, "best":1, "but":1, "essay":1, "for":1, "summer":2, - "your":1, "grade":1, "vary":1, "pretty":1, "at":1, "rain.":1, - "about":1, "allow":1, "thought":1, "in":1, "sleep":1, "a":1, - "hot":1, "really":1, "beach":1, "life.":1, "we":1, "although":1] - - let storyCount = ["The":2, "summer":2, "of":3, "tenth":2, "grade":1, - "was":2, "the":5, "best":1, "my":1, "life.":1, "I":4, - "went":1, "to":3, "beach":1, "everyday":1, "and":3, - "we":1, "had":1, "amazing":3, "weather.":1, "weather":3, - "didnt":2, "really":1, "vary":1, "much":2, "always":1, - "pretty":1, "hot":1, "although":1, "sometimes":1, "at":1, - "night":1, "it":2, "would":4, "rain.":1, "mind":1, "rain":1, - "because":1, "cool":1, "everything":1, "down":1, "allow":1, - "us":1, "sleep":1, "peacefully.":1, "Its":2, "how":1, - "affects":1, "your":1, "mood.":1, "Who":1, "have":2, - "thought":1, "that":1, "could":1, "write":1, "a":1, - "whole":1, "essay":1, "just":1, "about":1, "in":1, - "grade.":1, "kind":1, "right":1, "Youd":1, "think":1, - "for":1, "such":1, "an":1, "interesting":1, "person":1, - "might":1, "more":1, "say":1, "but":1, "you":1, "be":1, "wrong.":1] - - expect(result).to(equal(storyCount)) - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/HaveCountTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/HaveCountTest.swift deleted file mode 100644 index 9dd79d6..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/HaveCountTest.swift +++ /dev/null @@ -1,53 +0,0 @@ -import XCTest -import Nimble - -class HaveCountTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testHaveCountForArray", testHaveCountForArray), - ("testHaveCountForDictionary", testHaveCountForDictionary), - ("testHaveCountForSet", testHaveCountForSet), - ] - } - - func testHaveCountForArray() { - expect([1, 2, 3]).to(haveCount(3)) - expect([1, 2, 3]).notTo(haveCount(1)) - - failsWithErrorMessage("expected to have [1, 2, 3] with count 1, got 3") { - expect([1, 2, 3]).to(haveCount(1)) - } - - failsWithErrorMessage("expected to not have [1, 2, 3] with count 3, got 3") { - expect([1, 2, 3]).notTo(haveCount(3)) - } - } - - func testHaveCountForDictionary() { - let dictionary = ["1":1, "2":2, "3":3] - expect(dictionary).to(haveCount(3)) - expect(dictionary).notTo(haveCount(1)) - - failsWithErrorMessage("expected to have \(stringify(dictionary)) with count 1, got 3") { - expect(dictionary).to(haveCount(1)) - } - - failsWithErrorMessage("expected to not have \(stringify(dictionary)) with count 3, got 3") { - expect(dictionary).notTo(haveCount(3)) - } - } - - func testHaveCountForSet() { - let set = Set([1, 2, 3]) - expect(set).to(haveCount(3)) - expect(set).notTo(haveCount(1)) - - failsWithErrorMessage("expected to have \(stringify(set)) with count 1, got 3") { - expect(set).to(haveCount(1)) - } - - failsWithErrorMessage("expected to not have \(stringify(set)) with count 3, got 3") { - expect(set).notTo(haveCount(3)) - } - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/MatchErrorTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/MatchErrorTest.swift deleted file mode 100644 index c20369e..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/MatchErrorTest.swift +++ /dev/null @@ -1,78 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class MatchErrorTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testMatchErrorPositive", testMatchErrorPositive), - ("testMatchErrorNegative", testMatchErrorNegative), - ("testMatchNSErrorPositive", testMatchNSErrorPositive), - ("testMatchNSErrorNegative", testMatchNSErrorNegative), - ("testMatchPositiveMessage", testMatchPositiveMessage), - ("testMatchNegativeMessage", testMatchNegativeMessage), - ("testDoesNotMatchNils", testDoesNotMatchNils), - ] - } - - func testMatchErrorPositive() { - expect(Error.Laugh).to(matchError(Error.Laugh)) - expect(Error.Laugh).to(matchError(Error.self)) - expect(EquatableError.Parameterized(x: 1)).to(matchError(EquatableError.Parameterized(x: 1))) - - expect(Error.Laugh as ErrorType).to(matchError(Error.Laugh)) - } - - func testMatchErrorNegative() { - expect(Error.Laugh).toNot(matchError(Error.Cry)) - expect(Error.Laugh as ErrorType).toNot(matchError(Error.Cry)) - } - - func testMatchNSErrorPositive() { - let error1 = NSError(domain: "err", code: 0, userInfo: nil) - let error2 = NSError(domain: "err", code: 0, userInfo: nil) - - expect(error1).to(matchError(error2)) - } - - func testMatchNSErrorNegative() { - let error1 = NSError(domain: "err", code: 0, userInfo: nil) - let error2 = NSError(domain: "err", code: 1, userInfo: nil) - - expect(error1).toNot(matchError(error2)) - } - - func testMatchPositiveMessage() { - failsWithErrorMessage("expected to match error , got ") { - expect(EquatableError.Parameterized(x: 1)).to(matchError(EquatableError.Parameterized(x: 2))) - } - failsWithErrorMessage("expected to match error , got ") { - expect(Error.Laugh).to(matchError(Error.Cry)) - } - failsWithErrorMessage("expected to match error , got ") { - expect(CustomDebugStringConvertibleError.A).to(matchError(CustomDebugStringConvertibleError.B)) - } - - failsWithErrorMessage("expected to match error , got ") { - let error1 = NSError(domain: "err", code: 0, userInfo: nil) - let error2 = NSError(domain: "err", code: 1, userInfo: nil) - expect(error1).to(matchError(error2)) - } - } - - func testMatchNegativeMessage() { - failsWithErrorMessage("expected to not match error , got ") { - expect(Error.Laugh).toNot(matchError(Error.Laugh)) - } - } - - func testDoesNotMatchNils() { - failsWithErrorMessageForNil("expected to match error , got no error") { - expect(nil as ErrorType?).to(matchError(Error.Laugh)) - } - - failsWithErrorMessageForNil("expected to not match error , got no error") { - expect(nil as ErrorType?).toNot(matchError(Error.Laugh)) - } - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/MatchTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/MatchTest.swift deleted file mode 100644 index 61428f8..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/MatchTest.swift +++ /dev/null @@ -1,49 +0,0 @@ -import XCTest -import Nimble - -#if _runtime(_ObjC) - -class MatchTest:XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testMatchPositive", testMatchPositive), - ("testMatchNegative", testMatchNegative), - ("testMatchPositiveMessage", testMatchPositiveMessage), - ("testMatchNegativeMessage", testMatchNegativeMessage), - ("testMatchNils", testMatchNils), - ] - } - - func testMatchPositive() { - expect("11:14").to(match("\\d{2}:\\d{2}")) - } - - func testMatchNegative() { - expect("hello").toNot(match("\\d{2}:\\d{2}")) - } - - func testMatchPositiveMessage() { - let message = "expected to match <\\d{2}:\\d{2}>, got " - failsWithErrorMessage(message) { - expect("hello").to(match("\\d{2}:\\d{2}")) - } - } - - func testMatchNegativeMessage() { - let message = "expected to not match <\\d{2}:\\d{2}>, got <11:14>" - failsWithErrorMessage(message) { - expect("11:14").toNot(match("\\d{2}:\\d{2}")) - } - } - - func testMatchNils() { - failsWithErrorMessageForNil("expected to match <\\d{2}:\\d{2}>, got ") { - expect(nil as String?).to(match("\\d{2}:\\d{2}")) - } - - failsWithErrorMessageForNil("expected to not match <\\d{2}:\\d{2}>, got ") { - expect(nil as String?).toNot(match("\\d{2}:\\d{2}")) - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/PostNotificationTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/PostNotificationTest.swift deleted file mode 100644 index 9f06c7d..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/PostNotificationTest.swift +++ /dev/null @@ -1,107 +0,0 @@ -import XCTest -import Nimble -import Foundation - -class PostNotificationTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testPassesWhenNoNotificationsArePosted", testPassesWhenNoNotificationsArePosted), - ("testPassesWhenExpectedNotificationIsPosted", testPassesWhenExpectedNotificationIsPosted), - ("testPassesWhenAllExpectedNotificationsArePosted", testPassesWhenAllExpectedNotificationsArePosted), - ("testFailsWhenNoNotificationsArePosted", testFailsWhenNoNotificationsArePosted), - ("testFailsWhenNotificationWithWrongNameIsPosted", testFailsWhenNotificationWithWrongNameIsPosted), - ("testFailsWhenNotificationWithWrongObjectIsPosted", testFailsWhenNotificationWithWrongObjectIsPosted), - ("testPassesWhenExpectedNotificationEventuallyIsPosted", testPassesWhenExpectedNotificationEventuallyIsPosted), - ] - } - - var notificationCenter: NSNotificationCenter! - - #if _runtime(_ObjC) - override func setUp() { - _setUp() - super.setUp() - } - #else - func setUp() { - _setUp() - } - #endif - - - func _setUp() { - notificationCenter = NSNotificationCenter() - } - - func testPassesWhenNoNotificationsArePosted() { - expect { - // no notifications here! - return nil - }.to(postNotifications(beEmpty(), fromNotificationCenter: notificationCenter)) - } - - func testPassesWhenExpectedNotificationIsPosted() { - let testNotification = NSNotification(name: "Foo", object: nil) - expect { - self.notificationCenter.postNotification(testNotification) - }.to(postNotifications(equal([testNotification]), fromNotificationCenter: notificationCenter)) - } - - func testPassesWhenAllExpectedNotificationsArePosted() { - let foo = NSNumber(int: 1) - let bar = NSNumber(int: 2) - let n1 = NSNotification(name: "Foo", object: foo) - let n2 = NSNotification(name: "Bar", object: bar) - expect { - self.notificationCenter.postNotification(n1) - self.notificationCenter.postNotification(n2) - return nil - }.to(postNotifications(equal([n1, n2]), fromNotificationCenter: notificationCenter)) - } - - func testFailsWhenNoNotificationsArePosted() { - let testNotification = NSNotification(name: "Foo", object: nil) - failsWithErrorMessage("expected to equal <[\(testNotification)]>, got no notifications") { - expect { - // no notifications here! - return nil - }.to(postNotifications(equal([testNotification]), fromNotificationCenter: self.notificationCenter)) - } - } - - func testFailsWhenNotificationWithWrongNameIsPosted() { - let n1 = NSNotification(name: "Foo", object: nil) - let n2 = NSNotification(name: n1.name + "a", object: nil) - failsWithErrorMessage("expected to equal <[\(n1)]>, got <[\(n2)]>") { - expect { - self.notificationCenter.postNotification(n2) - return nil - }.to(postNotifications(equal([n1]), fromNotificationCenter: self.notificationCenter)) - } - } - - func testFailsWhenNotificationWithWrongObjectIsPosted() { - let n1 = NSNotification(name: "Foo", object: nil) - let n2 = NSNotification(name: n1.name, object: NSObject()) - failsWithErrorMessage("expected to equal <[\(n1)]>, got <[\(n2)]>") { - expect { - self.notificationCenter.postNotification(n2) - return nil - }.to(postNotifications(equal([n1]), fromNotificationCenter: self.notificationCenter)) - } - } - - func testPassesWhenExpectedNotificationEventuallyIsPosted() { - #if _runtime(_ObjC) - let testNotification = NSNotification(name: "Foo", object: nil) - expect { - deferToMainQueue { - self.notificationCenter.postNotification(testNotification) - } - return nil - }.toEventually(postNotifications(equal([testNotification]), fromNotificationCenter: notificationCenter)) - #else - print("\(#function) is missing because toEventually is not implement on this platform") - #endif - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/RaisesExceptionTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/RaisesExceptionTest.swift deleted file mode 100644 index 5135855..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/RaisesExceptionTest.swift +++ /dev/null @@ -1,166 +0,0 @@ -import XCTest -import Nimble - -#if _runtime(_ObjC) && !SWIFT_PACKAGE - -class RaisesExceptionTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testPositiveMatches", testPositiveMatches), - ("testPositiveMatchesWithClosures", testPositiveMatchesWithClosures), - ("testNegativeMatches", testNegativeMatches), - ("testNegativeMatchesDoNotCallClosureWithoutException", testNegativeMatchesDoNotCallClosureWithoutException), - ("testNegativeMatchesWithClosure", testNegativeMatchesWithClosure), - ] - } - - var anException = NSException(name: "laugh", reason: "Lulz", userInfo: ["key": "value"]) - - func testPositiveMatches() { - expect { self.anException.raise() }.to(raiseException()) - expect { self.anException.raise() }.to(raiseException(named: "laugh")) - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz")) - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"])) - } - - func testPositiveMatchesWithClosures() { - expect { self.anException.raise() }.to(raiseException { (exception: NSException) in - expect(exception.name).to(equal("laugh")) - }) - expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in - expect(exception.name).to(beginWith("lau")) - }) - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in - expect(exception.name).to(beginWith("lau")) - }) - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in - expect(exception.name).to(beginWith("lau")) - }) - - expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in - expect(exception.name).toNot(beginWith("as")) - }) - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in - expect(exception.name).toNot(beginWith("df")) - }) - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in - expect(exception.name).toNot(beginWith("as")) - }) - } - - func testNegativeMatches() { - failsWithErrorMessage("expected to raise exception with name , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.to(raiseException(named: "foo")) - } - - failsWithErrorMessage("expected to raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "bar")) - } - - failsWithErrorMessage( - "expected to raise exception with name with reason with userInfo <{k = v;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["k": "v"])) - } - - failsWithErrorMessage("expected to raise any exception, got no exception") { - expect { self.anException }.to(raiseException()) - } - failsWithErrorMessage("expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.toNot(raiseException()) - } - failsWithErrorMessage("expected to raise exception with name with reason , got no exception") { - expect { self.anException }.to(raiseException(named: "laugh", reason: "Lulz")) - } - - failsWithErrorMessage("expected to raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.to(raiseException(named: "bar", reason: "Lulz")) - } - failsWithErrorMessage("expected to not raise exception with name , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.toNot(raiseException(named: "laugh")) - } - failsWithErrorMessage("expected to not raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.toNot(raiseException(named: "laugh", reason: "Lulz")) - } - - failsWithErrorMessage("expected to not raise exception with name with reason with userInfo <{key = value;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.toNot(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"])) - } - } - - func testNegativeMatchesDoNotCallClosureWithoutException() { - failsWithErrorMessage("expected to raise exception that satisfies block, got no exception") { - expect { self.anException }.to(raiseException { (exception: NSException) in - expect(exception.name).to(equal("foo")) - }) - } - - failsWithErrorMessage("expected to raise exception with name that satisfies block, got no exception") { - expect { self.anException }.to(raiseException(named: "foo") { (exception: NSException) in - expect(exception.name).to(equal("foo")) - }) - } - - failsWithErrorMessage("expected to raise exception with name with reason that satisfies block, got no exception") { - expect { self.anException }.to(raiseException(named: "foo", reason: "ha") { (exception: NSException) in - expect(exception.name).to(equal("foo")) - }) - } - - failsWithErrorMessage("expected to raise exception with name with reason with userInfo <{}> that satisfies block, got no exception") { - expect { self.anException }.to(raiseException(named: "foo", reason: "Lulz", userInfo: [:]) { (exception: NSException) in - expect(exception.name).to(equal("foo")) - }) - } - - failsWithErrorMessage("expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.toNot(raiseException()) - } - } - - func testNegativeMatchesWithClosure() { - failsWithErrorMessage("expected to raise exception that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.to(raiseException { (exception: NSException) in - expect(exception.name).to(equal("foo")) - }) - } - - let innerFailureMessage = "expected to begin with , got " - - failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { - expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in - expect(exception.name).to(beginWith("fo")) - }) - } - - failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { - expect { self.anException.raise() }.to(raiseException(named: "lol") { (exception: NSException) in - expect(exception.name).to(beginWith("fo")) - }) - } - - failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in - expect(exception.name).to(beginWith("fo")) - }) - } - - failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { - expect { self.anException.raise() }.to(raiseException(named: "lol", reason: "wrong") { (exception: NSException) in - expect(exception.name).to(beginWith("fo")) - }) - } - - failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason with userInfo <{key = value;}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in - expect(exception.name).to(beginWith("fo")) - }) - } - - failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason with userInfo <{}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { - expect { self.anException.raise() }.to(raiseException(named: "lol", reason: "Lulz", userInfo: [:]) { (exception: NSException) in - expect(exception.name).to(beginWith("fo")) - }) - } - } -} -#endif diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/SatisfyAnyOfTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/SatisfyAnyOfTest.swift deleted file mode 100644 index 2fcabb1..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/SatisfyAnyOfTest.swift +++ /dev/null @@ -1,51 +0,0 @@ -import XCTest -import Nimble - -class SatisfyAnyOfTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testSatisfyAnyOf", testSatisfyAnyOf), - ("testOperatorOr", testOperatorOr), - ] - } - - func testSatisfyAnyOf() { - expect(2).to(satisfyAnyOf(equal(2), equal(3))) -#if _runtime(_ObjC) - expect(2).toNot(satisfyAnyOf(equal(3), equal("turtles"))) -#endif - expect([1,2,3]).to(satisfyAnyOf(equal([1,2,3]), allPass({$0 < 4}), haveCount(3))) - expect("turtle").toNot(satisfyAnyOf(contain("a"), endWith("magic"))) - expect(82.0).toNot(satisfyAnyOf(beLessThan(10.5), beGreaterThan(100.75), beCloseTo(50.1))) - expect(false).to(satisfyAnyOf(beTrue(), beFalse())) - expect(true).to(satisfyAnyOf(beTruthy(), beFalsy())) - - failsWithErrorMessage( - "expected to match one of: {equal <3>}, or {equal <4>}, or {equal <5>}, got 2") { - expect(2).to(satisfyAnyOf(equal(3), equal(4), equal(5))) - } - failsWithErrorMessage( - "expected to match one of: {all be less than 4, but failed first at element <5> in <[5, 6, 7]>}, or {equal <[1, 2, 3, 4]>}, got [5, 6, 7]") { - expect([5,6,7]).to(satisfyAnyOf(allPass("be less than 4", {$0 < 4}), equal([1,2,3,4]))) - } - failsWithErrorMessage( - "expected to match one of: {be true}, got false") { - expect(false).to(satisfyAnyOf(beTrue())) - } - failsWithErrorMessage( - "expected to not match one of: {be less than <10.5>}, or {be greater than <100.75>}, or {be close to <50.1> (within 0.0001)}, got 50.10001") { - expect(50.10001).toNot(satisfyAnyOf(beLessThan(10.5), beGreaterThan(100.75), beCloseTo(50.1))) - } - } - - func testOperatorOr() { - expect(2).to(equal(2) || equal(3)) -#if _runtime(_ObjC) - expect(2).toNot(equal(3) || equal("turtles")) -#endif - expect("turtle").toNot(contain("a") || endWith("magic")) - expect(82.0).toNot(beLessThan(10.5) || beGreaterThan(100.75)) - expect(false).to(beTrue() || beFalse()) - expect(true).to(beTruthy() || beFalsy()) - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/ThrowErrorTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/ThrowErrorTest.swift deleted file mode 100644 index 6332381..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/Matchers/ThrowErrorTest.swift +++ /dev/null @@ -1,155 +0,0 @@ -import XCTest -import Nimble - -enum Error : ErrorType { - case Laugh - case Cry -} - -enum EquatableError : ErrorType { - case Parameterized(x: Int) -} - -extension EquatableError : Equatable { -} - -func ==(lhs: EquatableError, rhs: EquatableError) -> Bool { - switch (lhs, rhs) { - case (.Parameterized(let l), .Parameterized(let r)): - return l == r - } -} - -enum CustomDebugStringConvertibleError : ErrorType { - case A - case B -} - -extension CustomDebugStringConvertibleError : CustomDebugStringConvertible { - var debugDescription : String { - return "code=\(_code)" - } -} - -class ThrowErrorTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testPositiveMatches", testPositiveMatches), - ("testPositiveMatchesWithClosures", testPositiveMatchesWithClosures), - ("testNegativeMatches", testNegativeMatches), - ("testPositiveNegatedMatches", testPositiveNegatedMatches), - ("testNegativeNegatedMatches", testNegativeNegatedMatches), - ("testNegativeMatchesDoNotCallClosureWithoutError", testNegativeMatchesDoNotCallClosureWithoutError), - ("testNegativeMatchesWithClosure", testNegativeMatchesWithClosure), - ] - } - - func testPositiveMatches() { - expect { throw Error.Laugh }.to(throwError()) - expect { throw Error.Laugh }.to(throwError(Error.Laugh)) - expect { throw Error.Laugh }.to(throwError(errorType: Error.self)) - expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 1))) - } - - func testPositiveMatchesWithClosures() { - // Generic typed closure - expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { error in - guard case EquatableError.Parameterized(let x) = error else { fail(); return } - expect(x) >= 1 - }) - // Explicit typed closure - expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { (error: EquatableError) in - guard case .Parameterized(let x) = error else { fail(); return } - expect(x) >= 1 - }) - // Typed closure over errorType argument - expect { throw EquatableError.Parameterized(x: 42) }.to(throwError(errorType: EquatableError.self) { error in - guard case .Parameterized(let x) = error else { fail(); return } - expect(x) >= 1 - }) - // Typed closure over error argument - expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in - expect(error._domain).to(beginWith("Nim")) - }) - // Typed closure over error argument - expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in - expect(error._domain).toNot(beginWith("as")) - }) - } - - func testNegativeMatches() { - // Same case, different arguments - failsWithErrorMessage("expected to throw error , got ") { - expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2))) - } - // Same case, different arguments - failsWithErrorMessage("expected to throw error , got ") { - expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2))) - } - // Different case - failsWithErrorMessage("expected to throw error , got ") { - expect { throw Error.Laugh }.to(throwError(Error.Cry)) - } - // Different case with closure - failsWithErrorMessage("expected to throw error that satisfies block, got ") { - expect { throw Error.Laugh }.to(throwError(Error.Cry) { _ in return }) - } - // Different case, implementing CustomDebugStringConvertible - failsWithErrorMessage("expected to throw error , got ") { - expect { throw CustomDebugStringConvertibleError.A }.to(throwError(CustomDebugStringConvertibleError.B)) - } - } - - func testPositiveNegatedMatches() { - // No error at all - expect { return }.toNot(throwError()) - // Different case - expect { throw Error.Laugh }.toNot(throwError(Error.Cry)) - } - - func testNegativeNegatedMatches() { - // No error at all - failsWithErrorMessage("expected to not throw any error, got ") { - expect { throw Error.Laugh }.toNot(throwError()) - } - // Different error - failsWithErrorMessage("expected to not throw error , got ") { - expect { throw Error.Laugh }.toNot(throwError(Error.Laugh)) - } - } - - func testNegativeMatchesDoNotCallClosureWithoutError() { - failsWithErrorMessage("expected to throw error that satisfies block, got no error") { - expect { return }.to(throwError { error in - fail() - }) - } - - failsWithErrorMessage("expected to throw error that satisfies block, got no error") { - expect { return }.to(throwError(Error.Laugh) { error in - fail() - }) - } - } - - func testNegativeMatchesWithClosure() { -#if SWIFT_PACKAGE - let moduleName = "Nimbletest" -#else - let moduleName = "NimbleTests" -#endif - let innerFailureMessage = "expected to equal , got <\(moduleName).Error>" - let closure = { (error: Error) in - print("** In closure! With domain \(error._domain)") - expect(error._domain).to(equal("foo")) - } - - failsWithErrorMessage([innerFailureMessage, "expected to throw error from type that satisfies block, got "]) { - expect { throw Error.Laugh }.to(throwError(closure: closure)) - } - - failsWithErrorMessage([innerFailureMessage, "expected to throw error that satisfies block, got "]) { - expect { throw Error.Laugh }.to(throwError(Error.Laugh, closure: closure)) - } - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/SynchronousTests.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/SynchronousTests.swift deleted file mode 100644 index 4d6d531..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/SynchronousTests.swift +++ /dev/null @@ -1,129 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class SynchronousTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testFailAlwaysFails", testFailAlwaysFails), - ("testUnexpectedErrorsThrownFails", testUnexpectedErrorsThrownFails), - ("testToMatchesIfMatcherReturnsTrue", testToMatchesIfMatcherReturnsTrue), - ("testToProvidesActualValueExpression", testToProvidesActualValueExpression), - ("testToProvidesAMemoizedActualValueExpression", testToProvidesActualValueExpression), - ("testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl", testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl), - ("testToMatchAgainstLazyProperties", testToMatchAgainstLazyProperties), - ("testToNotMatchesIfMatcherReturnsTrue", testToNotMatchesIfMatcherReturnsTrue), - ("testToNotProvidesActualValueExpression", testToNotProvidesActualValueExpression), - ("testToNotProvidesAMemoizedActualValueExpression", testToNotProvidesAMemoizedActualValueExpression), - ("testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl", testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl), - ("testToNotNegativeMatches", testToNotNegativeMatches), - ("testNotToMatchesLikeToNot", testNotToMatchesLikeToNot), - ] - } - - let errorToThrow = NSError(domain: NSCocoaErrorDomain, code: 42, userInfo: nil) - private func doThrowError() throws -> Int { - throw errorToThrow - } - - func testFailAlwaysFails() { - failsWithErrorMessage("My error message") { - fail("My error message") - } - failsWithErrorMessage("fail() always fails") { - fail() - } - } - - func testUnexpectedErrorsThrownFails() { -#if _runtime(_ObjC) // This test triggers a weird segfault on Linux currently - failsWithErrorMessage("expected to equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { - expect { try self.doThrowError() }.to(equal(1)) - } - failsWithErrorMessage("expected to not equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { - expect { try self.doThrowError() }.toNot(equal(1)) - } -#endif - } - - func testToMatchesIfMatcherReturnsTrue() { - expect(1).to(MatcherFunc { expr, failure in true }) - expect{1}.to(MatcherFunc { expr, failure in true }) - } - - func testToProvidesActualValueExpression() { - var value: Int? - expect(1).to(MatcherFunc { expr, failure in value = try expr.evaluate(); return true }) - expect(value).to(equal(1)) - } - - func testToProvidesAMemoizedActualValueExpression() { - var callCount = 0 - expect{ callCount += 1 }.to(MatcherFunc { expr, failure in - try expr.evaluate() - try expr.evaluate() - return true - }) - expect(callCount).to(equal(1)) - } - - func testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() { - var callCount = 0 - expect{ callCount += 1 }.to(MatcherFunc { expr, failure in - expect(callCount).to(equal(0)) - try expr.evaluate() - return true - }) - expect(callCount).to(equal(1)) - } - - func testToMatchAgainstLazyProperties() { - expect(ObjectWithLazyProperty().value).to(equal("hello")) - expect(ObjectWithLazyProperty().value).toNot(equal("world")) - expect(ObjectWithLazyProperty().anotherValue).to(equal("world")) - expect(ObjectWithLazyProperty().anotherValue).toNot(equal("hello")) - } - - // repeated tests from to() for toNot() - func testToNotMatchesIfMatcherReturnsTrue() { - expect(1).toNot(MatcherFunc { expr, failure in false }) - expect{1}.toNot(MatcherFunc { expr, failure in false }) - } - - func testToNotProvidesActualValueExpression() { - var value: Int? - expect(1).toNot(MatcherFunc { expr, failure in value = try expr.evaluate(); return false }) - expect(value).to(equal(1)) - } - - func testToNotProvidesAMemoizedActualValueExpression() { - var callCount = 0 - expect{ callCount += 1 }.toNot(MatcherFunc { expr, failure in - try expr.evaluate() - try expr.evaluate() - return false - }) - expect(callCount).to(equal(1)) - } - - func testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() { - var callCount = 0 - expect{ callCount += 1 }.toNot(MatcherFunc { expr, failure in - expect(callCount).to(equal(0)) - try expr.evaluate() - return false - }) - expect(callCount).to(equal(1)) - } - - func testToNotNegativeMatches() { - failsWithErrorMessage("expected to not match, got <1>") { - expect(1).toNot(MatcherFunc { expr, failure in true }) - } - } - - - func testNotToMatchesLikeToNot() { - expect(1).notTo(MatcherFunc { expr, failure in false }) - } -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/UserDescriptionTest.swift b/Carthage/Checkouts/Nimble/Tests/Nimble/UserDescriptionTest.swift deleted file mode 100644 index 077ebed..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/UserDescriptionTest.swift +++ /dev/null @@ -1,70 +0,0 @@ -import XCTest -import Nimble - -class UserDescriptionTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testToMatcher_CustomFailureMessage", testToMatcher_CustomFailureMessage), - ("testNotToMatcher_CustomFailureMessage", testNotToMatcher_CustomFailureMessage), - ("testToNotMatcher_CustomFailureMessage", testToNotMatcher_CustomFailureMessage), - ("testToEventuallyMatch_CustomFailureMessage", testToEventuallyMatch_CustomFailureMessage), - ("testToEventuallyNotMatch_CustomFailureMessage", testToEventuallyNotMatch_CustomFailureMessage), - ("testToNotEventuallyMatch_CustomFailureMessage", testToNotEventuallyMatch_CustomFailureMessage), - ] - } - - func testToMatcher_CustomFailureMessage() { - failsWithErrorMessage( - "These aren't equal!\n" + - "expected to match, got <1>") { - expect(1).to(MatcherFunc { expr, failure in false }, description: "These aren't equal!") - } - } - - func testNotToMatcher_CustomFailureMessage() { - failsWithErrorMessage( - "These aren't equal!\n" + - "expected to not match, got <1>") { - expect(1).notTo(MatcherFunc { expr, failure in true }, description: "These aren't equal!") - } - } - - func testToNotMatcher_CustomFailureMessage() { - failsWithErrorMessage( - "These aren't equal!\n" + - "expected to not match, got <1>") { - expect(1).toNot(MatcherFunc { expr, failure in true }, description: "These aren't equal!") - } - } - - func testToEventuallyMatch_CustomFailureMessage() { -#if _runtime(_ObjC) - failsWithErrorMessage( - "These aren't eventually equal!\n" + - "expected to eventually equal <1>, got <0>") { - expect { 0 }.toEventually(equal(1), description: "These aren't eventually equal!") - } -#endif - } - - func testToEventuallyNotMatch_CustomFailureMessage() { -#if _runtime(_ObjC) - failsWithErrorMessage( - "These are eventually equal!\n" + - "expected to eventually not equal <1>, got <1>") { - expect { 1 }.toEventuallyNot(equal(1), description: "These are eventually equal!") - } -#endif - } - - func testToNotEventuallyMatch_CustomFailureMessage() { -#if _runtime(_ObjC) - failsWithErrorMessage( - "These are eventually equal!\n" + - "expected to eventually not equal <1>, got <1>") { - expect { 1 }.toEventuallyNot(equal(1), description: "These are eventually equal!") - } -#endif - } - -} diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/NimbleSpecHelper.h b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/NimbleSpecHelper.h deleted file mode 100644 index 282993d..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/NimbleSpecHelper.h +++ /dev/null @@ -1,15 +0,0 @@ -@import Nimble; -#import "NimbleTests-Swift.h" - -// Use this when you want to verify the failure message for when an expectation fails -#define expectFailureMessage(MSG, BLOCK) \ -[NimbleHelper expectFailureMessage:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__]; - -#define expectFailureMessages(MSGS, BLOCK) \ -[NimbleHelper expectFailureMessages:(MSGS) block:(BLOCK) file:@(__FILE__) line:__LINE__]; - - -// Use this when you want to verify the failure message with the nil message postfixed -// to it: " (use beNil() to match nils)" -#define expectNilFailureMessage(MSG, BLOCK) \ -[NimbleHelper expectFailureMessageForNil:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__]; diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCAllPassTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCAllPassTest.m deleted file mode 100644 index 1146920..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCAllPassTest.m +++ /dev/null @@ -1,38 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCAllPassTest : XCTestCase - -@end - -@implementation ObjCAllPassTest - -- (void)testPositiveMatches { - expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@5))); - expect(@[@1, @2, @3,@4]).toNot(allPass(beGreaterThan(@5))); - - expect([NSSet setWithArray:@[@1, @2, @3,@4]]).to(allPass(beLessThan(@5))); - expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beGreaterThan(@5))); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to all be less than <3>, but failed first at element" - " <3> in <[1, 2, 3, 4]>", ^{ - expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@3))); - }); - expectFailureMessage(@"expected to not all be less than <5>", ^{ - expect(@[@1, @2, @3,@4]).toNot(allPass(beLessThan(@5))); - }); - expectFailureMessage(@"expected to not all be less than <5>", ^{ - expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beLessThan(@5))); - }); - expectFailureMessage(@"allPass only works with NSFastEnumeration" - " (NSArray, NSSet, ...) of NSObjects, got <3>", ^{ - expect(@3).to(allPass(beLessThan(@5))); - }); - expectFailureMessage(@"allPass only works with NSFastEnumeration" - " (NSArray, NSSet, ...) of NSObjects, got <3>", ^{ - expect(@3).toNot(allPass(beLessThan(@5))); - }); -} -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCAsyncTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCAsyncTest.m deleted file mode 100644 index f052e74..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCAsyncTest.m +++ /dev/null @@ -1,55 +0,0 @@ -#import -#import -#import "NimbleSpecHelper.h" - -@interface ObjCAsyncTest : XCTestCase - -@end - -@implementation ObjCAsyncTest - -- (void)testAsync { - __block id obj = @1; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - obj = nil; - }); - expect(obj).toEventually(beNil()); -} - - -- (void)testAsyncWithCustomTimeout { - __block id obj = nil; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - obj = @1; - }); - expect(obj).withTimeout(5).toEventuallyNot(beNil()); -} - -- (void)testAsyncCallback { - waitUntil(^(void (^done)(void)){ - done(); - }); - - expectFailureMessage(@"Waited more than 1.0 second", ^{ - waitUntil(^(void (^done)(void)){ /* ... */ }); - }); - - expectFailureMessage(@"Waited more than 0.01 seconds", ^{ - waitUntilTimeout(0.01, ^(void (^done)(void)){ - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - [NSThread sleepForTimeInterval:0.1]; - done(); - }); - }); - }); - - expectFailureMessage(@"expected to equal , got ", ^{ - waitUntil(^(void (^done)(void)){ - [NSThread sleepForTimeInterval:0.1]; - expect(@"hello").to(equal(@"goodbye")); - done(); - }); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeAnInstanceOfTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeAnInstanceOfTest.m deleted file mode 100644 index f5fca2d..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeAnInstanceOfTest.m +++ /dev/null @@ -1,34 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeAnInstanceOfTest : XCTestCase -@end - -@implementation ObjCBeAnInstanceOfTest - -- (void)testPositiveMatches { - NSNull *obj = [NSNull null]; - expect(obj).to(beAnInstanceOf([NSNull class])); - expect(@1).toNot(beAnInstanceOf([NSNull class])); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be an instance of NSNull, got <__NSCFNumber instance>", ^{ - expect(@1).to(beAnInstanceOf([NSNull class])); - }); - expectFailureMessage(@"expected to not be an instance of NSNull, got ", ^{ - expect([NSNull null]).toNot(beAnInstanceOf([NSNull class])); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to be an instance of NSNull, got ", ^{ - expect(nil).to(beAnInstanceOf([NSNull class])); - }); - - expectNilFailureMessage(@"expected to not be an instance of NSNull, got ", ^{ - expect(nil).toNot(beAnInstanceOf([NSNull class])); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeCloseToTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeCloseToTest.m deleted file mode 100644 index c3f5639..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeCloseToTest.m +++ /dev/null @@ -1,36 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeCloseToTest : XCTestCase - -@end - -@implementation ObjCBeCloseToTest - -- (void)testPositiveMatches { - expect(@1.2).to(beCloseTo(@1.2001)); - expect(@1.2).to(beCloseTo(@2).within(10)); - expect(@2).toNot(beCloseTo(@1)); - expect(@1.00001).toNot(beCloseTo(@1).within(0.00000001)); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be close to <0> (within 0.001), got <1>", ^{ - expect(@1).to(beCloseTo(@0)); - }); - expectFailureMessage(@"expected to not be close to <0> (within 0.001), got <0.0001>", ^{ - expect(@(0.0001)).toNot(beCloseTo(@0)); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to be close to <0> (within 0.001), got ", ^{ - expect(nil).to(beCloseTo(@0)); - }); - expectNilFailureMessage(@"expected to not be close to <0> (within 0.001), got ", ^{ - expect(nil).toNot(beCloseTo(@0)); - }); -} - - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeEmptyTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeEmptyTest.m deleted file mode 100644 index 723d642..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeEmptyTest.m +++ /dev/null @@ -1,89 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeEmptyTest : XCTestCase -@end - -@implementation ObjCBeEmptyTest - -- (void)testPositiveMatches { - expect(@[]).to(beEmpty()); - expect(@"").to(beEmpty()); - expect(@{}).to(beEmpty()); - expect([NSSet set]).to(beEmpty()); - expect([NSIndexSet indexSet]).to(beEmpty()); - expect([NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory]).to(beEmpty()); - - expect(@[@1, @2]).toNot(beEmpty()); - expect(@"a").toNot(beEmpty()); - expect(@{@"key": @"value"}).toNot(beEmpty()); - expect([NSSet setWithObject:@1]).toNot(beEmpty()); - expect([NSIndexSet indexSetWithIndex:1]).toNot(beEmpty()); - - NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; - [table addObject:@1]; - expect(table).toNot(beEmpty()); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be empty, got ", ^{ - expect(@"foo").to(beEmpty()); - }); - expectFailureMessage(@"expected to be empty, got <(1)>", ^{ - expect(@[@1]).to(beEmpty()); - }); - expectFailureMessage(@"expected to be empty, got <{key = value;}>", ^{ - expect(@{@"key": @"value"}).to(beEmpty()); - }); - expectFailureMessage(@"expected to be empty, got <{(1)}>", ^{ - expect([NSSet setWithObject:@1]).to(beEmpty()); - }); - expectFailureMessage(@"expected to be empty, got <(1)>", ^{ - expect([NSIndexSet indexSetWithIndex:1]).to(beEmpty()); - }); - NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; - [table addObject:@1]; - NSString *tableString = [[table description] stringByReplacingOccurrencesOfString:@"\n" withString:@""]; - expectFailureMessage(([NSString stringWithFormat:@"expected to be empty, got <%@>", tableString]), ^{ - expect(table).to(beEmpty()); - }); - - expectFailureMessage(@"expected to not be empty, got <>", ^{ - expect(@"").toNot(beEmpty()); - }); - expectFailureMessage(@"expected to not be empty, got <()>", ^{ - expect(@[]).toNot(beEmpty()); - }); - expectFailureMessage(@"expected to not be empty, got <{}>", ^{ - expect(@{}).toNot(beEmpty()); - }); - expectFailureMessage(@"expected to not be empty, got <{(1)}>", ^{ - expect([NSSet setWithObject:@1]).toNot(beEmpty()); - }); - expectFailureMessage(@"expected to not be empty, got <(1)>", ^{ - expect([NSIndexSet indexSetWithIndex:1]).toNot(beEmpty()); - }); - expectFailureMessage(@"expected to not be empty, got ", ^{ - expect([NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]).toNot(beEmpty()); - }); -} - -- (void)testItDoesNotMatchNil { - expectNilFailureMessage(@"expected to be empty, got ", ^{ - expect(nil).to(beEmpty()); - }); - expectNilFailureMessage(@"expected to not be empty, got ", ^{ - expect(nil).toNot(beEmpty()); - }); -} - -- (void)testItReportsTypesItMatchesAgainst { - expectFailureMessage(@"expected to be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type", ^{ - expect(@1).to(beEmpty()); - }); - expectFailureMessage(@"expected to not be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type", ^{ - expect(@1).toNot(beEmpty()); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeFalseTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeFalseTest.m deleted file mode 100644 index 5b99842..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeFalseTest.m +++ /dev/null @@ -1,24 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeFalseTest : XCTestCase - -@end - -@implementation ObjCBeFalseTest - -- (void)testPositiveMatches { - expect(@NO).to(beFalse()); - expect(@YES).toNot(beFalse()); -} - -- (void)testNegativeMatches { - expectNilFailureMessage(@"expected to be false, got ", ^{ - expect(nil).to(beFalse()); - }); - expectNilFailureMessage(@"expected to not be false, got ", ^{ - expect(nil).toNot(beFalse()); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeFalsyTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeFalsyTest.m deleted file mode 100644 index 4b6281e..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeFalsyTest.m +++ /dev/null @@ -1,28 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeFalsyTest : XCTestCase - -@end - -@implementation ObjCBeFalsyTest - -- (void)testPositiveMatches { - expect(@NO).to(beFalsy()); - expect(@YES).toNot(beFalsy()); - expect(nil).to(beFalsy()); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to not be falsy, got ", ^{ - expect(nil).toNot(beFalsy()); - }); - expectFailureMessage(@"expected to be falsy, got <1>", ^{ - expect(@1).to(beFalsy()); - }); - expectFailureMessage(@"expected to be truthy, got <0>", ^{ - expect(@NO).to(beTruthy()); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanOrEqualToTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanOrEqualToTest.m deleted file mode 100644 index cec26c7..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanOrEqualToTest.m +++ /dev/null @@ -1,33 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeGreaterThanOrEqualToTest : XCTestCase - -@end - -@implementation ObjCBeGreaterThanOrEqualToTest - -- (void)testPositiveMatches { - expect(@2).to(beGreaterThanOrEqualTo(@2)); - expect(@2).toNot(beGreaterThanOrEqualTo(@3)); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be greater than or equal to <0>, got <-1>", ^{ - expect(@(-1)).to(beGreaterThanOrEqualTo(@0)); - }); - expectFailureMessage(@"expected to not be greater than or equal to <1>, got <2>", ^{ - expect(@2).toNot(beGreaterThanOrEqualTo(@(1))); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to be greater than or equal to <-1>, got ", ^{ - expect(nil).to(beGreaterThanOrEqualTo(@(-1))); - }); - expectNilFailureMessage(@"expected to not be greater than or equal to <1>, got ", ^{ - expect(nil).toNot(beGreaterThanOrEqualTo(@(1))); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanTest.m deleted file mode 100644 index 5ad3087..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanTest.m +++ /dev/null @@ -1,33 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeGreaterThanTest : XCTestCase - -@end - -@implementation ObjCBeGreaterThanTest - -- (void)testPositiveMatches { - expect(@2).to(beGreaterThan(@1)); - expect(@2).toNot(beGreaterThan(@2)); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be greater than <0>, got <-1>", ^{ - expect(@(-1)).to(beGreaterThan(@(0))); - }); - expectFailureMessage(@"expected to not be greater than <1>, got <0>", ^{ - expect(@0).toNot(beGreaterThan(@(1))); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to be greater than <-1>, got ", ^{ - expect(nil).to(beGreaterThan(@(-1))); - }); - expectNilFailureMessage(@"expected to not be greater than <1>, got ", ^{ - expect(nil).toNot(beGreaterThan(@(1))); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeIdenticalToTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeIdenticalToTest.m deleted file mode 100644 index ab60a81..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeIdenticalToTest.m +++ /dev/null @@ -1,62 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeIdenticalToTest : XCTestCase - -@end - -@implementation ObjCBeIdenticalToTest - -- (void)testPositiveMatches { - NSNull *obj = [NSNull null]; - expect(obj).to(beIdenticalTo([NSNull null])); - expect(@2).toNot(beIdenticalTo(@3)); -} - -- (void)testNegativeMatches { - NSNull *obj = [NSNull null]; - expectFailureMessage(([NSString stringWithFormat:@"expected to be identical to <%p>, got <%p>", obj, @2]), ^{ - expect(@2).to(beIdenticalTo(obj)); - }); - expectFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got <%p>", obj, obj]), ^{ - expect(obj).toNot(beIdenticalTo(obj)); - }); -} - -- (void)testNilMatches { - NSNull *obj = [NSNull null]; - expectNilFailureMessage(@"expected to be identical to nil, got nil", ^{ - expect(nil).to(beIdenticalTo(nil)); - }); - expectNilFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got nil", obj]), ^{ - expect(nil).toNot(beIdenticalTo(obj)); - }); -} - -- (void)testAliasPositiveMatches { - NSNull *obj = [NSNull null]; - expect(obj).to(be([NSNull null])); - expect(@2).toNot(be(@3)); -} - -- (void)testAliasNegativeMatches { - NSNull *obj = [NSNull null]; - expectFailureMessage(([NSString stringWithFormat:@"expected to be identical to <%p>, got <%p>", obj, @2]), ^{ - expect(@2).to(be(obj)); - }); - expectFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got <%p>", obj, obj]), ^{ - expect(obj).toNot(be(obj)); - }); -} - -- (void)testAliasNilMatches { - NSNull *obj = [NSNull null]; - expectNilFailureMessage(@"expected to be identical to nil, got nil", ^{ - expect(nil).to(be(nil)); - }); - expectNilFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got nil", obj]), ^{ - expect(nil).toNot(be(obj)); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeKindOfTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeKindOfTest.m deleted file mode 100644 index 7eee261..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeKindOfTest.m +++ /dev/null @@ -1,34 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeKindOfTest : XCTestCase - -@end - -@implementation ObjCBeKindOfTest - -- (void)testPositiveMatches { - NSMutableArray *array = [NSMutableArray array]; - expect(array).to(beAKindOf([NSArray class])); - expect(@1).toNot(beAKindOf([NSNull class])); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be a kind of NSNull, got <__NSCFNumber instance>", ^{ - expect(@1).to(beAKindOf([NSNull class])); - }); - expectFailureMessage(@"expected to not be a kind of NSNull, got ", ^{ - expect([NSNull null]).toNot(beAKindOf([NSNull class])); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to be a kind of NSNull, got ", ^{ - expect(nil).to(beAKindOf([NSNull class])); - }); - expectNilFailureMessage(@"expected to not be a kind of NSNull, got ", ^{ - expect(nil).toNot(beAKindOf([NSNull class])); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeLessThanOrEqualToTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeLessThanOrEqualToTest.m deleted file mode 100644 index dbd2062..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeLessThanOrEqualToTest.m +++ /dev/null @@ -1,33 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeLessThanOrEqualToTest : XCTestCase - -@end - -@implementation ObjCBeLessThanOrEqualToTest - -- (void)testPositiveMatches { - expect(@2).to(beLessThanOrEqualTo(@2)); - expect(@2).toNot(beLessThanOrEqualTo(@1)); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be less than or equal to <1>, got <2>", ^{ - expect(@2).to(beLessThanOrEqualTo(@1)); - }); - expectFailureMessage(@"expected to not be less than or equal to <1>, got <1>", ^{ - expect(@1).toNot(beLessThanOrEqualTo(@1)); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to be less than or equal to <1>, got ", ^{ - expect(nil).to(beLessThanOrEqualTo(@1)); - }); - expectNilFailureMessage(@"expected to not be less than or equal to <-1>, got ", ^{ - expect(nil).toNot(beLessThanOrEqualTo(@(-1))); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeLessThanTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeLessThanTest.m deleted file mode 100644 index 4d9da72..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeLessThanTest.m +++ /dev/null @@ -1,33 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeLessThanTest : XCTestCase - -@end - -@implementation ObjCBeLessThanTest - -- (void)testPositiveMatches { - expect(@2).to(beLessThan(@3)); - expect(@2).toNot(beLessThan(@2)); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be less than <0>, got <-1>", ^{ - expect(@(-1)).to(beLessThan(@0)); - }); - expectFailureMessage(@"expected to not be less than <1>, got <0>", ^{ - expect(@0).toNot(beLessThan(@1)); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to be less than <-1>, got ", ^{ - expect(nil).to(beLessThan(@(-1))); - }); - expectNilFailureMessage(@"expected to not be less than <1>, got ", ^{ - expect(nil).toNot(beLessThan(@1)); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeNilTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeNilTest.m deleted file mode 100644 index a43ee50..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeNilTest.m +++ /dev/null @@ -1,24 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeNilTest : XCTestCase - -@end - -@implementation ObjCBeNilTest - -- (void)testPositiveMatches { - expect(nil).to(beNil()); - expect(@NO).toNot(beNil()); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be nil, got <1>", ^{ - expect(@1).to(beNil()); - }); - expectFailureMessage(@"expected to not be nil, got ", ^{ - expect(nil).toNot(beNil()); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeTrueTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeTrueTest.m deleted file mode 100644 index 3f10ce3..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeTrueTest.m +++ /dev/null @@ -1,25 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeTrueTest : XCTestCase - -@end - -@implementation ObjCBeTrueTest - -- (void)testPositiveMatches { - expect(@YES).to(beTrue()); - expect(@NO).toNot(beTrue()); - expect(nil).toNot(beTrue()); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be true, got <0>", ^{ - expect(@NO).to(beTrue()); - }); - expectFailureMessage(@"expected to be true, got ", ^{ - expect(nil).to(beTrue()); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeTruthyTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeTruthyTest.m deleted file mode 100644 index 93180a2..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeTruthyTest.m +++ /dev/null @@ -1,28 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeTruthyTest : XCTestCase - -@end - -@implementation ObjCBeTruthyTest - -- (void)testPositiveMatches { - expect(@YES).to(beTruthy()); - expect(@NO).toNot(beTruthy()); - expect(nil).toNot(beTruthy()); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be truthy, got ", ^{ - expect(nil).to(beTruthy()); - }); - expectFailureMessage(@"expected to not be truthy, got <1>", ^{ - expect(@1).toNot(beTruthy()); - }); - expectFailureMessage(@"expected to be truthy, got <0>", ^{ - expect(@NO).to(beTruthy()); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeginWithTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeginWithTest.m deleted file mode 100644 index 5ca7be4..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCBeginWithTest.m +++ /dev/null @@ -1,37 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeginWithTest : XCTestCase - -@end - -@implementation ObjCBeginWithTest - -- (void)testPositiveMatches { - expect(@"hello world!").to(beginWith(@"hello")); - expect(@"hello world!").toNot(beginWith(@"world")); - - NSArray *array = @[@1, @2]; - expect(array).to(beginWith(@1)); - expect(array).toNot(beginWith(@2)); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to begin with , got ", ^{ - expect(@"foo").to(beginWith(@"bar")); - }); - expectFailureMessage(@"expected to not begin with , got ", ^{ - expect(@"foo").toNot(beginWith(@"foo")); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to begin with <1>, got ", ^{ - expect(nil).to(beginWith(@1)); - }); - expectNilFailureMessage(@"expected to not begin with <1>, got ", ^{ - expect(nil).toNot(beginWith(@1)); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCContainTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCContainTest.m deleted file mode 100644 index 92bb9f9..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCContainTest.m +++ /dev/null @@ -1,67 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCContainTest : XCTestCase - -@end - -@implementation ObjCContainTest - -- (void)testPositiveMatches { - NSArray *array = @[@1, @2]; - expect(array).to(contain(@1)); - expect(array).toNot(contain(@"HI")); - expect(@"String").to(contain(@"Str")); - expect(@"Other").toNot(contain(@"Str")); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to contain <3>, got <(1, 2)>", ^{ - expect((@[@1, @2])).to(contain(@3)); - }); - expectFailureMessage(@"expected to not contain <2>, got <(1, 2)>", ^{ - expect((@[@1, @2])).toNot(contain(@2)); - }); - - expectFailureMessage(@"expected to contain , got ", ^{ - expect(@"la").to(contain(@"hi")); - }); - expectFailureMessage(@"expected to not contain , got ", ^{ - expect(@"hihihi").toNot(contain(@"hi")); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to contain <3>, got ", ^{ - expect(nil).to(contain(@3)); - }); - expectNilFailureMessage(@"expected to not contain <3>, got ", ^{ - expect(nil).toNot(contain(@3)); - }); - - expectNilFailureMessage(@"expected to contain , got ", ^{ - expect(nil).to(contain(@"hi")); - }); - expectNilFailureMessage(@"expected to not contain , got ", ^{ - expect(nil).toNot(contain(@"hi")); - }); -} - -- (void)testVariadicArguments { - NSArray *array = @[@1, @2]; - expect(array).to(contain(@1, @2)); - expect(array).toNot(contain(@"HI", @"whale")); - expect(@"String").to(contain(@"Str", @"ng")); - expect(@"Other").toNot(contain(@"Str", @"Oth")); - - - expectFailureMessage(@"expected to contain , got <(a, b, c)>", ^{ - expect(@[@"a", @"b", @"c"]).to(contain(@"a", @"bar")); - }); - - expectFailureMessage(@"expected to not contain , got <(a, b, c)>", ^{ - expect(@[@"a", @"b", @"c"]).toNot(contain(@"bar", @"b")); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCEndWithTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCEndWithTest.m deleted file mode 100644 index b960f01..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCEndWithTest.m +++ /dev/null @@ -1,37 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCEndWithTest : XCTestCase - -@end - -@implementation ObjCEndWithTest - -- (void)testPositiveMatches { - NSArray *array = @[@1, @2]; - expect(@"hello world!").to(endWith(@"world!")); - expect(@"hello world!").toNot(endWith(@"hello")); - expect(array).to(endWith(@2)); - expect(array).toNot(endWith(@1)); - expect(@1).toNot(contain(@"foo")); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to end with , got ", ^{ - expect(@"hello world!").to(endWith(@"?")); - }); - expectFailureMessage(@"expected to not end with , got ", ^{ - expect(@"hello world!").toNot(endWith(@"!")); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to end with <1>, got ", ^{ - expect(nil).to(endWith(@1)); - }); - expectNilFailureMessage(@"expected to not end with <1>, got ", ^{ - expect(nil).toNot(endWith(@1)); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCEqualTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCEqualTest.m deleted file mode 100644 index e5a2be0..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCEqualTest.m +++ /dev/null @@ -1,35 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCEqualTest : XCTestCase - -@end - -@implementation ObjCEqualTest - -- (void)testPositiveMatches { - expect(@1).to(equal(@1)); - expect(@1).toNot(equal(@2)); - expect(@1).notTo(equal(@2)); - expect(@"hello").to(equal(@"hello")); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to equal <2>, got <1>", ^{ - expect(@1).to(equal(@2)); - }); - expectFailureMessage(@"expected to not equal <1>, got <1>", ^{ - expect(@1).toNot(equal(@1)); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to equal , got ", ^{ - expect(nil).to(equal(nil)); - }); - expectNilFailureMessage(@"expected to not equal , got ", ^{ - expect(nil).toNot(equal(nil)); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCHaveCount.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCHaveCount.m deleted file mode 100644 index b057fc0..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCHaveCount.m +++ /dev/null @@ -1,105 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCHaveCountTest : XCTestCase - -@end - -@implementation ObjCHaveCountTest - -- (void)testHaveCountForNSArray { - expect(@[@1, @2, @3]).to(haveCount(@3)); - expect(@[@1, @2, @3]).notTo(haveCount(@1)); - - expect(@[]).to(haveCount(@0)); - expect(@[@1]).notTo(haveCount(@0)); - - expectFailureMessage(@"expected to have (1, 2, 3) with count 1, got 3", ^{ - expect(@[@1, @2, @3]).to(haveCount(@1)); - }); - - expectFailureMessage(@"expected to not have (1, 2, 3) with count 3, got 3", ^{ - expect(@[@1, @2, @3]).notTo(haveCount(@3)); - }); - -} - -- (void)testHaveCountForNSDictionary { - expect(@{@"1":@1, @"2":@2, @"3":@3}).to(haveCount(@3)); - expect(@{@"1":@1, @"2":@2, @"3":@3}).notTo(haveCount(@1)); - - expectFailureMessage(@"expected to have {1 = 1;2 = 2;3 = 3;} with count 1, got 3", ^{ - expect(@{@"1":@1, @"2":@2, @"3":@3}).to(haveCount(@1)); - }); - - expectFailureMessage(@"expected to not have {1 = 1;2 = 2;3 = 3;} with count 3, got 3", ^{ - expect(@{@"1":@1, @"2":@2, @"3":@3}).notTo(haveCount(@3)); - }); -} - -- (void)testHaveCountForNSHashtable { - NSHashTable *const table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; - [table addObject:@1]; - [table addObject:@2]; - [table addObject:@3]; - - expect(table).to(haveCount(@3)); - expect(table).notTo(haveCount(@1)); - - NSString *msg = [NSString stringWithFormat: - @"expected to have %@with count 1, got 3", - [table.description stringByReplacingOccurrencesOfString:@"\n" withString:@""]]; - expectFailureMessage(msg, ^{ - expect(table).to(haveCount(@1)); - }); - - - msg = [NSString stringWithFormat: - @"expected to not have %@with count 3, got 3", - [table.description stringByReplacingOccurrencesOfString:@"\n" withString:@""]]; - expectFailureMessage(msg, ^{ - expect(table).notTo(haveCount(@3)); - }); -} - -- (void)testHaveCountForNSSet { - NSSet *const set = [NSSet setWithArray:@[@1, @2, @3]]; - - expect(set).to(haveCount(@3)); - expect(set).notTo(haveCount(@1)); - - expectFailureMessage(@"expected to have {(3,1,2)} with count 1, got 3", ^{ - expect(set).to(haveCount(@1)); - }); - - expectFailureMessage(@"expected to not have {(3,1,2)} with count 3, got 3", ^{ - expect(set).notTo(haveCount(@3)); - }); -} - -- (void)testHaveCountForNSIndexSet { - NSIndexSet *const set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]; - - expect(set).to(haveCount(@3)); - expect(set).notTo(haveCount(@1)); - - expectFailureMessage(@"expected to have (1, 2, 3) with count 1, got 3", ^{ - expect(set).to(haveCount(@1)); - }); - - expectFailureMessage(@"expected to not have (1, 2, 3) with count 3, got 3", ^{ - expect(set).notTo(haveCount(@3)); - }); -} - -- (void)testHaveCountForUnsupportedTypes { - expectFailureMessage(@"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFConstantString", ^{ - expect(@"string").to(haveCount(@6)); - }); - - expectFailureMessage(@"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFNumber", ^{ - expect(@1).to(haveCount(@6)); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCMatchTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCMatchTest.m deleted file mode 100644 index 2342ae4..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCMatchTest.m +++ /dev/null @@ -1,33 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCMatchTest : XCTestCase - -@end - -@implementation ObjCMatchTest - -- (void)testPositiveMatches { - expect(@"11:14").to(match(@"\\d{2}:\\d{2}")); - expect(@"hello").toNot(match(@"\\d{2}:\\d{2}")); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to match <\\d{2}:\\d{2}>, got ", ^{ - expect(@"hello").to(match(@"\\d{2}:\\d{2}")); - }); - expectFailureMessage(@"expected to not match <\\d{2}:\\d{2}>, got <11:22>", ^{ - expect(@"11:22").toNot(match(@"\\d{2}:\\d{2}")); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to match <\\d{2}:\\d{2}>, got ", ^{ - expect(nil).to(match(@"\\d{2}:\\d{2}")); - }); - expectNilFailureMessage(@"expected to not match <\\d{2}:\\d{2}>, got ", ^{ - expect(nil).toNot(match(@"\\d{2}:\\d{2}")); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCRaiseExceptionTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCRaiseExceptionTest.m deleted file mode 100644 index 3179388..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCRaiseExceptionTest.m +++ /dev/null @@ -1,178 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCRaiseExceptionTest : XCTestCase - -@end - -@implementation ObjCRaiseExceptionTest - -- (void)testPositiveMatches { - __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException - reason:@"No food" - userInfo:@{@"key": @"value"}]; - expectAction(^{ @throw exception; }).to(raiseException()); - expectAction(^{ [exception raise]; }).to(raiseException()); - expectAction(^{ [exception raise]; }).to(raiseException().named(NSInvalidArgumentException)); - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food")); - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food"). - userInfo(@{@"key": @"value"})); - - expectAction(^{ }).toNot(raiseException()); -} - -- (void)testPositiveMatchesWithBlocks { - __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException - reason:@"No food" - userInfo:@{@"key": @"value"}]; - expectAction(^{ [exception raise]; }).to(raiseException(). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food"). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food"). - userInfo(@{@"key": @"value"}). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); -} - -- (void)testNegativeMatches { - __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException - reason:@"No food" - userInfo:@{@"key": @"value"}]; - - expectFailureMessage(@"expected to raise any exception, got no exception", ^{ - expectAction(^{ }).to(raiseException()); - }); - - expectFailureMessage(@"expected to raise exception with name , got no exception", ^{ - expectAction(^{ }).to(raiseException(). - named(@"foo")); - }); - - expectFailureMessage(@"expected to raise exception with name with reason , got no exception", ^{ - expectAction(^{ }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"cakes")); - }); - - expectFailureMessage(@"expected to raise exception with name with reason with userInfo <{k = v;}>, got no exception", ^{ - expectAction(^{ }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food"). - userInfo(@{@"k": @"v"})); - }); - - expectFailureMessage(@"expected to not raise any exception, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }", ^{ - expectAction(^{ [exception raise]; }).toNot(raiseException()); - }); -} - -- (void)testNegativeMatchesWithPassingBlocks { - __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException - reason:@"No food" - userInfo:@{@"key": @"value"}]; - expectFailureMessage(@"expected to raise exception that satisfies block, got no exception", ^{ - expect(exception).to(raiseException(). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(@"LOL")); - })); - }); - - NSString *outerFailureMessage = @"expected to raise exception that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; - expectFailureMessages((@[outerFailureMessage]), ^{ - expectAction(^{ [exception raise]; }).to(raiseException(). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); - }); - - outerFailureMessage = @"expected to raise exception with name that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; - expectFailureMessages((@[outerFailureMessage]), ^{ - expectAction(^{ [exception raise]; }).to(raiseException(). - named(@"foo"). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); - }); - - outerFailureMessage = @"expected to raise exception with name with reason that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; - expectFailureMessages((@[outerFailureMessage]), ^{ - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"bar"). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); - }); - - outerFailureMessage = @"expected to raise exception with name with reason with userInfo <{}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; - expectFailureMessages((@[outerFailureMessage]), ^{ - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food"). - userInfo(@{}). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); - }); -} - -- (void)testNegativeMatchesWithNegativeBlocks { - __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException - reason:@"No food" - userInfo:@{@"key": @"value"}]; - NSString *outerFailureMessage; - - NSString const *innerFailureMessage = @"expected to equal , got "; - outerFailureMessage = @"expected to raise exception with name that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; - expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(@"foo")); - })); - }); - - - outerFailureMessage = @"expected to raise exception with name with reason that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; - expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food"). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(@"foo")); - })); - }); - - - outerFailureMessage = @"expected to raise exception with name with reason with userInfo <{key = value;}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; - expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food"). - userInfo(@{@"key": @"value"}). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(@"foo")); - })); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCSatisfyAnyOfTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCSatisfyAnyOfTest.m deleted file mode 100644 index 4c80abc..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCSatisfyAnyOfTest.m +++ /dev/null @@ -1,32 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCSatisfyAnyOfTest : XCTestCase - -@end - -@implementation ObjCSatisfyAnyOfTest - -- (void)testPositiveMatches { - expect(@2).to(satisfyAnyOf(equal(@2), equal(@3))); - expect(@2).toNot(satisfyAnyOf(equal(@3), equal(@16))); - expect(@[@1, @2, @3]).to(satisfyAnyOf(equal(@[@1, @2, @3]), allPass(beLessThan(@4)))); - expect(@NO).to(satisfyAnyOf(beTrue(), beFalse())); - expect(@YES).to(satisfyAnyOf(beTrue(), beFalse())); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to match one of: {equal <3>}, or {equal <4>}, or {equal <5>}, got 2", ^{ - expect(@2).to(satisfyAnyOf(equal(@3), equal(@4), equal(@5))); - }); - - expectFailureMessage(@"expected to match one of: {all be less than <4>, but failed first at element" - " <5> in <[5, 6, 7]>}, or {equal <(1, 2, 3, 4)>}, got (5,6,7)", ^{ - expect(@[@5, @6, @7]).to(satisfyAnyOf(allPass(beLessThan(@4)), equal(@[@1, @2, @3, @4]))); - }); - - expectFailureMessage(@"satisfyAnyOf must be called with at least one matcher", ^{ - expect(@"turtles").to(satisfyAnyOf()); - }); -} -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCSyncTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCSyncTest.m deleted file mode 100644 index 2aae816..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCSyncTest.m +++ /dev/null @@ -1,21 +0,0 @@ -#import -#import -#import "NimbleSpecHelper.h" - -@interface ObjCSyncTest : XCTestCase - -@end - -@implementation ObjCSyncTest - -- (void)testFailureExpectation { - expectFailureMessage(@"fail() always fails", ^{ - fail(); - }); - - expectFailureMessage(@"This always fails", ^{ - failWithMessage(@"This always fails"); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCUserDescriptionTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCUserDescriptionTest.m deleted file mode 100644 index ffb5407..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjCUserDescriptionTest.m +++ /dev/null @@ -1,52 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCUserDescriptionTest : XCTestCase - -@end - -@implementation ObjCUserDescriptionTest - -- (void)testToWithDescription { - expectFailureMessage(@"These are equal!\n" - "expected to equal <2>, got <1>", ^{ - expect(@1).toWithDescription(equal(@2), @"These are equal!"); - }); -} - -- (void)testToNotWithDescription { - expectFailureMessage(@"These aren't equal!\n" - "expected to not equal <1>, got <1>", ^{ - expect(@1).toNotWithDescription(equal(@1), @"These aren't equal!"); - }); -} - -- (void)testNotToWithDescription { - expectFailureMessage(@"These aren't equal!\n" - "expected to not equal <1>, got <1>", ^{ - expect(@1).notToWithDescription(equal(@1), @"These aren't equal!"); - }); -} - -- (void)testToEventuallyWithDescription { - expectFailureMessage(@"These are equal!\n" - "expected to eventually equal <2>, got <1>", ^{ - expect(@1).toEventuallyWithDescription(equal(@2), @"These are equal!"); - }); -} - -- (void)testToEventuallyNotWithDescription { - expectFailureMessage(@"These aren't equal!\n" - "expected to eventually not equal <1>, got <1>", ^{ - expect(@1).toEventuallyNotWithDescription(equal(@1), @"These aren't equal!"); - }); -} - -- (void)testToNotEventuallyWithDescription { - expectFailureMessage(@"These aren't equal!\n" - "expected to eventually not equal <1>, got <1>", ^{ - expect(@1).toNotEventuallyWithDescription(equal(@1), @"These aren't equal!"); - }); -} - -@end diff --git a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjcStringersTest.m b/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjcStringersTest.m deleted file mode 100644 index 4ba2eae..0000000 --- a/Carthage/Checkouts/Nimble/Tests/Nimble/objc/ObjcStringersTest.m +++ /dev/null @@ -1,31 +0,0 @@ -@import XCTest; -@import Nimble; - -@interface ObjcStringersTest : XCTestCase - -@end - -@implementation ObjcStringersTest - -- (void)testItCanStringifyArrays { - NSArray *array = @[@1, @2, @3]; - NSString *result = NMBStringify(array); - - expect(result).to(equal(@"(1, 2, 3)")); -} - -- (void)testItCanStringifyIndexSets { - NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]; - NSString *result = NMBStringify(indexSet); - - expect(result).to(equal(@"(1, 2, 3)")); -} - -- (void)testItRoundsLongDecimals { - NSNumber *num = @291.123782163; - NSString *result = NMBStringify(num); - - expect(result).to(equal(@"291.1238")); -} - -@end diff --git a/Carthage/Checkouts/Nimble/circle.yml b/Carthage/Checkouts/Nimble/circle.yml deleted file mode 100644 index 5b9e306..0000000 --- a/Carthage/Checkouts/Nimble/circle.yml +++ /dev/null @@ -1,16 +0,0 @@ -machine: - xcode: - version: "7.3" - -dependencies: - pre: - - eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)" - -test: - override: - - NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 ./test ios - - NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 ./test osx - - eval "$(swiftenv init -)"; ./test swiftpm: - environment: - SWIFTENV_ROOT: $HOME/.swiftenv - PATH: $SWIFTENV_ROOT/bin:$PATH diff --git a/Carthage/Checkouts/Nimble/script/release b/Carthage/Checkouts/Nimble/script/release deleted file mode 100755 index 62840f6..0000000 --- a/Carthage/Checkouts/Nimble/script/release +++ /dev/null @@ -1,186 +0,0 @@ -#!/usr/bin/env sh -REMOTE_BRANCH=master -POD_NAME=Nimble -PODSPEC=Nimble.podspec - -POD=${COCOAPODS:-pod} - -function help { - echo "Usage: release VERSION RELEASE_NOTES [-f]" - echo - echo "VERSION should be the version to release, should not include the 'v' prefix" - echo "RELEASE_NOTES should be a file that lists all the release notes for this version" - echo " if file does not exist, creates a git-style commit with a diff as a comment" - echo - echo "FLAGS" - echo " -f Forces override of tag" - echo - echo " Example: ./release 1.0.0-rc.2 ./release-notes.txt" - echo - echo "HINT: use 'git diff ...HEAD' to build the release notes" - echo - exit 2 -} - -function die { - echo "[ERROR] $@" - echo - exit 1 -} - -if [ $# -lt 2 ]; then - help -fi - -VERSION=$1 -RELEASE_NOTES=$2 -FORCE_TAG=$3 - -VERSION_TAG="v$VERSION" - -echo "-> Verifying Local Directory for Release" - -if [ -z "`which $POD`" ]; then - die "Cocoapods is required to produce a release. Aborting." -fi -echo " > Cocoapods is installed" - -echo " > Is this a reasonable tag?" - -echo $VERSION_TAG | grep -q "^vv" -if [ $? -eq 0 ]; then - die "This tag ($VERSION) is an incorrect format. You should remove the 'v' prefix." -fi - -echo $VERSION_TAG | grep -q -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" -if [ $? -ne 0 ]; then - die "This tag ($VERSION) is an incorrect format. It should be in 'v{MAJOR}.{MINOR}.{PATCH}(-{PRERELEASE_NAME}.{PRERELEASE_VERSION})' form." -fi - -echo " > Is this version ($VERSION) unique?" -git describe --exact-match "$VERSION_TAG" > /dev/null 2>&1 -if [ $? -eq 0 ]; then - if [ -z "$FORCE_TAG" ]; then - die "This tag ($VERSION) already exists. Aborting. Append '-f' to override" - else - echo " > NO, but force was specified." - fi -else - echo " > Yes, tag is unique" -fi - -if [ ! -f "$RELEASE_NOTES" ]; then - echo " > Failed to find $RELEASE_NOTES. Prompting editor" - RELEASE_NOTES=.release-changes - LATEST_TAG=`git for-each-ref refs/tags --sort=-refname --format="%(refname:short)" | grep -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" | ruby -e 'puts STDIN.read.split("\n").sort { |a,b| Gem::Version.new(a.gsub(/^v/, "")) <=> Gem::Version.new(b.gsub(/^v/, "")) }.last'` - echo " > Latest tag ${LATEST_TAG}" - echo "${POD_NAME} v$VERSION" > $RELEASE_NOTES - echo "================" >> $RELEASE_NOTES - echo >> $RELEASE_NOTES - echo "# Changelog from ${LATEST_TAG}..HEAD" >> $RELEASE_NOTES - git log ${LATEST_TAG}..HEAD | sed -e 's/^/# /' >> $RELEASE_NOTES - $EDITOR $RELEASE_NOTES - diff -q $RELEASE_NOTES ${RELEASE_NOTES}.backup > /dev/null 2>&1 - STATUS=$? - rm ${RELEASE_NOTES}.backup - if [ $STATUS -eq 0 ]; then - rm $RELEASE_NOTES - die "No changes in release notes file. Aborting." - fi -fi -echo " > Release notes: $RELEASE_NOTES" - -if [ ! -f "$PODSPEC" ]; then - die "Cannot find podspec: $PODSPEC. Aborting." -fi -echo " > Podspec exists" - -git config --get user.signingkey > /dev/null || { - echo "[ERROR] No PGP found to sign tag. Aborting." - echo - echo " Creating a release requires signing the tag for security purposes. This allows users to verify the git cloned tree is from a trusted source." - echo " From a security perspective, it is not considered safe to trust the commits (including Author & Signed-off fields). It is easy for any" - echo " intermediate between you and the end-users to modify the git repository." - echo - echo " While not all users may choose to verify the PGP key for tagged releases. It is a good measure to ensure 'this is an official release'" - echo " from the official maintainers." - echo - echo " If you're creating your PGP key for the first time, use RSA with at least 4096 bits." - echo - echo "Related resources:" - echo " - Configuring your system for PGP: https://git-scm.com/book/tr/v2/Git-Tools-Signing-Your-Work" - echo " - Why: http://programmers.stackexchange.com/questions/212192/what-are-the-advantages-and-disadvantages-of-cryptographically-signing-commits-a" - echo - exit 2 -} -echo " > Found PGP key for git" - -# Verify cocoapods trunk ownership -pod trunk me | grep -q "$POD_NAME" || die "You do not have access to pod repository $POD_NAME. Aborting." -echo " > Verified ownership to $POD_NAME pod" - - -echo "--- Releasing version $VERSION (tag: $VERSION_TAG)..." - -function restore_podspec { - if [ -f "${PODSPEC}.backup" ]; then - mv -f ${PODSPEC}{.backup,} - fi -} - -echo "-> Ensuring no differences to origin/$REMOTE_BRANCH" -git fetch origin || die "Failed to fetch origin" -git diff --quiet HEAD "origin/$REMOTE_BRANCH" || die "HEAD is not aligned to origin/$REMOTE_BRANCH. Cannot update version safely" - - -echo "-> Setting podspec version" -cat "$PODSPEC" | grep 's.version' | grep -q "\"$VERSION\"" -SET_PODSPEC_VERSION=$? -if [ $SET_PODSPEC_VERSION -eq 0 ]; then - echo " > Podspec already set to $VERSION. Skipping." -else - sed -i.backup "s/s.version *= *\".*\"/s.version = \"$VERSION\"/g" "$PODSPEC" || { - restore_podspec - die "Failed to update version in podspec" - } - - git add ${PODSPEC} || { restore_podspec; die "Failed to add ${PODSPEC} to INDEX"; } - git commit -m "Bumping version to $VERSION" || { restore_podspec; die "Failed to push updated version: $VERSION"; } -fi - -if [ -z "$FORCE_TAG" ]; then - echo "-> Tagging version" - git tag -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" - echo "-> Pushing tag to origin" - git push origin "$VERSION_TAG" || die "Failed to push tag '$VERSION_TAG' to origin" -else - echo "-> Tagging version (force)" - git tag -f -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" - echo "-> Pushing tag to origin (force)" - git push origin "$VERSION_TAG" -f || die "Failed to push tag '$VERSION_TAG' to origin" -fi - -if [ $SET_PODSPEC_VERSION -ne 0 ]; then - git push origin "$REMOTE_BRANCH" || die "Failed to push to origin" - echo " > Pushed version to origin" -fi - -echo -echo "---------------- Released as $VERSION_TAG ----------------" -echo - -echo -echo "Pushing to pod trunk..." - -$POD trunk push "$PODSPEC" - -echo -echo "================ Finalizing the Release ================" -echo -echo " - Opening GitHub to mark this as a release..." -echo " - Paste the contents of $RELEASE_NOTES into the release notes. Tweak for GitHub styling." -echo " - Announce!" - -open "https://github.com/Quick/Nimble/releases/new?tag=$VERSION_TAG" - -rm ${PODSPEC}.backup diff --git a/Carthage/Checkouts/Nimble/test b/Carthage/Checkouts/Nimble/test deleted file mode 100755 index d4cb253..0000000 --- a/Carthage/Checkouts/Nimble/test +++ /dev/null @@ -1,140 +0,0 @@ -#!/bin/bash - -GREEN="\033[0;32m" -CLEAR="\033[0m" - -if which xcodebuild > /dev/null; then - echo -e "Gathering ${GREEN}xcodebuild sdk versions${CLEAR}..." - BUILD_DIR=`pwd`/build - LATEST_IOS_SDK_VERSION=`xcodebuild -showsdks | grep iphonesimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` - LATEST_TVOS_SDK_VERSION=`xcodebuild -showsdks | grep appletvsimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` - LATEST_OSX_SDK_VERSION=`xcodebuild -showsdks | grep 'macosx' | cut -d ' ' -f 3 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` - BUILD_IOS_SDK_VERSION=${NIMBLE_BUILD_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION} - RUNTIME_IOS_SDK_VERSION=${NIMBLE_RUNTIME_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION} - BUILD_TVOS_SDK_VERSION=${NIMBLE_BUILD_TVOS_SDK_VERSION:-$LATEST_TVOS_SDK_VERSION} - RUNTIME_TVOS_SDK_VERSION=${NIMBLE_RUNTIME_TVOS_SDK_VERSION:-$LATEST_TVOS_SDK_VERSION} - BUILD_OSX_SDK_VERSION=${NIMBLE_BUILD_OSX_SDK_VERSION:-$LATEST_OSX_SDK_VERSION} -fi - -set -e - -function color_if_overridden { - local actual=$1 - local env_var=$2 - if [ -z "$env_var" ]; then - printf "$actual" - else - printf "$GREEN$actual$CLEAR" - fi -} - -function print_env { - echo "=== Environment ===" - echo " iOS:" - echo " Latest iOS SDK: $LATEST_IOS_SDK_VERSION" - echo " Building with iOS SDK: `color_if_overridden $BUILD_IOS_SDK_VERSION $NIMBLE_BUILD_IOS_SDK_VERSION`" - echo " Running with iOS SDK: `color_if_overridden $RUNTIME_IOS_SDK_VERSION $NIMBLE_RUNTIME_IOS_SDK_VERSION`" - echo - echo " tvOS:" - echo " Latest tvOS SDK: $LATEST_TVOS_SDK_VERSION" - echo " Building with tvOS SDK: `color_if_overridden $BUILD_TVOS_SDK_VERSION $NIMBLE_BUILD_TVOS_SDK_VERSION`" - echo " Running with tvOS SDK: `color_if_overridden $RUNTIME_TVOS_SDK_VERSION $NIMBLE_RUNTIME_TVOS_SDK_VERSION`" - echo - echo " Mac OS X:" - echo " Latest OS X SDK: $LATEST_OSX_SDK_VERSION" - echo " Building with OS X SDK: `color_if_overridden $BUILD_OSX_SDK_VERSION $NIMBLE_BUILD_OSX_SDK_VERSION`" - echo - echo "======= END =======" - echo -} - -function run { - echo -e "$GREEN==>$CLEAR $@" - "$@" -} - -function test_ios { - run osascript -e 'tell app "Simulator" to quit' - run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-iOS" -configuration "Debug" -sdk "iphonesimulator$BUILD_IOS_SDK_VERSION" -destination "name=iPad Air,OS=$RUNTIME_IOS_SDK_VERSION" build test - - run osascript -e 'tell app "Simulator" to quit' - run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-iOS" -configuration "Debug" -sdk "iphonesimulator$BUILD_IOS_SDK_VERSION" -destination "name=iPhone 5s,OS=$RUNTIME_IOS_SDK_VERSION" build test -} - -function test_tvos { - run osascript -e 'tell app "Simulator" to quit' - run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-tvOS" -configuration "Debug" -sdk "appletvsimulator$BUILD_TVOS_SDK_VERSION" -destination "name=Apple TV 1080p,OS=$RUNTIME_TVOS_SDK_VERSION" build test -} - -function test_osx { - run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-OSX" -configuration "Debug" -sdk "macosx$BUILD_OSX_SDK_VERSION" build test -} - -function test_podspec { - echo "Gathering CocoaPods installation information..." - run bundle exec pod --version - echo "Linting podspec..." - run bundle exec pod lib lint Nimble.podspec -} - -function test_swiftpm { - run swift build --clean && swift build && swift test -} - -function test() { - test_ios - test_tvos - test_osx - - if which swift-test; then - test_swiftpm - else - echo "Not testing with the Swift Package Manager because swift-test is not installed" - fi -} - -function clean { - run rm -rf ~/Library/Developer/Xcode/DerivedData\; true -} - -function help { - echo "Usage: $0 COMMANDS" - echo - echo "COMMANDS:" - echo " clean - Cleans the derived data directory of Xcode. Assumes default location" - echo " ios - Runs the tests as an iOS device" - echo " tvos - Runs the tests as an tvOS device" - echo " osx - Runs the tests on Mac OS X 10.10 (Yosemite and newer only)" - echo " podspec - Runs pod lib lint against the podspec to detect breaking changes" - echo " all - Runs the all tests of ios, tvos and osx" - echo " swiftpm - Runs the tests built by the Swift Package Manager" - echo " help - Displays this help" - echo - exit 1 -} - -function main { - print_env - for arg in $@ - do - case "$arg" in - clean) clean ;; - ios) test_ios ;; - tvos) test_tvos ;; - osx) test_osx ;; - podspec) test_podspec ;; - test) test ;; - all) test ;; - swiftpm) test_swiftpm ;; - help) help ;; - esac - done - - if [ $# -eq 0 ]; then - clean - test - fi -} - -main $@ - diff --git a/Carthage/Checkouts/Quick/.gitignore b/Carthage/Checkouts/Quick/.gitignore deleted file mode 100644 index 33d3dc9..0000000 --- a/Carthage/Checkouts/Quick/.gitignore +++ /dev/null @@ -1,65 +0,0 @@ -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## Build generated -build/ -DerivedData - -## Various settings -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata - -## Other -*.xccheckout -*.moved-aside -*.xcuserstate -*.xcscmblueprint - -## Obj-C/Swift specific -*.hmap -*.ipa - -# Swift Package Manager -# -# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. -Packages/ -.build/ - -# CocoaPods -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control -# -# Pods/ - -# Carthage -# -# Add this line if you want to avoid checking in source code from Carthage dependencies. -# Carthage/Checkouts - -Carthage/Build - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md - -fastlane/report.xml -fastlane/screenshots - -# Mac OS X -.DS_Store - -# Quick -Quick.framework.zip diff --git a/Carthage/Checkouts/Quick/.gitmodules b/Carthage/Checkouts/Quick/.gitmodules deleted file mode 100644 index cffbed0..0000000 --- a/Carthage/Checkouts/Quick/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "Externals/Nimble"] - path = Externals/Nimble - url = https://github.com/Quick/Nimble.git diff --git a/Carthage/Checkouts/Quick/.ruby-version b/Carthage/Checkouts/Quick/.ruby-version deleted file mode 100644 index bec3a35..0000000 --- a/Carthage/Checkouts/Quick/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -system diff --git a/Carthage/Checkouts/Quick/.swift-version b/Carthage/Checkouts/Quick/.swift-version deleted file mode 100644 index b814a38..0000000 --- a/Carthage/Checkouts/Quick/.swift-version +++ /dev/null @@ -1 +0,0 @@ -DEVELOPMENT-SNAPSHOT-2016-02-25-a diff --git a/Carthage/Checkouts/Quick/.travis.yml b/Carthage/Checkouts/Quick/.travis.yml deleted file mode 100644 index ee2a25a..0000000 --- a/Carthage/Checkouts/Quick/.travis.yml +++ /dev/null @@ -1,44 +0,0 @@ -osx_image: xcode7.3 -language: generic -matrix: - include: - - os: osx - env: - - PLATFORM=osx - - os: osx - env: - - PLATFORM=ios - - os: osx - env: - - PLATFORM=tvos - - os: osx - osx_image: xcode8 - env: - - PLATFORM=osx - - XCODE_ACTION="build-for-testing test-without-building" - - os: osx - osx_image: xcode8 - env: - - PLATFORM=ios - - XCODE_ACTION="build-for-testing test-without-building" - - os: osx - osx_image: xcode8 - env: - - PLATFORM=tvos - - XCODE_ACTION="build-for-testing test-without-building" - - os: osx - sudo: required - env: - - PODSPEC=1 - - os: linux - env: - - PLATFORM=linux - sudo: required - dist: trusty -install: - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./script/travis-install-osx; fi - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./script/travis-install-linux; fi - - if [[ "$PODSPEC" ]]; then sudo gem install bundler; bundle install; fi -script: - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./script/travis-script-osx; fi - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./script/travis-script-linux; fi diff --git a/Carthage/Checkouts/Quick/CONTRIBUTING.md b/Carthage/Checkouts/Quick/CONTRIBUTING.md deleted file mode 100644 index 02eafad..0000000 --- a/Carthage/Checkouts/Quick/CONTRIBUTING.md +++ /dev/null @@ -1,109 +0,0 @@ - - -**Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* - -- [Welcome to Quick!](#welcome-to-quick!) - - [Reporting Bugs](#reporting-bugs) - - [Building the Project](#building-the-project) - - [Pull Requests](#pull-requests) - - [Style Conventions](#style-conventions) - - [Core Members](#core-members) - - [Code of Conduct](#code-of-conduct) - - [Creating a Release](#creating-a-release) - - - -# Welcome to Quick! - -We're building a testing framework for a new generation of Swift and -Objective-C developers. - -Quick should be easy to use and easy to maintain. Let's keep things -simple and well-tested. - -## Reporting Bugs - -Nothing is off-limits. If you're having a problem, we want to hear about -it. - -- See a crash? File an issue. -- Code isn't compiling, but you don't know why? Sounds like you should - submit a new issue, bud. -- Went to the kitchen, only to forget why you went in the first place? - Better submit an issue. - -Be sure to include in your issue: - -- Your Xcode version (eg - Xcode 7.0.1 7A1001) -- Your version of Quick / Nimble (eg - v0.7.0 or git sha `7d0b8c21357839a8c5228863b77faecf709254a9`) -- What are the steps to reproduce this issue? -- What platform are you using? (eg - OS X, iOS, watchOS, tvOS) -- If the problem is on a UI Testing Bundle, Unit Testing Bundle, or some other target configuration -- Are you using carthage or cocoapods? - -## Building the Project - -- After cloning the repository, run `git submodule update --init` to pull the Nimble submodule. -- Use `Quick.xcworkspace` to work on Quick. The workspace includes - Nimble, which is used in Quick's tests. - -## Pull Requests - -- Nothing is trivial. Submit pull requests for anything: typos, - whitespace, you name it. -- Not all pull requests will be merged, but all will be acknowledged. If - no one has provided feedback on your request, ping one of the owners - by name. -- Make sure your pull request includes any necessary updates to the - README or other documentation. -- Be sure the unit tests for both the OS X and iOS targets of both Quick - and Nimble pass before submitting your pull request. You can run all - the iOS and OS X unit tests using `rake`. -- The `master` branch will always support the stable Xcode version. Other - branches will point to their corresponding versions they support. -- If you're making a configuration change, make sure to edit both the xcode - project and the podspec file. - -### Style Conventions - -- Indent using 4 spaces. -- Keep lines 100 characters or shorter. Break long statements into - shorter ones over multiple lines. -- In Objective-C, use `#pragma mark -` to mark public, internal, - protocol, and superclass methods. See `QuickSpec.m` for an example. - -## Core Members - -If a few of your pull requests have been merged, and you'd like a -controlling stake in the project, file an issue asking for write access -to the repository. - -Your conduct as a core member is your own responsibility, but here are -some "ground rules": - -- Feel free to push whatever you want to master, and (if you have - ownership permissions) to create any repositories you'd like. - - Ideally, however, all changes should be submitted as GitHub pull - requests. No one should merge their own pull request, unless no - other core members respond for at least a few days. - - Pull requests should be issued from personal forks. The Quick repo - should be reserved for long-running feature branches. - - If you'd like to create a new repository, it'd be nice if you created - a GitHub issue and gathered some feedback first. - -- It'd be awesome if you could review, provide feedback on, and close - issues or pull requests submitted to the project. Please provide kind, - constructive feedback. Please don't be sarcastic or snarky. - -## Creating a Release - -The process is relatively straight forward, but here's is a useful checklist for tagging: - -- Look at changes from the previously tagged release and write release notes: `git log v0.4.0...HEAD` -- Run the release script: `./script/release A.B.C release-notes-file` -- The script will prompt you to create a new [GitHub release](https://github.com/Quick/Quick/releases). - - Use the same release notes you created for the tag, but tweak up formatting for GitHub. -- Announce! diff --git a/Carthage/Checkouts/Quick/Documentation/en-us/ArrangeActAssert.md b/Carthage/Checkouts/Quick/Documentation/en-us/ArrangeActAssert.md deleted file mode 100644 index fc7915b..0000000 --- a/Carthage/Checkouts/Quick/Documentation/en-us/ArrangeActAssert.md +++ /dev/null @@ -1,220 +0,0 @@ -# Effective Tests Using XCTest: Arrange, Act, and Assert - -Whether you're using XCTest, Quick, or another testing framework, you can write -effective unit tests by following a simple pattern: - -1. Arrange -2. Act -3. Assert - -## Using Arrange, Act, and Assert - -For example, let's look at a simple class called `Banana`: - -```swift -// Banana/Banana.swift - -/** A delicious banana. Tastes better if you peel it first. */ -public class Banana { - private var isPeeled = false - - /** Peels the banana. */ - public func peel() { - isPeeled = true - } - - /** You shouldn't eat a banana unless it's been peeled. */ - public var isEdible: Bool { - return isPeeled - } -} -``` - -Let's verify the `Banana.peel()` method does what it's supposed to: - -```swift -// BananaTests/BananaTests.swift - -class BananaTests: XCTestCase { - func testPeel() { - // Arrange: Create the banana we'll be peeling. - let banana = Banana() - - // Act: Peel the banana. - banana.peel() - - // Assert: Verify that the banana is now edible. - XCTAssertTrue(banana.isEdible) - } -} -``` - -## Using Clear Test Names - -Our `testPeel()` makes sure that, if the `Banana.peel()` method ever -stops working right, we'll know. This usually happens when our application -code changes, which either means: - -1. We accidentally broke our application code, so we have to fix the application code -2. We changed how our application code works--maybe because we're adding a new - feature--so we have to change the test code - -If our tests start breaking, how do we know which one of these cases applies? It might -surprise you that **the name of the test** is our best indication. Good test names: - -1. Are clear about what is being tested. -2. Are clear about when the test should pass or fail. - -Is our `testPeel()` method clearly named? Let's make it clearer: - -```diff -// BananaTests.swift - --func testPeel() { -+func testPeel_makesTheBananaEdible() { - // Arrange: Create the banana we'll be peeling. - let banana = Banana() - - // Act: Peel the banana. - banana.peel() - - // Assert: Verify that the banana is now edible. - XCTAssertTrue(banana.isEdible) -} -``` - -The new name: - -1. Is clear about what is being tested: `testPeel` indicates it's the `Banana.peel()` method. -2. Is clear about when the test should pass: `makesTheBananaEdible` indicates the - banana is edible once the method has been called. - -## Testing Conditions - -Let's say we want to offer people bananas, using a function called `offer()`: - -```swift -// Banana/Offer.swift - -/** Given a banana, returns a string that can be used to offer someone the banana. */ -public func offer(banana: Banana) -> String { - if banana.isEdible { - return "Hey, want a banana?" - } else { - return "Hey, want me to peel this banana for you?" - } -} -``` - -Our application code does one of two things: - -1. Either it offers a banana that's already been peeled... -2. ...or it offers an unpeeled banana. - -Let's write tests for these two cases: - -```swift -// BananaTests/OfferTests.swift - -class OfferTests: XCTestCase { - func testOffer_whenTheBananaIsPeeled_offersTheBanana() { - // Arrange: Create a banana and peel it. - let banana = Banana() - banana.peel() - - // Act: Create the string used to offer the banana. - let message = offer(banana) - - // Assert: Verify it's the right string. - XCTAssertEqual(message, "Hey, want a banana?") - } - - func testOffer_whenTheBananaIsntPeeled_offersToPeelTheBanana() { - // Arrange: Create a banana. - let banana = Banana() - - // Act: Create the string used to offer the banana. - let message = offer(banana) - - // Assert: Verify it's the right string. - XCTAssertEqual(message, "Hey, want me to peel this banana for you?") - } -} -``` - -Our test names clearly indicate the **conditions** under which our tests should pass: -in the case that `whenTheBananaIsPeeled`, `offer()` should `offersTheBanana`. And if -the banana isn't peeled? Well, we have a test for that, too! - -Notice that we have one test per `if` statement in our application code. -This is a great pattern when writing tests: it makes sure every set of conditions -is tested. If one of those conditions no longer works, or needs to be changed, we'll know -exactly which test needs to be looked at. - -## Shorter "Arrange" Steps with `XCTestCase.setUp()` - -Both of our `OfferTests` tests contain the same "Arrange" code: they both -create a banana. We should move that code into a single place. Why? - -1. As-is, if we change the `Banana` initializer, we'll have to change every test that creates a banana. -2. Our test methods will be shorter--which is a good thing if (and **only if**) that makes - the tests easier to read. - -Let's move the `Banana` initialization into the `XCTestCase.setUp()` method, which is called -once before every test method. - -```diff -// OfferTests.swift - -class OfferTests: XCTestCase { -+ var banana: Banana! -+ -+ override func setUp() { -+ super.setUp() -+ banana = Banana() -+ } -+ - func testOffer_whenTheBananaIsPeeled_offersTheBanana() { -- // Arrange: Create a banana and peel it. -- let banana = Banana() -+ // Arrange: Peel the banana. - banana.peel() - - // Act: Create the string used to offer the banana. - let message = offer(banana) - - // Assert: Verify it's the right string. - XCTAssertEqual(message, "Hey, want a banana?") - } - - func testOffer_whenTheBananaIsntPeeled_offersToPeelTheBanana() { -- // Arrange: Create a banana. -- let banana = Banana() -- - // Act: Create the string used to offer the banana. - let message = offer(banana) - - // Assert: Verify it's the right string. - XCTAssertEqual(message, "Hey, want me to peel this banana for you?") - } -} -``` - -## Sharing "Arrange" Code Across Multiple Tests - -If you find yourself using the same "arrange" steps across multiple tests, -you may want to define a helper function within your test target: - -```swift -// BananaTests/BananaHelpers.swift - -internal func createNewPeeledBanana() -> Banana { - let banana = Banana() - banana.peel() - return banana -} -``` - -> Use a function to define your helpers: functions can't be subclassed, nor - can they retain any state. Subclassing and mutable state can make your tests - harder to read. diff --git a/Carthage/Checkouts/Quick/Documentation/en-us/BehavioralTesting.md b/Carthage/Checkouts/Quick/Documentation/en-us/BehavioralTesting.md deleted file mode 100644 index 02ae0c0..0000000 --- a/Carthage/Checkouts/Quick/Documentation/en-us/BehavioralTesting.md +++ /dev/null @@ -1,87 +0,0 @@ -# Don't Test Code, Instead Verify Behavior - -Tests should only fail if the application **behaves differently**. -They should test *what* the application code does, not *how* it does those things. - -- Tests that verify *what* an application does are **behavioral tests**. -- Tests that break if the application code changes, even if the behavior - remains the same, are **brittle tests**. - -Let's say we have a banana database, called `GorillaDB`. -`GorillaDB` is a key-value store for bananas. We can save bananas: - -```swift -let database = GorillaDB() -let banana = Banana() -database.save(banana: banana, key: "my-banana") -``` - -And we can restore bananas from disk later: - -```swift -let banana = database.load(key: "my-banana") -``` - -## Brittle Tests - -How can we test this behavior? One way would be to check the size of the database -after we save a banana: - -```swift -// GorillaDBTests.swift - -func testSave_savesTheBananaToTheDatabase() { - // Arrange: Create a database and get its original size. - let database = GorillaDB() - let originalSize = database.size - - // Act: Save a banana to the database. - let banana = Banana() - database.save(banana: banana, key: "test-banana") - - // Assert: The size of the database should have increased by one. - XCTAssertEqual(database.size, originalSize + 1) -} -``` - - -Imagine, however, that the source code of `GorillaDB` changes. In order to make -reading bananas from the database faster, it maintains a cache of the most frequently -used bananas. `GorillaDB.size` grows as the size of the cache grows, and our test fails: - -![](https://raw.githubusercontent.com/Quick/Assets/master/Screenshots/Screenshot_database_size_fail.png) - -## Behavioral Tests - -The key to writing behavioral tests is determining exactly what you're expecting -your application code to do. - -In the context of our `testSave_savesTheBananaToTheDatabase` test: what is the -behavior we expect when we "save" a banana to the database? "Saving" implies, to me, -that we can load it later. So instead of testing that the size of the database increases, -we should test that we can load a banana. - -```diff -// GorillaDBTests.swift - -func testSave_savesTheBananaToTheDatabase() { - // Arrange: Create a database and get its original size. - let database = GorillaDB() -- let originalSize = database.size - - // Act: Save a banana to the database. - let banana = Banana() - database.save(banana: banana, key: "test-banana") - -- // Assert: The size of the database should have increased by one. -- XCTAssertEqual(database.size, originalSize + 1) -+ // Assert: The bananas saved to and loaded from the database should be the same. -+ XCTAssertEqual(database.load(key: "test-banana"), banana) -} -``` - -The key to writing behavioral tests is asking: - -- What exactly should this application code do? -- Is my test verifying *only* that behavior? - Or could it fail due to other aspects of how the code works? diff --git a/Carthage/Checkouts/Quick/Documentation/en-us/ConfiguringQuick.md b/Carthage/Checkouts/Quick/Documentation/en-us/ConfiguringQuick.md deleted file mode 100644 index 919d4de..0000000 --- a/Carthage/Checkouts/Quick/Documentation/en-us/ConfiguringQuick.md +++ /dev/null @@ -1,103 +0,0 @@ -# Configuring How Quick Behaves - -You can customize how Quick behaves by subclassing `QuickConfiguration` and -overriding the `QuickConfiguration.Type.configure()` class method: - -```swift -// Swift - -import Quick - -class ProjectDataTestConfiguration: QuickConfiguration { - override class func configure(configuration: Configuration) { - // ...set options on the configuration object here. - } -} -``` - -```objc -// Objective-C - -@import Quick; - -QuickConfigurationBegin(ProjectDataTestConfiguration) - -+ (void)configure:(Configuration *configuration) { - // ...set options on the configuration object here. -} - -QuickConfigurationEnd -``` - -Projects may include several configurations. Quick does not make any -guarantee about the order in which those configurations are executed. - -## Adding Global `beforeEach` and `afterEach` Closures - -Using `QuickConfiguration.beforeEach` and `QuickConfiguration.afterEach`, you -can specify closures to be run before or after *every* example in a test suite: - -```swift -// Swift - -import Quick -import Sea - -class FinConfiguration: QuickConfiguration { - override class func configure(configuration: Configuration) { - configuration.beforeEach { - Dorsal.sharedFin().height = 0 - } - } -} -``` - -```objc -// Objective-C - -@import Quick; -#import "Dorsal.h" - -QuickConfigurationBegin(FinConfiguration) - -+ (void)configure:(Configuration *)configuration { - [configuration beforeEach:^{ - [Dorsal sharedFin].height = 0; - }]; -} - -QuickConfigurationEnd -``` - -In addition, Quick allows you to access metadata regarding the current -example being run: - -```swift -// Swift - -import Quick - -class SeaConfiguration: QuickConfiguration { - override class func configure(configuration: Configuration) { - configuration.beforeEach { exampleMetadata in - // ...use the example metadata object to access the current example name, and more. - } - } -} -``` - -```objc -// Objective-C - -@import Quick; - -QuickConfigurationBegin(SeaConfiguration) - -+ (void)configure:(Configuration *)configuration { - [configuration beforeEachWithMetadata:^(ExampleMetadata *data) { - // ...use the example metadata object to access the current example name, and more. - }]; -} - -QuickConfigurationEnd -``` diff --git a/Carthage/Checkouts/Quick/Documentation/en-us/InstallingFileTemplates.md b/Carthage/Checkouts/Quick/Documentation/en-us/InstallingFileTemplates.md deleted file mode 100644 index 3de82c5..0000000 --- a/Carthage/Checkouts/Quick/Documentation/en-us/InstallingFileTemplates.md +++ /dev/null @@ -1,28 +0,0 @@ -# Installing Quick File Templates - -The Quick repository includes file templates for both Swift and -Objective-C specs. - -## 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 -``` diff --git a/Carthage/Checkouts/Quick/Documentation/en-us/InstallingQuick.md b/Carthage/Checkouts/Quick/Documentation/en-us/InstallingQuick.md deleted file mode 100644 index 061f0fd..0000000 --- a/Carthage/Checkouts/Quick/Documentation/en-us/InstallingQuick.md +++ /dev/null @@ -1,174 +0,0 @@ -# Installing Quick - -> **If you're using Xcode 7.1,** use the latest version of Quick--`v0.9.0` at the time of writing. -> New releases are developed on the `swift-2.0` branch. - - - -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. - -There are three recommended ways of linking Quick to your tests: - -1. [Git Submodules](#git-submodules) -2. [CocoaPods](#cocoapods) -3. [Carthage](#carthage) -4. [Swift Package Manager (experimental)](#swift-package-manager) - -Choose one and follow the instructions below. Once you've completed them, -you should be able to `import Quick` from within files in your test target. - -## Git Submodules - -To link Quick and Nimble using Git submodules: - -1. Add submodule for Quick. -2. If you don't already have a `.xcworkspace` for your project, create one. ([Here's how](https://developer.apple.com/library/ios/recipes/xcode_help-structure_navigator/articles/Adding_an_Existing_Project_to_a_Workspace.html)) -3. Add `Quick.xcodeproj` to your project's `.xcworkspace`. -4. Add `Nimble.xcodeproj` to your project's `.xcworkspace`. It exists in `path/to/Quick/Externals/Nimble`. By adding Nimble from Quick's dependencies (as opposed to adding directly as a submodule), you'll ensure that you're using the correct version of Nimble for whatever version of Quick you're using. -5. Link `Quick.framework` and `Nimble.framework` in your test target's - "Link Binary with Libraries" build phase. - -First, if you don't already have one, create a directory for your Git submodules. -Let's assume you have a directory named `Vendor`. - -**Step One:** Download Quick and Nimble as Git submodules: - -```sh -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 -``` - -**Step Two:** Add the `Quick.xcodeproj` and `Nimble.xcodeproj` files downloaded above to -your project's `.xcworkspace`. For example, this is `Guanaco.xcworkspace`, the -workspace for a project that is tested using Quick and Nimble: - -![](http://f.cl.ly/items/2b2R0e1h09003u2f0Z3U/Screen%20Shot%202015-02-27%20at%202.19.37%20PM.png) - -**Step Three:** 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`, and you're done! - -**Updating the Submodules:** If you ever want to update the Quick -or Nimble submodules to latest version, enter the Quick directory -and pull from the master repository: - -```sh -cd /path/to/your/project/Vendor/Quick -git checkout master -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 -cd /path/to/your/project -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). - -## CocoaPods - -First, update CocoaPods to Version 0.36.0 or newer, which is necessary to install CocoaPods using Swift. - -Then, add Quick and Nimble to your Podfile. Additionally, the ```use_frameworks!``` line is necessary for using Swift in CocoaPods: - -```rb - -# Podfile - -use_frameworks! - -def testing_pods - pod 'Quick' - pod 'Nimble' -end - -target 'MyTests' do - testing_pods -end - -target 'MyUITests' do - testing_pods -end -``` - -Finally, download and link Quick and Nimble to your tests: - -```sh -pod install -``` - -### Using Swift 1.2? - -The latest release of Quick (0.4.0) is for Swift 2 (Xcode 7), but the latest Nimble (1.0.0) is for Swift 1.2 (Xcode 6). - -If you want Xcode 6 do: - -```sh -target 'MyTests' do - use_frameworks! - pod 'Quick', '~>0.3.0' - pod 'Nimble', '~>1.0.0' -end -``` - -## [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). - -## [Swift Package Manager](https://github.com/apple/swift-package-manager) -With the advent of the [swift.org](https://swift.org) open-source project, Swift now has an official, though nascent, package manager tool. Notably, this provides the possibility of using Quick on non-Apple platforms for the first time. Initial steps have been taken to allow using Quick to test projects using the Swift Package Manager, although frequent breakage is expected at this point since the tool is still under heavy development. - -Until further documentation has been written, the following repository may be useful as an example of how Quick can be declared as a dependency in a `Package.swift` file for SwiftPM: - -https://github.com/Quick/QuickOnLinuxExample - -### (Not Recommended) Running Quick Specs on a Physical iOS Device - -In order to run specs written in Quick on device, you need to add `Quick.framework` and -`Nimble.framework` as `Embedded Binaries` to the `Host Application` of the -test target. After adding a framework as an embedded binary, Xcode will -automatically link the host app against the framework. - -![](http://indiedev.kapsi.fi/images/embed-in-host.png) diff --git a/Carthage/Checkouts/Quick/Documentation/en-us/MoreResources.md b/Carthage/Checkouts/Quick/Documentation/en-us/MoreResources.md deleted file mode 100644 index 65d7eba..0000000 --- a/Carthage/Checkouts/Quick/Documentation/en-us/MoreResources.md +++ /dev/null @@ -1,28 +0,0 @@ -# More Resources - -## Examples of Quick Specs - -Quick is used by many companies, open-source projects, and individuals, -including [GitHub](https://github.com/github) and -[ReactiveCocoa](https://github.com/ReactiveCocoa). For examples, check out: - -- 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 - -## More on Unit Testing for OS X and iOS Apps - -- **[Quality Coding](http://qualitycoding.org/)**: - A blog on iOS development that focuses on unit testing. -- **[OCMock Tutorials](http://ocmock.org/support/)**: - Use OCMock when you need "fake objects" in your tests. -- **[Nocilla: Stunning HTTP stubbing for iOS and Mac OS X](https://github.com/luisobo/Nocilla)**: - Use this library to test code that sends requests to, and receives responses from, the Internet. -- **[Pivotal Labs: Writing Beautiful Specs with Jasmine Custom Matchers](http://pivotallabs.com/writing-beautiful-specs-jasmine-custom-matchers/)**: - See [the Nimble documentation](https://github.com/Quick/Nimble) for instructions on how to write - custom matchers in Nimble. diff --git a/Carthage/Checkouts/Quick/Documentation/en-us/NimbleAssertions.md b/Carthage/Checkouts/Quick/Documentation/en-us/NimbleAssertions.md deleted file mode 100644 index 3b31ac3..0000000 --- a/Carthage/Checkouts/Quick/Documentation/en-us/NimbleAssertions.md +++ /dev/null @@ -1,106 +0,0 @@ -# Clearer Tests Using Nimble Assertions - -When code doesn't work the way it's supposed to, unit tests should make it -**clear** exactly what's wrong. - -Take the following function which, given a bunch of monkeys, only returns -the silly monkeys in the bunch: - -```swift -public func silliest(monkeys: [Monkey]) -> [Monkey] { - return monkeys.filter { $0.silliness == .VerySilly } -} -``` - -Now let's say we have a unit test for this function: - -```swift -func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { - let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) - let carl = Monkey(name: "Carl", silliness: .NotSilly) - let jane = Monkey(name: "Jane", silliness: .VerySilly) - let sillyMonkeys = silliest([kiki, carl, jane]) - XCTAssertTrue(contains(sillyMonkeys, kiki)) -} -``` - -The test fails with the following failure message: - -``` -XCTAssertTrue failed -``` - -![](http://f.cl.ly/items/1G17453p47090y30203d/Screen%20Shot%202015-02-26%20at%209.08.27%20AM.png) - -The failure message leaves a lot to be desired. It leaves us wondering, -"OK, so something that should have been true was false--but what?" -That confusion slows us down, since we now have to spend time deciphering test code. - -## Better Failure Messages, Part 1: Manually Providing `XCTAssert` Failure Messages - -`XCTAssert` assertions allow us to specify a failure message of our own, which certainly helps: - -```diff -func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { - let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) - let carl = Monkey(name: "Carl", silliness: .NotSilly) - let jane = Monkey(name: "Jane", silliness: .VerySilly) - let sillyMonkeys = silliest([kiki, carl, jane]) -- XCTAssertTrue(contains(sillyMonkeys, kiki)) -+ XCTAssertTrue(contains(sillyMonkeys, kiki), "Expected sillyMonkeys to contain 'Kiki'") -} -``` - -But we have to write our own failure message. - -## Better Failure Messages, Part 2: Nimble Failure Messages - -Nimble makes your test assertions, and their failure messages, easier to read: - -```diff -func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { - let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) - let carl = Monkey(name: "Carl", silliness: .NotSilly) - let jane = Monkey(name: "Jane", silliness: .VerySilly) - let sillyMonkeys = silliest([kiki, carl, jane]) -- XCTAssertTrue(contains(sillyMonkeys, kiki), "Expected sillyMonkeys to contain 'Kiki'") -+ expect(sillyMonkeys).to(contain(kiki)) -} -``` - -We don't have to write our own failure message--the one provided by Nimble -is already very readable: - -``` -expected to contain , - got <[Monkey(name: Jane, silliness: VerySilly)]> -``` - -![](http://f.cl.ly/items/3N2e3g2K3W123b1L1J0G/Screen%20Shot%202015-02-26%20at%2011.27.02%20AM.png) - -The failure message makes it clear what's wrong: we were expecting `kiki` to be included -in the result of `silliest()`, but the result only contains `jane`. Now that we know -exactly what's wrong, it's easy to fix the issue: - -```diff -public func silliest(monkeys: [Monkey]) -> [Monkey] { -- return monkeys.filter { $0.silliness == .VerySilly } -+ return monkeys.filter { $0.silliness == .VerySilly || $0.silliness == .ExtremelySilly } -} -``` - -Nimble provides many different kind of assertions, each with great failure -messages. And unlike `XCTAssert`, you don't have to type your own failure message -every time. - -For the full list of Nimble assertions, check out the [Nimble README](https://github.com/Quick/Nimble). -Below is just a sample, to whet your appetite: - -```swift -expect(1 + 1).to(equal(2)) -expect(1.2).to(beCloseTo(1.1, within: 0.1)) -expect(3) > 2 -expect("seahorse").to(contain("sea")) -expect(["Atlantic", "Pacific"]).toNot(contain("Mississippi")) -expect(ocean.isClean).toEventually(beTruthy()) -``` diff --git a/Carthage/Checkouts/Quick/Documentation/en-us/QuickExamplesAndGroups.md b/Carthage/Checkouts/Quick/Documentation/en-us/QuickExamplesAndGroups.md deleted file mode 100644 index e9f0550..0000000 --- a/Carthage/Checkouts/Quick/Documentation/en-us/QuickExamplesAndGroups.md +++ /dev/null @@ -1,491 +0,0 @@ -# Organized Tests with Quick Examples and Example Groups - -Quick uses a special syntax to define **examples** and **example groups**. - -In *[Effective Tests Using XCTest: Arrange, Act, and Assert](ArrangeActAssert.md)*, -we learned that a good test method name is crucial--when a test starts failing, it's -the best way to determine whether we have to fix the application code or update the test. - -Quick examples and example groups serve two purposes: - -1. They encourage you to write descriptive test names. -2. They greatly simplify the test code in the "arrange" step of your tests. - -## Examples Using `it` - -Examples, defined with the `it` function, use assertions to demonstrate -how code should behave. These are like test methods in XCTest. - -`it` takes two parameters: the name of the example, and a closure. -The examples below specify how the `Sea.Dolphin` class should behave. -A new dolphin should be smart and friendly: - -```swift -// Swift - -import Quick -import Nimble -import Sea - -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 Quick; -@import Nimble; - -QuickSpecBegin(DolphinSpec) - -it(@"is friendly", ^{ - expect(@([[Dolphin new] isFriendly])).to(beTruthy()); -}); - -it(@"is smart", ^{ - expect(@([[Dolphin new] isSmart])).to(beTruthy()); -}); - -QuickSpecEnd -``` - -Use descriptions to make it clear what your examples are testing. -Descriptions can be of any length and 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 Quick; -@import Nimble; - -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 -``` - -When these two examples are run in Xcode, they'll display the -description from the `describe` and `it` functions: - -1. `DolphinSpec.a_dolphin_its_click_is_loud` -2. `DolphinSpec.a_dolphin_its_click_has_a_high_frequency` - -Again, it's clear what each of these examples is testing. - -### 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 Quick; -@import Nimble; - -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 Quick; -@import Nimble; - -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 -``` - -Strictly speaking, the `context` keyword is a synonym for `describe`, -but thoughtful use will make your spec easier to understand. - -### Test Readability: Quick and XCTest - -In [Effective Tests Using XCTest: Arrange, Act, and Assert](ArrangeActAssert.md), -we looked at how one test per condition was a great way to organize test code. -In XCTest, that leads to long test method names: - -```swift -func testDolphin_click_whenTheDolphinIsNearSomethingInteresting_isEmittedThreeTimes() { - // ... -} -``` - -Using Quick, the conditions are much easier to read, and we can perform setup -for each example group: - -```swift -describe("a dolphin") { - describe("its click") { - context("when the dolphin is near something interesting") { - it("is emitted three times") { - // ... - } - } - } -} -``` - -## Temporarily Disabling Examples or Groups - -You can temporarily disable examples or example groups that don't pass yet. -The names of the examples will be printed out along with the test results, -but they won't be run. - -You can disable an example or group by prepending `x`: - -```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 examples 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("is loud") { - // ...only this focused example will be run. -} - -it("has a high frequency") { - // ...this example is not focused, and will not be run. -} - -fcontext("when the dolphin is near something interesting") { - // ...examples in this group are also focused, so they'll be run. -} -``` - -```objc -fit(@"is loud", { - // ...only this focused example will be run. -}); - -it(@"has a high frequency", ^{ - // ...this example is not focused, and will not be run. -}); - -fcontext(@"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 Quick; - -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. - -## Accessing Metadata for the Current Example - -There may be some cases in which you'd like the know the name of the example -that is currently being run, or how many have been run so far. Quick provides -access to this metadata in `beforeEach` and `afterEach` closures. - -```swift -beforeEach { exampleMetadata in - println("Example number \(exampleMetadata.exampleIndex) is about to be run.") -} - -afterEach { exampleMetadata in - println("Example number \(exampleMetadata.exampleIndex) has run.") -} -``` - -```objc -beforeEachWithMetadata(^(ExampleMetadata *exampleMetadata){ - NSLog(@"Example number %l is about to be run.", (long)exampleMetadata.exampleIndex); -}); - -afterEachWithMetadata(^(ExampleMetadata *exampleMetadata){ - NSLog(@"Example number %l has run.", (long)exampleMetadata.exampleIndex); -}); -``` diff --git a/Carthage/Checkouts/Quick/Documentation/en-us/QuickInObjectiveC.md b/Carthage/Checkouts/Quick/Documentation/en-us/QuickInObjectiveC.md deleted file mode 100644 index 3fb6bdc..0000000 --- a/Carthage/Checkouts/Quick/Documentation/en-us/QuickInObjectiveC.md +++ /dev/null @@ -1,57 +0,0 @@ -# Using Quick in Objective-C - -Quick works equally well in both Swift and Objective-C. - -There are two notes to keep in mind when using Quick in Objective-C, -however, which are described below. - -## The Optional Shorthand Syntax - -Importing Quick in an Objective-C file defines macros named `it` and -`itShouldBehaveLike`, as well as functions like `context()` and `describe()`. - -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 Quick; - -QuickSpecBegin(DolphinSpec) -// ... -QuickSpecEnd -``` - -You must define the `QUICK_DISABLE_SHORT_SYNTAX` macro *before* -importing the Quick header. - -Alternatively, you may define the macro in your test target's build configuration: - -![](http://d.twobitlabs.com/VFEamhvixX.png) - -## 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 your test target does not contain -*at least one* Swift file. - -Without at least one Swift file, 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. diff --git a/Carthage/Checkouts/Quick/Documentation/en-us/README.md b/Carthage/Checkouts/Quick/Documentation/en-us/README.md deleted file mode 100644 index 56d5589..0000000 --- a/Carthage/Checkouts/Quick/Documentation/en-us/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# Documentation - -Quick helps you verify how your Swift and Objective-C programs behave. -Doing so effectively isn't just a matter of knowing how to use Quick, -however. The guides in this directory can help you write -effective tests--not just using Quick, but even XCTest or other testing -frameworks. - -Each guide covers a particular topic. If you're completely new to unit -testing, consider reading them in the order they're introduced below: - -- **[Setting Up Tests in Your Xcode Project](SettingUpYourXcodeProject.md)**: - Read this if you're having trouble using your application code from within - your test files. -- **[Effective Tests Using XCTest: Arrange, Act, and Assert](ArrangeActAssert.md)**: - Read this to learn how to write `XCTestCase` tests that will help you write - code faster and more effectively. -- **[Don't Test Code, Instead Verify Behavior](BehavioralTesting.md)**: - Read this to learn what kinds of tests speed you up, and which ones will only end up - slowing you down. -- **[Clearer Tests Using Nimble Assertions](NimbleAssertions.md)**: - Read this to learn how to use Nimble to generate better failure messages. - Better failure messages help you move faster, by spending less time figuring out why - a test failed. -- **[Organized Tests with Quick Examples and Example Groups](QuickExamplesAndGroups.md)**: - Read this to learn how Quick can help you write even more effective tests, using - *examples* and *example groups*. -- **[Testing OS X and iOS Applications](TestingApps.md)**: - Read this to learn more about testing code that uses the AppKit and UIKit frameworks. -- **[Reducing Test Boilerplate with Shared Assertions](SharedExamples.md)**: - Read this to learn how to share sets of assertions among your tests. -- **[Configuring How Quick Behaves](ConfiguringQuick.md)**: - Read this to learn how you can change how Quick behaves when running your test suite. -- **[Using Quick in Objective-C](QuickInObjectiveC.md)**: - Read this if you experience trouble using Quick in Objective-C. -- **[Installing Quick](InstallingQuick.md)**: - Read this for instructions on how to add Quick to your project, using - Git submodules, CocoaPods, Carthage, or the Swift Package Manager. -- **[Installing Quick File Templates](InstallingFileTemplates.md)**: - Read this to learn how to install file templates that make writing Quick specs faster. -- **[More Resources](MoreResources.md)** - A list of additional resources on OS X and iOS testing. diff --git a/Carthage/Checkouts/Quick/Documentation/en-us/SettingUpYourXcodeProject.md b/Carthage/Checkouts/Quick/Documentation/en-us/SettingUpYourXcodeProject.md deleted file mode 100644 index b2ba8e1..0000000 --- a/Carthage/Checkouts/Quick/Documentation/en-us/SettingUpYourXcodeProject.md +++ /dev/null @@ -1,83 +0,0 @@ -# Setting Up Tests in Your Xcode Project - -With the exception of the Command Line Tool project type, when you create a new project in Xcode 7, a unit test target is included -by default. [See specific instructions for a Command Line Tool Project](#setting-up-a-test-target-for-a-command-line-tool-project). To write unit tests, you'll need to be able to use your main -target's code from within your test target. - -## Testing Swift Code Using Swift - -In order to test code written in Swift, you'll need to do two things: - -1. Set "defines module" in your `.xcodeproj` to `YES`. - - * To do this in Xcode: Choose your project, then "Build Settings" header, then "Defines Modules" line, then select "Yes". - -2. `@testable import YourAppModuleName` in your unit tests. This will expose Any `public` and `internal` (the default) - symbols to your tests. `private` symbols are still unavailable. - -```swift -// MyAppTests.swift - -import XCTest -@testable import MyModule - -class MyClassTests: XCTestCase { - // ... -} -``` - -> 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 Objective-C Code Using Swift - -1. Add a bridging header to your test target. -2. In the bridging header, import the file containing the code you'd like to test. - -```objc -// MyAppTests-BridgingHeader.h - -#import "MyClass.h" -``` - -You can now use the code from `MyClass.h` in your Swift test files. - -## Testing Swift Code Using Objective-C - -1. Bridge Swift classes and functions you'd like to test to Objective-C by - using the `@objc` attribute. -2. Import your module's Swift headers in your unit tests. - -```objc -@import XCTest; -#import "MyModule-Swift.h" - -@interface MyClassTests: XCTestCase -// ... -@end -``` - -## Testing Objective-C Code Using Objective-C - -Import the file defining the code you'd like to test from within your test target: - -```objc -// MyAppTests.m - -@import XCTest; -#import "MyClass.h" - -@interface MyClassTests: XCTestCase -// ... -@end -``` - -### Setting Up a Test Target for a Command Line Tool Project - -1. Add a target to your project in the project pane. -2. Select "OS X Unit Testing Bundle". -3. Edit the scheme of your main target. -4. Select the "Test" node, click the "+" under the "Info" heading, and select - your testing bundle. diff --git a/Carthage/Checkouts/Quick/Documentation/en-us/SharedExamples.md b/Carthage/Checkouts/Quick/Documentation/en-us/SharedExamples.md deleted file mode 100644 index 1e3e7dd..0000000 --- a/Carthage/Checkouts/Quick/Documentation/en-us/SharedExamples.md +++ /dev/null @@ -1,125 +0,0 @@ -# Reducing Test Boilerplate with Shared Assertions - -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! - beforeEach { - mackerel = Mackerel() - } - - itBehavesLike("something edible") { ["edible": mackerel] } - } -} - -class CodSpec: QuickSpec { - override func spec() { - var cod: Cod! - beforeEach { - cod = Cod() - } - - itBehavesLike("something edible") { ["edible": cod] } - } -} -``` - -```objc -// Objective-C - -@import Quick; -@import Nimble; - -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 `sharedExamples` closures that take no parameters. This -might be useful when testing some sort of global state: - -```swift -// Swift - -import Quick - -sharedExamples("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. diff --git a/Carthage/Checkouts/Quick/Documentation/en-us/TestingApps.md b/Carthage/Checkouts/Quick/Documentation/en-us/TestingApps.md deleted file mode 100644 index 4f5ce1d..0000000 --- a/Carthage/Checkouts/Quick/Documentation/en-us/TestingApps.md +++ /dev/null @@ -1,179 +0,0 @@ -# Testing OS X and iOS Applications - -*[Setting Up Tests in Your Xcode Project](SettingUpYourXcodeProject.md)* -covers everything you need to know to test any Objective-C or Swift function or class. -In this section, we'll go over a few additional hints for testing -classes like `UIViewController` subclasses. - -> You can see a short lightning talk covering most of these topics - [here](https://vimeo.com/115671189#t=37m50s) (the talk begins at 37'50"). - -## Triggering `UIViewController` Lifecycle Events - -Normally, UIKit triggers lifecycle events for your view controller as it's -presented within the app. When testing a `UIViewController`, however, you'll -need to trigger these yourself. You can do so in one of three ways: - -1. Accessing `UIViewController.view`, which triggers things like `UIViewController.viewDidLoad()`. -2. Use `UIViewController.beginAppearanceTransition()` to trigger most lifecycle events. -3. Directly calling methods like `UIViewController.viewDidLoad()` or `UIViewController.viewWillAppear()`. - -```swift -// Swift - -import Quick -import Nimble -import BananaApp - -class BananaViewControllerSpec: QuickSpec { - override func spec() { - var viewController: BananaViewController! - beforeEach { - viewController = BananaViewController() - } - - describe(".viewDidLoad()") { - beforeEach { - // Method #1: Access the view to trigger BananaViewController.viewDidLoad(). - let _ = viewController.view - } - - it("sets the banana count label to zero") { - // Since the label is only initialized when the view is loaded, this - // would fail if we didn't access the view in the `beforeEach` above. - expect(viewController.bananaCountLabel.text).to(equal("0")) - } - } - - describe("the view") { - beforeEach { - // Method #2: Triggers .viewDidLoad(), .viewWillAppear(), and .viewDidAppear() events. - viewController.beginAppearanceTransition(true, animated: false) - viewController.endAppearanceTransition() - } - // ... - } - - describe(".viewWillDisappear()") { - beforeEach { - // Method #3: Directly call the lifecycle event. - viewController.viewWillDisappear(false) - } - // ... - } - } -} -``` - -```objc -// Objective-C - -@import Quick; -@import Nimble; -#import "BananaViewController.h" - -QuickSpecBegin(BananaViewControllerSpec) - -__block BananaViewController *viewController = nil; -beforeEach(^{ - viewController = [[BananaViewController alloc] init]; -}); - -describe(@"-viewDidLoad", ^{ - beforeEach(^{ - // Method #1: Access the view to trigger -[BananaViewController viewDidLoad]. - [viewController view]; - }); - - it(@"sets the banana count label to zero", ^{ - // Since the label is only initialized when the view is loaded, this - // would fail if we didn't access the view in the `beforeEach` above. - expect(viewController.bananaCountLabel.text).to(equal(@"0")) - }); -}); - -describe(@"the view", ^{ - beforeEach(^{ - // Method #2: Triggers .viewDidLoad(), .viewWillAppear(), and .viewDidAppear() events. - [viewController beginAppearanceTransition:YES animated:NO]; - [viewController endAppearanceTransition]; - }); - // ... -}); - -describe(@"-viewWillDisappear", ^{ - beforeEach(^{ - // Method #3: Directly call the lifecycle event. - [viewController viewWillDisappear:NO]; - }); - // ... -}); - -QuickSpecEnd -``` - -## Initializing View Controllers Defined in Storyboards - -To initialize view controllers defined in a storyboard, you'll need to assign -a **Storyboard ID** to the view controller: - -![](http://f.cl.ly/items/2X2G381K1h1l2B2Q0g3L/Screen%20Shot%202015-02-27%20at%2011.58.06%20AM.png) - -Once you've done so, you can instantiate the view controller from within your tests: - -```swift -// Swift - -var viewController: BananaViewController! -beforeEach { - // 1. Instantiate the storyboard. By default, it's name is "Main.storyboard". - // You'll need to use a different string here if the name of your storyboard is different. - let storyboard = UIStoryboard(name: "Main", bundle: nil) - // 2. Use the storyboard to instantiate the view controller. - viewController = - storyboard.instantiateViewControllerWithIdentifier( - "BananaViewControllerID") as! BananaViewController -} -``` - -```objc -// Objective-C - -__block BananaViewController *viewController = nil; -beforeEach(^{ - // 1. Instantiate the storyboard. By default, it's name is "Main.storyboard". - // You'll need to use a different string here if the name of your storyboard is different. - UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; - // 2. Use the storyboard to instantiate the view controller. - viewController = [storyboard instantiateViewControllerWithIdentifier:@"BananaViewControllerID"]; -}); -``` - -## Triggering UIControl Events Like Button Taps - -Buttons and other UIKit classes inherit from `UIControl`, which defines methods -that allow us to send control events, like button taps, programmatically. -To test behavior that occurs when a button is tapped, you can write: - -```swift -// Swift - -describe("the 'more bananas' button") { - it("increments the banana count label when tapped") { - viewController.moreButton.sendActionsForControlEvents( - UIControlEvents.TouchUpInside) - expect(viewController.bananaCountLabel.text).to(equal("1")) - } -} -``` - -```objc -// Objective-C - -describe(@"the 'more bananas' button", ^{ - it(@"increments the banana count label when tapped", ^{ - [viewController.moreButton sendActionsForControlEvents:UIControlEventTouchUpInside]; - expect(viewController.bananaCountLabel.text).to(equal(@"1")); - }); -}); -``` diff --git a/Carthage/Checkouts/Quick/Documentation/ja/ArrangeActAssert.md b/Carthage/Checkouts/Quick/Documentation/ja/ArrangeActAssert.md deleted file mode 100644 index 24c18da..0000000 --- a/Carthage/Checkouts/Quick/Documentation/ja/ArrangeActAssert.md +++ /dev/null @@ -1,212 +0,0 @@ -# Effective Tests Using XCTest: Arrange, Act, and Assert - -XCTest や Quick に限らず、テストフレームワークを使用する際、このパターンに従うことで効率的なユニットテストを書くことができます。 - -1. Arrange(環境構築) -2. Act(実行) -3. Assert(動作確認) - -## パターンに従ってテストを書く - -例として Banana クラスを用意します。 - -```swift -// Banana/Banana.swift - -/** A delicious banana. Tastes better if you peel it first. */ -public class Banana { - private var isPeeled = false - - /** Peels the banana. */ - public func peel() { - isPeeled = true - } - - /** You shouldn't eat a banana unless it's been peeled. */ - public var isEdible: Bool { - return isPeeled - } -} -``` - -ここでは `Banana.peel()` のテストをしてみましょう。このメソッドの期待する振る舞いはこのようになります。 - -```swift -// BananaTests/BananaTests.swift - -class BananaTests: XCTestCase { - func testPeel() { - // Arrange: Create the banana we'll be peeling. - let banana = Banana() - - // Act: Peel the banana. - banana.peel() - - // Assert: Verify that the banana is now edible. - XCTAssertTrue(banana.isEdible) - } -} -``` - -## 簡潔なテスト名を用いる - -この `testPeel()` テストのおかげで `Banana.peel()` が正しく動作しない場合、すぐ気付くことができます。 -我々のアプリケーションコードを変更することで正しく動作しないケース(テストが失敗するケース)はしばしば起こります。 -テストが失敗する場合は下記どちらかのケースになります。 - -1. 間違えてアプリケーションコードを壊してしまっているため、直す必要がある -2. アプリケーションコードは期待したとおりに動いているが、もともと期待した機能が変わっているためテストコードを直す必要がある - -もしテストが失敗した場合、どちらのケースに当てはまる判断する必要が出てきます。そのためテスト名が分かりやすいことが重要になります。 - -良いテスト名とは、 - -1. 何をテストしているか明確であること -2. どのような時にテストがパスするか・失敗するか明確であること - -例に挙げた `testPeel()` は良いテスト名でしょうか?分かりやすくしてみましょう。 - -```diff -// BananaTests.swift - --func testPeel() { -+func testPeel_makesTheBananaEdible() { - // Arrange: Create the banana we'll be peeling. - let banana = Banana() - - // Act: Peel the banana. - banana.peel() - - // Assert: Verify that the banana is now edible. - XCTAssertTrue(banana.isEdible) -} -``` - -新しいテスト名は、 - -1. 何をテストしているか明確である: `testPeel` は `Banana.peel()` メソッドをテストしてることを示す。 -2. どのような時にテストがパスするか明確である: `makesTheBananaEdible` はバナナが食べられるか(edible)どうかをテストしていることを示す。 - -## テスト時の条件 - -人々がバナナを欲しい時、`offer()` というメソッドを使います。 - -```swift -// Banana/Offer.swift - -/** Given a banana, returns a string that can be used to offer someone the banana. */ -public func offer(banana: Banana) -> String { - if banana.isEdible { - return "Hey, want a banana?" - } else { - return "Hey, want me to peel this banana for you?" - } -} -``` - -私達のアプリケーションコードは2つのうちどちらかを実行します: - -1. 食べられる(すでに皮がむかれている)バナナを注文するか -2. まだ食べられない(すでに皮がむかれている)バナナを注文するか - -両方のケースをテストしてみましょう。 - -```swift -// BananaTests/OfferTests.swift - -class OfferTests: XCTestCase { - func testOffer_whenTheBananaIsPeeled_offersTheBanana() { - // Arrange: Create a banana and peel it. - let banana = Banana() - banana.peel() - - // Act: Create the string used to offer the banana. - let message = offer(banana) - - // Assert: Verify it's the right string. - XCTAssertEqual(message, "Hey, want a banana?") - } - - func testOffer_whenTheBananaIsntPeeled_offersToPeelTheBanana() { - // Arrange: Create a banana. - let banana = Banana() - - // Act: Create the string used to offer the banana. - let message = offer(banana) - - // Assert: Verify it's the right string. - XCTAssertEqual(message, "Hey, want me to peel this banana for you?") - } -} -``` - -私達のテスト名は'どのような条件でテストをパスするか'を明確に表しています。 -`whenTheBananaIsPeeled`, `offer()` のケースでは `offersTheBanana` となるべきです。またバナナの皮がむかれていない場合は? -ここでは両方共テストしています。 - -ここで大事なことはアプリケーションコード内の各if文に対してそれぞれ1つのテストを持っていることです。 -これはテストを書く際の重要なアプローチです。このアプローチでは全ての条件(if文)に関してテストされていることを保証します。 -テストのうちどれか1つがでも失敗するようになったらコードの見直しをする必要があります。テスト名が分かりやすいとすぐにチェックすべき箇所が分かります。 - -## `XCTestCase.setUp()`を用いて簡潔に環境構築をする - -`OfferTests` の2つのテストのどちらにも同じ"環境構築"のコードが入っています。 -どちらのテストでも banana を作っています。このコードは一箇所にまとめるべきです。なぜでしょう? - -1. そのままにしておく場合、もし `Banana` の生成方法が変わったら, 私たちは全てのテストを修正しないといけなくなります。 -2. テストコードが短くなり、テストの可読性が向上します。 - -Banana の生成方法を `XCTestCase.setUp()` の中に移しましょう。`XCTestCase.setUp()` は各テストの実行前に一度呼び出されます。 - -```diff -// OfferTests.swift - -class OfferTests: XCTestCase { -+ var banana: Banana! -+ -+ override func setUp() { -+ super.setUp() -+ banana = Banana() -+ } -+ - func testOffer_whenTheBananaIsPeeled_offersTheBanana() { -- // Arrange: Create a banana and peel it. -- let banana = Banana() -+ // Arrange: Peel the banana. - banana.peel() - - // Act: Create the string used to offer the banana. - let message = offer(banana) - - // Assert: Verify it's the right string. - XCTAssertEqual(message, "Hey, want a banana?") - } - - func testOffer_whenTheBananaIsntPeeled_offersToPeelTheBanana() { -- // Arrange: Create a banana. -- let banana = Banana() -- - // Act: Create the string used to offer the banana. - let message = offer(banana) - - // Assert: Verify it's the right string. - XCTAssertEqual(message, "Hey, want me to peel this banana for you?") - } -} -``` - -## 複数のテストにまたがって環境構築を共有する - -もし複数のテストにまたがって同じ環境構築のコードを使っている部分があれば、 test target 内に'ヘルパー関数'を定義しましょう。 - -```swift -// BananaTests/BananaHelpers.swift - -internal func createNewPeeledBanana() -> Banana { - let banana = Banana() - banana.peel() - return banana -} -``` - -> 共通操作を定義するのに関数を使いましょう。関数は継承できず、状態を保持することができません。継承や状態を持たせる場合、テストの可読性が落ちてしまいます。 diff --git a/Carthage/Checkouts/Quick/Documentation/ja/BehavioralTesting.md b/Carthage/Checkouts/Quick/Documentation/ja/BehavioralTesting.md deleted file mode 100644 index 360ce8b..0000000 --- a/Carthage/Checkouts/Quick/Documentation/ja/BehavioralTesting.md +++ /dev/null @@ -1,81 +0,0 @@ -# コードをテストせず、動作を確認する - -テストはアプリケーションが**期待と異なる動作** をした時のみ失敗するようにすべきです。 -アプリケーションコードが *何を* したかをテストすべきで、*どのように* したかをテストすべきではありません。 - -- アプリケーションが *何を* したかを確認するテストは **動作テスト(behavioral tests)** といいます。 -- アプリケーションの動作が変わっていなくても、コードを変更すると失敗するようになるテストは **脆弱なテスト(brittle tests)** といいます。 - -ここで `GorillaDB` というバナナのデータベースを用意します。 -`GorillaDB`は Key-Value 型のデータベースでバナナを保存することができます。 - -```swift -let database = GorillaDB() -let banana = Banana() -database.save(banana: banana, key: "my-banana") -``` - -そしてバナナをディスクから取り出すことができます。 - -```swift -let banana = database.load(key: "my-banana") -``` - -## 脆弱なテスト(Brittle Tests) - -どのようにして動作をテストするのでしょう?一つの方法としてここではバナナを保存した後にバナナのデータベースのサイズをチェックします。 - -```swift -// GorillaDBTests.swift - -func testSave_savesTheBananaToTheDatabase() { - // Arrange: Create a database and get its original size. - let database = GorillaDB() - let originalSize = database.size - - // Act: Save a banana to the database. - let banana = Banana() - database.save(banana: banana, key: "test-banana") - - // Assert: The size of the database should have increased by one. - XCTAssertEqual(database.size, originalSize + 1) -} -``` - -ここで `GorillaDB` のソースコードを変更したとします。データベースからの読み出しを速くするためにもっとも頻繁に使用するバナナをキャッシュに保持するようにします。 -`GorillaDB.size` はキャッシュのサイズに合わせて大きくなります。この場合ディスクに保存しなくなるため上記のテストは失敗します。 - -![](https://raw.githubusercontent.com/Quick/Assets/master/Screenshots/Screenshot_database_size_fail.png) - -## 動作テスト(Behavioral Tests) - -動作のテストの重要なポイントは アプリケーションコードに期待する動作を明確にすることです。 - -`testSave_savesTheBananaToTheDatabase` というテストで期待する動作は バナナをデータベースに "保存する" ことでしょうか? -"保存する"というのは 後から読み出すことができる、という意味です。そのためデータベースのサイズが大きくなることをテストするのではなく、 -バナナを読みだすことができるかをテストすべきです。 - - -```diff -// GorillaDBTests.swift - -func testSave_savesTheBananaToTheDatabase() { - // Arrange: Create a database and get its original size. - let database = GorillaDB() -- let originalSize = database.size - - // Act: Save a banana to the database. - let banana = Banana() - database.save(banana: banana, key: "test-banana") - -- // Assert: The size of the database should have increased by one. -- XCTAssertEqual(database.size, originalSize + 1) -+ // Assert: The bananas saved to and loaded from the database should be the same. -+ XCTAssertEqual(database.load(key: "test-banana"), banana) -} -``` - -動作テストを書く際の重要なポイント: - -- アプリケーションコードが何をすべきか明確にしているか? -- テストが *動作のみ* をテストしているか?コードの動作が他の要因で意図しない動きにならないか。 diff --git a/Carthage/Checkouts/Quick/Documentation/ja/ConfiguringQuick.md b/Carthage/Checkouts/Quick/Documentation/ja/ConfiguringQuick.md deleted file mode 100644 index 718823c..0000000 --- a/Carthage/Checkouts/Quick/Documentation/ja/ConfiguringQuick.md +++ /dev/null @@ -1,101 +0,0 @@ -# Quickの挙動をカスタマイズしましょう - -QuickConfiguration を継承したクラスを作成し、`QuickConfiguration.Type.configure()` をオーバーライドすることで Quick の挙動をカスラマイズすることができます。 - -```swift -// Swift - -import Quick - -class ProjectDataTestConfiguration: QuickConfiguration { - override class func configure(configuration: Configuration) { - // ...set options on the configuration object here. - } -} -``` - -```objc -// Objective-C - -@import Quick; - -QuickConfigurationBegin(ProjectDataTestConfiguration) - -+ (void)configure:(Configuration *configuration) { - // ...set options on the configuration object here. -} - -QuickConfigurationEnd -``` - -一つのプロジェクトで複数の configuration を持つこともできますが -どの順に configuration が実行されるか保証されません。 - -## テスト全体で使う `beforeEach` と `afterEach` を追加する - -`QuickConfiguration.beforeEach` と `QuickConfiguration.afterEach` を使うと -テストスイート内の各テストの実行前・実行後に走らせる処理を記述することができます。 - -```swift -// Swift - -import Quick -import Sea - -class FinConfiguration: QuickConfiguration { - override class func configure(configuration: Configuration) { - configuration.beforeEach { - Dorsal.sharedFin().height = 0 - } - } -} -``` - -```objc -// Objective-C - -@import Quick; -#import "Dorsal.h" - -QuickConfigurationBegin(FinConfiguration) - -+ (void)configure:(Configuration *)configuration { - [configuration beforeEach:^{ - [Dorsal sharedFin].height = 0; - }]; -} - -QuickConfigurationEnd -``` - -さらに現在実行中のテストに関するメタデータを取得することもできます。 - -```swift -// Swift - -import Quick - -class SeaConfiguration: QuickConfiguration { - override class func configure(configuration: Configuration) { - configuration.beforeEach { exampleMetadata in - // ...use the example metadata object to access the current example name, and more. - } - } -} -``` - -```objc -// Objective-C - -@import Quick; - -QuickConfigurationBegin(SeaConfiguration) - -+ (void)configure:(Configuration *)configuration { - [configuration beforeEachWithMetadata:^(ExampleMetadata *data) { - // ...use the example metadata object to access the current example name, and more. - }]; -} - -QuickConfigurationEnd -``` diff --git a/Carthage/Checkouts/Quick/Documentation/ja/InstallingFileTemplates.md b/Carthage/Checkouts/Quick/Documentation/ja/InstallingFileTemplates.md deleted file mode 100644 index e251b38..0000000 --- a/Carthage/Checkouts/Quick/Documentation/ja/InstallingFileTemplates.md +++ /dev/null @@ -1,26 +0,0 @@ -# Quickファイル・テンプレートのインストール方法: - -Quick のリポジトリには Swift, Objective-C の両方で使用できるテンプレートが含まれています。 - -## Alcatraz - -Quick のテンプレートは Xcode のパッケージマネージャーの [Alcatraz](https://github.com/supermarin/Alcatraz) 経由でインストールできます。 -パッケージマネージャーから検索してみてください。 - -![](http://f.cl.ly/items/3T3q0G1j0b2t1V0M0T04/Screen%20Shot%202014-06-27%20at%202.01.10%20PM.png) - -## Rakefile から手動でインストールする - -手動でインストールすることもできます。 -リポジトリを clone して rake task の `templates:install` を実行してください。 - -```sh -$ git clone git@github.com:Quick/Quick.git -$ rake templates:install -``` - -アンインストールも簡単です、下記コマンドを実行してください。 - -```sh -$ rake templates:uninstall -``` diff --git a/Carthage/Checkouts/Quick/Documentation/ja/InstallingQuick.md b/Carthage/Checkouts/Quick/Documentation/ja/InstallingQuick.md deleted file mode 100644 index f130d75..0000000 --- a/Carthage/Checkouts/Quick/Documentation/ja/InstallingQuick.md +++ /dev/null @@ -1,152 +0,0 @@ -# Quickのインストール方法 - -> **もし Xcode 7.1 を使用していたら** 現時点で最新バージョンの Quick--`v0.9.0` を使用してください -> 最新のリリースは `swift-2.0` branch で開発されています。 - -Quick は examples(テスト) and example groups(テストグループ)の文法を提供します。 -Nimble は `expect(...).to` の文法を提供します。 -テストでは両方を使ってもいいですし、どちらか片方を使う、ということもできます。 - -Quick をテストに組み込むには3つの方法があります。 - -1. [Git Submodules](#git-submodules) -2. [CocoaPods](#cocoapods) -3. [Carthage](#carthage) - -下記のインストール手順の中からどれか選択してインストールを進めてください。 -インストール完了後、テストターゲット内のファイルで Quick を使用(`import Quick`)できるようになります。 - -## Git Submodules - -Git submodules を使って Quick と Nimble をリンクします。手順の流れとしては下記の通りです。 - -1. Quick を submodule として追加. -2. プロジェクトで`.xcworkspace`を使っていなければ作成してください。 ([こちらを参照](https://developer.apple.com/library/ios/recipes/xcode_help-structure_navigator/articles/Adding_an_Existing_Project_to_a_Workspace.html)) -3. `Quick.xcodeproj` をプロジェクトの`.xcworkspace`に追加してください。 -4. `Nimble.xcodeproj` をプロジェクトの`.xcworkspace`に追加してください。 `Nimble.xcodeproj` は `path/to/Quick/Externals/Nimble` にあります。 Quick が依存している Niimble を追加することで Quick のバージョンと Nimble のバージョンを合わせられます。 - -5. `Quick.framework` と `Nimble.framework` を BuildPhase の "Link Binary with Libraries" でリンクします。 - -もしまだ git submodules 用のディレクトリを作っていなかったら、まず始めにディレクトリを作成します。 -`Vendor` という名前のディレクトリを用意しましょう。 - -**Step One:** Quick と Nimble を Git submodules としてダウンロードする - -```sh -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 -``` - -**Step Two:** `Quick.xcodeproj` と `Nimble.xcodeproj` をプロジェクトの `.xcworkspace` に追加してください。 -例として `Guanaco.xcworkspace` という workspace に Quick と Nimble を追加します。 - -![](http://f.cl.ly/items/2b2R0e1h09003u2f0Z3U/Screen%20Shot%202015-02-27%20at%202.19.37%20PM.png) - -**Step Three:** build phase の `Link Binary with Libraries` に `Quick.framework` を追加してください。 -2種類の `Quick.frameworks` が表示されますが 1 つは OS X 用で、もう 1 つが iOS 用です。 - -![](http://cl.ly/image/2L0G0H1a173C/Screen%20Shot%202014-06-08%20at%204.27.48%20AM.png) - -`Nimble.framework` も同様に追加してください。これで完了です! - -**Submodules をアップデートする:** Quick と Nimble を最新バージョンにアップデートしたい場合は Quick ディレクトリに入って master リポジトリから pull してください。 - -```sh -cd /path/to/your/project/Vendor/Quick -git checkout master -git pull --rebase origin master -``` - -あなたのプロジェクトの Git リポジトリは submodule の変更もトラッキングしているので Quick submodules の更新を commit しておきます。 - -```sh -cd /path/to/your/project -git commit -m "Updated Quick submodule" -``` - -**Quick Submodule を含んだ リポジトリを git clone する:** 他の開発者があなたのリポジトリを clone したあと、submodules を同様に pull してくる必要があります。`git submodule update` コマンドを実行することで pull できます。 - -```sh -git submodule update --init --recursive -``` - -git submodules に詳細な情報は[こちら](http://git-scm.com/book/en/Git-Tools-Submodules). - -## CocoaPods - -CocoaPods でインストールする場合、バージョンは 0.36.0 以降である必要(CocoaPods が Swift をサポートしているバージョン)があります。 - -Podfile に Quick と Nimble を追加して下さい。 Swift では ```use_frameworks!``` も必要です。 - -```rb - -# Podfile - -use_frameworks! - -def testing_pods - pod 'Quick', '~> 0.9.0' - pod 'Nimble', '3.0.0' -end - -target 'MyTests' do - testing_pods -end - -target 'MyUITests' do - testing_pods -end -``` - -その後 pod install でダウンロード、リンクします。 - -```sh -pod install -``` - -### Swift 1.2 で使う - -Quick の最新版(0.4.0)は Swift 2 (Xcode 7) 用ですが、Nimble の最新版(1.0.0) は Swift 1.2 (Xcode 6) 用です。 - -もし Xcode6 で使いたい場合は下記のようにバージョン指定してください。 - -```sh -target 'MyTests' do - use_frameworks! - pod 'Quick', '~>0.3.0' - pod 'Nimble', '~>1.0.0' -end -``` - -## [Carthage](https://github.com/Carthage/Carthage) - -テストターゲットは "Embedded Binaries" section がないので framework はターゲットの "Link Binary With Libraries" に追加する必要があります。 build phase の "Copy Files" も同様にターゲットの framework destination を指定して下さい。 - - > Carthage は dynamic frameworks をビルドするので code signing identity に有効なものを設定しておく必要があります。 - -1. Quick を [`Cartfile.private`](https://github.com/Carthage/Carthage/blob/master/Documentation/Artifacts.md#cartfileprivate) に追加してください。 - - ``` - github "Quick/Quick" - github "Quick/Nimble" - ``` - -2. `carthage update` を実行してください。 -3. `Carthage/Build/[platform]/` ディレクトリから Quick と Nimble をテストターゲットの "Link Binary With Libraries" に追加してください。 - ![](http://i.imgur.com/pBkDDk5.png) - -4. テストターゲットの build phase で "New Copy Files Phase" を選択してください。 - ![](http://i.imgur.com/jZATIjQ.png) - -5. "Destination" を "Frameworks" に設定して、2つの framework を追加してください。 - ![](http://i.imgur.com/rpnyWGH.png) - -Carthage の dependency の管理方法はこの方法だけではありません。 -詳細な情報はこちらを参照してください [Carthage documentation](https://github.com/Carthage/Carthage/blob/master/README.md) 。 - -### (非推奨) 実機で Quick のテストを走らせる - -Quick で書かれたテストを実機で走らせるためには `Quick.framework` と `Nimble.framework` を `Embedded Binaries` としてテストターゲットの `ホストアプリケーション` に追加されます。 Embedded binary として framework を追加すると Xcode が自動的にホストアプリケーションにリンクしてしまいます。 - -![](http://indiedev.kapsi.fi/images/embed-in-host.png) diff --git a/Carthage/Checkouts/Quick/Documentation/ja/MoreResources.md b/Carthage/Checkouts/Quick/Documentation/ja/MoreResources.md deleted file mode 100644 index 996f2df..0000000 --- a/Carthage/Checkouts/Quick/Documentation/ja/MoreResources.md +++ /dev/null @@ -1,27 +0,0 @@ -# その他の参考資料 - -## Quick のテストのサンプル - -Quick は[GitHub](https://github.com/github)や[ReactiveCocoa](https://github.com/ReactiveCocoa)を含む多くの企業、OSS プロジェクト、個人で利用されています。 - -下記リポジトリを参考にしてみてください。 - -- 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/Moya/Moya -- https://github.com/nerdyc/Squeal -- https://github.com/pepibumur/SugarRecord - -## OS X と iOS Apps のテストに関する参考資料 - -- **[Quality Coding](http://qualitycoding.org/)**: - ユニットテストにフォーカスした iOS 開発に関するブログ。 -- **[OCMock Tutorials](http://ocmock.org/support/)**: - テストでモックが必要な時に使用する OCMock のチュートリアル。 -- **[Nocilla: Stunning HTTP stubbing for iOS and Mac OS X](https://github.com/luisobo/Nocilla)**: - 通信を行うコードをテストする時はこのライブラリを使用して下さい。 -- **[Pivotal Labs: Writing Beautiful Specs with Jasmine Custom Matchers](http://pivotallabs.com/writing-beautiful-specs-jasmine-custom-matchers/)**: - Nimble の matcher の書き方に関するドキュメントはこちら([the Nimble documentation](https://github.com/Quick/Nimble)) diff --git a/Carthage/Checkouts/Quick/Documentation/ja/NimbleAssertions.md b/Carthage/Checkouts/Quick/Documentation/ja/NimbleAssertions.md deleted file mode 100644 index 1562b6c..0000000 --- a/Carthage/Checkouts/Quick/Documentation/ja/NimbleAssertions.md +++ /dev/null @@ -1,100 +0,0 @@ -# Nimble Assertions を使ってテストをより簡潔に - -テストが期待した通りに動作しない時、ユニットテストは **何が問題か** を明確にすべきです。 - -次の関数はサルの集団から馬鹿なサルだけを取得します。 - -```swift -public func silliest(monkeys: [Monkey]) -> [Monkey] { - return monkeys.filter { $0.silliness == .VerySilly } -} -``` - -ここでこの関数に対するテストを書いてみましょう。 - -```swift -func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { - let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) - let carl = Monkey(name: "Carl", silliness: .NotSilly) - let jane = Monkey(name: "Jane", silliness: .VerySilly) - let sillyMonkeys = silliest([kiki, carl, jane]) - XCTAssertTrue(contains(sillyMonkeys, kiki)) -} -``` - -このテストは下記のメッセージとともに失敗します。 - -``` -XCTAssertTrue failed -``` - -![](http://f.cl.ly/items/1G17453p47090y30203d/Screen%20Shot%202015-02-26%20at%209.08.27%20AM.png) - -失敗した時は多くの情報を残すことが望ましいです。このメッセージのままではよく分かりません。 -true や false だけではそれがなにか分かりません。このままではテストコードから原因を見つけるまでに時間がかかってしまいます。 - -## 良い失敗メッセージを残す: Part 1: XCTAssert に手動でメッセージを渡す - -`XCTAssert` は失敗時にメッセージを指定することができます。 - -```diff -func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { - let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) - let carl = Monkey(name: "Carl", silliness: .NotSilly) - let jane = Monkey(name: "Jane", silliness: .VerySilly) - let sillyMonkeys = silliest([kiki, carl, jane]) -- XCTAssertTrue(contains(sillyMonkeys, kiki)) -+ XCTAssertTrue(contains(sillyMonkeys, kiki), "Expected sillyMonkeys to contain 'Kiki'") -} -``` - -しかし`XCTAssert`では自分でメッセージを指定しないといけません。 - -## 良い失敗メッセージを残す: Part 2: Nimble Failure Messages を使う - -Nimble は Assert, 失敗時のメッセージを読みやすくしてくれます。 - -```diff -func testSilliest_whenMonkeysContainSillyMonkeys_theyreIncludedInTheResult() { - let kiki = Monkey(name: "Kiki", silliness: .ExtremelySilly) - let carl = Monkey(name: "Carl", silliness: .NotSilly) - let jane = Monkey(name: "Jane", silliness: .VerySilly) - let sillyMonkeys = silliest([kiki, carl, jane]) -- XCTAssertTrue(contains(sillyMonkeys, kiki), "Expected sillyMonkeys to contain 'Kiki'") -+ expect(sillyMonkeys).to(contain(kiki)) -} -``` - -Nimble では自分でメッセージを指定しなくても Nimble がとても読みやすいメッセージを返してくれます。 - -``` -expected to contain , - got <[Monkey(name: Jane, silliness: VerySilly)]> -``` - -![](http://f.cl.ly/items/3N2e3g2K3W123b1L1J0G/Screen%20Shot%202015-02-26%20at%2011.27.02%20AM.png) - -失敗メッセージは何が問題かを明確にします:ここでは `kiki` が `silliest()` の戻り値に含まれることを期待していますが -このテストでは 'jane' しか含まれていません。Nimble からのメッセージで何が問題かが分かりやすく伝えられるので、簡単に直すことができます。 - -```diff -public func silliest(monkeys: [Monkey]) -> [Monkey] { -- return monkeys.filter { $0.silliness == .VerySilly } -+ return monkeys.filter { $0.silliness == .VerySilly || $0.silliness == .ExtremelySilly } -} -``` - -Nimble は具体的な失敗メッセージを返してくれる多くの種類の Assertion を提供します。 -`XCTAssert` と違って毎回自分でメッセージを指定することはありません。 - -Nimble の全ての assertion はこちらで確認できます: [Nimble README](https://github.com/Quick/Nimble) 。 -下記に幾つかの例を示します。 - -```swift -expect(1 + 1).to(equal(2)) -expect(1.2).to(beCloseTo(1.1, within: 0.1)) -expect(3) > 2 -expect("seahorse").to(contain("sea")) -expect(["Atlantic", "Pacific"]).toNot(contain("Mississippi")) -expect(ocean.isClean).toEventually(beTruthy()) -``` diff --git a/Carthage/Checkouts/Quick/Documentation/ja/QuickExamplesAndGroups.md b/Carthage/Checkouts/Quick/Documentation/ja/QuickExamplesAndGroups.md deleted file mode 100644 index 65b25fa..0000000 --- a/Carthage/Checkouts/Quick/Documentation/ja/QuickExamplesAndGroups.md +++ /dev/null @@ -1,477 +0,0 @@ -# QuickのExamplesとExample Groupsで、たくさんのテストでも整理整頓 - -Quick では **examples** と **example groups** という特別な文法があります。 - -*[XCTestで役に立つテストを書く方法:Arrange(環境構築), Act(実行), and Assert(動作確認)](ArrangeActAssert.md)* では, -良いテスト名をつけることがとても重要だということを学びました。 -テストが失敗した時、テスト名はアプリケーションコードを直すべきかテストを修正すべきかを判断する際の重要な材料になります。 - -Quick の examples(テスト) と example groups(テストグループ) は二つの役に立ちます。 - -1. 記述的なテスト名を書くためことをサポートします -2. テスト中の "環境構築" 部分におけるコードを簡略化します - -## Examples の `it` - -Examples は 'it' という「コードがどのように動作すべきかを宣言する」関数を持ちます。 -これは XCTest の test methods のようなものです。 - -'it' 関数は2つのパラメータ、example の名前と closure です。 -下記のテストでは `Sea.Dolphin` クラスがどのように動作すべきかを記述しています。 -この example では「新しく生成された Dolphin は smart で friendly であるべき」と書いています。 - -```swift -// Swift - -import Quick -import Nimble -import Sea - -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 Quick; -@import Nimble; - -QuickSpecBegin(DolphinSpec) - -it(@"is friendly", ^{ - expect(@([[Dolphin new] isFriendly])).to(beTruthy()); -}); - -it(@"is smart", ^{ - expect(@([[Dolphin new] isSmart])).to(beTruthy()); -}); - -QuickSpecEnd -``` - -Examples が何をテストしているかを明確にするために Description を使います。 -Description は文字数制限がなくどの文字でも(絵文字さえも!)使うことができます。 -:v: :sunglasses: - -## Example Groups の `describe` と `context` - -Example groups では Example のグルーピングができ、 setup と teardown のコードを共有できます。 - -### `describe` を使ってクラスと関数について記述する - -`Dolphin` クラスの `click` 関数の動作を記述する際に、 -言い換えると関数が動作していることをテストする際に、 -複数の 'it' example を `describe` を用いてグルーピングすることができます。 -似ている examples をまとめることで可読性が向上します。 - -```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 Quick; -@import Nimble; - -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 -``` - -Xcode でこれらの examples を実行すると`describe` と `it` の記述内容も表示されます。上記のテストの場合、下記のような出力になります。 - -1. `DolphinSpec.a_dolphin_its_click_is_loud` -2. `DolphinSpec.a_dolphin_its_click_has_a_high_frequency` - -それぞれの Example が何をテストしているかが明確ですね。 - -### `beforeEach` と `afterEach` を使って Setup/Teardown のコードを共有する - -Example groups はテストの内容をただ分かりやすくするだけでなく同一グループ内のsetup/teardownコードを共有することができます。 - -下記の例では`its click`の Example group のテストを実行する前に `beforeEach`を使って新しい Dolphin のインスタンスを生成しています。 -各 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 Quick; -@import Nimble; - -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 -``` - -この例では setup を共有することはあまりメリットがないように見えるかもしれませんが -複数の複雑なオブジェクトを生成する時などコード量を節約することができます。 - -それぞれの Example を実行した後に実行したいコードについては`afterEach`を使います。 - -### 'context' を使ってある条件での動作を記述する - -例の Dolphins(イルカ達) はエコーロケーションのために カチッと音を立てます('click ' 関数を呼び出します)。 -イルカ達は特に興味のあるものに近づく時、それが何かを調べるために連続してエコーロケーション('click' 関数を呼び出します)を行います。 - -このシナリオにおいてテストが 異なる状況において click 関数の動作は異なる ということを表す必要があります。 - -基本的にイルカは一度音を鳴らすだけですが、イルカ達が興味があるものが近くにあると連続して音を鳴らします。 - -この状況について 'context' 関数を使って表します。ある 'context' では通常のケースで、もう一方の'context'ではイルカが興味あるものに近づいているケースです。 - -```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 Quick; -@import Nimble; - -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 -``` - -厳密には `context` キーワードは `describe`と同じですがテストを理解しやすくなるので使い分けるとよいです。 - -### テストの可読性: Quick と XCTest - -*[XCTestで役に立つテストを書く方法:Arrange(環境構築), Act(実行), and Assert(動作確認)](ArrangeActAssert.md)*で各条件についてそれぞれテストを用意するのがテストを書く際の重要な方法と述べましたが -このアプローチで XCTest でテストを書くとテスト名が長くなってしまいます。 - -```swift -func testDolphin_click_whenTheDolphinIsNearSomethingInteresting_isEmittedThreeTimes() { - // ... -} -``` - -Quick を使うと条件について読みやすく、しかもそれぞれの Example group について環境構築が効率的に行えます。 - -```swift -describe("a dolphin") { - describe("its click") { - context("when the dolphin is near something interesting") { - it("is emitted three times") { - // ... - } - } - } -} -``` - -## 一時的に Examples や Example Groups を無効にする - -通っていない Example を一時的に無効にすることもできます。 -Example や Example Groups の先頭に 'x' をつけると無効になります。 -Examples の名前がテスト結果の中に出力されますがテストは実行されなくなります。 - - -```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. -}); -``` - -## 指定した Examples だけ一時的に実行する - -一部の Example だけ実行できると便利なこともあります。 -そのような時は実行したい Example を 'fit' 関数を用いて指定します。 -特定の Example group だけ実行したい時は`fdescribe` か `fcontext` を記述します。 -※もともと書いてあるテストコードの先頭に 'f' を追記するだけです。 - -```swift -fit("is loud") { - // ...only this focused example will be run. -} - -it("has a high frequency") { - // ...this example is not focused, and will not be run. -} - -fcontext("when the dolphin is near something interesting") { - // ...examples in this group are also focused, so they'll be run. -} -``` - -```objc -fit(@"is loud", { - // ...only this focused example will be run. -}); - -it(@"has a high frequency", ^{ - // ...this example is not focused, and will not be run. -}); - -fcontext(@"when the dolphin is near something interesting", ^{ - // ...examples in this group are also focused, so they'll be run. -}); -``` - -## `beforeSuite` と `afterSuite` を使ってテスト全体に対する Setup/Teardown を行う - -テストの環境構築の中にはどの Example よりも先に、または最後に実行したいものがある場合もあります。 -このような時は `beforeSuite` か `afterSuite` を使います。 - -下記の例では 全ての Example が実行される前に一度だけ海の全ての生物のデータベースが生成され、全ての Exmample が実行された後にデータベースを削除しています。 - -```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 Quick; - -QuickSpecBegin(DolphinSpec) - -beforeSuite(^{ - [OceanDatabase createDatabase:@"test.db"]; - [OceanDatabase connectToDatabase:@"test.db"]; -}); - -afterSuite(^{ - [OceanDatabase teardownDatabase:@"test.db"]; -}); - -describe(@"a dolphin", ^{ - // ... -}); - -QuickSpecEnd -``` - -`beforeSuite` and `afterSuite` は必要な数だけ定義することができます。 -全ての `beforeSuite` の closure は全てのテストが実行される前に実行され、 -全ての `afterSuite` の closure は全てのテストが実行された後に実行されます。 - -複数の `beforeSuite`(`afterSuite`) の closure を記述した場合、これらの実行順序は記述した順序で実行されるかは保証されません。 - -## 実行中の Example でメタデータにアクセスする - -実行中の Example の中で、Example名を知りたいケース、これまでに何件の Example を実行したかを知りたいケースがあるかもしれません。 -Quick ではこれらの情報に `beforeEach` と `afterEach` の closure の中からアクセスすることができます。 - -```swift -beforeEach { exampleMetadata in - println("Example number \(exampleMetadata.exampleIndex) is about to be run.") -} - -afterEach { exampleMetadata in - println("Example number \(exampleMetadata.exampleIndex) has run.") -} -``` - -```objc -beforeEachWithMetadata(^(ExampleMetadata *exampleMetadata){ - NSLog(@"Example number %l is about to be run.", (long)exampleMetadata.exampleIndex); -}); - -afterEachWithMetadata(^(ExampleMetadata *exampleMetadata){ - NSLog(@"Example number %l has run.", (long)exampleMetadata.exampleIndex); -}); -``` diff --git a/Carthage/Checkouts/Quick/Documentation/ja/QuickInObjectiveC.md b/Carthage/Checkouts/Quick/Documentation/ja/QuickInObjectiveC.md deleted file mode 100644 index c51474f..0000000 --- a/Carthage/Checkouts/Quick/Documentation/ja/QuickInObjectiveC.md +++ /dev/null @@ -1,49 +0,0 @@ -# Objective-C で Quick を使う - -Quick は Swift でも Objective-C でも問題なく動作します。 - -ですが、Objective-C で Quick を使う場合、2点気を付けておきべきことがあります。 - -## 簡略記法 - -Objective-C で Quick を import すると 'it' と `itShouldBehaveLike` というマクロが定義されます。 -また、`context()` and `describe()`といった関数も同様に定義されます。 - -もしプロジェクトですでに同じ名前のシンボルを定義していた場合、重複のためビルドエラーになります。 -その場合は下記のように`QUICK_DISABLE_SHORT_SYNTAX`を定義してこの機能を無効にしてください。 - -```objc -#define QUICK_DISABLE_SHORT_SYNTAX 1 - -@import Quick; - -QuickSpecBegin(DolphinSpec) -// ... -QuickSpecEnd -``` - -`QUICK_DISABLE_SHORT_SYNTAX`マクロは Quick ヘッダを import する前に定義する必要があります。 - - -## Swift のファイルを テストターゲットに含める - -テストターゲットの中に Swift のファイルが含まれていないと Swift stlib が リンクされないため Quick が正しく実行されません。 - -Swift のファイルが含まれていないと下記のようなエラーが発生します。 - -``` -*** 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: -修正するためには `SwiftSpec.swift` という名前の空のファイルをテストターゲットに追加してください。 - -```swift -// SwiftSpec.swift - -import Quick -``` - -> この問題に関する詳細情報はこちら https://github.com/Quick/Quick/issues/164. diff --git a/Carthage/Checkouts/Quick/Documentation/ja/README.md b/Carthage/Checkouts/Quick/Documentation/ja/README.md deleted file mode 100644 index 97c0f7c..0000000 --- a/Carthage/Checkouts/Quick/Documentation/ja/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# テストの書き方、Quickの使い方 - -Quickでテストを書くと、SwiftとObjective-Cで書かれたプログラムがどう動作しているか楽に確認できます。 - -ところが、有用なテストはQuickを使わなくても書けます。 -役に立つテストが書けるようになるには、Quickのようなフレームワークの使い方を覚える必要はありません。 - -このディレクトリにあるファイルは、QuickかXCTestかを問わず、 -「役に立つ」テストとは何か、そしてどうやってそういったテストが書けるか、 -それを拙文ながら説明しようとしています。 - -目次: - -(テストについて事前知識がまったくない方は、順に読んでいくことをオススメします。) - -- **[Xcodeでテストを用意しましょう](SettingUpYourXcodeProject.md)**: - アプリのコードがテスト・ファイルから参照できない場合や、 - その他スムーズにテストが動かない場合はこのファイルを読み返すといいかもしれません。 -- **[XCTestで役に立つテストを書く方法:Arrange(環境構築), Act(実行), and Assert(動作確認)](ArrangeActAssert.md)**: - 役に立つテストを書くための基本中の基本。これさえ覚えれば、 - XCTestを使ってあなたも正確に動作するコードをすばやく書けるようになります。 -- **[コードをテストするのではなく、動作の確認をしましょう](BehavioralTesting.md)**: - 同じ「テスト」でも、開発を進めやすくするテストと、邪魔ばかりするテストとがあります。 - 見分ける方法は、このファイルを読めば分かります。 -- **[Nimbleのassertでテストをより読みやすくしましょう](NimbleAssertions.md)**: - Nimbleを使って、テストが失敗したときわかりやすいエラーメッセージを出すようにしましょう。 - わかりやすいメッセージで、テストがなぜ失敗したのかが一瞬でわかって開発の速度があがります。 -- **[QuickのExamplesとExample Groupsで、たくさんのテストでも整理整頓](QuickExamplesAndGroups.md)**: - Quickを使う大きなメリットのひとつはexamplesとexample groupsです。 - これでより簡潔にたくさんのテストが書けるようになります。 -- **[OS XとiOSアプリのテスト](TestingApps.md)**: - AppKitとUIKitを使ったコードをどうやってテストできるか説明します。 -- **[assertの共有でボイラープレートコードをなくしましょう](SharedExamples.md)**: - どうやってassertを共有できるか、なぜそうするのが望ましいのか説明します。 -- **[Quickの挙動をカスタマイズしましょう](ConfiguringQuick.md)**: - Quickがテストを実行するときの挙動をどうやって変えられるか説明します。 -- **[Objective-CでQuickを使う方法・注意点](QuickInObjectiveC.md)**: - QuickをObjective-Cで使ったときに思わぬ不具合・トラブルがあった場合、 - これを読んでください。 -- **[Quickのインストール方法](InstallingQuick.md)**: - あなたのプロジェクトにQuickを導入する方法を説明します。Git submodules、 - CocoaPods、Carthage、全部サポートしています! -- **[Quickファイル・テンプレートのインストール方法](InstallingFileTemplates.md)**: - Quickテストをすばやく作成するためのファイル・テンプレートをインストールする方法を説明します。 -- **[その他の参考資料](MoreResources.md)** - OS X・iOSのテストに関しての資料集を用意しています。 diff --git a/Carthage/Checkouts/Quick/Documentation/ja/SettingUpYourXcodeProject.md b/Carthage/Checkouts/Quick/Documentation/ja/SettingUpYourXcodeProject.md deleted file mode 100644 index cf40cf7..0000000 --- a/Carthage/Checkouts/Quick/Documentation/ja/SettingUpYourXcodeProject.md +++ /dev/null @@ -1,77 +0,0 @@ -# テストの準備をする - -Xcode7 では Command Line Tool プロジェクトを除き、デフォルトで Unit test target が生成されます。 [参照:コマンドラインツールプロジェクトでテストの準備をする](#コマンドラインツールプロジェクトでテストの準備をする). -テストを書くためには Unit test targetから Main target のコードが使用できる必要があります。 - -## Swift のコードを Swift でテストする - -Swift で書かれたコードをテストするためには下記2つの作業を行います。 - -1. プロジェクトファイル `.xcodeproj` の "defines module" を `YES` に設定します。 - - * Xcode で対象のプロジェクトを開き、"Build Settings" の "Defines Modules" の 項目を "Yes" にします。 - -2. 各テストファイルで `@testable import YourAppModuleName` を追記します。 追記することで public, internal のシンボルにアクセスできるようになります。`private` シンボルはアクセスできないままです。 - -```swift -// MyAppTests.swift - -import XCTest -@testable import MyModule - -class MyClassTests: XCTestCase { - // ... -} -``` - -> Swift のファイルを Test target に含める、という方法もありますが、不具合を引き起こす([subtle, hard-to-diagnose -errors](https://github.com/Quick/Quick/issues/91)) ことがあるためお勧めしません。 - -## Objective-C のコードを Swift でテストする - -1. Bridging header を test target に追加します。 -2. Bridging header 内で テストしたいコードを import します。 - -```objc -// MyAppTests-BridgingHeader.h - -#import "MyClass.h" -``` - -これで `MyClass.h' のコードを Swift のテストコードから使用できるようになります。 - -## Swift のコードを Objective-C でテストする - -1. テストしたい Swift のクラスと関数に`@objc`属性を付加します。 -2. テストコードで Module の Swift header を import します。 - -```objc -@import XCTest; -#import "MyModule-Swift.h" - -@interface MyClassTests: XCTestCase -// ... -@end -``` - -## Objective-C のコードを Objective-C でテストする - -テストコード内でテスト対象を import します。 - -```objc -// MyAppTests.m - -@import XCTest; -#import "MyClass.h" - -@interface MyClassTests: XCTestCase -// ... -@end -``` - -### コマンドラインツールプロジェクトでテストの準備をする - -1. プロジェクトのペインからターゲットを追加(+ボタンを押下) -2. "OS X Unit Testing Bundle" または "iOS Unit Testing Bundle" を選択 -3. Main target で "Edit the scheme" を選択 -4. "Test" を選択, "Info" タブで "+" をクリックして追加した testing bundle を選択 diff --git a/Carthage/Checkouts/Quick/Documentation/ja/SharedExamples.md b/Carthage/Checkouts/Quick/Documentation/ja/SharedExamples.md deleted file mode 100644 index d6d5ded..0000000 --- a/Carthage/Checkouts/Quick/Documentation/ja/SharedExamples.md +++ /dev/null @@ -1,126 +0,0 @@ -# assertの共有でボイラープレートコードをなくしましょう - -複数のオブジェクトに対象して同じ内容のテストを行いたい場合があります。 - -例えば `Edible` という protocol があるとします。 -イルカ(dolphin)が何か食べられる(`Edible`)なものを食べるとイルカが幸せになります。 -サバ(Mackerel)とタラ(Cod)は食べられる(Edibleな)ものです。 - -Quick は「イルカがどちらかを食べて幸せになる」ということを簡単にテストすることできます。 - -下記で示すテストは "(何かを食べる)something edible" という共有できるテスト(Shared examples)を定義しています。 -また、この共有できるテストでサバ(Mackerel)とタラ(Cod)を食べることについてのテストを記述しています。 - -```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! - beforeEach { - mackerel = Mackerel() - } - - itBehavesLike("something edible") { ["edible": mackerel] } - } -} - -class CodSpec: QuickSpec { - override func spec() { - var cod: Cod! - beforeEach { - cod = Cod() - } - - itBehavesLike("something edible") { ["edible": cod] } - } -} -``` - -```objc -// Objective-C - -@import Quick; -@import Nimble; - -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 は `it`, `context` や `describe` のブロックをいくつでも含めることができます。 -これは異なる種類の対象についてテストをする際のコードを節約することができます。 - -あるケースでは context を追加する必要もありません。 -Swift では `sharedExamples` closure を使って共有できるテストを定義することができます。 -このテクニックはある時点での状態をテストしたい時などに役に立つかもしれません。 - -In some cases, you won't need any additional context. In Swift, you can -simply use `sharedExamples` closures that take no parameters. This -might be useful when testing some sort of global state: - -```swift -// Swift - -import Quick - -sharedExamples("everything under the sea") { - // ... -} - -itBehavesLike("everything under the sea") -``` - -> Objective-Cでは, `QCKDSLSharedExampleContext` を引数に取る block を渡すことができます。※QCKDSLSharedExampleContext を使う予定がなくても引数に取る block を用意してください。めんどくさくても。世の中そんなもんです。 :cookie: :bomb: - -'itBehavesLike' の先頭に 'f' を加えて(`fitBehavesLike`) として共有できるテストのみ実行することもできます。 diff --git a/Carthage/Checkouts/Quick/Documentation/ja/TestingApps.md b/Carthage/Checkouts/Quick/Documentation/ja/TestingApps.md deleted file mode 100644 index 0755084..0000000 --- a/Carthage/Checkouts/Quick/Documentation/ja/TestingApps.md +++ /dev/null @@ -1,175 +0,0 @@ -# Testing OS X and iOS Applications - -*[Xcodeでテストを用意しましょう](SettingUpYourXcodeProject.md)*では Objective-C や Swift の関数やクラスを -テストするために必要なことを述べました。ここでは `UIViewController` のサブクラスなどをテストする際のポイントを述べます。 - -> 関連する LT がありますのでこちらも参考にしてください。 - [here](https://vimeo.com/115671189#t=37m50s) (37'50" から始まる部分です)。 - -## `UIViewController` のライフサイクルイベントを発火させる - -通常は UIKit が view controller のライフサイクルイベントを発火しますが、 -テストをする時は自分たちでライフサイクルイベントを発火させる必要があります。 -呼び出すには3つの方法があります。 - -1. `UIViewController.view`にアクセスする、すると `UIViewController.viewDidLoad()` のイベントが発火します。 -2. `UIViewController.beginAppearanceTransition()` を呼び出すとほとんどのライフサイクルイベントが発火します。。 -3. `UIViewController.viewDidLoad()` や `UIViewController.viewWillAppear()` などのライフサイクルに関わる関数を直接呼び出す。 - -```swift -// Swift - -import Quick -import Nimble -import BananaApp - -class BananaViewControllerSpec: QuickSpec { - override func spec() { - var viewController: BananaViewController! - beforeEach { - viewController = BananaViewController() - } - - describe(".viewDidLoad()") { - beforeEach { - // Method #1: Access the view to trigger BananaViewController.viewDidLoad(). - let _ = viewController.view - } - - it("sets the banana count label to zero") { - // Since the label is only initialized when the view is loaded, this - // would fail if we didn't access the view in the `beforeEach` above. - expect(viewController.bananaCountLabel.text).to(equal("0")) - } - } - - describe("the view") { - beforeEach { - // Method #2: Triggers .viewDidLoad(), .viewWillAppear(), and .viewDidAppear() events. - viewController.beginAppearanceTransition(true, animated: false) - viewController.endAppearanceTransition() - } - // ... - } - - describe(".viewWillDisappear()") { - beforeEach { - // Method #3: Directly call the lifecycle event. - viewController.viewWillDisappear(false) - } - // ... - } - } -} -``` - -```objc -// Objective-C - -@import Quick; -@import Nimble; -#import "BananaViewController.h" - -QuickSpecBegin(BananaViewControllerSpec) - -__block BananaViewController *viewController = nil; -beforeEach(^{ - viewController = [[BananaViewController alloc] init]; -}); - -describe(@"-viewDidLoad", ^{ - beforeEach(^{ - // Method #1: Access the view to trigger -[BananaViewController viewDidLoad]. - [viewController view]; - }); - - it(@"sets the banana count label to zero", ^{ - // Since the label is only initialized when the view is loaded, this - // would fail if we didn't access the view in the `beforeEach` above. - expect(viewController.bananaCountLabel.text).to(equal(@"0")) - }); -}); - -describe(@"the view", ^{ - beforeEach(^{ - // Method #2: Triggers .viewDidLoad(), .viewWillAppear(), and .viewDidAppear() events. - [viewController beginAppearanceTransition:YES animated:NO]; - [viewController endAppearanceTransition]; - }); - // ... -}); - -describe(@"-viewWillDisappear", ^{ - beforeEach(^{ - // Method #3: Directly call the lifecycle event. - [viewController viewWillDisappear:NO]; - }); - // ... -}); - -QuickSpecEnd -``` - -## Storyboard 内に定義した View Controller を初期化する - -Storyboard 内に定義した View Controller を初期化する際は **Storyboard ID** を定義しておく必要があります。 - -![](http://f.cl.ly/items/2X2G381K1h1l2B2Q0g3L/Screen%20Shot%202015-02-27%20at%2011.58.06%20AM.png) - -**Storyboard ID** を定義しておくとテストコードから ViewController を初期化することができます。 - -```swift -// Swift - -var viewController: BananaViewController! -beforeEach { - // 1. Instantiate the storyboard. By default, it's name is "Main.storyboard". - // You'll need to use a different string here if the name of your storyboard is different. - let storyboard = UIStoryboard(name: "Main", bundle: nil) - // 2. Use the storyboard to instantiate the view controller. - viewController = - storyboard.instantiateViewControllerWithIdentifier( - "BananaViewControllerID") as! BananaViewController -} -``` - -```objc -// Objective-C - -__block BananaViewController *viewController = nil; -beforeEach(^{ - // 1. Instantiate the storyboard. By default, it's name is "Main.storyboard". - // You'll need to use a different string here if the name of your storyboard is different. - UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; - // 2. Use the storyboard to instantiate the view controller. - viewController = [storyboard instantiateViewControllerWithIdentifier:@"BananaViewControllerID"]; -}); -``` - -## ボタンをタップされた、などの UIControl Events を発火させる - -ボタンや他の UIControl を継承したクラスは UIControl イベントを発火させる関数を持っています。 -ボタンをタップされた時の動作をテストするにはこのように書くことができます: - -```swift -// Swift - -describe("the 'more bananas' button") { - it("increments the banana count label when tapped") { - viewController.moreButton.sendActionsForControlEvents( - UIControlEvents.TouchUpInside) - expect(viewController.bananaCountLabel.text).to(equal("1")) - } -} -``` - -```objc -// Objective-C - -describe(@"the 'more bananas' button", ^{ - it(@"increments the banana count label when tapped", ^{ - [viewController.moreButton sendActionsForControlEvents:UIControlEventTouchUpInside]; - expect(viewController.bananaCountLabel.text).to(equal(@"1")); - }); -}); -``` diff --git a/Carthage/Checkouts/Quick/Documentation/zh-cn/SettingUpYourXcodeProject.md b/Carthage/Checkouts/Quick/Documentation/zh-cn/SettingUpYourXcodeProject.md deleted file mode 100644 index 6fd9067..0000000 --- a/Carthage/Checkouts/Quick/Documentation/zh-cn/SettingUpYourXcodeProject.md +++ /dev/null @@ -1,75 +0,0 @@ -# 在项目中添加测试 - -除了命令行项目以外, 当你在Xcode 7中创建新项目时, 单元测试Target默认是包含的. [为命令行项目设置测试Target](#setting-up-a-test-target-for-a-command-line-tool-project). 要编写单元测试, 你需要能够在测试Target中使用主target代码. - -## 用Swift测试Swift项目代码 - -为了测试用Swift写的代码, 你需要做以下两件事: - -1. 将`.xcodeproj`中的 "defines module" 设置为 `YES`. - - * Xcode中具体操作方法: 选中你的项目, 选择 "Build Settings" 选项列表, 选中 "Defines Modules" 行, 修改其值为 "Yes". - -2. 在单元测试中添加 `@testable import YourAppModuleName`. 这会把所有 `public` 和 `internal` (默认访问修饰符) 修饰符暴露给测试代码. 但`private` 修饰符仍旧保持私有. - -```swift -// MyAppTests.swift - -import XCTest -@testable import MyModule - -class MyClassTests: XCTestCase { - // ... -} -``` - -> 一些开发者提倡添加Swift源文件至测试target. 然而这会导致以下问题 [subtle, hard-to-diagnose errors](https://github.com/Quick/Quick/issues/91), 所以并不推荐. - -## 使用Swift测试Objective-C项目代码 - -1. 给你的测试target添加bridging header文件. -2. 在bridging header文件中, 引入待测试的代码文件. - -```objc -// MyAppTests-BridgingHeader.h - -#import "MyClass.h" -``` - -现在就可以在Swift测试文件中使用 `MyClass.h` 中的代码了 - -## 使用Objective-C测试Swift项目代码 - -1. 使用 `@objc` 桥接需要使用Objective-C测试的Swift类和方法. -2. 在单元测试中引入模块的Swift头文件. - -```objc -@import XCTest; -#import "MyModule-Swift.h" - -@interface MyClassTests: XCTestCase -// ... -@end -``` - -## 使用Objective-C测试Objective-C项目代码 - -在测试target中引入待测试的代码文件: - -```objc -// MyAppTests.m - -@import XCTest; -#import "MyClass.h" - -@interface MyClassTests: XCTestCase -// ... -@end -``` - -### 为命令行项目设置测试Target - -1. 在项目窗格中添加一个项目target. -2. 选择 "OS X Unit Testing Bundle". -3. 编辑主target的 scheme. -4. 选中 "Test" 条目, 单击 "Info" 下的 "+", 选择需要测试的 bundle. diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/.gitignore b/Carthage/Checkouts/Quick/Externals/Nimble/.gitignore deleted file mode 100644 index b067294..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -.DS_Store -xcuserdata/ -build/ -.idea -DerivedData/ -Nimble.framework.zip - -# Carthage -# -# Add this line if you want to avoid checking in source code from Carthage dependencies. -# Carthage/Checkouts - -Carthage/Build - -# Swift Package Manager -# -# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. -# Packages/ -.build/ diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/.ruby-version b/Carthage/Checkouts/Quick/Externals/Nimble/.ruby-version deleted file mode 100644 index bec3a35..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -system diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/.swift-version b/Carthage/Checkouts/Quick/Externals/Nimble/.swift-version deleted file mode 100644 index b814a38..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/.swift-version +++ /dev/null @@ -1 +0,0 @@ -DEVELOPMENT-SNAPSHOT-2016-02-25-a diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/.travis.yml b/Carthage/Checkouts/Quick/Externals/Nimble/.travis.yml deleted file mode 100644 index 4d27258..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/.travis.yml +++ /dev/null @@ -1,33 +0,0 @@ -osx_image: xcode7.3 -language: generic -matrix: - include: - - os: osx - sudo: required - env: TYPE=podspec - - os: osx - env: NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 TYPE=ios - - os: osx - env: NIMBLE_RUNTIME_TVOS_SDK_VERSION=9.0 TYPE=tvos - - os: osx - env: NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 TYPE=osx - - os: osx - env: TYPE=swiftpm - - os: osx - env: NIMBLE_RUNTIME_IOS_SDK_VERSION=10.0 TYPE=ios - osx_image: xcode8 - - os: osx - env: NIMBLE_RUNTIME_TVOS_SDK_VERSION=10.0 TYPE=tvos - osx_image: xcode8 - - os: osx - env: NIMBLE_RUNTIME_OSX_SDK_VERSION=10.12 TYPE=osx - osx_image: xcode8 - - os: linux - dist: trusty - sudo: required - env: TYPE=swiftpm -install: - - if [[ "$TYPE" == "swiftpm" ]]; then eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)"; fi - - if [[ "$TYPE" == "podspec" ]]; then sudo gem install bundler; bundle install; fi -script: - - ./test $TYPE diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/CONTRIBUTING.md b/Carthage/Checkouts/Quick/Externals/Nimble/CONTRIBUTING.md deleted file mode 100644 index a97114f..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/CONTRIBUTING.md +++ /dev/null @@ -1,112 +0,0 @@ - - - -- [Welcome to Nimble!](#welcome-to-nimble!) - - [Reporting Bugs](#reporting-bugs) - - [Building the Project](#building-the-project) - - [Pull Requests](#pull-requests) - - [Style Conventions](#style-conventions) - - [Core Members](#core-members) - - [Code of Conduct](#code-of-conduct) - - - -# Welcome to Nimble! - -We're building a testing framework for a new generation of Swift and -Objective-C developers. - -Nimble should be easy to use and easy to maintain. Let's keep things -simple and well-tested. - -**tl;dr:** If you've added a file to the project, make sure it's -included in both the OS X and iOS targets. - -## Reporting Bugs - -Nothing is off-limits. If you're having a problem, we want to hear about -it. - -- See a crash? File an issue. -- Code isn't compiling, but you don't know why? Sounds like you should - submit a new issue, bud. -- Went to the kitchen, only to forget why you went in the first place? - Better submit an issue. - -Be sure to include in your issue: - -- Your Xcode version (eg - Xcode 7.0.1 7A1001) -- Your version of Nimble (eg - v2.0.0 or git sha `20a3f3b4e63cc8d97c92c4164bf36f2a2c9a6e1b`) -- What are the steps to reproduce this issue? -- What platform are you using? (eg - OS X, iOS, watchOS, tvOS) -- If the problem is on a UI Testing Bundle, Unit Testing Bundle, or some other target configuration -- Are you using carthage or cocoapods? - -## Building the Project - -- Use `Nimble.xcodeproj` to work on Nimble. - -## Pull Requests - -- Nothing is trivial. Submit pull requests for anything: typos, - whitespace, you name it. -- Not all pull requests will be merged, but all will be acknowledged. If - no one has provided feedback on your request, ping one of the owners - by name. -- Make sure your pull request includes any necessary updates to the - README or other documentation. -- Be sure the unit tests for both the OS X and iOS targets of Nimble - before submitting your pull request. You can run all the OS X & iOS unit - tests using `./test`. -- If you've added a file to the project, make sure it's included in both - the OS X and iOS targets. -- The `master` branch will always support the stable Xcode version. Other - branches will point to their corresponding versions they support. -- If you're making a configuration change, make sure to edit both the xcode - project and the podspec file. - -### Style Conventions - -- Indent using 4 spaces. -- Keep lines 100 characters or shorter. Break long statements into - shorter ones over multiple lines. -- In Objective-C, use `#pragma mark -` to mark public, internal, - protocol, and superclass methods. - -## Core Members - -If a few of your pull requests have been merged, and you'd like a -controlling stake in the project, file an issue asking for write access -to the repository. - -### Code of Conduct - -Your conduct as a core member is your own responsibility, but here are -some "ground rules": - -- Feel free to push whatever you want to master, and (if you have - ownership permissions) to create any repositories you'd like. - - Ideally, however, all changes should be submitted as GitHub pull - requests. No one should merge their own pull request, unless no - other core members respond for at least a few days. - - If you'd like to create a new repository, it'd be nice if you created - a GitHub issue and gathered some feedback first. - -- It'd be awesome if you could review, provide feedback on, and close - issues or pull requests submitted to the project. Please provide kind, - constructive feedback. Please don't be sarcastic or snarky. - -### Creating a Release - -The process is relatively straight forward, but here's is a useful checklist for tagging: - -- Look at changes from the previously tagged release and write release notes: `git log v0.4.0...HEAD` -- Run the release script: `./script/release A.B.C release-notes-file` -- The script will prompt you to create a new [GitHub release](https://github.com/Quick/Nimble/releases). - - Use the same release notes you created for the tag, but tweak up formatting for GitHub. -- Update [Quick](https://github.com/Quick/Quick) - - Update Quick's submodule reference to the newly released Nimble version - - Update Nimble version in `README.md` and Documentation in [Quick](https://github.com/Quick/Quick) if it's not a patch version update. -- Announce! diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Gemfile b/Carthage/Checkouts/Quick/Externals/Nimble/Gemfile deleted file mode 100644 index 66d7eff..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -# A sample Gemfile -source "https://rubygems.org" - -gem 'cocoapods' diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Gemfile.lock b/Carthage/Checkouts/Quick/Externals/Nimble/Gemfile.lock deleted file mode 100644 index f5b24cf..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Gemfile.lock +++ /dev/null @@ -1,63 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - activesupport (4.2.6) - i18n (~> 0.7) - json (~> 1.7, >= 1.7.7) - minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) - tzinfo (~> 1.1) - claide (0.9.1) - cocoapods (0.39.0) - activesupport (>= 4.0.2) - claide (~> 0.9.1) - cocoapods-core (= 0.39.0) - cocoapods-downloader (~> 0.9.3) - cocoapods-plugins (~> 0.4.2) - cocoapods-search (~> 0.1.0) - cocoapods-stats (~> 0.6.2) - cocoapods-trunk (~> 0.6.4) - cocoapods-try (~> 0.5.1) - colored (~> 1.2) - escape (~> 0.0.4) - molinillo (~> 0.4.0) - nap (~> 1.0) - xcodeproj (~> 0.28.2) - cocoapods-core (0.39.0) - activesupport (>= 4.0.2) - fuzzy_match (~> 2.0.4) - nap (~> 1.0) - cocoapods-downloader (0.9.3) - cocoapods-plugins (0.4.2) - nap - cocoapods-search (0.1.0) - cocoapods-stats (0.6.2) - cocoapods-trunk (0.6.4) - nap (>= 0.8, < 2.0) - netrc (= 0.7.8) - cocoapods-try (0.5.1) - colored (1.2) - escape (0.0.4) - fuzzy_match (2.0.4) - i18n (0.7.0) - json (1.8.3) - minitest (5.8.4) - molinillo (0.4.4) - nap (1.1.0) - netrc (0.7.8) - thread_safe (0.3.5) - tzinfo (1.2.2) - thread_safe (~> 0.1) - xcodeproj (0.28.2) - activesupport (>= 3) - claide (~> 0.9.1) - colored (~> 1.2) - -PLATFORMS - ruby - -DEPENDENCIES - cocoapods - -BUNDLED WITH - 1.11.2 diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/LICENSE.md b/Carthage/Checkouts/Quick/Externals/Nimble/LICENSE.md deleted file mode 100644 index 0f3eb71..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/LICENSE.md +++ /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/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.podspec b/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.podspec deleted file mode 100644 index ba97d66..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.podspec +++ /dev/null @@ -1,22 +0,0 @@ -Pod::Spec.new do |s| - s.name = "Nimble" - s.version = "4.1.0" - s.summary = "A Matcher Framework for Swift and Objective-C" - s.description = <<-DESC - Use Nimble to express the expected outcomes of Swift or Objective-C expressions. Inspired by Cedar. - DESC - s.homepage = "https://github.com/Quick/Nimble" - s.license = { :type => "Apache 2.0", :file => "LICENSE.md" } - s.author = "Quick Contributors" - s.ios.deployment_target = "7.0" - s.osx.deployment_target = "10.9" - s.tvos.deployment_target = "9.0" - s.source = { :git => "https://github.com/Quick/Nimble.git", :tag => "v#{s.version}" } - - s.source_files = "Sources/Nimble/**/*.{swift,h,m}" - s.private_header_files = "Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h" - s.exclude_files = "Sources/Nimble/Adapters/NonObjectiveC/*.swift" - s.weak_framework = "XCTest" - s.requires_arc = true - s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO', 'OTHER_LDFLAGS' => '-weak-lswiftXCTest', 'FRAMEWORK_SEARCH_PATHS' => '$(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks"' } -end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/project.pbxproj b/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/project.pbxproj deleted file mode 100644 index a822b48..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1966 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; - 1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; - 1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; - 1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; - 1F14FB64194180C5009F2A08 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; - 1F1871C51CA89EDB00A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871C61CA89EDB00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; }; - 1F1871C71CA89EDB00A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871C81CA89EDB00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; }; - 1F1871C91CA89EDB00A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871CA1CA89EDB00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; }; - 1F1871CB1CA89EDB00A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; - 1F1871CC1CA89EDB00A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; - 1F1871D21CA89EEE00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; }; - 1F1871D31CA89EEE00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; }; - 1F1871D41CA89EEE00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; }; - 1F1871D61CA89EEF00A34BF2 /* DSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BD1CA89EDB00A34BF2 /* DSL.m */; }; - 1F1871D71CA89EEF00A34BF2 /* NMBExceptionCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */; }; - 1F1871D81CA89EEF00A34BF2 /* NMBStringify.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */; }; - 1F1871D91CA89EF100A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; - 1F1871DA1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; - 1F1871DB1CA89EF100A34BF2 /* NMBExpectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */; }; - 1F1871DC1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */; }; - 1F1871DD1CA89EF500A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871DE1CA89EF500A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871DF1CA89EF500A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871E01CA89EF600A34BF2 /* DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BC1CA89EDB00A34BF2 /* DSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871E11CA89EF600A34BF2 /* NMBExceptionCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871E21CA89EF600A34BF2 /* NMBStringify.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1871E41CA89FB600A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; - 1F1871E61CA89FCD00A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; - 1F1871E71CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; - 1F1871E81CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */; }; - 1F1871E91CA8A18700A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; - 1F1871EB1CA8A18800A34BF2 /* MatcherFunc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */; }; - 1F1A742F1940169200FFFC47 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F1A74291940169200FFFC47 /* Nimble.framework */; }; - 1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; - 1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; - 1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; - 1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; - 1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; - 1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; - 1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; - 1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; - 1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; - 1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; - 1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; }; - 1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; }; - 1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; }; - 1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; }; - 1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; }; - 1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; }; - 1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; }; - 1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; }; - 1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; }; - 1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; }; - 1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; }; - 1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; }; - 1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; }; - 1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; }; - 1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; }; - 1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; }; - 1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; }; - 1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; }; - 1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; }; - 1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; }; - 1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; }; - 1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; }; - 1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; }; - 1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; }; - 1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; }; - 1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; }; - 1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; }; - 1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; }; - 1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; }; - 1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; }; - 1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; }; - 1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; }; - 1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; }; - 1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; }; - 1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; }; - 1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; }; - 1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; }; - 1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; }; - 1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; }; - 1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; }; - 1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */; }; - 1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; - 1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; - 1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; - 1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; - 1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; - 1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; - 1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; - 1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; - 1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; - 1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; - 1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; - 1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; - 1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; - 1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; - 1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; - 1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; - 1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; - 1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; - 1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; - 1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; - 1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; - 1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; - 1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; - 1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; - 1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; - 1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; - 1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; - 1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; - 1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; - 1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; - 1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD251968AB07008ED995 /* Functional.swift */; }; - 1F5DF18C1BDCA0F500C3A531 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; - 1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD271968AB07008ED995 /* SourceLocation.swift */; }; - 1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD281968AB07008ED995 /* Stringers.swift */; }; - 1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; - 1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */; }; - 1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; - 1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; - 1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */; }; - 1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; - 1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */; }; - 1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; - 1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; - 1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */; }; - 1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; - 1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; - 1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; - 1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; - 1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; - 1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; - 1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; - 1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; - 1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; - 1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; - 1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; - 1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; - 1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; - 1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; - 1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; - 1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; - 1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; }; - 1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; }; - 1F91DD2D1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; - 1F91DD2E1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; - 1F91DD2F1C74BF36002C309F /* BeVoidTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */; }; - 1F91DD311C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; - 1F91DD321C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; - 1F91DD331C74BF61002C309F /* BeVoid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F91DD301C74BF61002C309F /* BeVoid.swift */; }; - 1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F925EAD195C0D6300ED456B /* Nimble.framework */; }; - 1F925EC7195C0DD100ED456B /* Nimble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F1A742E1940169200FFFC47 /* Nimble.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F925EE2195C0DFD00ED456B /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; - 1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; - 1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE5195C121200ED456B /* AsynchronousTest.swift */; }; - 1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; - 1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */; }; - 1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; - 1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */; }; - 1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; - 1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EEE195C136500ED456B /* BeLogicalTest.swift */; }; - 1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; - 1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF5195C147800ED456B /* BeCloseToTest.swift */; }; - 1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; - 1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EF8195C175000ED456B /* BeNilTest.swift */; }; - 1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; - 1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFB195C186800ED456B /* BeginWithTest.swift */; }; - 1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; - 1F925F00195C187600ED456B /* EndWithTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925EFE195C187600ED456B /* EndWithTest.swift */; }; - 1F925F02195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; - 1F925F03195C189500ED456B /* ContainTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F01195C189500ED456B /* ContainTest.swift */; }; - 1F925F05195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; - 1F925F06195C18B700ED456B /* EqualTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F04195C18B700ED456B /* EqualTest.swift */; }; - 1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; - 1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */; }; - 1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; - 1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */; }; - 1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; - 1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */; }; - 1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; - 1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */; }; - 1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; }; - 1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; }; - 1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; - 1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */; }; - 1FC494AA1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; - 1FC494AB1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; - 1FC494AC1C29CBA40010975C /* NimbleEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */; }; - 1FCF914F1C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; - 1FCF91501C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; - 1FCF91511C61C85A00B15DCB /* PostNotificationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */; }; - 1FCF91531C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; - 1FCF91541C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; - 1FCF91551C61C8A400B15DCB /* PostNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCF91521C61C8A400B15DCB /* PostNotification.swift */; }; - 1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; - 1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */; }; - 1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; - 1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */; }; - 1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; - 1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */; }; - 1FD8CD341968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; - 1FD8CD351968AB07008ED995 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD081968AB07008ED995 /* DSL.swift */; }; - 1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; - 1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD091968AB07008ED995 /* Expectation.swift */; }; - 1FD8CD381968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; - 1FD8CD391968AB07008ED995 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0A1968AB07008ED995 /* Expression.swift */; }; - 1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; - 1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */; }; - 1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; - 1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */; }; - 1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; - 1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */; }; - 1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; - 1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */; }; - 1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; - 1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD101968AB07008ED995 /* BeEmpty.swift */; }; - 1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; - 1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD111968AB07008ED995 /* BeginWith.swift */; }; - 1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; - 1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */; }; - 1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; - 1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */; }; - 1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; - 1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */; }; - 1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; - 1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD151968AB07008ED995 /* BeLessThan.swift */; }; - 1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; - 1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */; }; - 1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; - 1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD171968AB07008ED995 /* BeLogical.swift */; }; - 1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; - 1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD181968AB07008ED995 /* BeNil.swift */; }; - 1FD8CD561968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; - 1FD8CD571968AB07008ED995 /* Contain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1A1968AB07008ED995 /* Contain.swift */; }; - 1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; - 1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1B1968AB07008ED995 /* EndWith.swift */; }; - 1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; - 1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1C1968AB07008ED995 /* Equal.swift */; }; - 1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; - 1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */; }; - 1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; - 1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */; }; - 1FD8CD6A1968AB07008ED995 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; - 1FD8CD6B1968AB07008ED995 /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD8CD261968AB07008ED995 /* Async.swift */; }; - 1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; - 1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */; }; - 29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; - 29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */; }; - 29EA59661B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; - 29EA59671B551EE6002D767E /* ThrowError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29EA59651B551EE6002D767E /* ThrowError.swift */; }; - 347155CA1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; - 347155CB1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; - 347155CC1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */; }; - 472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; - 472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1341B9E085700C7B8DA /* HaveCount.swift */; }; - 472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; - 472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */; }; - 4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; }; - 4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; }; - 7B5358BA1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; - 7B5358BB1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; - 7B5358BC1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */; }; - 7B5358BE1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; - 7B5358BF1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; - 7B5358C01C38479700A23FAA /* SatisfyAnyOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */; }; - 7B5358C51C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; }; - 7B5358C61C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; }; - 8DF1C3F71C94FC75004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; }; - 8DF1C3F81C94FC75004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; }; - 8DF1C3F91C94FD0C004B2D36 /* ObjcStringersTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */; }; - 965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; }; - 965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; }; - 965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; - 965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */; }; - AE4BA9AD1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; - AE4BA9AE1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; - AE4BA9AF1C88DDB500B73906 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4BA9AC1C88DDB500B73906 /* Errors.swift */; }; - AE7ADE451C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; - AE7ADE461C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; - AE7ADE471C80BF8000B94CD3 /* MatchError.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE441C80BF8000B94CD3 /* MatchError.swift */; }; - AE7ADE491C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; - AE7ADE4A1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; - AE7ADE4B1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */; }; - CD79C99E1D2CC832004B6F9A /* ObjCAsyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */; }; - CD79C99F1D2CC835004B6F9A /* ObjCSyncTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */; }; - CD79C9A01D2CC839004B6F9A /* ObjCBeAnInstanceOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */; }; - CD79C9A11D2CC83B004B6F9A /* ObjCBeCloseToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */; }; - CD79C9A21D2CC83E004B6F9A /* ObjCBeEmptyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */; }; - CD79C9A31D2CC841004B6F9A /* ObjCBeFalseTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */; }; - CD79C9A41D2CC848004B6F9A /* ObjCBeFalsyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */; }; - CD79C9A51D2CC848004B6F9A /* ObjCBeginWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */; }; - CD79C9A61D2CC848004B6F9A /* ObjCBeGreaterThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */; }; - CD79C9A71D2CC848004B6F9A /* ObjCBeGreaterThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */; }; - CD79C9A81D2CC848004B6F9A /* ObjCBeIdenticalToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */; }; - CD79C9A91D2CC848004B6F9A /* ObjCBeKindOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */; }; - CD79C9AA1D2CC848004B6F9A /* ObjCBeLessThanOrEqualToTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */; }; - CD79C9AB1D2CC848004B6F9A /* ObjCBeLessThanTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */; }; - CD79C9AC1D2CC848004B6F9A /* ObjCBeNilTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */; }; - CD79C9AD1D2CC848004B6F9A /* ObjCBeTrueTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */; }; - CD79C9AE1D2CC848004B6F9A /* ObjCBeTruthyTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */; }; - CD79C9AF1D2CC848004B6F9A /* ObjCContainTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */; }; - CD79C9B01D2CC848004B6F9A /* ObjCEndWithTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */; }; - CD79C9B11D2CC848004B6F9A /* ObjCEqualTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */; }; - CD79C9B21D2CC848004B6F9A /* ObjCHaveCount.m in Sources */ = {isa = PBXBuildFile; fileRef = 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */; }; - CD79C9B31D2CC848004B6F9A /* ObjCMatchTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */; }; - CD79C9B41D2CC848004B6F9A /* ObjCRaiseExceptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */; }; - CD79C9B51D2CC848004B6F9A /* ObjCUserDescriptionTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */; }; - CD79C9B61D2CC848004B6F9A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; }; - CD79C9B71D2CC848004B6F9A /* ObjCSatisfyAnyOfTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */; }; - DA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; - DA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */; }; - DD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; - DD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD72EC631A93874A002F7651 /* AllPassTest.swift */; }; - DD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; - DD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */; }; - DDB1BC791A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; - DDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB1BC781A92235600F743C3 /* AllPass.swift */; }; - DDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; - DDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EC19FE43C200E9D9FE /* Match.swift */; }; - DDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; - DDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */; }; - DDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; }; - DDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */ = {isa = PBXBuildFile; fileRef = DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */; }; - F8A1BE2F1CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; }; - F8A1BE301CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; }; - F8A1BE311CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */ = {isa = PBXBuildFile; fileRef = F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 1F1A74361940169200FFFC47 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1A74281940169200FFFC47; - remoteInfo = "Nimble-iOS"; - }; - 1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F5DF1541BDCA0CE00C3A531; - remoteInfo = "Nimble-tvOS"; - }; - 1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1A74281940169200FFFC47; - remoteInfo = "Nimble-iOS"; - }; - 1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1A74281940169200FFFC47; - remoteInfo = Nimble; - }; - 1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F1A74281940169200FFFC47; - remoteInfo = Nimble; - }; - 1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F925EAC195C0D6300ED456B; - remoteInfo = "Nimble-OSX"; - }; - 1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F925EAC195C0D6300ED456B; - remoteInfo = "Nimble-OSX"; - }; - 1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F925EAC195C0D6300ED456B; - remoteInfo = "Nimble-OSX"; - }; - 1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 1F1A74201940169200FFFC47 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F925EAC195C0D6300ED456B; - remoteInfo = "Nimble-OSX"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ObjectWithLazyProperty.swift; sourceTree = ""; }; - 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SynchronousTests.swift; sourceTree = ""; }; - 1F14FB63194180C5009F2A08 /* utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = utils.swift; sourceTree = ""; }; - 1F1871BC1CA89EDB00A34BF2 /* DSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DSL.h; sourceTree = ""; }; - 1F1871BD1CA89EDB00A34BF2 /* DSL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DSL.m; sourceTree = ""; }; - 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMBExceptionCapture.h; sourceTree = ""; }; - 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMBExceptionCapture.m; sourceTree = ""; }; - 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NMBStringify.h; sourceTree = ""; }; - 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NMBStringify.m; sourceTree = ""; }; - 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMBExpectation.swift; sourceTree = ""; }; - 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMBObjCMatcher.swift; sourceTree = ""; }; - 1F1871CD1CA89EE000A34BF2 /* ExceptionCapture.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExceptionCapture.swift; sourceTree = ""; }; - 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncMatcherWrapper.swift; sourceTree = ""; }; - 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherFunc.swift; sourceTree = ""; }; - 1F1A74291940169200FFFC47 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F1A742D1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1F1A742E1940169200FFFC47 /* Nimble.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Nimble.h; sourceTree = ""; }; - 1F1A74341940169200FFFC47 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F1A743A1940169200FFFC47 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAKindOfTest.swift; sourceTree = ""; }; - 1F2752D119445B8400052A26 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; lineEnding = 0; path = README.md; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.markdown; }; - 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmptyTest.swift; sourceTree = ""; }; - 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAsyncTest.m; sourceTree = ""; }; - 1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NimbleSpecHelper.h; sourceTree = ""; }; - 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeAnInstanceOfTest.m; sourceTree = ""; }; - 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeKindOfTest.m; sourceTree = ""; }; - 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeCloseToTest.m; sourceTree = ""; }; - 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeginWithTest.m; sourceTree = ""; }; - 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanTest.m; sourceTree = ""; }; - 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeGreaterThanOrEqualToTest.m; sourceTree = ""; }; - 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeIdenticalToTest.m; sourceTree = ""; }; - 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanTest.m; sourceTree = ""; }; - 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeLessThanOrEqualToTest.m; sourceTree = ""; }; - 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTruthyTest.m; sourceTree = ""; }; - 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalsyTest.m; sourceTree = ""; }; - 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeTrueTest.m; sourceTree = ""; }; - 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeFalseTest.m; sourceTree = ""; }; - 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeNilTest.m; sourceTree = ""; }; - 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCContainTest.m; sourceTree = ""; }; - 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEndWithTest.m; sourceTree = ""; }; - 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCEqualTest.m; sourceTree = ""; }; - 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCMatchTest.m; sourceTree = ""; }; - 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCRaiseExceptionTest.m; sourceTree = ""; }; - 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSyncTest.m; sourceTree = ""; }; - 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeVoidTest.swift; sourceTree = ""; }; - 1F91DD301C74BF61002C309F /* BeVoid.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeVoid.swift; sourceTree = ""; }; - 1F925EAD195C0D6300ED456B /* Nimble.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NimbleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F925EE5195C121200ED456B /* AsynchronousTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsynchronousTest.swift; sourceTree = ""; }; - 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOfTest.swift; sourceTree = ""; }; - 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RaisesExceptionTest.swift; sourceTree = ""; }; - 1F925EEE195C136500ED456B /* BeLogicalTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLogicalTest.swift; sourceTree = ""; }; - 1F925EF5195C147800ED456B /* BeCloseToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseToTest.swift; sourceTree = ""; }; - 1F925EF8195C175000ED456B /* BeNilTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeNilTest.swift; sourceTree = ""; }; - 1F925EFB195C186800ED456B /* BeginWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeginWithTest.swift; sourceTree = ""; }; - 1F925EFE195C187600ED456B /* EndWithTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWithTest.swift; sourceTree = ""; }; - 1F925F01195C189500ED456B /* ContainTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContainTest.swift; sourceTree = ""; }; - 1F925F04195C18B700ED456B /* EqualTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EqualTest.swift; sourceTree = ""; }; - 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanTest.swift; sourceTree = ""; }; - 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanTest.swift; sourceTree = ""; }; - 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeLessThanOrEqualToTest.swift; sourceTree = ""; }; - 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeGreaterThanOrEqualToTest.swift; sourceTree = ""; }; - 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCBeEmptyTest.m; sourceTree = ""; }; - 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToTest.swift; sourceTree = ""; }; - 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NimbleEnvironment.swift; sourceTree = ""; }; - 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostNotificationTest.swift; sourceTree = ""; }; - 1FCF91521C61C8A400B15DCB /* PostNotification.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PostNotification.swift; sourceTree = ""; }; - 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionRecorder.swift; sourceTree = ""; }; - 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AdapterProtocols.swift; sourceTree = ""; }; - 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NimbleXCTestHandler.swift; sourceTree = ""; }; - 1FD8CD081968AB07008ED995 /* DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DSL.swift; sourceTree = ""; }; - 1FD8CD091968AB07008ED995 /* Expectation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expectation.swift; sourceTree = ""; }; - 1FD8CD0A1968AB07008ED995 /* Expression.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Expression.swift; sourceTree = ""; }; - 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FailureMessage.swift; sourceTree = ""; }; - 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeAnInstanceOf.swift; sourceTree = ""; }; - 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeAKindOf.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeCloseTo.swift; sourceTree = ""; }; - 1FD8CD101968AB07008ED995 /* BeEmpty.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeEmpty.swift; sourceTree = ""; }; - 1FD8CD111968AB07008ED995 /* BeginWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeginWith.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThan.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeGreaterThanOrEqualTo.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeIdenticalTo.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD151968AB07008ED995 /* BeLessThan.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThan.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLessThanOrEqual.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD171968AB07008ED995 /* BeLogical.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeLogical.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD181968AB07008ED995 /* BeNil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = BeNil.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD1A1968AB07008ED995 /* Contain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Contain.swift; sourceTree = ""; }; - 1FD8CD1B1968AB07008ED995 /* EndWith.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EndWith.swift; sourceTree = ""; }; - 1FD8CD1C1968AB07008ED995 /* Equal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Equal.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatcherProtocols.swift; sourceTree = ""; }; - 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = RaisesException.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - 1FD8CD251968AB07008ED995 /* Functional.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Functional.swift; sourceTree = ""; }; - 1FD8CD261968AB07008ED995 /* Async.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Async.swift; sourceTree = ""; }; - 1FD8CD271968AB07008ED995 /* SourceLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SourceLocation.swift; sourceTree = ""; }; - 1FD8CD281968AB07008ED995 /* Stringers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Stringers.swift; sourceTree = ""; }; - 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssertionDispatcher.swift; sourceTree = ""; }; - 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowErrorTest.swift; sourceTree = ""; }; - 29EA59651B551EE6002D767E /* ThrowError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ThrowError.swift; sourceTree = ""; }; - 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XCTestCaseProvider.swift; sourceTree = ""; }; - 472FD1341B9E085700C7B8DA /* HaveCount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCount.swift; sourceTree = ""; }; - 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HaveCountTest.swift; sourceTree = ""; }; - 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCHaveCount.m; sourceTree = ""; }; - 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SatisfyAnyOfTest.swift; sourceTree = ""; }; - 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SatisfyAnyOf.swift; sourceTree = ""; }; - 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSatisfyAnyOfTest.m; sourceTree = ""; }; - 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjcStringersTest.m; sourceTree = ""; }; - 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCUserDescriptionTest.m; sourceTree = ""; }; - 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDescriptionTest.swift; sourceTree = ""; }; - AE4BA9AC1C88DDB500B73906 /* Errors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; - AE7ADE441C80BF8000B94CD3 /* MatchError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchError.swift; sourceTree = ""; }; - AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchErrorTest.swift; sourceTree = ""; }; - DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DSL+Wait.swift"; sourceTree = ""; }; - DD72EC631A93874A002F7651 /* AllPassTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPassTest.swift; sourceTree = ""; }; - DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeIdenticalToObjectTest.swift; sourceTree = ""; }; - DDB1BC781A92235600F743C3 /* AllPass.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AllPass.swift; sourceTree = ""; }; - DDB4D5EC19FE43C200E9D9FE /* Match.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = Match.swift; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; - DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MatchTest.swift; sourceTree = ""; }; - DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCAllPassTest.m; sourceTree = ""; }; - F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestObservationCenter+Register.m"; sourceTree = ""; }; - F8A1BE321CB3777F00031679 /* CurrentTestCaseTracker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CurrentTestCaseTracker.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 1F1A74251940169200FFFC47 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F1A74311940169200FFFC47 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F1A74351940169200FFFC47 /* Nimble.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F5DF1511BDCA0CE00C3A531 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F5DF15B1BDCA0CE00C3A531 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F5DF15F1BDCA0CE00C3A531 /* Nimble.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F925EA9195C0D6300ED456B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F925EB4195C0D6300ED456B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F925EB8195C0D6300ED456B /* Nimble.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 1F14FB61194180A7009F2A08 /* Helpers */ = { - isa = PBXGroup; - children = ( - 1F14FB63194180C5009F2A08 /* utils.swift */, - 1F0648CB19639F5A001F9C46 /* ObjectWithLazyProperty.swift */, - 347155C91C337C8900549F03 /* XCTestCaseProvider.swift */, - ); - path = Helpers; - sourceTree = ""; - }; - 1F1871B91CA89E1B00A34BF2 /* ObjectiveC */ = { - isa = PBXGroup; - children = ( - F8A1BE321CB3777F00031679 /* CurrentTestCaseTracker.h */, - 1F1871BC1CA89EDB00A34BF2 /* DSL.h */, - 1F1871BD1CA89EDB00A34BF2 /* DSL.m */, - 1F1871BE1CA89EDB00A34BF2 /* NMBExceptionCapture.h */, - 1F1871BF1CA89EDB00A34BF2 /* NMBExceptionCapture.m */, - 1F1871C21CA89EDB00A34BF2 /* NMBExpectation.swift */, - 1F1871C31CA89EDB00A34BF2 /* NMBObjCMatcher.swift */, - 1F1871C01CA89EDB00A34BF2 /* NMBStringify.h */, - 1F1871C11CA89EDB00A34BF2 /* NMBStringify.m */, - F8A1BE2B1CB3710900031679 /* XCTestObservationCenter+Register.m */, - ); - path = ObjectiveC; - sourceTree = ""; - }; - 1F1871BA1CA89E2500A34BF2 /* NonObjectiveC */ = { - isa = PBXGroup; - children = ( - 1F1871CD1CA89EE000A34BF2 /* ExceptionCapture.swift */, - ); - path = NonObjectiveC; - sourceTree = ""; - }; - 1F1A741F1940169200FFFC47 = { - isa = PBXGroup; - children = ( - 1F2752D119445B8400052A26 /* README.md */, - 1F1A742B1940169200FFFC47 /* Nimble */, - 1F1A74381940169200FFFC47 /* NimbleTests */, - 1F1A742A1940169200FFFC47 /* Products */, - ); - sourceTree = ""; - }; - 1F1A742A1940169200FFFC47 /* Products */ = { - isa = PBXGroup; - children = ( - 1F1A74291940169200FFFC47 /* Nimble.framework */, - 1F1A74341940169200FFFC47 /* NimbleTests.xctest */, - 1F925EAD195C0D6300ED456B /* Nimble.framework */, - 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */, - 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */, - 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 1F1A742B1940169200FFFC47 /* Nimble */ = { - isa = PBXGroup; - children = ( - 1FD8CD041968AB07008ED995 /* Adapters */, - 1FD8CD081968AB07008ED995 /* DSL.swift */, - DA9E8C811A414BB9002633C2 /* DSL+Wait.swift */, - 1FD8CD091968AB07008ED995 /* Expectation.swift */, - 1FD8CD0A1968AB07008ED995 /* Expression.swift */, - 1FD8CD0B1968AB07008ED995 /* FailureMessage.swift */, - 1F1A742D1940169200FFFC47 /* Info.plist */, - 1FD8CD0C1968AB07008ED995 /* Matchers */, - 1F1A742E1940169200FFFC47 /* Nimble.h */, - 1FD8CD241968AB07008ED995 /* Utils */, - ); - name = Nimble; - path = Sources/Nimble; - sourceTree = ""; - }; - 1F1A74381940169200FFFC47 /* NimbleTests */ = { - isa = PBXGroup; - children = ( - 1F925EE5195C121200ED456B /* AsynchronousTest.swift */, - 1F0648D31963AAB2001F9C46 /* SynchronousTests.swift */, - 965B0D0B1B62C06D0005AE66 /* UserDescriptionTest.swift */, - 1FFD729A1963FC8200CD29A2 /* objc */, - 1F14FB61194180A7009F2A08 /* Helpers */, - 1F925EE3195C11B000ED456B /* Matchers */, - 1F1A74391940169200FFFC47 /* Supporting Files */, - ); - name = NimbleTests; - path = Tests/Nimble; - sourceTree = ""; - }; - 1F1A74391940169200FFFC47 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 1F1A743A1940169200FFFC47 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 1F925EE3195C11B000ED456B /* Matchers */ = { - isa = PBXGroup; - children = ( - DD72EC631A93874A002F7651 /* AllPassTest.swift */, - 1F1B5AD31963E13900CA8BF9 /* BeAKindOfTest.swift */, - 1F925EE8195C124400ED456B /* BeAnInstanceOfTest.swift */, - 1F925EF5195C147800ED456B /* BeCloseToTest.swift */, - 1F299EAA19627B2D002641AF /* BeEmptyTest.swift */, - 1F925EFB195C186800ED456B /* BeginWithTest.swift */, - 1F925F10195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift */, - 1F925F07195C18CF00ED456B /* BeGreaterThanTest.swift */, - DD9A9A8D19CF413800706F49 /* BeIdenticalToObjectTest.swift */, - 1FB90097195EC4B8001D7FAE /* BeIdenticalToTest.swift */, - 1F925F0D195C18F500ED456B /* BeLessThanOrEqualToTest.swift */, - 1F925F0A195C18E100ED456B /* BeLessThanTest.swift */, - 1F925EEE195C136500ED456B /* BeLogicalTest.swift */, - 1F925EF8195C175000ED456B /* BeNilTest.swift */, - 1F91DD2C1C74BF36002C309F /* BeVoidTest.swift */, - 1F925F01195C189500ED456B /* ContainTest.swift */, - 1F925EFE195C187600ED456B /* EndWithTest.swift */, - 1F925F04195C18B700ED456B /* EqualTest.swift */, - 472FD1361B9E094B00C7B8DA /* HaveCountTest.swift */, - DDB4D5EF19FE442800E9D9FE /* MatchTest.swift */, - 1F925EEB195C12C800ED456B /* RaisesExceptionTest.swift */, - 29EA59621B551ED2002D767E /* ThrowErrorTest.swift */, - 7B5358B91C3846C900A23FAA /* SatisfyAnyOfTest.swift */, - 1FCF914E1C61C85A00B15DCB /* PostNotificationTest.swift */, - AE7ADE481C80C00D00B94CD3 /* MatchErrorTest.swift */, - ); - path = Matchers; - sourceTree = ""; - }; - 1FD8CD041968AB07008ED995 /* Adapters */ = { - isa = PBXGroup; - children = ( - 1FD8CD061968AB07008ED995 /* AdapterProtocols.swift */, - 1FDBD8661AF8A4FF0089F27B /* AssertionDispatcher.swift */, - 1FD8CD051968AB07008ED995 /* AssertionRecorder.swift */, - 1FC494A91C29CBA40010975C /* NimbleEnvironment.swift */, - 1FD8CD071968AB07008ED995 /* NimbleXCTestHandler.swift */, - 1F1871BA1CA89E2500A34BF2 /* NonObjectiveC */, - 1F1871B91CA89E1B00A34BF2 /* ObjectiveC */, - ); - path = Adapters; - sourceTree = ""; - }; - 1FD8CD0C1968AB07008ED995 /* Matchers */ = { - isa = PBXGroup; - children = ( - DDB1BC781A92235600F743C3 /* AllPass.swift */, - 1F1871E31CA89FB600A34BF2 /* AsyncMatcherWrapper.swift */, - 1FD8CD0E1968AB07008ED995 /* BeAKindOf.swift */, - 1FD8CD0D1968AB07008ED995 /* BeAnInstanceOf.swift */, - 1FD8CD0F1968AB07008ED995 /* BeCloseTo.swift */, - 1FD8CD101968AB07008ED995 /* BeEmpty.swift */, - 1FD8CD111968AB07008ED995 /* BeginWith.swift */, - 1FD8CD121968AB07008ED995 /* BeGreaterThan.swift */, - 1FD8CD131968AB07008ED995 /* BeGreaterThanOrEqualTo.swift */, - 1FD8CD141968AB07008ED995 /* BeIdenticalTo.swift */, - 1FD8CD151968AB07008ED995 /* BeLessThan.swift */, - 1FD8CD161968AB07008ED995 /* BeLessThanOrEqual.swift */, - 1FD8CD171968AB07008ED995 /* BeLogical.swift */, - 1FD8CD181968AB07008ED995 /* BeNil.swift */, - 1F91DD301C74BF61002C309F /* BeVoid.swift */, - 1FD8CD1A1968AB07008ED995 /* Contain.swift */, - 1FD8CD1B1968AB07008ED995 /* EndWith.swift */, - 1FD8CD1C1968AB07008ED995 /* Equal.swift */, - 472FD1341B9E085700C7B8DA /* HaveCount.swift */, - DDB4D5EC19FE43C200E9D9FE /* Match.swift */, - 1F1871E51CA89FCD00A34BF2 /* MatcherFunc.swift */, - 1FD8CD1D1968AB07008ED995 /* MatcherProtocols.swift */, - AE7ADE441C80BF8000B94CD3 /* MatchError.swift */, - 1FCF91521C61C8A400B15DCB /* PostNotification.swift */, - 1FD8CD1E1968AB07008ED995 /* RaisesException.swift */, - 7B5358BD1C38479700A23FAA /* SatisfyAnyOf.swift */, - 29EA59651B551EE6002D767E /* ThrowError.swift */, - ); - path = Matchers; - sourceTree = ""; - }; - 1FD8CD241968AB07008ED995 /* Utils */ = { - isa = PBXGroup; - children = ( - 1FD8CD251968AB07008ED995 /* Functional.swift */, - 1FD8CD261968AB07008ED995 /* Async.swift */, - 1FD8CD271968AB07008ED995 /* SourceLocation.swift */, - 1FD8CD281968AB07008ED995 /* Stringers.swift */, - AE4BA9AC1C88DDB500B73906 /* Errors.swift */, - ); - path = Utils; - sourceTree = ""; - }; - 1FFD729A1963FC8200CD29A2 /* objc */ = { - isa = PBXGroup; - children = ( - 1F4A56681A3B3074009E1637 /* NimbleSpecHelper.h */, - 1F4A56651A3B305F009E1637 /* ObjCAsyncTest.m */, - 1F8A37AF1B7C5042001C8357 /* ObjCSyncTest.m */, - 1F4A56691A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m */, - 1F4A566F1A3B319F009E1637 /* ObjCBeCloseToTest.m */, - 1F9DB8FA1A74E793002E96AD /* ObjCBeEmptyTest.m */, - 1F4A568D1A3B342B009E1637 /* ObjCBeFalseTest.m */, - 1F4A56871A3B33CB009E1637 /* ObjCBeFalsyTest.m */, - 1F4A56721A3B3210009E1637 /* ObjCBeginWithTest.m */, - 1F4A56781A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m */, - 1F4A56751A3B3253009E1637 /* ObjCBeGreaterThanTest.m */, - 1F4A567B1A3B3311009E1637 /* ObjCBeIdenticalToTest.m */, - 1F4A566C1A3B3159009E1637 /* ObjCBeKindOfTest.m */, - 1F4A56811A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m */, - 1F4A567E1A3B333F009E1637 /* ObjCBeLessThanTest.m */, - 1F4A56901A3B344A009E1637 /* ObjCBeNilTest.m */, - 1F4A568A1A3B3407009E1637 /* ObjCBeTrueTest.m */, - 1F4A56841A3B33A0009E1637 /* ObjCBeTruthyTest.m */, - 1F4A56931A3B346F009E1637 /* ObjCContainTest.m */, - 1F4A56961A3B34AA009E1637 /* ObjCEndWithTest.m */, - 1F4A56991A3B3539009E1637 /* ObjCEqualTest.m */, - 4793854C1BA0BB2500296F85 /* ObjCHaveCount.m */, - 1F4A569C1A3B3565009E1637 /* ObjCMatchTest.m */, - 1F4A569F1A3B359E009E1637 /* ObjCRaiseExceptionTest.m */, - 965B0D081B62B8ED0005AE66 /* ObjCUserDescriptionTest.m */, - DDEFAEB31A93CBE6005CA37A /* ObjCAllPassTest.m */, - 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */, - 8DF1C3F61C94FC75004B2D36 /* ObjcStringersTest.m */, - ); - path = objc; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 1F1A74261940169200FFFC47 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F1871C91CA89EDB00A34BF2 /* NMBStringify.h in Headers */, - 1F1871C51CA89EDB00A34BF2 /* DSL.h in Headers */, - 1F1871C71CA89EDB00A34BF2 /* NMBExceptionCapture.h in Headers */, - 1F1A742F1940169200FFFC47 /* Nimble.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F5DF1521BDCA0CE00C3A531 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F1871E21CA89EF600A34BF2 /* NMBStringify.h in Headers */, - 1F1871E01CA89EF600A34BF2 /* DSL.h in Headers */, - 1F1871E11CA89EF600A34BF2 /* NMBExceptionCapture.h in Headers */, - 1F5DF1AE1BDCA17600C3A531 /* Nimble.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F925EAA195C0D6300ED456B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F1871DF1CA89EF500A34BF2 /* NMBStringify.h in Headers */, - 1F1871DD1CA89EF500A34BF2 /* DSL.h in Headers */, - 1F1871DE1CA89EF500A34BF2 /* NMBExceptionCapture.h in Headers */, - 1F925EC7195C0DD100ED456B /* Nimble.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 1F1A74281940169200FFFC47 /* Nimble-iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOS" */; - buildPhases = ( - 1F1A74241940169200FFFC47 /* Sources */, - 1F1A74251940169200FFFC47 /* Frameworks */, - 1F1A74261940169200FFFC47 /* Headers */, - 1F1A74271940169200FFFC47 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Nimble-iOS"; - productName = "Nimble-iOS"; - productReference = 1F1A74291940169200FFFC47 /* Nimble.framework */; - productType = "com.apple.product-type.framework"; - }; - 1F1A74331940169200FFFC47 /* Nimble-iOSTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOSTests" */; - buildPhases = ( - 1F1A74301940169200FFFC47 /* Sources */, - 1F1A74311940169200FFFC47 /* Frameworks */, - 1F1A74321940169200FFFC47 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1F1A74371940169200FFFC47 /* PBXTargetDependency */, - 1F925EA5195C0C8500ED456B /* PBXTargetDependency */, - 1F925EA7195C0C8500ED456B /* PBXTargetDependency */, - 1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */, - ); - name = "Nimble-iOSTests"; - productName = "Nimble-iOSTests"; - productReference = 1F1A74341940169200FFFC47 /* NimbleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOS" */; - buildPhases = ( - 1F5DF1501BDCA0CE00C3A531 /* Sources */, - 1F5DF1511BDCA0CE00C3A531 /* Frameworks */, - 1F5DF1521BDCA0CE00C3A531 /* Headers */, - 1F5DF1531BDCA0CE00C3A531 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Nimble-tvOS"; - productName = "Nimble-tvOS"; - productReference = 1F5DF1551BDCA0CE00C3A531 /* Nimble.framework */; - productType = "com.apple.product-type.framework"; - }; - 1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOSTests" */; - buildPhases = ( - 1F5DF15A1BDCA0CE00C3A531 /* Sources */, - 1F5DF15B1BDCA0CE00C3A531 /* Frameworks */, - 1F5DF15C1BDCA0CE00C3A531 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */, - ); - name = "Nimble-tvOSTests"; - productName = "Nimble-tvOSTests"; - productReference = 1F5DF15E1BDCA0CE00C3A531 /* NimbleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 1F925EAC195C0D6300ED456B /* Nimble-OSX */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSX" */; - buildPhases = ( - 1F925EA8195C0D6300ED456B /* Sources */, - 1F925EA9195C0D6300ED456B /* Frameworks */, - 1F925EAA195C0D6300ED456B /* Headers */, - 1F925EAB195C0D6300ED456B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Nimble-OSX"; - productName = "Nimble-OSX"; - productReference = 1F925EAD195C0D6300ED456B /* Nimble.framework */; - productType = "com.apple.product-type.framework"; - }; - 1F925EB6195C0D6300ED456B /* Nimble-OSXTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSXTests" */; - buildPhases = ( - 1F925EB3195C0D6300ED456B /* Sources */, - 1F925EB4195C0D6300ED456B /* Frameworks */, - 1F925EB5195C0D6300ED456B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1F925EBA195C0D6300ED456B /* PBXTargetDependency */, - 1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */, - 1F9B7C001968AD760094EB8F /* PBXTargetDependency */, - 1F9B7C021968AD820094EB8F /* PBXTargetDependency */, - ); - name = "Nimble-OSXTests"; - productName = "Nimble-OSXTests"; - productReference = 1F925EB7195C0D6300ED456B /* NimbleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 1F1A74201940169200FFFC47 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0730; - LastUpgradeCheck = 0710; - ORGANIZATIONNAME = "Jeff Hui"; - TargetAttributes = { - 1F1A74281940169200FFFC47 = { - CreatedOnToolsVersion = 6.0; - LastSwiftMigration = 0800; - }; - 1F1A74331940169200FFFC47 = { - CreatedOnToolsVersion = 6.0; - LastSwiftMigration = 0800; - TestTargetID = 1F1A74281940169200FFFC47; - }; - 1F5DF1541BDCA0CE00C3A531 = { - CreatedOnToolsVersion = 7.1; - LastSwiftMigration = 0800; - }; - 1F5DF15D1BDCA0CE00C3A531 = { - CreatedOnToolsVersion = 7.1; - LastSwiftMigration = 0800; - }; - 1F925EAC195C0D6300ED456B = { - CreatedOnToolsVersion = 6.0; - LastSwiftMigration = 0800; - }; - 1F925EB6195C0D6300ED456B = { - CreatedOnToolsVersion = 6.0; - LastSwiftMigration = 0800; - TestTargetID = 1F925EAC195C0D6300ED456B; - }; - }; - }; - buildConfigurationList = 1F1A74231940169200FFFC47 /* Build configuration list for PBXProject "Nimble" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 1F1A741F1940169200FFFC47; - productRefGroup = 1F1A742A1940169200FFFC47 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 1F1A74281940169200FFFC47 /* Nimble-iOS */, - 1F1A74331940169200FFFC47 /* Nimble-iOSTests */, - 1F925EAC195C0D6300ED456B /* Nimble-OSX */, - 1F925EB6195C0D6300ED456B /* Nimble-OSXTests */, - 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */, - 1F5DF15D1BDCA0CE00C3A531 /* Nimble-tvOSTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 1F1A74271940169200FFFC47 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F1A74321940169200FFFC47 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F5DF1531BDCA0CE00C3A531 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F5DF15C1BDCA0CE00C3A531 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F925EAB195C0D6300ED456B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F925EB5195C0D6300ED456B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 1F1A74241940169200FFFC47 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1FD8CD401968AB07008ED995 /* BeCloseTo.swift in Sources */, - 1F1871C81CA89EDB00A34BF2 /* NMBExceptionCapture.m in Sources */, - 1FD8CD361968AB07008ED995 /* Expectation.swift in Sources */, - 1FD8CD321968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */, - 1F43728F1A1B344000EB80F8 /* Stringers.swift in Sources */, - 1F43728D1A1B343D00EB80F8 /* SourceLocation.swift in Sources */, - 1FD8CD4E1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */, - 1FDBD8671AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */, - 1F43728A1A1B343800EB80F8 /* Functional.swift in Sources */, - AE4BA9AD1C88DDB500B73906 /* Errors.swift in Sources */, - 1FD8CD3C1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */, - 1FD8CD501968AB07008ED995 /* BeLogical.swift in Sources */, - 1F1871CB1CA89EDB00A34BF2 /* NMBExpectation.swift in Sources */, - DA9E8C821A414BB9002633C2 /* DSL+Wait.swift in Sources */, - DDB1BC791A92235600F743C3 /* AllPass.swift in Sources */, - 1FD8CD3E1968AB07008ED995 /* BeAKindOf.swift in Sources */, - DDB4D5ED19FE43C200E9D9FE /* Match.swift in Sources */, - 1F91DD311C74BF61002C309F /* BeVoid.swift in Sources */, - 1FCF91531C61C8A400B15DCB /* PostNotification.swift in Sources */, - 1FD8CD2E1968AB07008ED995 /* AssertionRecorder.swift in Sources */, - 29EA59661B551EE6002D767E /* ThrowError.swift in Sources */, - 1FD8CD5A1968AB07008ED995 /* Equal.swift in Sources */, - 1FD8CD4C1968AB07008ED995 /* BeLessThan.swift in Sources */, - 1F1871CC1CA89EDB00A34BF2 /* NMBObjCMatcher.swift in Sources */, - 1FD8CD461968AB07008ED995 /* BeGreaterThan.swift in Sources */, - F8A1BE2F1CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, - 1F1871C61CA89EDB00A34BF2 /* DSL.m in Sources */, - 1FD8CD301968AB07008ED995 /* AdapterProtocols.swift in Sources */, - AE7ADE451C80BF8000B94CD3 /* MatchError.swift in Sources */, - 1FC494AA1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, - 1FD8CD5E1968AB07008ED995 /* RaisesException.swift in Sources */, - 1FD8CD561968AB07008ED995 /* Contain.swift in Sources */, - 1FD8CD481968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */, - 1FD8CD441968AB07008ED995 /* BeginWith.swift in Sources */, - 1FD8CD4A1968AB07008ED995 /* BeIdenticalTo.swift in Sources */, - 1F1871E61CA89FCD00A34BF2 /* MatcherFunc.swift in Sources */, - 1FD8CD421968AB07008ED995 /* BeEmpty.swift in Sources */, - 1F1871E41CA89FB600A34BF2 /* AsyncMatcherWrapper.swift in Sources */, - 1F1871CA1CA89EDB00A34BF2 /* NMBStringify.m in Sources */, - 1FD8CD521968AB07008ED995 /* BeNil.swift in Sources */, - 1FD8CD6A1968AB07008ED995 /* Async.swift in Sources */, - 1FD8CD581968AB07008ED995 /* EndWith.swift in Sources */, - 1FD8CD5C1968AB07008ED995 /* MatcherProtocols.swift in Sources */, - 1FD8CD341968AB07008ED995 /* DSL.swift in Sources */, - 7B5358BE1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, - 1FD8CD381968AB07008ED995 /* Expression.swift in Sources */, - 1FD8CD3A1968AB07008ED995 /* FailureMessage.swift in Sources */, - 472FD1351B9E085700C7B8DA /* HaveCount.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F1A74301940169200FFFC47 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F4A569A1A3B3539009E1637 /* ObjCEqualTest.m in Sources */, - 1F925EEC195C12C800ED456B /* RaisesExceptionTest.swift in Sources */, - 1F925EFF195C187600ED456B /* EndWithTest.swift in Sources */, - 1F1B5AD41963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */, - 1F925F0E195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */, - 1F4A56661A3B305F009E1637 /* ObjCAsyncTest.m in Sources */, - 1F925EFC195C186800ED456B /* BeginWithTest.swift in Sources */, - 1F14FB64194180C5009F2A08 /* utils.swift in Sources */, - DDB4D5F019FE442800E9D9FE /* MatchTest.swift in Sources */, - 1F4A56731A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */, - 1F4A56821A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */, - 8DF1C3F71C94FC75004B2D36 /* ObjcStringersTest.m in Sources */, - 1F925F02195C189500ED456B /* ContainTest.swift in Sources */, - 1F4A56881A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */, - 1F4A568E1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */, - 1F925F11195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */, - 1F925EEF195C136500ED456B /* BeLogicalTest.swift in Sources */, - 1F4A56A01A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */, - 1F925F0B195C18E100ED456B /* BeLessThanTest.swift in Sources */, - 1F9DB8FB1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */, - 1FB90098195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */, - 1F91DD2D1C74BF36002C309F /* BeVoidTest.swift in Sources */, - 1F4A56761A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */, - 1F925EF9195C175000ED456B /* BeNilTest.swift in Sources */, - 1F4A56701A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */, - 1F4A56971A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */, - 1F4A567C1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */, - 965B0D0C1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */, - 1FCF914F1C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, - 965B0D091B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */, - 1F4A56911A3B344A009E1637 /* ObjCBeNilTest.m in Sources */, - 1F8A37B01B7C5042001C8357 /* ObjCSyncTest.m in Sources */, - 1F4A56941A3B346F009E1637 /* ObjCContainTest.m in Sources */, - 1F299EAB19627B2D002641AF /* BeEmptyTest.swift in Sources */, - 1F925EF6195C147800ED456B /* BeCloseToTest.swift in Sources */, - 1F4A56791A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, - AE7ADE491C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, - 1F4A568B1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */, - DDEFAEB41A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */, - 1F4A567F1A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */, - 1F925EE6195C121200ED456B /* AsynchronousTest.swift in Sources */, - 1F0648CC19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */, - 1F4A56851A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */, - DD9A9A8F19CF439B00706F49 /* BeIdenticalToObjectTest.swift in Sources */, - 1F0648D41963AAB2001F9C46 /* SynchronousTests.swift in Sources */, - 347155CA1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, - 4793854D1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */, - 1F925F08195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */, - 7B5358BA1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, - 1F925F05195C18B700ED456B /* EqualTest.swift in Sources */, - 1F4A566D1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */, - DD72EC641A93874A002F7651 /* AllPassTest.swift in Sources */, - 7B5358C51C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */, - 1F4A569D1A3B3565009E1637 /* ObjCMatchTest.m in Sources */, - 1F925EE9195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */, - 29EA59631B551ED2002D767E /* ThrowErrorTest.swift in Sources */, - 1F4A566A1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */, - 472FD13B1B9E0CFE00C7B8DA /* HaveCountTest.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F5DF1501BDCA0CE00C3A531 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F5DF1791BDCA0F500C3A531 /* BeCloseTo.swift in Sources */, - 1F5DF16C1BDCA0F500C3A531 /* AssertionRecorder.swift in Sources */, - 1F1871D71CA89EEF00A34BF2 /* NMBExceptionCapture.m in Sources */, - 1F5DF1881BDCA0F500C3A531 /* MatcherProtocols.swift in Sources */, - 1F5DF16E1BDCA0F500C3A531 /* NimbleXCTestHandler.swift in Sources */, - 1F5DF1751BDCA0F500C3A531 /* FailureMessage.swift in Sources */, - 1F5DF1801BDCA0F500C3A531 /* BeLessThanOrEqual.swift in Sources */, - 1F1871E81CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */, - 1F5DF18A1BDCA0F500C3A531 /* ThrowError.swift in Sources */, - 1F5DF1891BDCA0F500C3A531 /* RaisesException.swift in Sources */, - 1F5DF1761BDCA0F500C3A531 /* AllPass.swift in Sources */, - AE4BA9AF1C88DDB500B73906 /* Errors.swift in Sources */, - 1F5DF1861BDCA0F500C3A531 /* HaveCount.swift in Sources */, - 1F5DF1811BDCA0F500C3A531 /* BeLogical.swift in Sources */, - 1F1871DB1CA89EF100A34BF2 /* NMBExpectation.swift in Sources */, - 1F5DF1741BDCA0F500C3A531 /* Expression.swift in Sources */, - 1F5DF1781BDCA0F500C3A531 /* BeAnInstanceOf.swift in Sources */, - 1F5DF1771BDCA0F500C3A531 /* BeAKindOf.swift in Sources */, - 1F5DF17F1BDCA0F500C3A531 /* BeLessThan.swift in Sources */, - 1F5DF17C1BDCA0F500C3A531 /* BeGreaterThan.swift in Sources */, - 1F91DD331C74BF61002C309F /* BeVoid.swift in Sources */, - 1FCF91551C61C8A400B15DCB /* PostNotification.swift in Sources */, - 1F5DF1831BDCA0F500C3A531 /* Contain.swift in Sources */, - 1F5DF1851BDCA0F500C3A531 /* Equal.swift in Sources */, - 1F1871DC1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */, - F8A1BE311CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, - 1F5DF1711BDCA0F500C3A531 /* DSL+Wait.swift in Sources */, - 1F1871D61CA89EEF00A34BF2 /* DSL.m in Sources */, - 1F5DF17D1BDCA0F500C3A531 /* BeGreaterThanOrEqualTo.swift in Sources */, - AE7ADE471C80BF8000B94CD3 /* MatchError.swift in Sources */, - 1FC494AC1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, - 1F5DF18E1BDCA0F500C3A531 /* Stringers.swift in Sources */, - 1F5DF16D1BDCA0F500C3A531 /* AdapterProtocols.swift in Sources */, - 1F5DF17B1BDCA0F500C3A531 /* BeginWith.swift in Sources */, - 1F5DF17E1BDCA0F500C3A531 /* BeIdenticalTo.swift in Sources */, - 1F1871E91CA8A18700A34BF2 /* MatcherFunc.swift in Sources */, - 1F5DF17A1BDCA0F500C3A531 /* BeEmpty.swift in Sources */, - 1F5DF18C1BDCA0F500C3A531 /* Async.swift in Sources */, - 1F1871D81CA89EEF00A34BF2 /* NMBStringify.m in Sources */, - 1F5DF1821BDCA0F500C3A531 /* BeNil.swift in Sources */, - 1F5DF16F1BDCA0F500C3A531 /* AssertionDispatcher.swift in Sources */, - 1F5DF1841BDCA0F500C3A531 /* EndWith.swift in Sources */, - 1F5DF18D1BDCA0F500C3A531 /* SourceLocation.swift in Sources */, - 1F5DF1701BDCA0F500C3A531 /* DSL.swift in Sources */, - 1F5DF1721BDCA0F500C3A531 /* Expectation.swift in Sources */, - 7B5358C01C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, - 1F5DF18B1BDCA0F500C3A531 /* Functional.swift in Sources */, - 1F5DF1871BDCA0F500C3A531 /* Match.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F5DF15A1BDCA0CE00C3A531 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - CD79C9AD1D2CC848004B6F9A /* ObjCBeTrueTest.m in Sources */, - CD79C9B41D2CC848004B6F9A /* ObjCRaiseExceptionTest.m in Sources */, - 1F5DF1A31BDCA10200C3A531 /* BeLogicalTest.swift in Sources */, - 1F5DF1951BDCA10200C3A531 /* utils.swift in Sources */, - CD79C9B01D2CC848004B6F9A /* ObjCEndWithTest.m in Sources */, - CD79C9B21D2CC848004B6F9A /* ObjCHaveCount.m in Sources */, - CD79C9A41D2CC848004B6F9A /* ObjCBeFalsyTest.m in Sources */, - 1F5DF1981BDCA10200C3A531 /* BeAKindOfTest.swift in Sources */, - 1F5DF19B1BDCA10200C3A531 /* BeEmptyTest.swift in Sources */, - 7B5358BC1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, - 1F5DF1A11BDCA10200C3A531 /* BeLessThanOrEqualToTest.swift in Sources */, - 1F5DF1961BDCA10200C3A531 /* ObjectWithLazyProperty.swift in Sources */, - 1F5DF1AB1BDCA10200C3A531 /* ThrowErrorTest.swift in Sources */, - CD79C9A91D2CC848004B6F9A /* ObjCBeKindOfTest.m in Sources */, - 1F5DF1A51BDCA10200C3A531 /* ContainTest.swift in Sources */, - AE7ADE4B1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, - CD79C9B31D2CC848004B6F9A /* ObjCMatchTest.m in Sources */, - 1F5DF19E1BDCA10200C3A531 /* BeGreaterThanTest.swift in Sources */, - 1F5DF1A21BDCA10200C3A531 /* BeLessThanTest.swift in Sources */, - CD79C9AB1D2CC848004B6F9A /* ObjCBeLessThanTest.m in Sources */, - CD79C9A81D2CC848004B6F9A /* ObjCBeIdenticalToTest.m in Sources */, - CD79C9AE1D2CC848004B6F9A /* ObjCBeTruthyTest.m in Sources */, - 1F5DF1921BDCA10200C3A531 /* AsynchronousTest.swift in Sources */, - 1F5DF1A91BDCA10200C3A531 /* MatchTest.swift in Sources */, - 1F5DF1A81BDCA10200C3A531 /* HaveCountTest.swift in Sources */, - 1F5DF1971BDCA10200C3A531 /* AllPassTest.swift in Sources */, - CD79C9A61D2CC848004B6F9A /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, - CD79C99F1D2CC835004B6F9A /* ObjCSyncTest.m in Sources */, - 1FCF91511C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, - CD79C9B51D2CC848004B6F9A /* ObjCUserDescriptionTest.m in Sources */, - 1F5DF19C1BDCA10200C3A531 /* BeginWithTest.swift in Sources */, - 1F5DF1A01BDCA10200C3A531 /* BeIdenticalToTest.swift in Sources */, - 1F5DF19A1BDCA10200C3A531 /* BeCloseToTest.swift in Sources */, - 1F5DF1A61BDCA10200C3A531 /* EndWithTest.swift in Sources */, - CD79C9A31D2CC841004B6F9A /* ObjCBeFalseTest.m in Sources */, - 1F5DF1A71BDCA10200C3A531 /* EqualTest.swift in Sources */, - CD79C9AA1D2CC848004B6F9A /* ObjCBeLessThanOrEqualToTest.m in Sources */, - 1F5DF1931BDCA10200C3A531 /* SynchronousTests.swift in Sources */, - CD79C9A11D2CC83B004B6F9A /* ObjCBeCloseToTest.m in Sources */, - 1F5DF19D1BDCA10200C3A531 /* BeGreaterThanOrEqualToTest.swift in Sources */, - 1F5DF1A41BDCA10200C3A531 /* BeNilTest.swift in Sources */, - CD79C9A71D2CC848004B6F9A /* ObjCBeGreaterThanTest.m in Sources */, - CD79C9A51D2CC848004B6F9A /* ObjCBeginWithTest.m in Sources */, - 347155CC1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, - 1F5DF1AA1BDCA10200C3A531 /* RaisesExceptionTest.swift in Sources */, - 8DF1C3F91C94FD0C004B2D36 /* ObjcStringersTest.m in Sources */, - 1F5DF1941BDCA10200C3A531 /* UserDescriptionTest.swift in Sources */, - CD79C9AF1D2CC848004B6F9A /* ObjCContainTest.m in Sources */, - 1F5DF19F1BDCA10200C3A531 /* BeIdenticalToObjectTest.swift in Sources */, - CD79C99E1D2CC832004B6F9A /* ObjCAsyncTest.m in Sources */, - 1F91DD2F1C74BF36002C309F /* BeVoidTest.swift in Sources */, - CD79C9B71D2CC848004B6F9A /* ObjCSatisfyAnyOfTest.m in Sources */, - 1F5DF1991BDCA10200C3A531 /* BeAnInstanceOfTest.swift in Sources */, - CD79C9B11D2CC848004B6F9A /* ObjCEqualTest.m in Sources */, - CD79C9A21D2CC83E004B6F9A /* ObjCBeEmptyTest.m in Sources */, - CD79C9AC1D2CC848004B6F9A /* ObjCBeNilTest.m in Sources */, - CD79C9A01D2CC839004B6F9A /* ObjCBeAnInstanceOfTest.m in Sources */, - CD79C9B61D2CC848004B6F9A /* ObjCAllPassTest.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F925EA8195C0D6300ED456B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1FD8CD411968AB07008ED995 /* BeCloseTo.swift in Sources */, - 1F1871D31CA89EEE00A34BF2 /* NMBExceptionCapture.m in Sources */, - 1FD8CD371968AB07008ED995 /* Expectation.swift in Sources */, - 1FD8CD331968AB07008ED995 /* NimbleXCTestHandler.swift in Sources */, - 1F43728E1A1B343F00EB80F8 /* Stringers.swift in Sources */, - 1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */, - 1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */, - 1F1871E71CA8A18400A34BF2 /* AsyncMatcherWrapper.swift in Sources */, - 1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */, - 1F43728B1A1B343900EB80F8 /* Functional.swift in Sources */, - AE4BA9AE1C88DDB500B73906 /* Errors.swift in Sources */, - 1FD8CD3D1968AB07008ED995 /* BeAnInstanceOf.swift in Sources */, - 1FD8CD511968AB07008ED995 /* BeLogical.swift in Sources */, - 1F1871D91CA89EF100A34BF2 /* NMBExpectation.swift in Sources */, - DA9E8C831A414BB9002633C2 /* DSL+Wait.swift in Sources */, - DDB1BC7A1A92235600F743C3 /* AllPass.swift in Sources */, - 1FD8CD3F1968AB07008ED995 /* BeAKindOf.swift in Sources */, - 1FD8CD2F1968AB07008ED995 /* AssertionRecorder.swift in Sources */, - 1F91DD321C74BF61002C309F /* BeVoid.swift in Sources */, - 1FCF91541C61C8A400B15DCB /* PostNotification.swift in Sources */, - DDB4D5EE19FE43C200E9D9FE /* Match.swift in Sources */, - 29EA59671B551EE6002D767E /* ThrowError.swift in Sources */, - 1FD8CD5B1968AB07008ED995 /* Equal.swift in Sources */, - 1FD8CD4D1968AB07008ED995 /* BeLessThan.swift in Sources */, - 1FD8CD471968AB07008ED995 /* BeGreaterThan.swift in Sources */, - F8A1BE301CB3710900031679 /* XCTestObservationCenter+Register.m in Sources */, - 1F1871DA1CA89EF100A34BF2 /* NMBObjCMatcher.swift in Sources */, - 1FD8CD311968AB07008ED995 /* AdapterProtocols.swift in Sources */, - 1F1871D21CA89EEE00A34BF2 /* DSL.m in Sources */, - AE7ADE461C80BF8000B94CD3 /* MatchError.swift in Sources */, - 1FC494AB1C29CBA40010975C /* NimbleEnvironment.swift in Sources */, - 1FD8CD5F1968AB07008ED995 /* RaisesException.swift in Sources */, - 1FD8CD571968AB07008ED995 /* Contain.swift in Sources */, - 1FD8CD491968AB07008ED995 /* BeGreaterThanOrEqualTo.swift in Sources */, - 1FD8CD451968AB07008ED995 /* BeginWith.swift in Sources */, - 1F1871EB1CA8A18800A34BF2 /* MatcherFunc.swift in Sources */, - 1FD8CD4B1968AB07008ED995 /* BeIdenticalTo.swift in Sources */, - 1FD8CD431968AB07008ED995 /* BeEmpty.swift in Sources */, - 1F1871D41CA89EEE00A34BF2 /* NMBStringify.m in Sources */, - 1FD8CD531968AB07008ED995 /* BeNil.swift in Sources */, - 1FD8CD6B1968AB07008ED995 /* Async.swift in Sources */, - 1FD8CD591968AB07008ED995 /* EndWith.swift in Sources */, - 1FD8CD5D1968AB07008ED995 /* MatcherProtocols.swift in Sources */, - 1FD8CD351968AB07008ED995 /* DSL.swift in Sources */, - 7B5358BF1C38479700A23FAA /* SatisfyAnyOf.swift in Sources */, - 1FD8CD391968AB07008ED995 /* Expression.swift in Sources */, - 1FD8CD3B1968AB07008ED995 /* FailureMessage.swift in Sources */, - 472FD1391B9E0A9700C7B8DA /* HaveCount.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F925EB3195C0D6300ED456B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F4A569B1A3B3539009E1637 /* ObjCEqualTest.m in Sources */, - 1F925EED195C12C800ED456B /* RaisesExceptionTest.swift in Sources */, - 1F925F00195C187600ED456B /* EndWithTest.swift in Sources */, - 1F1B5AD51963E13900CA8BF9 /* BeAKindOfTest.swift in Sources */, - 1F925F0F195C18F500ED456B /* BeLessThanOrEqualToTest.swift in Sources */, - 1F4A56671A3B305F009E1637 /* ObjCAsyncTest.m in Sources */, - 1F925EFD195C186800ED456B /* BeginWithTest.swift in Sources */, - 1F925EE2195C0DFD00ED456B /* utils.swift in Sources */, - DDB4D5F119FE442800E9D9FE /* MatchTest.swift in Sources */, - 1F4A56741A3B3210009E1637 /* ObjCBeginWithTest.m in Sources */, - 1F4A56831A3B336F009E1637 /* ObjCBeLessThanOrEqualToTest.m in Sources */, - 8DF1C3F81C94FC75004B2D36 /* ObjcStringersTest.m in Sources */, - 1F925F03195C189500ED456B /* ContainTest.swift in Sources */, - 1F4A56891A3B33CB009E1637 /* ObjCBeFalsyTest.m in Sources */, - 1F4A568F1A3B342B009E1637 /* ObjCBeFalseTest.m in Sources */, - 1F925F12195C190B00ED456B /* BeGreaterThanOrEqualToTest.swift in Sources */, - 1F925EF0195C136500ED456B /* BeLogicalTest.swift in Sources */, - 1F4A56A11A3B359E009E1637 /* ObjCRaiseExceptionTest.m in Sources */, - 1F925F0C195C18E100ED456B /* BeLessThanTest.swift in Sources */, - 1F9DB8FC1A74E793002E96AD /* ObjCBeEmptyTest.m in Sources */, - 1FB90099195EC4B8001D7FAE /* BeIdenticalToTest.swift in Sources */, - 1F91DD2E1C74BF36002C309F /* BeVoidTest.swift in Sources */, - 1F4A56771A3B3253009E1637 /* ObjCBeGreaterThanTest.m in Sources */, - 1F925EFA195C175000ED456B /* BeNilTest.swift in Sources */, - 1F4A56711A3B319F009E1637 /* ObjCBeCloseToTest.m in Sources */, - 1F4A56981A3B34AA009E1637 /* ObjCEndWithTest.m in Sources */, - 1F4A567D1A3B3311009E1637 /* ObjCBeIdenticalToTest.m in Sources */, - 965B0D0D1B62C06D0005AE66 /* UserDescriptionTest.swift in Sources */, - 1FCF91501C61C85A00B15DCB /* PostNotificationTest.swift in Sources */, - 965B0D0A1B62B8ED0005AE66 /* ObjCUserDescriptionTest.m in Sources */, - 1F4A56921A3B344A009E1637 /* ObjCBeNilTest.m in Sources */, - 1F8A37B11B7C5042001C8357 /* ObjCSyncTest.m in Sources */, - 1F4A56951A3B346F009E1637 /* ObjCContainTest.m in Sources */, - 1F299EAC19627B2D002641AF /* BeEmptyTest.swift in Sources */, - 1F925EF7195C147800ED456B /* BeCloseToTest.swift in Sources */, - 1F4A567A1A3B32E3009E1637 /* ObjCBeGreaterThanOrEqualToTest.m in Sources */, - AE7ADE4A1C80C00D00B94CD3 /* MatchErrorTest.swift in Sources */, - 1F4A568C1A3B3407009E1637 /* ObjCBeTrueTest.m in Sources */, - DDEFAEB51A93CBE6005CA37A /* ObjCAllPassTest.m in Sources */, - 1F4A56801A3B333F009E1637 /* ObjCBeLessThanTest.m in Sources */, - 1F925EE7195C121200ED456B /* AsynchronousTest.swift in Sources */, - 1F0648CD19639F5A001F9C46 /* ObjectWithLazyProperty.swift in Sources */, - 1F4A56861A3B33A0009E1637 /* ObjCBeTruthyTest.m in Sources */, - DD9A9A9019CF43AD00706F49 /* BeIdenticalToObjectTest.swift in Sources */, - 1F0648D51963AAB2001F9C46 /* SynchronousTests.swift in Sources */, - 347155CB1C337C8900549F03 /* XCTestCaseProvider.swift in Sources */, - 4793854E1BA0BB2500296F85 /* ObjCHaveCount.m in Sources */, - 1F925F09195C18CF00ED456B /* BeGreaterThanTest.swift in Sources */, - 7B5358BB1C3846C900A23FAA /* SatisfyAnyOfTest.swift in Sources */, - 1F925F06195C18B700ED456B /* EqualTest.swift in Sources */, - 1F4A566E1A3B3159009E1637 /* ObjCBeKindOfTest.m in Sources */, - DD72EC651A93874A002F7651 /* AllPassTest.swift in Sources */, - 7B5358C61C39184200A23FAA /* ObjCSatisfyAnyOfTest.m in Sources */, - 1F4A569E1A3B3565009E1637 /* ObjCMatchTest.m in Sources */, - 1F925EEA195C124400ED456B /* BeAnInstanceOfTest.swift in Sources */, - 29EA59641B551ED2002D767E /* ThrowErrorTest.swift in Sources */, - 1F4A566B1A3B3108009E1637 /* ObjCBeAnInstanceOfTest.m in Sources */, - 472FD13A1B9E0A9F00C7B8DA /* HaveCountTest.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 1F1A74371940169200FFFC47 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; - targetProxy = 1F1A74361940169200FFFC47 /* PBXContainerItemProxy */; - }; - 1F5DF1611BDCA0CE00C3A531 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F5DF1541BDCA0CE00C3A531 /* Nimble-tvOS */; - targetProxy = 1F5DF1601BDCA0CE00C3A531 /* PBXContainerItemProxy */; - }; - 1F6BB82B1968BFF9009F1DBB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; - targetProxy = 1F6BB82A1968BFF9009F1DBB /* PBXContainerItemProxy */; - }; - 1F925EA5195C0C8500ED456B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; - targetProxy = 1F925EA4195C0C8500ED456B /* PBXContainerItemProxy */; - }; - 1F925EA7195C0C8500ED456B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F1A74281940169200FFFC47 /* Nimble-iOS */; - targetProxy = 1F925EA6195C0C8500ED456B /* PBXContainerItemProxy */; - }; - 1F925EBA195C0D6300ED456B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; - targetProxy = 1F925EB9195C0D6300ED456B /* PBXContainerItemProxy */; - }; - 1F9B7BFE1968AD760094EB8F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; - targetProxy = 1F9B7BFD1968AD760094EB8F /* PBXContainerItemProxy */; - }; - 1F9B7C001968AD760094EB8F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; - targetProxy = 1F9B7BFF1968AD760094EB8F /* PBXContainerItemProxy */; - }; - 1F9B7C021968AD820094EB8F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F925EAC195C0D6300ED456B /* Nimble-OSX */; - targetProxy = 1F9B7C011968AD820094EB8F /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 1F1A743D1940169200FFFC47 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - CODE_SIGN_IDENTITY = ""; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - METAL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 2.3; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 1F1A743E1940169200FFFC47 /* 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_MODULES_AUTOLINK = NO; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - CODE_SIGN_IDENTITY = ""; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - METAL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_VERSION = 2.3; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 1F1A74401940169200FFFC47 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_TREAT_WARNINGS_AS_ERRORS = YES; - INFOPLIST_FILE = Sources/Nimble/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - ONLY_ACTIVE_ARCH = NO; - OTHER_LDFLAGS = ( - "-weak_framework", - XCTest, - "-weak-lswiftXCTest", - ); - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Nimble; - PRODUCT_NAME = Nimble; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 1F1A74411940169200FFFC47 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_TREAT_WARNINGS_AS_ERRORS = YES; - INFOPLIST_FILE = Sources/Nimble/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - OTHER_LDFLAGS = ( - "-weak_framework", - XCTest, - "-weak-lswiftXCTest", - ); - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Nimble; - PRODUCT_NAME = Nimble; - SKIP_INSTALL = YES; - }; - name = Release; - }; - 1F1A74431940169200FFFC47 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = Tests/Nimble/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - METAL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = NimbleTests; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 1F1A74441940169200FFFC47 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - INFOPLIST_FILE = Tests/Nimble/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - METAL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = NimbleTests; - }; - name = Release; - }; - 1F5DF1661BDCA0CE00C3A531 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = Sources/Nimble/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ( - "-weak_framework", - XCTest, - "-weak-lswiftXCTest", - ); - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Nimble; - PRODUCT_NAME = Nimble; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Debug; - }; - 1F5DF1671BDCA0CE00C3A531 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = Sources/Nimble/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ( - "-weak_framework", - XCTest, - "-weak-lswiftXCTest", - ); - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Nimble; - PRODUCT_NAME = Nimble; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Release; - }; - 1F5DF1681BDCA0CE00C3A531 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = dwarf; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = Tests/Nimble/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = NimbleTests; - SDKROOT = appletvos; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Debug; - }; - 1F5DF1691BDCA0CE00C3A531 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = Tests/Nimble/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = NimbleTests; - SDKROOT = appletvos; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Release; - }; - 1F925EC1195C0D6300ED456B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - FRAMEWORK_VERSION = A; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_TREAT_WARNINGS_AS_ERRORS = YES; - INFOPLIST_FILE = Sources/Nimble/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.9; - METAL_ENABLE_DEBUG_INFO = YES; - OTHER_LDFLAGS = ( - "-weak_framework", - XCTest, - "-weak-lswiftXCTest", - ); - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Nimble; - PRODUCT_NAME = Nimble; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VALID_ARCHS = x86_64; - }; - name = Debug; - }; - 1F925EC2195C0D6300ED456B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - FRAMEWORK_VERSION = A; - GCC_TREAT_WARNINGS_AS_ERRORS = YES; - INFOPLIST_FILE = Sources/Nimble/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.9; - METAL_ENABLE_DEBUG_INFO = NO; - OTHER_LDFLAGS = ( - "-weak_framework", - XCTest, - "-weak-lswiftXCTest", - ); - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Nimble; - PRODUCT_NAME = Nimble; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VALID_ARCHS = x86_64; - }; - name = Release; - }; - 1F925EC4195C0D6300ED456B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(DEVELOPER_FRAMEWORKS_DIR)", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = Tests/Nimble/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.9; - METAL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = NimbleTests; - SDKROOT = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 1F925EC5195C0D6300ED456B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - COMBINE_HIDPI_IMAGES = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(DEVELOPER_FRAMEWORKS_DIR)", - "$(inherited)", - ); - INFOPLIST_FILE = Tests/Nimble/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.9; - METAL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "net.jeffhui.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = NimbleTests; - SDKROOT = macosx; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1F1A74231940169200FFFC47 /* Build configuration list for PBXProject "Nimble" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F1A743D1940169200FFFC47 /* Debug */, - 1F1A743E1940169200FFFC47 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1F1A743F1940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F1A74401940169200FFFC47 /* Debug */, - 1F1A74411940169200FFFC47 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1F1A74421940169200FFFC47 /* Build configuration list for PBXNativeTarget "Nimble-iOSTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F1A74431940169200FFFC47 /* Debug */, - 1F1A74441940169200FFFC47 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1F5DF16A1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F5DF1661BDCA0CE00C3A531 /* Debug */, - 1F5DF1671BDCA0CE00C3A531 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1F5DF16B1BDCA0CE00C3A531 /* Build configuration list for PBXNativeTarget "Nimble-tvOSTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F5DF1681BDCA0CE00C3A531 /* Debug */, - 1F5DF1691BDCA0CE00C3A531 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1F925EC0195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSX" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F925EC1195C0D6300ED456B /* Debug */, - 1F925EC2195C0D6300ED456B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1F925EC3195C0D6300ED456B /* Build configuration list for PBXNativeTarget "Nimble-OSXTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F925EC4195C0D6300ED456B /* Debug */, - 1F925EC5195C0D6300ED456B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 1F1A74201940169200FFFC47 /* Project object */; -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index a822b74..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-OSX.xcscheme b/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-OSX.xcscheme deleted file mode 100644 index e02d8ff..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-OSX.xcscheme +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-iOS.xcscheme b/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-iOS.xcscheme deleted file mode 100644 index 9c1e8a4..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-iOS.xcscheme +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-tvOS.xcscheme b/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-tvOS.xcscheme deleted file mode 100644 index 5e03159..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Nimble.xcodeproj/xcshareddata/xcschemes/Nimble-tvOS.xcscheme +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Package.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Package.swift deleted file mode 100644 index 7843547..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Package.swift +++ /dev/null @@ -1,5 +0,0 @@ -import PackageDescription - -let package = Package( - name: "Nimble" -) diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/README.md b/Carthage/Checkouts/Quick/Externals/Nimble/README.md deleted file mode 100644 index 6a71957..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/README.md +++ /dev/null @@ -1,1237 +0,0 @@ -# Nimble - -Use Nimble to express the expected outcomes of Swift -or Objective-C expressions. Inspired by -[Cedar](https://github.com/pivotal/cedar). - -```swift -// Swift - -expect(1 + 1).to(equal(2)) -expect(1.2).to(beCloseTo(1.1, within: 0.1)) -expect(3) > 2 -expect("seahorse").to(contain("sea")) -expect(["Atlantic", "Pacific"]).toNot(contain("Mississippi")) -expect(ocean.isClean).toEventually(beTruthy()) -``` - -# How to Use Nimble - - - -**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)* - -- [Some Background: Expressing Outcomes Using Assertions in XCTest](#some-background-expressing-outcomes-using-assertions-in-xctest) -- [Nimble: Expectations Using `expect(...).to`](#nimble-expectations-using-expectto) - - [Custom Failure Messages](#custom-failure-messages) - - [Type Checking](#type-checking) - - [Operator Overloads](#operator-overloads) - - [Lazily Computed Values](#lazily-computed-values) - - [C Primitives](#c-primitives) - - [Asynchronous Expectations](#asynchronous-expectations) - - [Objective-C Support](#objective-c-support) - - [Disabling Objective-C Shorthand](#disabling-objective-c-shorthand) -- [Built-in Matcher Functions](#built-in-matcher-functions) - - [Equivalence](#equivalence) - - [Identity](#identity) - - [Comparisons](#comparisons) - - [Types/Classes](#typesclasses) - - [Truthiness](#truthiness) - - [Swift Error Handling](#swift-error-handling) - - [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) - - [Verify collection count](#verify-collection-count) - - [Matching a value to any of a group of matchers](#matching-a-value-to-any-of-a-group-of-matchers) -- [Writing Your Own Matchers](#writing-your-own-matchers) - - [Lazy Evaluation](#lazy-evaluation) - - [Type Checking via Swift Generics](#type-checking-via-swift-generics) - - [Customizing Failure Messages](#customizing-failure-messages) - - [Supporting Objective-C](#supporting-objective-c) - - [Properly Handling `nil` in Objective-C Matchers](#properly-handling-nil-in-objective-c-matchers) -- [Installing Nimble](#installing-nimble) - - [Installing Nimble as a Submodule](#installing-nimble-as-a-submodule) - - [Installing Nimble via CocoaPods](#installing-nimble-via-cocoapods) - - [Using Nimble without XCTest](#using-nimble-without-xctest) - - - -# Some Background: Expressing Outcomes Using Assertions in XCTest - -Apple's Xcode includes the XCTest framework, which provides -assertion macros to test whether code behaves properly. -For example, to assert that `1 + 1 = 2`, XCTest has you write: - -```swift -// Swift - -XCTAssertEqual(1 + 1, 2, "expected one plus one to equal two") -``` - -Or, in Objective-C: - -```objc -// Objective-C - -XCTAssertEqual(1 + 1, 2, @"expected one plus one to equal two"); -``` - -XCTest assertions have a couple of drawbacks: - -1. **Not enough macros.** There's no easy way to assert that a string - contains a particular substring, or that a number is less than or - equal to another. -2. **It's hard to write asynchronous tests.** XCTest forces you to write - a lot of boilerplate code. - -Nimble addresses these concerns. - -# Nimble: Expectations Using `expect(...).to` - -Nimble allows you to express expectations using a natural, -easily understood language: - -```swift -// Swift - -import Nimble - -expect(seagull.squawk).to(equal("Squee!")) -``` - -```objc -// Objective-C - -@import Nimble; - -expect(seagull.squawk).to(equal(@"Squee!")); -``` - -> The `expect` function autocompletes to include `file:` and `line:`, - but these parameters are optional. Use the default values to have - Xcode highlight the correct line when an expectation is not met. - -To perform the opposite expectation--to assert something is *not* -equal--use `toNot` or `notTo`: - -```swift -// Swift - -import Nimble - -expect(seagull.squawk).toNot(equal("Oh, hello there!")) -expect(seagull.squawk).notTo(equal("Oh, hello there!")) -``` - -```objc -// Objective-C - -@import Nimble; - -expect(seagull.squawk).toNot(equal(@"Oh, hello there!")); -expect(seagull.squawk).notTo(equal(@"Oh, hello there!")); -``` - -## Custom Failure Messages - -Would you like to add more information to the test's failure messages? Use the `description` optional argument to add your own text: - -```swift -// Swift - -expect(1 + 1).to(equal(3)) -// failed - expected to equal <3>, got <2> - -expect(1 + 1).to(equal(3), description: "Make sure libKindergartenMath is loaded") -// failed - Make sure libKindergartenMath is loaded -// expected to equal <3>, got <2> -``` - -Or the *WithDescription version in Objective-C: - -```objc -// Objective-C - -@import Nimble; - -expect(@(1+1)).to(equal(@3)); -// failed - expected to equal <3.0000>, got <2.0000> - -expect(@(1+1)).toWithDescription(equal(@3), @"Make sure libKindergartenMath is loaded"); -// failed - Make sure libKindergartenMath is loaded -// expected to equal <3.0000>, got <2.0000> -``` - -## Type Checking - -Nimble makes sure you don't compare two types that don't match: - -```swift -// Swift - -// Does not compile: -expect(1 + 1).to(equal("Squee!")) -``` - -> Nimble uses generics--only available in Swift--to ensure - type correctness. That means type checking is - not available when using Nimble in Objective-C. :sob: - -## Operator Overloads - -Tired of so much typing? With Nimble, you can use overloaded operators -like `==` for equivalence, or `>` for comparisons: - -```swift -// Swift - -// Passes if squawk does not equal "Hi!": -expect(seagull.squawk) != "Hi!" - -// Passes if 10 is greater than 2: -expect(10) > 2 -``` - -> Operator overloads are only available in Swift, so you won't be able - to use this syntax in Objective-C. :broken_heart: - -## Lazily Computed Values - -The `expect` function doesn't evaluate the value it's given until it's -time to match. So Nimble can test whether an expression raises an -exception once evaluated: - -```swift -// Swift - -// Note: Swift currently doesn't have exceptions. -// Only Objective-C code can raise exceptions -// that Nimble will catch. -// (see https://github.com/Quick/Nimble/issues/220#issuecomment-172667064) -let exception = NSException( - name: NSInternalInconsistencyException, - reason: "Not enough fish in the sea.", - userInfo: ["something": "is fishy"]) -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( - named: NSInternalInconsistencyException, - reason: "Not enough fish in the sea")) -expect { exception.raise() }.to(raiseException( - named: NSInternalInconsistencyException, - reason: "Not enough fish in the sea", - userInfo: ["something": "is fishy"])) -``` - -Objective-C works the same way, but you must use the `expectAction` -macro when making an expectation on an expression that has no return -value: - -```objc -// Objective-C - -NSException *exception = [NSException exceptionWithName:NSInternalInconsistencyException - reason:@"Not enough fish in the sea." - userInfo:nil]; -expectAction(^{ [exception raise]; }).to(raiseException()); - -// Use the property-block syntax to be more specific. -expectAction(^{ [exception raise]; }).to(raiseException().named(NSInternalInconsistencyException)); -expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInternalInconsistencyException). - reason("Not enough fish in the sea")); -expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInternalInconsistencyException). - reason("Not enough fish in the sea"). - userInfo(@{@"something": @"is fishy"})); - -// You can also pass a block for custom matching of the raised exception -expectAction(exception.raise()).to(raiseException().satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(beginWith(NSInternalInconsistencyException)); -})); -``` - -## C Primitives - -Some testing frameworks make it hard to test primitive C values. -In Nimble, it just works: - -```swift -// Swift - -let actual: CInt = 1 -let expectedValue: CInt = 1 -expect(actual).to(equal(expectedValue)) -``` - -In fact, Nimble uses type inference, so you can write the above -without explicitly specifying both types: - -```swift -// Swift - -expect(1 as CInt).to(equal(1)) -``` - -> In Objective-C, Nimble only supports Objective-C objects. To - make expectations on primitive C values, wrap then in an object - literal: - - ```objc - expect(@(1 + 1)).to(equal(@2)); - ``` - -## Asynchronous Expectations - -In Nimble, it's easy to make expectations on values that are updated -asynchronously. Just use `toEventually` or `toEventuallyNot`: - -```swift -// Swift - -dispatch_async(dispatch_get_main_queue()) { - ocean.add("dolphins") - ocean.add("whales") -} -expect(ocean).toEventually(contain("dolphins", "whales")) -``` - - -```objc -// Objective-C -dispatch_async(dispatch_get_main_queue(), ^{ - [ocean add:@"dolphins"]; - [ocean add:@"whales"]; -}); -expect(ocean).toEventually(contain(@"dolphins", @"whales")); -``` - -Note: toEventually triggers its polls on the main thread. Blocking the main -thread will cause Nimble to stop the run loop. This can cause test pollution -for whatever incomplete code that was running on the main thread. Blocking the -main thread can be caused by blocking IO, calls to sleep(), deadlocks, and -synchronous IPC. - -In the above example, `ocean` is constantly re-evaluated. If it ever -contains dolphins and whales, the expectation passes. If `ocean` still -doesn't contain them, even after being continuously re-evaluated for one -whole second, the expectation fails. - -Sometimes it takes more than a second for a value to update. In those -cases, use the `timeout` parameter: - -```swift -// Swift - -// Waits three seconds for ocean to contain "starfish": -expect(ocean).toEventually(contain("starfish"), timeout: 3) -``` - -```objc -// Objective-C - -// Waits three seconds for ocean to contain "starfish": -expect(ocean).withTimeout(3).toEventually(contain(@"starfish")); -``` - -You can also provide a callback by using the `waitUntil` function: - -```swift -// Swift - -waitUntil { done in - // do some stuff that takes a while... - NSThread.sleepForTimeInterval(0.5) - done() -} -``` - -```objc -// Objective-C - -waitUntil(^(void (^done)(void)){ - // do some stuff that takes a while... - [NSThread sleepForTimeInterval:0.5]; - done(); -}); -``` - -`waitUntil` also optionally takes a timeout parameter: - -```swift -// Swift - -waitUntil(timeout: 10) { done in - // do some stuff that takes a while... - NSThread.sleepForTimeInterval(1) - done() -} -``` - -```objc -// Objective-C - -waitUntilTimeout(10, ^(void (^done)(void)){ - // do some stuff that takes a while... - [NSThread sleepForTimeInterval:1]; - done(); -}); -``` - -Note: waitUntil triggers its timeout code on the main thread. Blocking the main -thread will cause Nimble to stop the run loop to continue. This can cause test -pollution for whatever incomplete code that was running on the main thread. -Blocking the main thread can be caused by blocking IO, calls to sleep(), -deadlocks, and synchronous IPC. - -In some cases (e.g. when running on slower machines) it can be useful to modify -the default timeout and poll interval values. This can be done as follows: - -```swift -// Swift - -// Increase the global timeout to 5 seconds: -Nimble.AsyncDefaults.Timeout = 5 - -// Slow the polling interval to 0.1 seconds: -Nimble.AsyncDefaults.PollInterval = 0.1 -``` - -## Objective-C Support - -Nimble has full support for Objective-C. However, there are two things -to keep in mind when using Nimble in Objective-C: - -1. All parameters passed to the `expect` function, as well as matcher - functions like `equal`, must be Objective-C objects: - - ```objc - // Objective-C - - @import Nimble; - - expect(@(1 + 1)).to(equal(@2)); - expect(@"Hello world").to(contain(@"world")); - ``` - -2. To make an expectation on an expression that does not return a value, - such as `-[NSException raise]`, use `expectAction` instead of - `expect`: - - ```objc - // Objective-C - - expectAction(^{ [exception raise]; }).to(raiseException()); - ``` - -## Disabling Objective-C Shorthand - -Nimble provides a shorthand for expressing expectations using the -`expect` function. To disable this shorthand in Objective-C, define the -`NIMBLE_DISABLE_SHORT_SYNTAX` macro somewhere in your code before -importing Nimble: - -```objc -#define NIMBLE_DISABLE_SHORT_SYNTAX 1 - -@import Nimble; - -NMB_expect(^{ return seagull.squawk; }, __FILE__, __LINE__).to(NMB_equal(@"Squee!")); -``` - -> Disabling the shorthand is useful if you're testing functions with - names that conflict with Nimble functions, such as `expect` or - `equal`. If that's not the case, there's no point in disabling the - shorthand. - -# Built-in Matcher Functions - -Nimble includes a wide variety of matcher functions. - -## Equivalence - -```swift -// Swift - -// Passes if actual is equivalent to expected: -expect(actual).to(equal(expected)) -expect(actual) == expected - -// Passes if actual is not equivalent to expected: -expect(actual).toNot(equal(expected)) -expect(actual) != expected -``` - -```objc -// Objective-C - -// Passes if actual is equivalent to expected: -expect(actual).to(equal(expected)) - -// Passes if actual is not equivalent to expected: -expect(actual).toNot(equal(expected)) -``` - -Values must be `Equatable`, `Comparable`, or subclasses of `NSObject`. -`equal` will always fail when used to compare one or more `nil` values. - -## Identity - -```swift -// Swift - -// Passes if actual has the same pointer address as expected: -expect(actual).to(beIdenticalTo(expected)) -expect(actual) === expected - -// Passes if actual does not have the same pointer address as expected: -expect(actual).toNot(beIdenticalTo(expected)) -expect(actual) !== expected -``` - -Its important to remember that `beIdenticalTo` only makes sense when comparing types with reference semantics, which have a notion of identity. In Swift, that means a `class`. This matcher will not work with types with value semantics such as `struct` or `enum`. If you need to compare two value types, you can either compare individual properties or if it makes sense to do so, make your type implement `Equatable` and use Nimble's equivalence matchers instead. - - -```objc -// Objective-C - -// Passes if actual has the same pointer address as expected: -expect(actual).to(beIdenticalTo(expected)); - -// Passes if actual does not have the same pointer address as expected: -expect(actual).toNot(beIdenticalTo(expected)); -``` - -## Comparisons - -```swift -// Swift - -expect(actual).to(beLessThan(expected)) -expect(actual) < expected - -expect(actual).to(beLessThanOrEqualTo(expected)) -expect(actual) <= expected - -expect(actual).to(beGreaterThan(expected)) -expect(actual) > expected - -expect(actual).to(beGreaterThanOrEqualTo(expected)) -expect(actual) >= expected -``` - -```objc -// Objective-C - -expect(actual).to(beLessThan(expected)); -expect(actual).to(beLessThanOrEqualTo(expected)); -expect(actual).to(beGreaterThan(expected)); -expect(actual).to(beGreaterThanOrEqualTo(expected)); -``` - -> Values given to the comparison matchers above must implement - `Comparable`. - -Because of how computers represent floating point numbers, assertions -that two floating point numbers be equal will sometimes fail. To express -that two numbers should be close to one another within a certain margin -of error, use `beCloseTo`: - -```swift -// Swift - -expect(actual).to(beCloseTo(expected, within: delta)) -``` - -```objc -// Objective-C - -expect(actual).to(beCloseTo(expected).within(delta)); -``` - -For example, to assert that `10.01` is close to `10`, you can write: - -```swift -// Swift - -expect(10.01).to(beCloseTo(10, within: 0.1)) -``` - -```objc -// Objective-C - -expect(@(10.01)).to(beCloseTo(@10).within(0.1)); -``` - -There is also an operator shortcut available in Swift: - -```swift -// Swift - -expect(actual) ≈ expected -expect(actual) ≈ (expected, delta) - -``` -(Type Option-x to get ≈ on a U.S. keyboard) - -The former version uses the default delta of 0.0001. Here is yet another way to do this: - -```swift -// Swift - -expect(actual) ≈ expected ± delta -expect(actual) == expected ± delta - -``` -(Type Option-Shift-= to get ± on a U.S. keyboard) - -If you are comparing arrays of floating point numbers, you'll find the following useful: - -```swift -// Swift - -expect([0.0, 2.0]) ≈ [0.0001, 2.0001] -expect([0.0, 2.0]).to(beCloseTo([0.1, 2.1], within: 0.1)) - -``` - -> Values given to the `beCloseTo` matcher must be coercable into a - `Double`. - -## Types/Classes - -```swift -// Swift - -// Passes if instance is an instance of aClass: -expect(instance).to(beAnInstanceOf(aClass)) - -// Passes if instance is an instance of aClass or any of its subclasses: -expect(instance).to(beAKindOf(aClass)) -``` - -```objc -// Objective-C - -// Passes if instance is an instance of aClass: -expect(instance).to(beAnInstanceOf(aClass)); - -// Passes if instance is an instance of aClass or any of its subclasses: -expect(instance).to(beAKindOf(aClass)); -``` - -> Instances must be Objective-C objects: subclasses of `NSObject`, - or Swift objects bridged to Objective-C with the `@objc` prefix. - -For example, to assert that `dolphin` is a kind of `Mammal`: - -```swift -// Swift - -expect(dolphin).to(beAKindOf(Mammal)) -``` - -```objc -// Objective-C - -expect(dolphin).to(beAKindOf([Mammal class])); -``` - -> `beAnInstanceOf` uses the `-[NSObject isMemberOfClass:]` method to - test membership. `beAKindOf` uses `-[NSObject isKindOfClass:]`. - -## Truthiness - -```swift -// Passes if actual is not nil, true, or an object with a boolean value of true: -expect(actual).to(beTruthy()) - -// Passes if actual is only true (not nil or an object conforming to BooleanType true): -expect(actual).to(beTrue()) - -// Passes if actual is nil, false, or an object with a boolean value of false: -expect(actual).to(beFalsy()) - -// Passes if actual is only false (not nil or an object conforming to BooleanType false): -expect(actual).to(beFalse()) - -// Passes if actual is nil: -expect(actual).to(beNil()) -``` - -```objc -// Objective-C - -// Passes if actual is not nil, true, or an object with a boolean value of true: -expect(actual).to(beTruthy()); - -// Passes if actual is only true (not nil or an object conforming to BooleanType true): -expect(actual).to(beTrue()); - -// Passes if actual is nil, false, or an object with a boolean value of false: -expect(actual).to(beFalsy()); - -// Passes if actual is only false (not nil or an object conforming to BooleanType false): -expect(actual).to(beFalse()); - -// Passes if actual is nil: -expect(actual).to(beNil()); -``` - -## Swift Error Handling - -If you're using Swift 2.0+, you can use the `throwError` matcher to check if an error is thrown. - -```swift -// Swift - -// Passes if somethingThatThrows() throws an ErrorType: -expect{ try somethingThatThrows() }.to(throwError()) - -// Passes if somethingThatThrows() throws an error with a given domain: -expect{ try somethingThatThrows() }.to(throwError { (error: ErrorType) in - expect(error._domain).to(equal(NSCocoaErrorDomain)) -}) - -// Passes if somethingThatThrows() throws an error with a given case: -expect{ try somethingThatThrows() }.to(throwError(NSCocoaError.PropertyListReadCorruptError)) - -// Passes if somethingThatThrows() throws an error with a given type: -expect{ try somethingThatThrows() }.to(throwError(errorType: MyError.self)) -``` - -If you are working directly with `ErrorType` values, as is sometimes the case when using `Result` or `Promise` types, you can use the `matchError` matcher to check if the error is the same error is is supposed to be, without requiring explicit casting. - -```swift -// Swift - -let actual: ErrorType = … - -// Passes if actual contains any error value from the MyErrorEnum type: -expect(actual).to(matchError(MyErrorEnum)) - -// Passes if actual contains the Timeout value from the MyErrorEnum type: -expect(actual).to(matchError(MyErrorEnum.Timeout)) - -// Passes if actual contains an NSError equal to the given one: -expect(actual).to(matchError(NSError(domain: "err", code: 123, userInfo: nil))) -``` - -Note: This feature is only available in Swift. - -## Exceptions - -```swift -// Swift - -// 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 and it passes expectations in the block -// (in this case, if name begins with 'a r') -expect { exception.raise() }.to(raiseException { (exception: NSException) in - expect(exception.name).to(beginWith("a r")) -}) -``` - -```objc -// Objective-C - -// 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 and it passes expectations in the block -// (in this case, if name begins with 'a r') -expect(actual).to(raiseException().satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(beginWith(@"a r")); -})); -``` - -Note: Swift currently doesn't have exceptions (see [#220](https://github.com/Quick/Nimble/issues/220#issuecomment-172667064)). Only Objective-C code can raise -exceptions that Nimble will catch. - -## Collection Membership - -```swift -// Swift - -// Passes if all of the expected values are members of actual: -expect(actual).to(contain(expected...)) - -// Passes if actual is an empty collection (it contains no elements): -expect(actual).to(beEmpty()) -``` - -```objc -// Objective-C - -// Passes if expected is a member of actual: -expect(actual).to(contain(expected)); - -// Passes if actual is an empty collection (it contains no elements): -expect(actual).to(beEmpty()); -``` - -> In Swift `contain` takes any number of arguments. The expectation - passes if all of them are members of the collection. In Objective-C, - `contain` only takes one argument [for now](https://github.com/Quick/Nimble/issues/27). - -For example, to assert that a list of sea creature names contains -"dolphin" and "starfish": - -```swift -// Swift - -expect(["whale", "dolphin", "starfish"]).to(contain("dolphin", "starfish")) -``` - -```objc -// Objective-C - -expect(@[@"whale", @"dolphin", @"starfish"]).to(contain(@"dolphin")); -expect(@[@"whale", @"dolphin", @"starfish"]).to(contain(@"starfish")); -``` - -> `contain` and `beEmpty` expect collections to be instances of - `NSArray`, `NSSet`, or a Swift collection composed of `Equatable` elements. - -To test whether a set of elements is present at the beginning or end of -an ordered collection, use `beginWith` and `endWith`: - -```swift -// Swift - -// Passes if the elements in expected appear at the beginning of actual: -expect(actual).to(beginWith(expected...)) - -// Passes if the the elements in expected come at the end of actual: -expect(actual).to(endWith(expected...)) -``` - -```objc -// Objective-C - -// Passes if the elements in expected appear at the beginning of actual: -expect(actual).to(beginWith(expected)); - -// Passes if the the elements in expected come at the end of actual: -expect(actual).to(endWith(expected)); -``` - -> `beginWith` and `endWith` expect collections to be instances of - `NSArray`, or ordered Swift collections composed of `Equatable` - elements. - - Like `contain`, in Objective-C `beginWith` and `endWith` only support - a single argument [for now](https://github.com/Quick/Nimble/issues/27). - -## Strings - -```swift -// Swift - -// Passes if actual contains substring expected: -expect(actual).to(contain(expected)) - -// Passes if actual begins with substring: -expect(actual).to(beginWith(expected)) - -// Passes if actual ends with substring: -expect(actual).to(endWith(expected)) - -// Passes if actual is an empty string, "": -expect(actual).to(beEmpty()) - -// Passes if actual matches the regular expression defined in expected: -expect(actual).to(match(expected)) -``` - -```objc -// Objective-C - -// Passes if actual contains substring expected: -expect(actual).to(contain(expected)); - -// Passes if actual begins with substring: -expect(actual).to(beginWith(expected)); - -// Passes if actual ends with substring: -expect(actual).to(endWith(expected)); - -// Passes if actual is an empty string, "": -expect(actual).to(beEmpty()); - -// Passes if actual matches the regular expression defined in expected: -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. - -## Verify collection count - -```swift -// passes if actual collection's count is equal to expected -expect(actual).to(haveCount(expected)) - -// passes if actual collection's count is not equal to expected -expect(actual).notTo(haveCount(expected)) -``` - -```objc -// passes if actual collection's count is equal to expected -expect(actual).to(haveCount(expected)) - -// passes if actual collection's count is not equal to expected -expect(actual).notTo(haveCount(expected)) -``` - -For Swift the actual value must be a `CollectionType` such as array, dictionary or set. - -For Objective-C the actual value has to be one of the following classes `NSArray`, `NSDictionary`, `NSSet`, `NSHashTable` or one of their subclasses. - -## Matching a value to any of a group of matchers - -```swift -// passes if actual is either less than 10 or greater than 20 -expect(actual).to(satisfyAnyOf(beLessThan(10), beGreaterThan(20))) - -// can include any number of matchers -- the following will pass -// **be careful** -- too many matchers can be the sign of an unfocused test -expect(6).to(satisfyAnyOf(equal(2), equal(3), equal(4), equal(5), equal(6), equal(7))) - -// in Swift you also have the option to use the || operator to achieve a similar function -expect(82).to(beLessThan(50) || beGreaterThan(80)) -``` - -```objc -// passes if actual is either less than 10 or greater than 20 -expect(actual).to(satisfyAnyOf(beLessThan(@10), beGreaterThan(@20))) - -// can include any number of matchers -- the following will pass -// **be careful** -- too many matchers can be the sign of an unfocused test -expect(@6).to(satisfyAnyOf(equal(@2), equal(@3), equal(@4), equal(@5), equal(@6), equal(@7))) -``` - -Note: This matcher allows you to chain any number of matchers together. This provides flexibility, - but if you find yourself chaining many matchers together in one test, consider whether you - could instead refactor that single test into multiple, more precisely focused tests for - better coverage. - -# Writing Your Own Matchers - -In Nimble, matchers are Swift functions that take an expected -value and return a `MatcherFunc` closure. Take `equal`, for example: - -```swift -// Swift - -public func equal(expectedValue: T?) -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "equal <\(expectedValue)>" - return actualExpression.evaluate() == expectedValue - } -} -``` - -The return value of a `MatcherFunc` closure is a `Bool` that indicates -whether the actual value matches the expectation: `true` if it does, or -`false` if it doesn't. - -> The actual `equal` matcher function does not match when either - `actual` or `expected` are nil; the example above has been edited for - brevity. - -Since matchers are just Swift functions, you can define them anywhere: -at the top of your test file, in a file shared by all of your tests, or -in an Xcode project you distribute to others. - -> If you write a matcher you think everyone can use, consider adding it - to Nimble's built-in set of matchers by sending a pull request! Or - distribute it yourself via GitHub. - -For examples of how to write your own matchers, just check out the -[`Matchers` directory](https://github.com/Quick/Nimble/tree/master/Sources/Nimble/Matchers) -to see how Nimble's built-in set of matchers are implemented. You can -also check out the tips below. - -## Lazy Evaluation - -`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 - -public func beNil() -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be nil" - return actualExpression.evaluate() == nil - } -} -``` - -In the above example, `actualExpression` is not `nil`--it is a closure -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 -passed to the `expect` function by modifying the return type. - -For example, the following matcher, `haveDescription`, only accepts actual -values that implement the `Printable` protocol. It checks their `description` -against the one provided to the matcher function, and passes if they are the same: - -```swift -// Swift - -public func haveDescription(description: String) -> MatcherFunc { - return MatcherFunc { actual, failureMessage in - return actual.evaluate().description == description - } -} -``` - -## Customizing Failure Messages - -By default, Nimble outputs the following failure message when an -expectation fails: - -``` -expected to match, got <\(actual)> -``` - -You can customize this message by modifying the `failureMessage` struct -from within your `MatcherFunc` closure. To change the verb "match" to -something else, update the `postfixMessage` property: - -```swift -// Swift - -// Outputs: expected to be under the sea, got <\(actual)> -failureMessage.postfixMessage = "be under the sea" -``` - -You can change how the `actual` value is displayed by updating -`failureMessage.actualValue`. Or, to remove it altogether, set it to -`nil`: - -```swift -// Swift - -// Outputs: expected to be under the sea -failureMessage.actualValue = nil -failureMessage.postfixMessage = "be under the sea" -``` - -## Supporting Objective-C - -To use a custom matcher written in Swift from Objective-C, you'll have -to extend the `NMBObjCMatcher` class, adding a new class method for your -custom matcher. The example below defines the class method -`+[NMBObjCMatcher beNilMatcher]`: - -```swift -// Swift - -extension NMBObjCMatcher { - public class func beNilMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher { actualBlock, failureMessage, location in - let block = ({ actualBlock() as NSObject? }) - let expr = Expression(expression: block, location: location) - return beNil().matches(expr, failureMessage: failureMessage) - } - } -} -``` - -The above allows you to use the matcher from Objective-C: - -```objc -// Objective-C - -expect(actual).to([NMBObjCMatcher beNilMatcher]()); -``` - -To make the syntax easier to use, define a C function that calls the -class method: - -```objc -// Objective-C - -FOUNDATION_EXPORT id beNil() { - return [NMBObjCMatcher beNilMatcher]; -} -``` - -### Properly Handling `nil` in Objective-C Matchers - -When supporting Objective-C, make sure you handle `nil` appropriately. -Like [Cedar](https://github.com/pivotal/cedar/issues/100), -**most matchers do not match with nil**. This is to bring prevent test -writers from being surprised by `nil` values where they did not expect -them. - -Nimble provides the `beNil` matcher function for test writer that want -to make expectations on `nil` objects: - -```objc -// Objective-C - -expect(nil).to(equal(nil)); // fails -expect(nil).to(beNil()); // passes -``` - -If your matcher does not want to match with nil, you use `NonNilMatcherFunc` -and the `canMatchNil` constructor on `NMBObjCMatcher`. Using both types will -automatically generate expected value failure messages when they're nil. - -```swift - -public func beginWith(startingElement: T) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "begin with <\(startingElement)>" - if let actualValue = actualExpression.evaluate() { - var actualGenerator = actualValue.generate() - return actualGenerator.next() == startingElement - } - return false - } -} - -extension NMBObjCMatcher { - public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let actual = actualExpression.evaluate() - let expr = actualExpression.cast { $0 as? NMBOrderedCollection } - return beginWith(expected).matches(expr, failureMessage: failureMessage) - } - } -} -``` - -# Installing Nimble - -> Nimble can be used on its own, or in conjunction with its sister - project, [Quick](https://github.com/Quick/Quick). To install both - 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 CocoaPods, or with -git submodules. - -## Installing Nimble as a Submodule - -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 the Xcode workspace for your project -3. Link Nimble.framework to your test target -4. Start writing expectations! - -For more detailed instructions on each of these steps, -read [How to Install Quick](https://github.com/Quick/Quick#how-to-install-quick). -Ignore the steps involving adding Quick to your project in order to -install just Nimble. - -## Installing Nimble via CocoaPods - -To use Nimble in CocoaPods to test your iOS or OS X applications, add Nimble to -your podfile and add the ```use_frameworks!``` line to enable Swift support for -CocoaPods. - -```ruby -platform :ios, '8.0' - -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 - use_frameworks! - pod 'Nimble', '~> 4.0.0' -end -``` - -Finally run `pod install`. - -## Using Nimble without XCTest - -Nimble is integrated with XCTest to allow it work well when used in Xcode test -bundles, however it can also be used in a standalone app. After installing -Nimble using one of the above methods, there are two additional steps required -to make this work. - -1. Create a custom assertion handler and assign an instance of it to the - global `NimbleAssertionHandler` variable. For example: - -```swift -class MyAssertionHandler : AssertionHandler { - func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { - if (!assertion) { - print("Expectation failed: \(message.stringValue)") - } - } -} -``` -```swift -// Somewhere before you use any assertions -NimbleAssertionHandler = MyAssertionHandler() -``` - -2. Add a post-build action to fix an issue with the Swift XCTest support - library being unnecessarily copied into your app - * Edit your scheme in Xcode, and navigate to Build -> Post-actions - * Click the "+" icon and select "New Run Script Action" - * Open the "Provide build settings from" dropdown and select your target - * Enter the following script contents: -``` -rm "${SWIFT_STDLIB_TOOL_DESTINATION_DIR}/libswiftXCTest.dylib" -``` - -You can now use Nimble assertions in your code and handle failures as you see -fit. diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift deleted file mode 100644 index 306d4ce..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift +++ /dev/null @@ -1,17 +0,0 @@ -import Foundation - -/// Protocol for the assertion handler that Nimble uses for all expectations. -public protocol AssertionHandler { - func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) -} - -/// Global backing interface for assertions that Nimble creates. -/// Defaults to a private test handler that passes through to XCTest. -/// -/// If XCTest is not available, you must assign your own assertion handler -/// before using any matchers, otherwise Nimble will abort the program. -/// -/// @see AssertionHandler -public var NimbleAssertionHandler: AssertionHandler = { () -> AssertionHandler in - return isXCTestAvailable() ? NimbleXCTestHandler() : NimbleXCTestUnavailableHandler() -}() diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/AssertionDispatcher.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/AssertionDispatcher.swift deleted file mode 100644 index 09caf2a..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/AssertionDispatcher.swift +++ /dev/null @@ -1,20 +0,0 @@ - -/// AssertionDispatcher allows multiple AssertionHandlers to receive -/// assertion messages. -/// -/// @warning Does not fully dispatch if one of the handlers raises an exception. -/// This is possible with XCTest-based assertion handlers. -/// -public class AssertionDispatcher: AssertionHandler { - let handlers: [AssertionHandler] - - public init(handlers: [AssertionHandler]) { - self.handlers = handlers - } - - public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { - for handler in handlers { - handler.assert(assertion, message: message, location: location) - } - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift deleted file mode 100644 index a1615a7..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift +++ /dev/null @@ -1,100 +0,0 @@ -import Foundation - -/// A data structure that stores information about an assertion when -/// AssertionRecorder is set as the Nimble assertion handler. -/// -/// @see AssertionRecorder -/// @see AssertionHandler -public struct AssertionRecord: CustomStringConvertible { - /// Whether the assertion succeeded or failed - public let success: Bool - /// The failure message the assertion would display on failure. - public let message: FailureMessage - /// The source location the expectation occurred on. - public let location: SourceLocation - - public var description: String { - return "AssertionRecord { success=\(success), message='\(message.stringValue)', location=\(location) }" - } -} - -/// An AssertionHandler that silently records assertions that Nimble makes. -/// This is useful for testing failure messages for matchers. -/// -/// @see AssertionHandler -public class AssertionRecorder : AssertionHandler { - /// All the assertions that were captured by this recorder - public var assertions = [AssertionRecord]() - - public init() {} - - public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { - assertions.append( - AssertionRecord( - success: assertion, - message: message, - location: location)) - } -} - -/// Allows you to temporarily replace the current Nimble assertion handler with -/// the one provided for the scope of the closure. -/// -/// Once the closure finishes, then the original Nimble assertion handler is restored. -/// -/// @see AssertionHandler -public func withAssertionHandler(tempAssertionHandler: AssertionHandler, closure: () throws -> Void) { - let environment = NimbleEnvironment.activeInstance - let oldRecorder = environment.assertionHandler - let capturer = NMBExceptionCapture(handler: nil, finally: ({ - environment.assertionHandler = oldRecorder - })) - environment.assertionHandler = tempAssertionHandler - capturer.tryBlock { - try! closure() - } -} - -/// Captures expectations that occur in the given closure. Note that all -/// expectations will still go through to the default Nimble handler. -/// -/// This can be useful if you want to gather information about expectations -/// that occur within a closure. -/// -/// @param silently expectations are no longer send to the default Nimble -/// assertion handler when this is true. Defaults to false. -/// -/// @see gatherFailingExpectations -public func gatherExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] { - let previousRecorder = NimbleEnvironment.activeInstance.assertionHandler - let recorder = AssertionRecorder() - let handlers: [AssertionHandler] - - if silently { - handlers = [recorder] - } else { - handlers = [recorder, previousRecorder] - } - - let dispatcher = AssertionDispatcher(handlers: handlers) - withAssertionHandler(dispatcher, closure: closure) - return recorder.assertions -} - -/// Captures failed expectations that occur in the given closure. Note that all -/// expectations will still go through to the default Nimble handler. -/// -/// This can be useful if you want to gather information about failed -/// expectations that occur within a closure. -/// -/// @param silently expectations are no longer send to the default Nimble -/// assertion handler when this is true. Defaults to false. -/// -/// @see gatherExpectations -/// @see raiseException source for an example use case. -public func gatherFailingExpectations(silently silently: Bool = false, closure: () -> Void) -> [AssertionRecord] { - let assertions = gatherExpectations(silently: silently, closure: closure) - return assertions.filter { assertion in - !assertion.success - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift deleted file mode 100644 index 27cdac9..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/NimbleEnvironment.swift +++ /dev/null @@ -1,38 +0,0 @@ -import Foundation - -/// "Global" state of Nimble is stored here. Only DSL functions should access / be aware of this -/// class' existance -internal class NimbleEnvironment { - static var activeInstance: NimbleEnvironment { - get { - let env = NSThread.currentThread().threadDictionary["NimbleEnvironment"] - if let env = env as? NimbleEnvironment { - return env - } else { - let newEnv = NimbleEnvironment() - self.activeInstance = newEnv - return newEnv - } - } - set { - NSThread.currentThread().threadDictionary["NimbleEnvironment"] = newValue - } - } - - // TODO: eventually migrate the global to this environment value - var assertionHandler: AssertionHandler { - get { return NimbleAssertionHandler } - set { NimbleAssertionHandler = newValue } - } - -#if _runtime(_ObjC) - var awaiter: Awaiter - - init() { - awaiter = Awaiter( - waitLock: AssertionWaitLock(), - asyncQueue: dispatch_get_main_queue(), - timeoutQueue: dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) - } -#endif -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift deleted file mode 100644 index 7d84f45..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift +++ /dev/null @@ -1,77 +0,0 @@ -import Foundation -import XCTest - -/// Default handler for Nimble. This assertion handler passes failures along to -/// XCTest. -public class NimbleXCTestHandler : AssertionHandler { - public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { - if !assertion { - recordFailure("\(message.stringValue)\n", location: location) - } - } -} - -/// Alternative handler for Nimble. This assertion handler passes failures along -/// to XCTest by attempting to reduce the failure message size. -public class NimbleShortXCTestHandler: AssertionHandler { - public func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { - if !assertion { - let msg: String - if let actual = message.actualValue { - msg = "got: \(actual) \(message.postfixActual)" - } else { - msg = "expected \(message.to) \(message.postfixMessage)" - } - recordFailure("\(msg)\n", location: location) - } - } -} - -/// Fallback handler in case XCTest is unavailable. This assertion handler will abort -/// the program if it is invoked. -class NimbleXCTestUnavailableHandler : AssertionHandler { - func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) { - fatalError("XCTest is not available and no custom assertion handler was configured. Aborting.") - } -} - -#if _runtime(_ObjC) - /// Helper class providing access to the currently executing XCTestCase instance, if any -@objc final internal class CurrentTestCaseTracker: NSObject, XCTestObservation { - @objc static let sharedInstance = CurrentTestCaseTracker() - - private(set) var currentTestCase: XCTestCase? - - @objc func testCaseWillStart(testCase: XCTestCase) { - currentTestCase = testCase - } - - @objc func testCaseDidFinish(testCase: XCTestCase) { - currentTestCase = nil - } -} -#endif - - -func isXCTestAvailable() -> Bool { -#if _runtime(_ObjC) - // XCTest is weakly linked and so may not be present - return NSClassFromString("XCTestCase") != nil -#else - return true -#endif -} - -private func recordFailure(message: String, location: SourceLocation) { -#if _runtime(_ObjC) - if let testCase = CurrentTestCaseTracker.sharedInstance.currentTestCase { - testCase.recordFailureWithDescription(message, inFile: location.file, atLine: location.line, expected: true) - } else { - let msg = "Attempted to report a test failure to XCTest while no test case was running. " + - "The failure was:\n\"\(message)\"\nIt occurred at: \(location.file):\(location.line)" - NSException(name: NSInternalInconsistencyException, reason: msg, userInfo: nil).raise() - } -#else - XCTFail("\(message)\n", file: location.file, line: location.line) -#endif -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/NonObjectiveC/ExceptionCapture.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/NonObjectiveC/ExceptionCapture.swift deleted file mode 100644 index e94c45f..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/NonObjectiveC/ExceptionCapture.swift +++ /dev/null @@ -1,31 +0,0 @@ -import Foundation - -#if !_runtime(_ObjC) -// swift-corelibs-foundation doesn't provide NSException at all, so provide a dummy -class NSException {} -#endif - -// NOTE: This file is not intended to be included in the Xcode project. It -// is picked up by the Swift Package Manager during its build process. - -/// A dummy reimplementation of the `NMBExceptionCapture` class to serve -/// as a stand-in for build and runtime environments that don't support -/// Objective C. -internal class ExceptionCapture { - let finally: (() -> Void)? - - init(handler: ((NSException!) -> Void)?, finally: (() -> Void)?) { - self.finally = finally - } - - func tryBlock(unsafeBlock: (() -> Void)) { - // We have no way of handling Objective C exceptions in Swift, - // so we just go ahead and run the unsafeBlock as-is - unsafeBlock() - - finally?() - } -} - -/// Compatibility with the actual Objective-C implementation -typealias NMBExceptionCapture = ExceptionCapture diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h deleted file mode 100644 index 5d416e4..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/CurrentTestCaseTracker.h +++ /dev/null @@ -1,9 +0,0 @@ -#import -#import - -SWIFT_CLASS("_TtC6Nimble22CurrentTestCaseTracker") -@interface CurrentTestCaseTracker : NSObject -+ (CurrentTestCaseTracker *)sharedInstance; -@end - -@interface CurrentTestCaseTracker (Register) @end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.h b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.h deleted file mode 100644 index a499059..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.h +++ /dev/null @@ -1,145 +0,0 @@ -#import - -@class NMBExpectation; -@class NMBObjCBeCloseToMatcher; -@class NMBObjCRaiseExceptionMatcher; -@protocol NMBMatcher; - - -#define NIMBLE_EXPORT FOUNDATION_EXPORT - -#ifdef NIMBLE_DISABLE_SHORT_SYNTAX -#define NIMBLE_SHORT(PROTO, ORIGINAL) -#else -#define NIMBLE_SHORT(PROTO, ORIGINAL) FOUNDATION_STATIC_INLINE PROTO { return (ORIGINAL); } -#endif - -NIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line); -NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line); - -NIMBLE_EXPORT id NMB_equal(id expectedValue); -NIMBLE_SHORT(id equal(id expectedValue), - NMB_equal(expectedValue)); - -NIMBLE_EXPORT id NMB_haveCount(id expectedValue); -NIMBLE_SHORT(id haveCount(id expectedValue), - NMB_haveCount(expectedValue)); - -NIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue); -NIMBLE_SHORT(NMBObjCBeCloseToMatcher *beCloseTo(id expectedValue), - NMB_beCloseTo(expectedValue)); - -NIMBLE_EXPORT id NMB_beAnInstanceOf(Class expectedClass); -NIMBLE_SHORT(id beAnInstanceOf(Class expectedClass), - NMB_beAnInstanceOf(expectedClass)); - -NIMBLE_EXPORT id NMB_beAKindOf(Class expectedClass); -NIMBLE_SHORT(id beAKindOf(Class expectedClass), - NMB_beAKindOf(expectedClass)); - -NIMBLE_EXPORT id NMB_beginWith(id itemElementOrSubstring); -NIMBLE_SHORT(id beginWith(id itemElementOrSubstring), - NMB_beginWith(itemElementOrSubstring)); - -NIMBLE_EXPORT id NMB_beGreaterThan(NSNumber *expectedValue); -NIMBLE_SHORT(id beGreaterThan(NSNumber *expectedValue), - NMB_beGreaterThan(expectedValue)); - -NIMBLE_EXPORT id NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue); -NIMBLE_SHORT(id beGreaterThanOrEqualTo(NSNumber *expectedValue), - NMB_beGreaterThanOrEqualTo(expectedValue)); - -NIMBLE_EXPORT id NMB_beIdenticalTo(id expectedInstance); -NIMBLE_SHORT(id beIdenticalTo(id expectedInstance), - NMB_beIdenticalTo(expectedInstance)); - -NIMBLE_EXPORT id NMB_be(id expectedInstance); -NIMBLE_SHORT(id be(id expectedInstance), - NMB_be(expectedInstance)); - -NIMBLE_EXPORT id NMB_beLessThan(NSNumber *expectedValue); -NIMBLE_SHORT(id beLessThan(NSNumber *expectedValue), - NMB_beLessThan(expectedValue)); - -NIMBLE_EXPORT id NMB_beLessThanOrEqualTo(NSNumber *expectedValue); -NIMBLE_SHORT(id beLessThanOrEqualTo(NSNumber *expectedValue), - NMB_beLessThanOrEqualTo(expectedValue)); - -NIMBLE_EXPORT id NMB_beTruthy(void); -NIMBLE_SHORT(id beTruthy(void), - NMB_beTruthy()); - -NIMBLE_EXPORT id NMB_beFalsy(void); -NIMBLE_SHORT(id beFalsy(void), - NMB_beFalsy()); - -NIMBLE_EXPORT id NMB_beTrue(void); -NIMBLE_SHORT(id beTrue(void), - NMB_beTrue()); - -NIMBLE_EXPORT id NMB_beFalse(void); -NIMBLE_SHORT(id beFalse(void), - NMB_beFalse()); - -NIMBLE_EXPORT id NMB_beNil(void); -NIMBLE_SHORT(id beNil(void), - NMB_beNil()); - -NIMBLE_EXPORT id NMB_beEmpty(void); -NIMBLE_SHORT(id beEmpty(void), - NMB_beEmpty()); - -NIMBLE_EXPORT id NMB_containWithNilTermination(id itemOrSubstring, ...) NS_REQUIRES_NIL_TERMINATION; -#define NMB_contain(...) NMB_containWithNilTermination(__VA_ARGS__, nil) -#ifndef NIMBLE_DISABLE_SHORT_SYNTAX -#define contain(...) NMB_contain(__VA_ARGS__) -#endif - -NIMBLE_EXPORT id NMB_endWith(id itemElementOrSubstring); -NIMBLE_SHORT(id endWith(id itemElementOrSubstring), - NMB_endWith(itemElementOrSubstring)); - -NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException(void); -NIMBLE_SHORT(NMBObjCRaiseExceptionMatcher *raiseException(void), - NMB_raiseException()); - -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)); - -NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers); -#define NMB_satisfyAnyOf(...) NMB_satisfyAnyOfWithMatchers(@[__VA_ARGS__]) -#ifndef NIMBLE_DISABLE_SHORT_SYNTAX -#define satisfyAnyOf(...) NMB_satisfyAnyOf(__VA_ARGS__) -#endif - -// In order to preserve breakpoint behavior despite using macros to fill in __FILE__ and __LINE__, -// define a builder that populates __FILE__ and __LINE__, and returns a block that takes timeout -// and action arguments. See https://github.com/Quick/Quick/pull/185 for details. -typedef void (^NMBWaitUntilTimeoutBlock)(NSTimeInterval timeout, void (^action)(void (^)(void))); -typedef void (^NMBWaitUntilBlock)(void (^action)(void (^)(void))); - -NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line); - -NIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line); -NIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line); - -NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line); - -#define NMB_waitUntilTimeout NMB_waitUntilTimeoutBuilder(@(__FILE__), __LINE__) -#define NMB_waitUntil NMB_waitUntilBuilder(@(__FILE__), __LINE__) - -#ifndef NIMBLE_DISABLE_SHORT_SYNTAX -#define expect(...) NMB_expect(^id{ return (__VA_ARGS__); }, @(__FILE__), __LINE__) -#define expectAction(BLOCK) NMB_expectAction((BLOCK), @(__FILE__), __LINE__) -#define failWithMessage(msg) NMB_failWithMessage(msg, @(__FILE__), __LINE__) -#define fail() failWithMessage(@"fail() always fails") - - -#define waitUntilTimeout NMB_waitUntilTimeout -#define waitUntil NMB_waitUntil -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.m b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.m deleted file mode 100644 index 2170238..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/DSL.m +++ /dev/null @@ -1,150 +0,0 @@ -#import -#import - -SWIFT_CLASS("_TtC6Nimble7NMBWait") -@interface NMBWait : NSObject - -+ (void)untilTimeout:(NSTimeInterval)timeout file:(NSString *)file line:(NSUInteger)line action:(void(^)())action; -+ (void)untilFile:(NSString *)file line:(NSUInteger)line action:(void(^)())action; - -@end - -NIMBLE_EXPORT NMBExpectation *NMB_expect(id(^actualBlock)(), NSString *file, NSUInteger line) { - return [[NMBExpectation alloc] initWithActualBlock:actualBlock - negative:NO - file:file - line:line]; -} - -NIMBLE_EXPORT NMBExpectation *NMB_expectAction(void(^actualBlock)(), NSString *file, NSUInteger line) { - return NMB_expect(^id{ - actualBlock(); - return nil; - }, file, line); -} - -NIMBLE_EXPORT void NMB_failWithMessage(NSString *msg, NSString *file, NSUInteger line) { - return [NMBExpectation failWithMessage:msg file:file line:line]; -} - -NIMBLE_EXPORT id NMB_beAnInstanceOf(Class expectedClass) { - return [NMBObjCMatcher beAnInstanceOfMatcher:expectedClass]; -} - -NIMBLE_EXPORT id NMB_beAKindOf(Class expectedClass) { - return [NMBObjCMatcher beAKindOfMatcher:expectedClass]; -} - -NIMBLE_EXPORT NMBObjCBeCloseToMatcher *NMB_beCloseTo(NSNumber *expectedValue) { - return [NMBObjCMatcher beCloseToMatcher:expectedValue within:0.001]; -} - -NIMBLE_EXPORT id NMB_beginWith(id itemElementOrSubstring) { - return [NMBObjCMatcher beginWithMatcher:itemElementOrSubstring]; -} - -NIMBLE_EXPORT id NMB_beGreaterThan(NSNumber *expectedValue) { - return [NMBObjCMatcher beGreaterThanMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_beGreaterThanOrEqualTo(NSNumber *expectedValue) { - return [NMBObjCMatcher beGreaterThanOrEqualToMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_beIdenticalTo(id expectedInstance) { - return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; -} - -NIMBLE_EXPORT id NMB_be(id expectedInstance) { - return [NMBObjCMatcher beIdenticalToMatcher:expectedInstance]; -} - -NIMBLE_EXPORT id NMB_beLessThan(NSNumber *expectedValue) { - return [NMBObjCMatcher beLessThanMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_beLessThanOrEqualTo(NSNumber *expectedValue) { - return [NMBObjCMatcher beLessThanOrEqualToMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_beTruthy() { - return [NMBObjCMatcher beTruthyMatcher]; -} - -NIMBLE_EXPORT id NMB_beFalsy() { - return [NMBObjCMatcher beFalsyMatcher]; -} - -NIMBLE_EXPORT id NMB_beTrue() { - return [NMBObjCMatcher beTrueMatcher]; -} - -NIMBLE_EXPORT id NMB_beFalse() { - return [NMBObjCMatcher beFalseMatcher]; -} - -NIMBLE_EXPORT id NMB_beNil() { - return [NMBObjCMatcher beNilMatcher]; -} - -NIMBLE_EXPORT id NMB_beEmpty() { - return [NMBObjCMatcher beEmptyMatcher]; -} - -NIMBLE_EXPORT id NMB_containWithNilTermination(id itemOrSubstring, ...) { - NSMutableArray *itemOrSubstringArray = [NSMutableArray array]; - - if (itemOrSubstring) { - [itemOrSubstringArray addObject:itemOrSubstring]; - - va_list args; - va_start(args, itemOrSubstring); - id next; - while ((next = va_arg(args, id))) { - [itemOrSubstringArray addObject:next]; - } - va_end(args); - } - - return [NMBObjCMatcher containMatcher:itemOrSubstringArray]; -} - -NIMBLE_EXPORT id NMB_endWith(id itemElementOrSubstring) { - return [NMBObjCMatcher endWithMatcher:itemElementOrSubstring]; -} - -NIMBLE_EXPORT id NMB_equal(id expectedValue) { - return [NMBObjCMatcher equalMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_haveCount(id expectedValue) { - return [NMBObjCMatcher haveCountMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_match(id expectedValue) { - return [NMBObjCMatcher matchMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_allPass(id expectedValue) { - return [NMBObjCMatcher allPassMatcher:expectedValue]; -} - -NIMBLE_EXPORT id NMB_satisfyAnyOfWithMatchers(id matchers) { - return [NMBObjCMatcher satisfyAnyOfMatcher:matchers]; -} - -NIMBLE_EXPORT NMBObjCRaiseExceptionMatcher *NMB_raiseException() { - return [NMBObjCMatcher raiseExceptionMatcher]; -} - -NIMBLE_EXPORT NMBWaitUntilTimeoutBlock NMB_waitUntilTimeoutBuilder(NSString *file, NSUInteger line) { - return ^(NSTimeInterval timeout, void (^action)(void (^)(void))) { - [NMBWait untilTimeout:timeout file:file line:line action:action]; - }; -} - -NIMBLE_EXPORT NMBWaitUntilBlock NMB_waitUntilBuilder(NSString *file, NSUInteger line) { - return ^(void (^action)(void (^)(void))) { - [NMBWait untilFile:file line:line action:action]; - }; -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.h b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.h deleted file mode 100644 index 7e5fb07..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.h +++ /dev/null @@ -1,11 +0,0 @@ -#import -#import - -@interface NMBExceptionCapture : NSObject - -- (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally; -- (void)tryBlock:(void(^)())unsafeBlock; - -@end - -typedef void(^NMBSourceCallbackBlock)(BOOL successful); diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.m b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.m deleted file mode 100644 index d19d5d9..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExceptionCapture.m +++ /dev/null @@ -1,35 +0,0 @@ -#import "NMBExceptionCapture.h" - -@interface NMBExceptionCapture () -@property (nonatomic, copy) void(^handler)(NSException *exception); -@property (nonatomic, copy) void(^finally)(); -@end - -@implementation NMBExceptionCapture - -- (id)initWithHandler:(void(^)(NSException *))handler finally:(void(^)())finally { - self = [super init]; - if (self) { - self.handler = handler; - self.finally = finally; - } - return self; -} - -- (void)tryBlock:(void(^)())unsafeBlock { - @try { - unsafeBlock(); - } - @catch (NSException *exception) { - if (self.handler) { - self.handler(exception); - } - } - @finally { - if (self.finally) { - self.finally(); - } - } -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExpectation.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExpectation.swift deleted file mode 100644 index 3f18d06..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBExpectation.swift +++ /dev/null @@ -1,131 +0,0 @@ -import Foundation - -#if _runtime(_ObjC) - -internal struct ObjCMatcherWrapper : Matcher { - let matcher: NMBMatcher - - func matches(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { - return matcher.matches( - ({ try! actualExpression.evaluate() }), - failureMessage: failureMessage, - location: actualExpression.location) - } - - func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { - return matcher.doesNotMatch( - ({ try! actualExpression.evaluate() }), - failureMessage: failureMessage, - location: actualExpression.location) - } -} - -// Equivalent to Expectation, but for Nimble's Objective-C interface -public class NMBExpectation : NSObject { - internal let _actualBlock: () -> NSObject! - internal var _negative: Bool - internal let _file: FileString - internal let _line: UInt - internal var _timeout: NSTimeInterval = 1.0 - - public init(actualBlock: () -> NSObject!, negative: Bool, file: FileString, line: UInt) { - self._actualBlock = actualBlock - self._negative = negative - self._file = file - self._line = line - } - - private var expectValue: Expectation { - return expect(_file, line: _line){ - self._actualBlock() as NSObject? - } - } - - public var withTimeout: (NSTimeInterval) -> NMBExpectation { - return ({ timeout in self._timeout = timeout - return self - }) - } - - public var to: (NMBMatcher) -> Void { - return ({ matcher in - self.expectValue.to(ObjCMatcherWrapper(matcher: matcher)) - }) - } - - public var toWithDescription: (NMBMatcher, String) -> Void { - return ({ matcher, description in - self.expectValue.to(ObjCMatcherWrapper(matcher: matcher), description: description) - }) - } - - public var toNot: (NMBMatcher) -> Void { - return ({ matcher in - self.expectValue.toNot( - ObjCMatcherWrapper(matcher: matcher) - ) - }) - } - - public var toNotWithDescription: (NMBMatcher, String) -> Void { - return ({ matcher, description in - self.expectValue.toNot( - ObjCMatcherWrapper(matcher: matcher), description: description - ) - }) - } - - public var notTo: (NMBMatcher) -> Void { return toNot } - - public var notToWithDescription: (NMBMatcher, String) -> Void { return toNotWithDescription } - - public var toEventually: (NMBMatcher) -> Void { - return ({ matcher in - self.expectValue.toEventually( - ObjCMatcherWrapper(matcher: matcher), - timeout: self._timeout, - description: nil - ) - }) - } - - public var toEventuallyWithDescription: (NMBMatcher, String) -> Void { - return ({ matcher, description in - self.expectValue.toEventually( - ObjCMatcherWrapper(matcher: matcher), - timeout: self._timeout, - description: description - ) - }) - } - - public var toEventuallyNot: (NMBMatcher) -> Void { - return ({ matcher in - self.expectValue.toEventuallyNot( - ObjCMatcherWrapper(matcher: matcher), - timeout: self._timeout, - description: nil - ) - }) - } - - public var toEventuallyNotWithDescription: (NMBMatcher, String) -> Void { - return ({ matcher, description in - self.expectValue.toEventuallyNot( - ObjCMatcherWrapper(matcher: matcher), - timeout: self._timeout, - description: description - ) - }) - } - - public var toNotEventually: (NMBMatcher) -> Void { return toEventuallyNot } - - public var toNotEventuallyWithDescription: (NMBMatcher, String) -> Void { return toEventuallyNotWithDescription } - - public class func failWithMessage(message: String, file: FileString, line: UInt) { - fail(message, location: SourceLocation(file: file, line: line)) - } -} - -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBObjCMatcher.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBObjCMatcher.swift deleted file mode 100644 index 9f31d42..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBObjCMatcher.swift +++ /dev/null @@ -1,81 +0,0 @@ -import Foundation - -#if _runtime(_ObjC) - -public typealias MatcherBlock = (actualExpression: Expression, failureMessage: FailureMessage) -> Bool -public typealias FullMatcherBlock = (actualExpression: Expression, failureMessage: FailureMessage, shouldNotMatch: Bool) -> Bool - -public class NMBObjCMatcher : NSObject, NMBMatcher { - let _match: MatcherBlock - let _doesNotMatch: MatcherBlock - let canMatchNil: Bool - - public init(canMatchNil: Bool, matcher: MatcherBlock, notMatcher: MatcherBlock) { - self.canMatchNil = canMatchNil - self._match = matcher - self._doesNotMatch = notMatcher - } - - public convenience init(matcher: MatcherBlock) { - self.init(canMatchNil: true, matcher: matcher) - } - - public convenience init(canMatchNil: Bool, matcher: MatcherBlock) { - self.init(canMatchNil: canMatchNil, matcher: matcher, notMatcher: ({ actualExpression, failureMessage in - return !matcher(actualExpression: actualExpression, failureMessage: failureMessage) - })) - } - - public convenience init(matcher: FullMatcherBlock) { - self.init(canMatchNil: true, matcher: matcher) - } - - public convenience init(canMatchNil: Bool, matcher: FullMatcherBlock) { - self.init(canMatchNil: canMatchNil, matcher: ({ actualExpression, failureMessage in - return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: false) - }), notMatcher: ({ actualExpression, failureMessage in - return matcher(actualExpression: actualExpression, failureMessage: failureMessage, shouldNotMatch: true) - })) - } - - private func canMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { - do { - if !canMatchNil { - if try actualExpression.evaluate() == nil { - failureMessage.postfixActual = " (use beNil() to match nils)" - return false - } - } - } catch let error { - failureMessage.actualValue = "an unexpected error thrown: \(error)" - return false - } - return true - } - - public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - let expr = Expression(expression: actualBlock, location: location) - let result = _match( - actualExpression: expr, - failureMessage: failureMessage) - if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) { - return result - } else { - return false - } - } - - public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - let expr = Expression(expression: actualBlock, location: location) - let result = _doesNotMatch( - actualExpression: expr, - failureMessage: failureMessage) - if self.canMatch(Expression(expression: actualBlock, location: location), failureMessage: failureMessage) { - return result - } else { - return false - } - } -} - -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.h b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.h deleted file mode 100644 index e5d5ddd..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.h +++ /dev/null @@ -1,18 +0,0 @@ -@class NSString; - -/** - * Returns a string appropriate for displaying in test output - * from the provided value. - * - * @param value A value that will show up in a test's output. - * - * @return The string that is returned can be - * customized per type by conforming a type to the `TestOutputStringConvertible` - * protocol. When stringifying a non-`TestOutputStringConvertible` type, this - * function will return the value's debug description and then its - * normal description if available and in that order. Otherwise it - * will return the result of constructing a string from the value. - * - * @see `TestOutputStringConvertible` - */ -extern NSString *_Nonnull NMBStringify(id _Nullable anyObject) __attribute__((warn_unused_result)); diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.m b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.m deleted file mode 100644 index 329d39a..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/NMBStringify.m +++ /dev/null @@ -1,6 +0,0 @@ -#import "NMBStringify.h" -#import - -NSString *_Nonnull NMBStringify(id _Nullable anyObject) { - return [NMBStringer stringify:anyObject]; -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/XCTestObservationCenter+Register.m b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/XCTestObservationCenter+Register.m deleted file mode 100644 index 35f26fd..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Adapters/ObjectiveC/XCTestObservationCenter+Register.m +++ /dev/null @@ -1,78 +0,0 @@ -#import "CurrentTestCaseTracker.h" -#import -#import - -#pragma mark - Method Swizzling - -/// Swaps the implementations between two instance methods. -/// -/// @param class The class containing `originalSelector`. -/// @param originalSelector Original method to replace. -/// @param replacementSelector Replacement method. -void swizzleSelectors(Class class, SEL originalSelector, SEL replacementSelector) { - Method originalMethod = class_getInstanceMethod(class, originalSelector); - Method replacementMethod = class_getInstanceMethod(class, replacementSelector); - - BOOL didAddMethod = - class_addMethod(class, - originalSelector, - method_getImplementation(replacementMethod), - method_getTypeEncoding(replacementMethod)); - - if (didAddMethod) { - class_replaceMethod(class, - replacementSelector, - method_getImplementation(originalMethod), - method_getTypeEncoding(originalMethod)); - } else { - method_exchangeImplementations(originalMethod, replacementMethod); - } -} - -#pragma mark - Private - -@interface XCTestObservationCenter (Private) -- (void)_addLegacyTestObserver:(id)observer; -@end - -@implementation XCTestObservationCenter (Register) - -/// Uses objc method swizzling to register `CurrentTestCaseTracker` as a test observer. This is necessary -/// because Xcode 7.3 introduced timing issues where if a custom `XCTestObservation` is registered too early -/// it suppresses all console output (generated by `XCTestLog`), breaking any tools that depend on this output. -/// This approach waits to register our custom test observer until XCTest adds its first "legacy" observer, -/// falling back to registering after the first normal observer if this private method ever changes. -+ (void)load { - if (class_getInstanceMethod([self class], @selector(_addLegacyTestObserver:))) { - // Swizzle -_addLegacyTestObserver: - swizzleSelectors([self class], @selector(_addLegacyTestObserver:), @selector(NMB_original__addLegacyTestObserver:)); - } else { - // Swizzle -addTestObserver:, only if -_addLegacyTestObserver: is not implemented - swizzleSelectors([self class], @selector(addTestObserver:), @selector(NMB_original_addTestObserver:)); - } -} - -#pragma mark - Replacement Methods - -/// Registers `CurrentTestCaseTracker` as a test observer after `XCTestLog` has been added. -- (void)NMB_original__addLegacyTestObserver:(id)observer { - [self NMB_original__addLegacyTestObserver:observer]; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [self addTestObserver:[CurrentTestCaseTracker sharedInstance]]; - }); -} - -/// Registers `CurrentTestCaseTracker` as a test observer after `XCTestLog` has been added. -/// This method is only used if `-_addLegacyTestObserver:` is not impelemented. (added in Xcode 7.3) -- (void)NMB_original_addTestObserver:(id)observer { - [self NMB_original_addTestObserver:observer]; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [self NMB_original_addTestObserver:[CurrentTestCaseTracker sharedInstance]]; - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/DSL+Wait.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/DSL+Wait.swift deleted file mode 100644 index 9124964..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/DSL+Wait.swift +++ /dev/null @@ -1,93 +0,0 @@ -import Foundation - -#if _runtime(_ObjC) -private enum ErrorResult { - case Exception(NSException) - case Error(ErrorType) - case None -} - -/// Only classes, protocols, methods, properties, and subscript declarations can be -/// bridges to Objective-C via the @objc keyword. This class encapsulates callback-style -/// asynchronous waiting logic so that it may be called from Objective-C and Swift. -internal class NMBWait: NSObject { - internal class func until( - timeout timeout: NSTimeInterval, - file: FileString = #file, - line: UInt = #line, - action: (() -> Void) -> Void) -> Void { - return throwableUntil(timeout: timeout, file: file, line: line) { (done: () -> Void) throws -> Void in - action() { done() } - } - } - - // Using a throwable closure makes this method not objc compatible. - internal class func throwableUntil( - timeout timeout: NSTimeInterval, - file: FileString = #file, - line: UInt = #line, - action: (() -> Void) throws -> Void) -> Void { - let awaiter = NimbleEnvironment.activeInstance.awaiter - let leeway = timeout / 2.0 - let result = awaiter.performBlock { (done: (ErrorResult) -> Void) throws -> Void in - dispatch_async(dispatch_get_main_queue()) { - let capture = NMBExceptionCapture( - handler: ({ exception in - done(.Exception(exception)) - }), - finally: ({ }) - ) - capture.tryBlock { - do { - try action() { - done(.None) - } - } catch let e { - done(.Error(e)) - } - } - } - }.timeout(timeout, forcefullyAbortTimeout: leeway).wait("waitUntil(...)", file: file, line: line) - - switch result { - case .Incomplete: internalError("Reached .Incomplete state for waitUntil(...).") - case .BlockedRunLoop: - fail(blockedRunLoopErrorMessageFor("-waitUntil()", leeway: leeway), - file: file, line: line) - case .TimedOut: - let pluralize = (timeout == 1 ? "" : "s") - fail("Waited more than \(timeout) second\(pluralize)", file: file, line: line) - case let .RaisedException(exception): - fail("Unexpected exception raised: \(exception)") - case let .ErrorThrown(error): - fail("Unexpected error thrown: \(error)") - case .Completed(.Exception(let exception)): - fail("Unexpected exception raised: \(exception)") - case .Completed(.Error(let error)): - fail("Unexpected error thrown: \(error)") - case .Completed(.None): // success - break - } - } - - @objc(untilFile:line:action:) - internal class func until(file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { - until(timeout: 1, file: file, line: line, action: action) - } -} - -internal func blockedRunLoopErrorMessageFor(fnName: String, leeway: NSTimeInterval) -> String { - return "\(fnName) timed out but was unable to run the timeout handler because the main thread is unresponsive (\(leeway) seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run." -} - -/// Wait asynchronously until the done closure is called or the timeout has been reached. -/// -/// @discussion -/// Call the done() closure to indicate the waiting has completed. -/// -/// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function -/// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. -public func waitUntil(timeout timeout: NSTimeInterval = 1, file: FileString = #file, line: UInt = #line, action: (() -> Void) -> Void) -> Void { - NMBWait.until(timeout: timeout, file: file, line: line, action: action) -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/DSL.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/DSL.swift deleted file mode 100644 index b43a933..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/DSL.swift +++ /dev/null @@ -1,68 +0,0 @@ -import Foundation - -/// Make an expectation on a given actual value. The value given is lazily evaluated. -@warn_unused_result(message="Follow 'expect(…)' with '.to(…)', '.toNot(…)', 'toEventually(…)', '==', etc.") -public func expect(@autoclosure(escaping) expression: () throws -> T?, file: FileString = #file, line: UInt = #line) -> Expectation { - return Expectation( - expression: Expression( - expression: expression, - location: SourceLocation(file: file, line: line), - isClosure: true)) -} - -/// Make an expectation on a given actual value. The closure is lazily invoked. -@warn_unused_result(message="Follow 'expect(…)' with '.to(…)', '.toNot(…)', 'toEventually(…)', '==', etc.") -public func expect(file: FileString = #file, line: UInt = #line, expression: () throws -> T?) -> Expectation { - return Expectation( - expression: Expression( - expression: expression, - location: SourceLocation(file: file, line: line), - isClosure: true)) -} - -/// Always fails the test with a message and a specified location. -public func fail(message: String, location: SourceLocation) { - let handler = NimbleEnvironment.activeInstance.assertionHandler - handler.assert(false, message: FailureMessage(stringValue: message), location: location) -} - -/// Always fails the test with a message. -public func fail(message: String, file: FileString = #file, line: UInt = #line) { - fail(message, location: SourceLocation(file: file, line: line)) -} - -/// Always fails the test. -public func fail(file: FileString = #file, line: UInt = #line) { - fail("fail() always fails", file: file, line: line) -} - -/// Like Swift's precondition(), but raises NSExceptions instead of sigaborts -internal func nimblePrecondition( - @autoclosure expr: () -> Bool, - @autoclosure _ name: () -> String, - @autoclosure _ message: () -> String, - file: StaticString = #file, - line: UInt = #line) -> Bool { - let result = expr() - if !result { -#if _runtime(_ObjC) - let e = NSException( - name: name(), - reason: message(), - userInfo: nil) - e.raise() -#else - preconditionFailure("\(name()) - \(message())", file: file, line: line) -#endif - } - return result -} - -@noreturn -internal func internalError(msg: String, file: FileString = #file, line: UInt = #line) { - fatalError( - "Nimble Bug Found: \(msg) at \(file):\(line).\n" + - "Please file a bug to Nimble: https://github.com/Quick/Nimble/issues with the " + - "code snippet that caused this error." - ) -} \ No newline at end of file diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Expectation.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Expectation.swift deleted file mode 100644 index 5baf258..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Expectation.swift +++ /dev/null @@ -1,66 +0,0 @@ -import Foundation - -internal func expressionMatches(expression: Expression, matcher: U, to: String, description: String?) -> (Bool, FailureMessage) { - let msg = FailureMessage() - msg.userDescription = description - msg.to = to - do { - let pass = try matcher.matches(expression, failureMessage: msg) - if msg.actualValue == "" { - msg.actualValue = "<\(stringify(try expression.evaluate()))>" - } - return (pass, msg) - } catch let error { - msg.actualValue = "an unexpected error thrown: <\(error)>" - return (false, msg) - } -} - -internal func expressionDoesNotMatch(expression: Expression, matcher: U, toNot: String, description: String?) -> (Bool, FailureMessage) { - let msg = FailureMessage() - msg.userDescription = description - msg.to = toNot - do { - let pass = try matcher.doesNotMatch(expression, failureMessage: msg) - if msg.actualValue == "" { - msg.actualValue = "<\(stringify(try expression.evaluate()))>" - } - return (pass, msg) - } catch let error { - msg.actualValue = "an unexpected error thrown: <\(error)>" - return (false, msg) - } -} - -public struct Expectation { - - public let expression: Expression - - public func verify(pass: Bool, _ message: FailureMessage) { - let handler = NimbleEnvironment.activeInstance.assertionHandler - handler.assert(pass, message: message, location: expression.location) - } - - /// Tests the actual value using a matcher to match. - public func to(matcher: U, description: String? = nil) { - let (pass, msg) = expressionMatches(expression, matcher: matcher, to: "to", description: description) - verify(pass, msg) - } - - /// Tests the actual value using a matcher to not match. - public func toNot(matcher: U, description: String? = nil) { - let (pass, msg) = expressionDoesNotMatch(expression, matcher: matcher, toNot: "to not", description: description) - verify(pass, msg) - } - - /// Tests the actual value using a matcher to not match. - /// - /// Alias to toNot(). - public func notTo(matcher: U, description: String? = nil) { - toNot(matcher, description: description) - } - - // see: - // - AsyncMatcherWrapper for extension - // - NMBExpectation for Objective-C interface -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Expression.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Expression.swift deleted file mode 100644 index f64ee24..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Expression.swift +++ /dev/null @@ -1,90 +0,0 @@ -import Foundation - -// Memoizes the given closure, only calling the passed -// closure once; even if repeat calls to the returned closure -internal func memoizedClosure(closure: () throws -> T) -> (Bool) throws -> T { - var cache: T? - return ({ withoutCaching in - if (withoutCaching || cache == nil) { - cache = try closure() - } - return cache! - }) -} - -/// Expression represents the closure of the value inside expect(...). -/// Expressions are memoized by default. This makes them safe to call -/// evaluate() multiple times without causing a re-evaluation of the underlying -/// closure. -/// -/// @warning Since the closure can be any code, Objective-C code may choose -/// to raise an exception. Currently, Expression does not memoize -/// exception raising. -/// -/// This provides a common consumable API for matchers to utilize to allow -/// Nimble to change internals to how the captured closure is managed. -public struct Expression { - internal let _expression: (Bool) throws -> T? - internal let _withoutCaching: Bool - public let location: SourceLocation - public let isClosure: Bool - - /// Creates a new expression struct. Normally, expect(...) will manage this - /// creation process. The expression is memoized. - /// - /// @param expression The closure that produces a given value. - /// @param location The source location that this closure originates from. - /// @param isClosure A bool indicating if the captured expression is a - /// closure or internally produced closure. Some matchers - /// may require closures. For example, toEventually() - /// requires an explicit closure. This gives Nimble - /// flexibility if @autoclosure behavior changes between - /// Swift versions. Nimble internals always sets this true. - public init(expression: () throws -> T?, location: SourceLocation, isClosure: Bool = true) { - self._expression = memoizedClosure(expression) - self.location = location - self._withoutCaching = false - self.isClosure = isClosure - } - - /// Creates a new expression struct. Normally, expect(...) will manage this - /// creation process. - /// - /// @param expression The closure that produces a given value. - /// @param location The source location that this closure originates from. - /// @param withoutCaching Indicates if the struct should memoize the given - /// closure's result. Subsequent evaluate() calls will - /// not call the given closure if this is true. - /// @param isClosure A bool indicating if the captured expression is a - /// closure or internally produced closure. Some matchers - /// may require closures. For example, toEventually() - /// requires an explicit closure. This gives Nimble - /// flexibility if @autoclosure behavior changes between - /// Swift versions. Nimble internals always sets this true. - public init(memoizedExpression: (Bool) throws -> T?, location: SourceLocation, withoutCaching: Bool, isClosure: Bool = true) { - self._expression = memoizedExpression - self.location = location - self._withoutCaching = withoutCaching - self.isClosure = isClosure - } - - /// Returns a new Expression from the given expression. Identical to a map() - /// on this type. This should be used only to typecast the Expression's - /// closure value. - /// - /// The returned expression will preserve location and isClosure. - /// - /// @param block The block that can cast the current Expression value to a - /// new type. - public func cast(block: (T?) throws -> U?) -> Expression { - return Expression(expression: ({ try block(self.evaluate()) }), location: self.location, isClosure: self.isClosure) - } - - public func evaluate() throws -> T? { - return try self._expression(_withoutCaching) - } - - public func withoutCaching() -> Expression { - return Expression(memoizedExpression: self._expression, location: location, withoutCaching: true, isClosure: isClosure) - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/FailureMessage.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/FailureMessage.swift deleted file mode 100644 index 537d1bb..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/FailureMessage.swift +++ /dev/null @@ -1,64 +0,0 @@ -import Foundation - -/// Encapsulates the failure message that matchers can report to the end user. -/// -/// This is shared state between Nimble and matchers that mutate this value. -public class FailureMessage: NSObject { - public var expected: String = "expected" - public var actualValue: String? = "" // empty string -> use default; nil -> exclude - public var to: String = "to" - public var postfixMessage: String = "match" - public var postfixActual: String = "" - /// An optional message that will be appended as a new line and provides additional details - /// about the failure. This message will only be visible in the issue navigator / in logs but - /// not directly in the source editor since only a single line is presented there. - public var extendedMessage: String? = nil - public var userDescription: String? = nil - - public var stringValue: String { - get { - if let value = _stringValueOverride { - return value - } else { - return computeStringValue() - } - } - set { - _stringValueOverride = newValue - } - } - - internal var _stringValueOverride: String? - - public override init() { - } - - public init(stringValue: String) { - _stringValueOverride = stringValue - } - - internal func stripNewlines(str: String) -> String { - var lines: [String] = NSString(string: str).componentsSeparatedByString("\n") as [String] - let whitespace = NSCharacterSet.whitespaceAndNewlineCharacterSet() - lines = lines.map { line in NSString(string: line).stringByTrimmingCharactersInSet(whitespace) } - return lines.joinWithSeparator("") - } - - internal func computeStringValue() -> String { - var value = "\(expected) \(to) \(postfixMessage)" - if let actualValue = actualValue { - value = "\(expected) \(to) \(postfixMessage), got \(actualValue)\(postfixActual)" - } - value = stripNewlines(value) - - if let extendedMessage = extendedMessage { - value += "\n\(stripNewlines(extendedMessage))" - } - - if let userDescription = userDescription { - return "\(userDescription)\n\(value)" - } - - return value - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Info.plist b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Info.plist deleted file mode 100644 index 6ac80b8..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Info.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSHumanReadableCopyright - Copyright © 2014 Jeff Hui. All rights reserved. - NSPrincipalClass - - - diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/AllPass.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/AllPass.swift deleted file mode 100644 index d67714b..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/AllPass.swift +++ /dev/null @@ -1,92 +0,0 @@ -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(try expression.evaluate()) - } -} - -public func allPass - (matcher: V) -> NonNilMatcherFunc { - return createAllPassMatcher() { - try matcher.matches($0, failureMessage: $1) - } -} - -private func createAllPassMatcher - (elementEvaluator:(Expression, FailureMessage) throws -> Bool) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.actualValue = nil - if let actualValue = try actualExpression.evaluate() { - for currentElement in actualValue { - let exp = Expression( - expression: {currentElement}, location: actualExpression.location) - if try !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 - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func allPassMatcher(matcher: NMBObjCMatcher) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let location = actualExpression.location - let actualValue = try! 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( - {try! expression.evaluate()}, failureMessage: failureMessage, location: expr.location) - } - return try! createAllPassMatcher(elementEvaluator).matches( - expr, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/AsyncMatcherWrapper.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/AsyncMatcherWrapper.swift deleted file mode 100644 index 3df6eb6..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/AsyncMatcherWrapper.swift +++ /dev/null @@ -1,140 +0,0 @@ -import Foundation - -#if _runtime(_ObjC) - -public struct AsyncDefaults { - public static var Timeout: NSTimeInterval = 1 - public static var PollInterval: NSTimeInterval = 0.01 -} - -internal struct AsyncMatcherWrapper: Matcher { - let fullMatcher: U - let timeoutInterval: NSTimeInterval - let pollInterval: NSTimeInterval - - init(fullMatcher: U, timeoutInterval: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval) { - self.fullMatcher = fullMatcher - self.timeoutInterval = timeoutInterval - self.pollInterval = pollInterval - } - - func matches(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { - let uncachedExpression = actualExpression.withoutCaching() - let fnName = "expect(...).toEventually(...)" - let result = pollBlock( - pollInterval: pollInterval, - timeoutInterval: timeoutInterval, - file: actualExpression.location.file, - line: actualExpression.location.line, - fnName: fnName) { - try self.fullMatcher.matches(uncachedExpression, failureMessage: failureMessage) - } - switch (result) { - case let .Completed(isSuccessful): return isSuccessful - case .TimedOut: return false - case let .ErrorThrown(error): - failureMessage.actualValue = "an unexpected error thrown: <\(error)>" - return false - case let .RaisedException(exception): - failureMessage.actualValue = "an unexpected exception thrown: <\(exception)>" - return false - case .BlockedRunLoop: - failureMessage.postfixMessage += " (timed out, but main thread was unresponsive)." - return false - case .Incomplete: - internalError("Reached .Incomplete state for toEventually(...).") - } - } - - func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) -> Bool { - let uncachedExpression = actualExpression.withoutCaching() - let result = pollBlock( - pollInterval: pollInterval, - timeoutInterval: timeoutInterval, - file: actualExpression.location.file, - line: actualExpression.location.line, - fnName: "expect(...).toEventuallyNot(...)") { - try self.fullMatcher.doesNotMatch(uncachedExpression, failureMessage: failureMessage) - } - switch (result) { - case let .Completed(isSuccessful): return isSuccessful - case .TimedOut: return false - case let .ErrorThrown(error): - failureMessage.actualValue = "an unexpected error thrown: <\(error)>" - return false - case let .RaisedException(exception): - failureMessage.actualValue = "an unexpected exception thrown: <\(exception)>" - return false - case .BlockedRunLoop: - failureMessage.postfixMessage += " (timed out, but main thread was unresponsive)." - return false - case .Incomplete: - internalError("Reached .Incomplete state for toEventuallyNot(...).") - } - } -} - -private let toEventuallyRequiresClosureError = FailureMessage(stringValue: "expect(...).toEventually(...) requires an explicit closure (eg - expect { ... }.toEventually(...) )\nSwift 1.2 @autoclosure behavior has changed in an incompatible way for Nimble to function") - - -extension Expectation { - /// Tests the actual value using a matcher to match by checking continuously - /// at each pollInterval until the timeout is reached. - /// - /// @discussion - /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function - /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. - public func toEventually(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { - if expression.isClosure { - let (pass, msg) = expressionMatches( - expression, - matcher: AsyncMatcherWrapper( - fullMatcher: matcher, - timeoutInterval: timeout, - pollInterval: pollInterval), - to: "to eventually", - description: description - ) - verify(pass, msg) - } else { - verify(false, toEventuallyRequiresClosureError) - } - } - - /// Tests the actual value using a matcher to not match by checking - /// continuously at each pollInterval until the timeout is reached. - /// - /// @discussion - /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function - /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. - public func toEventuallyNot(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { - if expression.isClosure { - let (pass, msg) = expressionDoesNotMatch( - expression, - matcher: AsyncMatcherWrapper( - fullMatcher: matcher, - timeoutInterval: timeout, - pollInterval: pollInterval), - toNot: "to eventually not", - description: description - ) - verify(pass, msg) - } else { - verify(false, toEventuallyRequiresClosureError) - } - } - - /// Tests the actual value using a matcher to not match by checking - /// continuously at each pollInterval until the timeout is reached. - /// - /// Alias of toEventuallyNot() - /// - /// @discussion - /// This function manages the main run loop (`NSRunLoop.mainRunLoop()`) while this function - /// is executing. Any attempts to touch the run loop may cause non-deterministic behavior. - public func toNotEventually(matcher: U, timeout: NSTimeInterval = AsyncDefaults.Timeout, pollInterval: NSTimeInterval = AsyncDefaults.PollInterval, description: String? = nil) { - return toEventuallyNot(matcher, timeout: timeout, pollInterval: pollInterval, description: description) - } -} - -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift deleted file mode 100644 index d1f3737..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift +++ /dev/null @@ -1,38 +0,0 @@ -import Foundation - -#if _runtime(_ObjC) - -// A Nimble matcher that catches attempts to use beAKindOf with non Objective-C types -public func beAKindOf(expectedClass: Any) -> NonNilMatcherFunc { - return NonNilMatcherFunc {actualExpression, failureMessage in - failureMessage.stringValue = "beAKindOf only works on Objective-C types since" - + " the Swift compiler will automatically type check Swift-only types." - + " This expectation is redundant." - return false - } -} - -/// A Nimble matcher that succeeds when the actual value is an instance of the given class. -/// @see beAnInstanceOf if you want to match against the exact class -public func beAKindOf(expectedClass: AnyClass) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - let instance = try actualExpression.evaluate() - if let validInstance = instance { - failureMessage.actualValue = "<\(classAsString(validInstance.dynamicType)) instance>" - } else { - failureMessage.actualValue = "" - } - failureMessage.postfixMessage = "be a kind of \(classAsString(expectedClass))" - return instance != nil && instance!.isKindOfClass(expectedClass) - } -} - -extension NMBObjCMatcher { - public class func beAKindOfMatcher(expected: AnyClass) -> NMBMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - return try! beAKindOf(expected).matches(actualExpression, failureMessage: failureMessage) - } - } -} - -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift deleted file mode 100644 index 32477dd..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift +++ /dev/null @@ -1,40 +0,0 @@ -import Foundation - -// A Nimble matcher that catches attempts to use beAnInstanceOf with non Objective-C types -public func beAnInstanceOf(expectedClass: Any) -> NonNilMatcherFunc { - return NonNilMatcherFunc {actualExpression, failureMessage in - failureMessage.stringValue = "beAnInstanceOf only works on Objective-C types since" - + " the Swift compiler will automatically type check Swift-only types." - + " This expectation is redundant." - return false - } -} - -/// A Nimble matcher that succeeds when the actual value is an instance of the given class. -/// @see beAKindOf if you want to match against subclasses -public func beAnInstanceOf(expectedClass: AnyClass) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - let instance = try actualExpression.evaluate() - if let validInstance = instance { - failureMessage.actualValue = "<\(classAsString(validInstance.dynamicType)) instance>" - } else { - failureMessage.actualValue = "" - } - failureMessage.postfixMessage = "be an instance of \(classAsString(expectedClass))" -#if _runtime(_ObjC) - return instance != nil && instance!.isMemberOfClass(expectedClass) -#else - return instance != nil && instance!.dynamicType == expectedClass -#endif - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beAnInstanceOfMatcher(expected: AnyClass) -> NMBMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - return try! beAnInstanceOf(expected).matches(actualExpression, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift deleted file mode 100644 index 2ba9d2f..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift +++ /dev/null @@ -1,124 +0,0 @@ -#if os(Linux) -import Glibc -#endif -import Foundation - -internal let DefaultDelta = 0.0001 - -internal func isCloseTo(actualValue: NMBDoubleConvertible?, expectedValue: NMBDoubleConvertible, delta: Double, failureMessage: FailureMessage) -> Bool { - failureMessage.postfixMessage = "be close to <\(stringify(expectedValue))> (within \(stringify(delta)))" - failureMessage.actualValue = "<\(stringify(actualValue))>" - return actualValue != nil && abs(actualValue!.doubleValue - expectedValue.doubleValue) < delta -} - -/// A Nimble matcher that succeeds when a value is close to another. This is used for floating -/// point values which can have imprecise results when doing arithmetic on them. -/// -/// @see equal -public func beCloseTo(expectedValue: Double, within delta: Double = DefaultDelta) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage) - } -} - -/// A Nimble matcher that succeeds when a value is close to another. This is used for floating -/// point values which can have imprecise results when doing arithmetic on them. -/// -/// @see equal -public func beCloseTo(expectedValue: NMBDoubleConvertible, within delta: Double = DefaultDelta) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - return isCloseTo(try actualExpression.evaluate(), expectedValue: expectedValue, delta: delta, failureMessage: failureMessage) - } -} - -#if _runtime(_ObjC) -public class NMBObjCBeCloseToMatcher : NSObject, NMBMatcher { - var _expected: NSNumber - var _delta: CDouble - init(expected: NSNumber, within: CDouble) { - _expected = expected - _delta = within - } - - public func matches(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - let actualBlock: () -> NMBDoubleConvertible? = ({ - return actualExpression() as? NMBDoubleConvertible - }) - let expr = Expression(expression: actualBlock, location: location) - let matcher = beCloseTo(self._expected, within: self._delta) - return try! matcher.matches(expr, failureMessage: failureMessage) - } - - public func doesNotMatch(actualExpression: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - let actualBlock: () -> NMBDoubleConvertible? = ({ - return actualExpression() as? NMBDoubleConvertible - }) - let expr = Expression(expression: actualBlock, location: location) - let matcher = beCloseTo(self._expected, within: self._delta) - return try! matcher.doesNotMatch(expr, failureMessage: failureMessage) - } - - public var within: (CDouble) -> NMBObjCBeCloseToMatcher { - return ({ delta in - return NMBObjCBeCloseToMatcher(expected: self._expected, within: delta) - }) - } -} - -extension NMBObjCMatcher { - public class func beCloseToMatcher(expected: NSNumber, within: CDouble) -> NMBObjCBeCloseToMatcher { - return NMBObjCBeCloseToMatcher(expected: expected, within: within) - } -} -#endif - -public func beCloseTo(expectedValues: [Double], within delta: Double = DefaultDelta) -> NonNilMatcherFunc <[Double]> { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be close to <\(stringify(expectedValues))> (each within \(stringify(delta)))" - if let actual = try actualExpression.evaluate() { - failureMessage.actualValue = "<\(stringify(actual))>" - - if actual.count != expectedValues.count { - return false - } else { - for (index, actualItem) in actual.enumerate() { - if fabs(actualItem - expectedValues[index]) > delta { - return false - } - } - return true - } - } - return false - } -} - -// MARK: - Operators - -infix operator ≈ { - associativity none - precedence 130 -} - -public func ≈(lhs: Expectation<[Double]>, rhs: [Double]) { - lhs.to(beCloseTo(rhs)) -} - -public func ≈(lhs: Expectation, rhs: NMBDoubleConvertible) { - lhs.to(beCloseTo(rhs)) -} - -public func ≈(lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { - lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) -} - -public func ==(lhs: Expectation, rhs: (expected: NMBDoubleConvertible, delta: Double)) { - lhs.to(beCloseTo(rhs.expected, within: rhs.delta)) -} - -// make this higher precedence than exponents so the Doubles either end aren't pulled in -// unexpectantly -infix operator ± { precedence 170 } -public func ±(lhs: NMBDoubleConvertible, rhs: Double) -> (expected: NMBDoubleConvertible, delta: Double) { - return (expected: lhs, delta: rhs) -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeEmpty.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeEmpty.swift deleted file mode 100644 index cebd82d..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeEmpty.swift +++ /dev/null @@ -1,92 +0,0 @@ -import Foundation - - -/// A Nimble matcher that succeeds when a value is "empty". For collections, this -/// means the are no items in that collection. For strings, it is an empty string. -public func beEmpty() -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be empty" - let actualSeq = try actualExpression.evaluate() - if actualSeq == nil { - return true - } - var generator = actualSeq!.generate() - return generator.next() == nil - } -} - -/// A Nimble matcher that succeeds when a value is "empty". For collections, this -/// means the are no items in that collection. For strings, it is an empty string. -public func beEmpty() -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be empty" - let actualString = try actualExpression.evaluate() - return actualString == nil || NSString(string: actualString!).length == 0 - } -} - -/// A Nimble matcher that succeeds when a value is "empty". For collections, this -/// means the are no items in that collection. For NSString instances, it is an empty string. -public func beEmpty() -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be empty" - let actualString = try actualExpression.evaluate() - return actualString == nil || actualString!.length == 0 - } -} - -// Without specific overrides, beEmpty() is ambiguous for NSDictionary, NSArray, -// etc, since they conform to SequenceType as well as NMBCollection. - -/// A Nimble matcher that succeeds when a value is "empty". For collections, this -/// means the are no items in that collection. For strings, it is an empty string. -public func beEmpty() -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be empty" - let actualDictionary = try actualExpression.evaluate() - return actualDictionary == nil || actualDictionary!.count == 0 - } -} - -/// A Nimble matcher that succeeds when a value is "empty". For collections, this -/// means the are no items in that collection. For strings, it is an empty string. -public func beEmpty() -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be empty" - let actualArray = try actualExpression.evaluate() - return actualArray == nil || actualArray!.count == 0 - } -} - -/// A Nimble matcher that succeeds when a value is "empty". For collections, this -/// means the are no items in that collection. For strings, it is an empty string. -public func beEmpty() -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be empty" - let actual = try actualExpression.evaluate() - return actual == nil || actual!.count == 0 - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beEmptyMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let location = actualExpression.location - let actualValue = try! actualExpression.evaluate() - failureMessage.postfixMessage = "be empty" - if let value = actualValue as? NMBCollection { - let expr = Expression(expression: ({ value as NMBCollection }), location: location) - return try! beEmpty().matches(expr, failureMessage: failureMessage) - } else if let value = actualValue as? NSString { - let expr = Expression(expression: ({ value as String }), location: location) - return try! beEmpty().matches(expr, failureMessage: failureMessage) - } else if let actualValue = actualValue { - failureMessage.postfixMessage = "be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings)" - failureMessage.actualValue = "\(classAsString(actualValue.dynamicType)) type" - } - return false - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift deleted file mode 100644 index 0f24ab5..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift +++ /dev/null @@ -1,39 +0,0 @@ -import Foundation - - -/// A Nimble matcher that succeeds when the actual value is greater than the expected value. -public func beGreaterThan(expectedValue: T?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be greater than <\(stringify(expectedValue))>" - return try actualExpression.evaluate() > expectedValue - } -} - -/// A Nimble matcher that succeeds when the actual value is greater than the expected value. -public func beGreaterThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be greater than <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedDescending - return matches - } -} - -public func >(lhs: Expectation, rhs: T) { - lhs.to(beGreaterThan(rhs)) -} - -public func >(lhs: Expectation, rhs: NMBComparable?) { - lhs.to(beGreaterThan(rhs)) -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beGreaterThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let expr = actualExpression.cast { $0 as? NMBComparable } - return try! beGreaterThan(expected).matches(expr, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift deleted file mode 100644 index c89ff07..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift +++ /dev/null @@ -1,41 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual value is greater than -/// or equal to the expected value. -public func beGreaterThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be greater than or equal to <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - return actualValue >= expectedValue - } -} - -/// A Nimble matcher that succeeds when the actual value is greater than -/// or equal to the expected value. -public func beGreaterThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be greater than or equal to <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedAscending - return matches - } -} - -public func >=(lhs: Expectation, rhs: T) { - lhs.to(beGreaterThanOrEqualTo(rhs)) -} - -public func >=(lhs: Expectation, rhs: T) { - lhs.to(beGreaterThanOrEqualTo(rhs)) -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beGreaterThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let expr = actualExpression.cast { $0 as? NMBComparable } - return try! beGreaterThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift deleted file mode 100644 index a369501..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift +++ /dev/null @@ -1,39 +0,0 @@ -import Foundation - - -/// A Nimble matcher that succeeds when the actual value is the same instance -/// as the expected instance. -public func beIdenticalTo(expected: AnyObject?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - let actual = try actualExpression.evaluate() - failureMessage.actualValue = "\(identityAsString(actual))" - failureMessage.postfixMessage = "be identical to \(identityAsString(expected))" - return actual === expected && actual !== nil - } -} - -public func ===(lhs: Expectation, rhs: AnyObject?) { - lhs.to(beIdenticalTo(rhs)) -} -public func !==(lhs: Expectation, rhs: AnyObject?) { - lhs.toNot(beIdenticalTo(rhs)) -} - -/// A Nimble matcher that succeeds when the actual value is the same instance -/// as the expected instance. -/// -/// Alias for "beIdenticalTo". -public func be(expected: AnyObject?) -> NonNilMatcherFunc { - return beIdenticalTo(expected) -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beIdenticalToMatcher(expected: NSObject?) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let aExpr = actualExpression.cast { $0 as AnyObject? } - return try! beIdenticalTo(expected).matches(aExpr, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeLessThan.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeLessThan.swift deleted file mode 100644 index ea4725b..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeLessThan.swift +++ /dev/null @@ -1,38 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual value is less than the expected value. -public func beLessThan(expectedValue: T?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be less than <\(stringify(expectedValue))>" - return try actualExpression.evaluate() < expectedValue - } -} - -/// A Nimble matcher that succeeds when the actual value is less than the expected value. -public func beLessThan(expectedValue: NMBComparable?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be less than <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - let matches = actualValue != nil && actualValue!.NMB_compare(expectedValue) == NSComparisonResult.OrderedAscending - return matches - } -} - -public func <(lhs: Expectation, rhs: T) { - lhs.to(beLessThan(rhs)) -} - -public func <(lhs: Expectation, rhs: NMBComparable?) { - lhs.to(beLessThan(rhs)) -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beLessThanMatcher(expected: NMBComparable?) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let expr = actualExpression.cast { $0 as! NMBComparable? } - return try! beLessThan(expected).matches(expr, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift deleted file mode 100644 index a24cf8c..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift +++ /dev/null @@ -1,39 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual value is less than -/// or equal to the expected value. -public func beLessThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be less than or equal to <\(stringify(expectedValue))>" - return try actualExpression.evaluate() <= expectedValue - } -} - -/// A Nimble matcher that succeeds when the actual value is less than -/// or equal to the expected value. -public func beLessThanOrEqualTo(expectedValue: T?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be less than or equal to <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - return actualValue != nil && actualValue!.NMB_compare(expectedValue) != NSComparisonResult.OrderedDescending - } -} - -public func <=(lhs: Expectation, rhs: T) { - lhs.to(beLessThanOrEqualTo(rhs)) -} - -public func <=(lhs: Expectation, rhs: T) { - lhs.to(beLessThanOrEqualTo(rhs)) -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beLessThanOrEqualToMatcher(expected: NMBComparable?) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil:false) { actualExpression, failureMessage in - let expr = actualExpression.cast { $0 as? NMBComparable } - return try! beLessThanOrEqualTo(expected).matches(expr, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeLogical.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeLogical.swift deleted file mode 100644 index ac729b2..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeLogical.swift +++ /dev/null @@ -1,89 +0,0 @@ -import Foundation - -internal func matcherWithFailureMessage(matcher: NonNilMatcherFunc, postprocessor: (FailureMessage) -> Void) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - defer { postprocessor(failureMessage) } - return try matcher.matcher(actualExpression, failureMessage) - } -} - -// MARK: beTrue() / beFalse() - -/// A Nimble matcher that succeeds when the actual value is exactly true. -/// This matcher will not match against nils. -public func beTrue() -> NonNilMatcherFunc { - return matcherWithFailureMessage(equal(true)) { failureMessage in - failureMessage.postfixMessage = "be true" - } -} - -/// A Nimble matcher that succeeds when the actual value is exactly false. -/// This matcher will not match against nils. -public func beFalse() -> NonNilMatcherFunc { - return matcherWithFailureMessage(equal(false)) { failureMessage in - failureMessage.postfixMessage = "be false" - } -} - -// MARK: beTruthy() / beFalsy() - -/// A Nimble matcher that succeeds when the actual value is not logically false. -public func beTruthy() -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be truthy" - let actualValue = try actualExpression.evaluate() - if let actualValue = actualValue { - if let actualValue = actualValue as? BooleanType { - return actualValue.boolValue == true - } - } - return actualValue != nil - } -} - -/// A Nimble matcher that succeeds when the actual value is logically false. -/// This matcher will match against nils. -public func beFalsy() -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be falsy" - let actualValue = try actualExpression.evaluate() - if let actualValue = actualValue { - if let actualValue = actualValue as? BooleanType { - return actualValue.boolValue != true - } - } - return actualValue == nil - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beTruthyMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher { actualExpression, failureMessage in - let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? } - return try! beTruthy().matches(expr, failureMessage: failureMessage) - } - } - - public class func beFalsyMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher { actualExpression, failureMessage in - let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as BooleanType? } - return try! beFalsy().matches(expr, failureMessage: failureMessage) - } - } - - public class func beTrueMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher { actualExpression, failureMessage in - let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? } - return try! beTrue().matches(expr, failureMessage: failureMessage) - } - } - - public class func beFalseMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let expr = actualExpression.cast { ($0 as? NSNumber)?.boolValue ?? false as Bool? } - return try! beFalse().matches(expr, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeNil.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeNil.swift deleted file mode 100644 index a6fb31f..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeNil.swift +++ /dev/null @@ -1,20 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual value is nil. -public func beNil() -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be nil" - let actualValue = try actualExpression.evaluate() - return actualValue == nil - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beNilMatcher() -> NMBObjCMatcher { - return NMBObjCMatcher { actualExpression, failureMessage in - return try! beNil().matches(actualExpression, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeVoid.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeVoid.swift deleted file mode 100644 index 8f86265..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeVoid.swift +++ /dev/null @@ -1,18 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual value is Void. -public func beVoid() -> MatcherFunc<()> { - return MatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "be void" - let actualValue: ()? = try actualExpression.evaluate() - return actualValue != nil - } -} - -public func ==(lhs: Expectation<()>, rhs: ()) { - lhs.to(beVoid()) -} - -public func !=(lhs: Expectation<()>, rhs: ()) { - lhs.toNot(beVoid()) -} \ No newline at end of file diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeginWith.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeginWith.swift deleted file mode 100644 index 0b5e0e1..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/BeginWith.swift +++ /dev/null @@ -1,55 +0,0 @@ -import Foundation - - -/// A Nimble matcher that succeeds when the actual sequence's first element -/// is equal to the expected value. -public func beginWith(startingElement: T) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "begin with <\(startingElement)>" - if let actualValue = try actualExpression.evaluate() { - var actualGenerator = actualValue.generate() - return actualGenerator.next() == startingElement - } - return false - } -} - -/// A Nimble matcher that succeeds when the actual collection's first element -/// is equal to the expected object. -public func beginWith(startingElement: AnyObject) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "begin with <\(startingElement)>" - let collection = try actualExpression.evaluate() - return collection != nil && collection!.indexOfObject(startingElement) == 0 - } -} - -/// A Nimble matcher that succeeds when the actual string contains expected substring -/// where the expected substring's location is zero. -public func beginWith(startingSubstring: String) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "begin with <\(startingSubstring)>" - if let actual = try actualExpression.evaluate() { - let range = actual.rangeOfString(startingSubstring) - return range != nil && range!.startIndex == actual.startIndex - } - return false - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func beginWithMatcher(expected: AnyObject) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let actual = try! actualExpression.evaluate() - if let _ = actual as? String { - let expr = actualExpression.cast { $0 as? String } - return try! beginWith(expected as! String).matches(expr, failureMessage: failureMessage) - } else { - let expr = actualExpression.cast { $0 as? NMBOrderedCollection } - return try! beginWith(expected).matches(expr, failureMessage: failureMessage) - } - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/Contain.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/Contain.swift deleted file mode 100644 index cc08768..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/Contain.swift +++ /dev/null @@ -1,92 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual sequence contains the expected value. -public func contain(items: T...) -> NonNilMatcherFunc { - return contain(items) -} - -public func contain(items: [T]) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "contain <\(arrayAsString(items))>" - if let actual = try actualExpression.evaluate() { - return items.all { - return actual.contains($0) - } - } - return false - } -} - -/// A Nimble matcher that succeeds when the actual string contains the expected substring. -public func contain(substrings: String...) -> NonNilMatcherFunc { - return contain(substrings) -} - -public func contain(substrings: [String]) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "contain <\(arrayAsString(substrings))>" - if let actual = try actualExpression.evaluate() { - return substrings.all { - let range = actual.rangeOfString($0) - return range != nil && !range!.isEmpty - } - } - return false - } -} - -/// A Nimble matcher that succeeds when the actual string contains the expected substring. -public func contain(substrings: NSString...) -> NonNilMatcherFunc { - return contain(substrings) -} - -public func contain(substrings: [NSString]) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "contain <\(arrayAsString(substrings))>" - if let actual = try actualExpression.evaluate() { - return substrings.all { actual.rangeOfString($0.description).length != 0 } - } - return false - } -} - -/// A Nimble matcher that succeeds when the actual collection contains the expected object. -public func contain(items: AnyObject?...) -> NonNilMatcherFunc { - return contain(items) -} - -public func contain(items: [AnyObject?]) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "contain <\(arrayAsString(items))>" - guard let actual = try actualExpression.evaluate() else { return false } - return items.all { item in - return item != nil && actual.containsObject(item!) - } - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func containMatcher(expected: [NSObject]) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let location = actualExpression.location - let actualValue = try! actualExpression.evaluate() - if let value = actualValue as? NMBContainer { - let expr = Expression(expression: ({ value as NMBContainer }), location: location) - - // A straightforward cast on the array causes this to crash, so we have to cast the individual items - let expectedOptionals: [AnyObject?] = expected.map({ $0 as AnyObject? }) - return try! contain(expectedOptionals).matches(expr, failureMessage: failureMessage) - } else if let value = actualValue as? NSString { - let expr = Expression(expression: ({ value as String }), location: location) - return try! contain(expected as! [String]).matches(expr, failureMessage: failureMessage) - } else if actualValue != nil { - failureMessage.postfixMessage = "contain <\(arrayAsString(expected))> (only works for NSArrays, NSSets, NSHashTables, and NSStrings)" - } else { - failureMessage.postfixMessage = "contain <\(arrayAsString(expected))>" - } - return false - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/EndWith.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/EndWith.swift deleted file mode 100644 index ff2bd9e..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/EndWith.swift +++ /dev/null @@ -1,65 +0,0 @@ -import Foundation - - -/// A Nimble matcher that succeeds when the actual sequence's last element -/// is equal to the expected value. -public func endWith(endingElement: T) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "end with <\(endingElement)>" - - if let actualValue = try actualExpression.evaluate() { - var actualGenerator = actualValue.generate() - var lastItem: T? - var item: T? - repeat { - lastItem = item - item = actualGenerator.next() - } while(item != nil) - - return lastItem == endingElement - } - return false - } -} - -/// A Nimble matcher that succeeds when the actual collection's last element -/// is equal to the expected object. -public func endWith(endingElement: AnyObject) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "end with <\(endingElement)>" - let collection = try actualExpression.evaluate() - return collection != nil && collection!.indexOfObject(endingElement) == collection!.count - 1 - } -} - - -/// A Nimble matcher that succeeds when the actual string contains the expected substring -/// where the expected substring's location is the actual string's length minus the -/// expected substring's length. -public func endWith(endingSubstring: String) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "end with <\(endingSubstring)>" - if let collection = try actualExpression.evaluate() { - let range = collection.rangeOfString(endingSubstring) - return range != nil && range!.endIndex == collection.endIndex - } - return false - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func endWithMatcher(expected: AnyObject) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let actual = try! actualExpression.evaluate() - if let _ = actual as? String { - let expr = actualExpression.cast { $0 as? String } - return try! endWith(expected as! String).matches(expr, failureMessage: failureMessage) - } else { - let expr = actualExpression.cast { $0 as? NMBOrderedCollection } - return try! endWith(expected).matches(expr, failureMessage: failureMessage) - } - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/Equal.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/Equal.swift deleted file mode 100644 index 6373d8c..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/Equal.swift +++ /dev/null @@ -1,181 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual value is equal to the expected value. -/// Values can support equal by supporting the Equatable protocol. -/// -/// @see beCloseTo if you want to match imprecise types (eg - floats, doubles). -public func equal(expectedValue: T?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - let matches = actualValue == expectedValue && expectedValue != nil - if expectedValue == nil || actualValue == nil { - if expectedValue == nil { - failureMessage.postfixActual = " (use beNil() to match nils)" - } - return false - } - return matches - } -} - -/// A Nimble matcher that succeeds when the actual value is equal to the expected value. -/// Values can support equal by supporting the Equatable protocol. -/// -/// @see beCloseTo if you want to match imprecise types (eg - floats, doubles). -public func equal(expectedValue: [T: C]?) -> NonNilMatcherFunc<[T: C]> { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - if expectedValue == nil || actualValue == nil { - if expectedValue == nil { - failureMessage.postfixActual = " (use beNil() to match nils)" - } - return false - } - return expectedValue! == actualValue! - } -} - -/// A Nimble matcher that succeeds when the actual collection is equal to the expected collection. -/// Items must implement the Equatable protocol. -public func equal(expectedValue: [T]?) -> NonNilMatcherFunc<[T]> { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" - let actualValue = try actualExpression.evaluate() - if expectedValue == nil || actualValue == nil { - if expectedValue == nil { - failureMessage.postfixActual = " (use beNil() to match nils)" - } - return false - } - return expectedValue! == actualValue! - } -} - -/// A Nimble matcher allowing comparison of collection with optional type -public func equal(expectedValue: [T?]) -> NonNilMatcherFunc<[T?]> { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "equal <\(stringify(expectedValue))>" - if let actualValue = try actualExpression.evaluate() { - if expectedValue.count != actualValue.count { - return false - } - - for (index, item) in actualValue.enumerate() { - let otherItem = expectedValue[index] - if item == nil && otherItem == nil { - continue - } else if item == nil && otherItem != nil { - return false - } else if item != nil && otherItem == nil { - return false - } else if item! != otherItem! { - return false - } - } - - return true - } else { - failureMessage.postfixActual = " (use beNil() to match nils)" - } - - return false - } -} - -/// A Nimble matcher that succeeds when the actual set is equal to the expected set. -public func equal(expectedValue: Set?) -> NonNilMatcherFunc> { - return equal(expectedValue, stringify: stringify) -} - -/// 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).sort { $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 = try 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)) -} - -public func !=(lhs: Expectation, rhs: T?) { - lhs.toNot(equal(rhs)) -} - -public func ==(lhs: Expectation<[T]>, rhs: [T]?) { - lhs.to(equal(rhs)) -} - -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)) -} - -public func !=(lhs: Expectation<[T: C]>, rhs: [T: C]?) { - lhs.toNot(equal(rhs)) -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func equalMatcher(expected: NSObject) -> NMBMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - return try! equal(expected).matches(actualExpression, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/HaveCount.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/HaveCount.swift deleted file mode 100644 index 203bb4b..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/HaveCount.swift +++ /dev/null @@ -1,57 +0,0 @@ -import Foundation - -// The `haveCount` matchers do not print the full string representation of the collection value, -// instead they only print the type name and the expected count. This makes it easier to understand -// the reason for failed expectations. See: https://github.com/Quick/Nimble/issues/308. -// The representation of the collection content is provided in a new line as an `extendedMessage`. - -/// A Nimble matcher that succeeds when the actual CollectionType's count equals -/// the expected value -public func haveCount(expectedValue: T.Index.Distance) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - if let actualValue = try actualExpression.evaluate() { - failureMessage.postfixMessage = "have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))" - let result = expectedValue == actualValue.count - failureMessage.actualValue = "\(actualValue.count)" - failureMessage.extendedMessage = "Actual Value: \(stringify(actualValue))" - return result - } else { - return false - } - } -} - -/// A Nimble matcher that succeeds when the actual collection's count equals -/// the expected value -public func haveCount(expectedValue: Int) -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - if let actualValue = try actualExpression.evaluate() { - failureMessage.postfixMessage = "have \(prettyCollectionType(actualValue)) with count \(stringify(expectedValue))" - let result = expectedValue == actualValue.count - failureMessage.actualValue = "\(actualValue.count)" - failureMessage.extendedMessage = "Actual Value: \(stringify(actualValue))" - return result - } else { - return false - } - } -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func haveCountMatcher(expected: NSNumber) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let location = actualExpression.location - let actualValue = try! actualExpression.evaluate() - if let value = actualValue as? NMBCollection { - let expr = Expression(expression: ({ value as NMBCollection}), location: location) - return try! haveCount(expected.integerValue).matches(expr, failureMessage: failureMessage) - } else if let actualValue = actualValue { - failureMessage.postfixMessage = "get type of NSArray, NSSet, NSDictionary, or NSHashTable" - failureMessage.actualValue = "\(classAsString(actualValue.dynamicType))" - } - return false - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/Match.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/Match.swift deleted file mode 100644 index 586e616..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/Match.swift +++ /dev/null @@ -1,30 +0,0 @@ -import Foundation - -#if _runtime(_ObjC) - -/// A Nimble matcher that succeeds when the actual string satisfies the regular expression -/// described by the expected string. -public func match(expectedValue: String?) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - failureMessage.postfixMessage = "match <\(stringify(expectedValue))>" - - if let actual = try actualExpression.evaluate() { - if let regexp = expectedValue { - return actual.rangeOfString(regexp, options: .RegularExpressionSearch) != nil - } - } - - return false - } -} - -extension NMBObjCMatcher { - public class func matchMatcher(expected: NSString) -> NMBMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - let actual = actualExpression.cast { $0 as? String } - return try! match(expected.description).matches(actual, failureMessage: failureMessage) - } - } -} - -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/MatchError.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/MatchError.swift deleted file mode 100644 index cba70c2..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/MatchError.swift +++ /dev/null @@ -1,26 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual expression evaluates to an -/// error from the specified case. -/// -/// Errors are tried to be compared by their implementation of Equatable, -/// otherwise they fallback to comparision by _domain and _code. -public func matchError(error: T) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - let actualError: ErrorType? = try actualExpression.evaluate() - - setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, error: error) - return errorMatchesNonNilFieldsOrClosure(actualError, error: error) - } -} - -/// A Nimble matcher that succeeds when the actual expression evaluates to an -/// error of the specified type -public func matchError(errorType: T.Type) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - let actualError: ErrorType? = try actualExpression.evaluate() - - setFailureMessageForError(failureMessage, postfixMessageVerb: "match", actualError: actualError, errorType: errorType) - return errorMatchesNonNilFieldsOrClosure(actualError, errorType: errorType) - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift deleted file mode 100644 index c8a9217..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/MatcherFunc.swift +++ /dev/null @@ -1,69 +0,0 @@ -/// A convenience API to build matchers that don't need special negation -/// behavior. The toNot() behavior is the negation of to(). -/// -/// @see NonNilMatcherFunc if you prefer to have this matcher fail when nil -/// values are recieved in an expectation. -/// -/// You may use this when implementing your own custom matchers. -/// -/// Use the Matcher protocol instead of this type to accept custom matchers as -/// input parameters. -/// @see allPass for an example that uses accepts other matchers as input. -public struct MatcherFunc: Matcher { - public let matcher: (Expression, FailureMessage) throws -> Bool - - public init(_ matcher: (Expression, FailureMessage) throws -> Bool) { - self.matcher = matcher - } - - public func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { - return try matcher(actualExpression, failureMessage) - } - - public func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { - return try !matcher(actualExpression, failureMessage) - } -} - -/// A convenience API to build matchers that don't need special negation -/// behavior. The toNot() behavior is the negation of to(). -/// -/// Unlike MatcherFunc, this will always fail if an expectation contains nil. -/// This applies regardless of using to() or toNot(). -/// -/// You may use this when implementing your own custom matchers. -/// -/// Use the Matcher protocol instead of this type to accept custom matchers as -/// input parameters. -/// @see allPass for an example that uses accepts other matchers as input. -public struct NonNilMatcherFunc: Matcher { - public let matcher: (Expression, FailureMessage) throws -> Bool - - public init(_ matcher: (Expression, FailureMessage) throws -> Bool) { - self.matcher = matcher - } - - public func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { - let pass = try matcher(actualExpression, failureMessage) - if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) { - return false - } - return pass - } - - public func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { - let pass = try !matcher(actualExpression, failureMessage) - if try attachNilErrorIfNeeded(actualExpression, failureMessage: failureMessage) { - return false - } - return pass - } - - internal func attachNilErrorIfNeeded(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool { - if try actualExpression.evaluate() == nil { - failureMessage.postfixActual = " (use beNil() to match nils)" - return true - } - return false - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift deleted file mode 100644 index 978d54c..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift +++ /dev/null @@ -1,143 +0,0 @@ -import Foundation - -/// Implement this protocol to implement a custom matcher for Swift -public protocol Matcher { - associatedtype ValueType - func matches(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool - func doesNotMatch(actualExpression: Expression, failureMessage: FailureMessage) throws -> Bool -} - -#if _runtime(_ObjC) -/// Objective-C interface to the Swift variant of Matcher. -@objc public protocol NMBMatcher { - func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool - func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool -} -#endif - -#if _runtime(_ObjC) -/// Protocol for types that support contain() matcher. -@objc public protocol NMBContainer { - func containsObject(object: AnyObject!) -> Bool -} - -extension NSHashTable : NMBContainer {} // Corelibs Foundation does not include this class yet -#else -public protocol NMBContainer { - func containsObject(object: AnyObject) -> Bool -} -#endif - -extension NSArray : NMBContainer {} -extension NSSet : NMBContainer {} - -#if _runtime(_ObjC) -/// Protocol for types that support only beEmpty(), haveCount() matchers -@objc public protocol NMBCollection { - var count: Int { get } -} - -extension NSHashTable : NMBCollection {} // Corelibs Foundation does not include these classes yet -extension NSMapTable : NMBCollection {} -#else -public protocol NMBCollection { - var count: Int { get } -} -#endif - -extension NSSet : NMBCollection {} -extension NSIndexSet : NMBCollection {} -extension NSDictionary : NMBCollection {} - -#if _runtime(_ObjC) -/// Protocol for types that support beginWith(), endWith(), beEmpty() matchers -@objc public protocol NMBOrderedCollection : NMBCollection { - func indexOfObject(object: AnyObject!) -> Int -} -#else -public protocol NMBOrderedCollection : NMBCollection { - func indexOfObject(object: AnyObject) -> Int -} -#endif - -extension NSArray : NMBOrderedCollection {} - -#if _runtime(_ObjC) -/// Protocol for types to support beCloseTo() matcher -@objc public protocol NMBDoubleConvertible { - var doubleValue: CDouble { get } -} -#else -public protocol NMBDoubleConvertible { - var doubleValue: CDouble { get } -} - -extension Double : NMBDoubleConvertible { - public var doubleValue: CDouble { - get { - return self - } - } -} - -extension Float : NMBDoubleConvertible { - public var doubleValue: CDouble { - get { - return CDouble(self) - } - } -} -#endif - -extension NSNumber : NMBDoubleConvertible { -} - -private let dateFormatter: NSDateFormatter = { - let formatter = NSDateFormatter() - formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSSS" - formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") - - return formatter -}() - -#if _runtime(_ObjC) -extension NSDate: NMBDoubleConvertible { - public var doubleValue: CDouble { - get { - return self.timeIntervalSinceReferenceDate - } - } -} -#endif - -extension NSDate: TestOutputStringConvertible { - public var testDescription: String { - return dateFormatter.stringFromDate(self) - } -} - -/// Protocol for types to support beLessThan(), beLessThanOrEqualTo(), -/// beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers. -/// -/// Types that conform to Swift's Comparable protocol will work implicitly too -#if _runtime(_ObjC) -@objc public protocol NMBComparable { - func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult -} -#else -// This should become obsolete once Corelibs Foundation adds Comparable conformance to NSNumber -public protocol NMBComparable { - func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult -} -#endif - -extension NSNumber : NMBComparable { - public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult { - return compare(otherObject as! NSNumber) - } -} -extension NSString : NMBComparable { - public func NMB_compare(otherObject: NMBComparable!) -> NSComparisonResult { - return compare(otherObject as! String) - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/PostNotification.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/PostNotification.swift deleted file mode 100644 index 0191f88..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/PostNotification.swift +++ /dev/null @@ -1,66 +0,0 @@ -import Foundation - -internal class NotificationCollector { - private(set) var observedNotifications: [NSNotification] - private let notificationCenter: NSNotificationCenter - #if _runtime(_ObjC) - private var token: AnyObject? - #else - private var token: NSObjectProtocol? - #endif - - required init(notificationCenter: NSNotificationCenter) { - self.notificationCenter = notificationCenter - self.observedNotifications = [] - } - - func startObserving() { - self.token = self.notificationCenter.addObserverForName(nil, object: nil, queue: nil) { - // linux-swift gets confused by .append(n) - [weak self] n in self?.observedNotifications += [n] - } - } - - deinit { - #if _runtime(_ObjC) - if let token = self.token { - self.notificationCenter.removeObserver(token) - } - #else - if let token = self.token as? AnyObject { - self.notificationCenter.removeObserver(token) - } - #endif - } -} - -private let mainThread = pthread_self() - -public func postNotifications( - notificationsMatcher: T, - fromNotificationCenter center: NSNotificationCenter = NSNotificationCenter.defaultCenter()) - -> MatcherFunc { - let _ = mainThread // Force lazy-loading of this value - let collector = NotificationCollector(notificationCenter: center) - collector.startObserving() - var once: Bool = false - return MatcherFunc { actualExpression, failureMessage in - let collectorNotificationsExpression = Expression(memoizedExpression: { _ in - return collector.observedNotifications - }, location: actualExpression.location, withoutCaching: true) - - assert(pthread_equal(mainThread, pthread_self()) != 0, "Only expecting closure to be evaluated on main thread.") - if !once { - once = true - try actualExpression.evaluate() - } - - let match = try notificationsMatcher.matches(collectorNotificationsExpression, failureMessage: failureMessage) - if collector.observedNotifications.isEmpty { - failureMessage.actualValue = "no notifications" - } else { - failureMessage.actualValue = "<\(stringify(collector.observedNotifications))>" - } - return match - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/RaisesException.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/RaisesException.swift deleted file mode 100644 index ff6b74a..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/RaisesException.swift +++ /dev/null @@ -1,182 +0,0 @@ -import Foundation - -// This matcher requires the Objective-C, and being built by Xcode rather than the Swift Package Manager -#if _runtime(_ObjC) && !SWIFT_PACKAGE - -/// A Nimble matcher that succeeds when the actual expression raises an -/// exception with the specified name, reason, and/or userInfo. -/// -/// Alternatively, you can pass a closure to do any arbitrary custom matching -/// to the raised exception. The closure only gets called when an exception -/// is raised. -/// -/// nil arguments indicates that the matcher should not attempt to match against -/// that parameter. -public func raiseException( - named named: String? = nil, - reason: String? = nil, - userInfo: NSDictionary? = nil, - closure: ((NSException) -> Void)? = nil) -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - - var exception: NSException? - let capture = NMBExceptionCapture(handler: ({ e in - exception = e - }), finally: nil) - - capture.tryBlock { - try! actualExpression.evaluate() - return - } - - setFailureMessageForException(failureMessage, exception: exception, named: named, reason: reason, userInfo: userInfo, closure: closure) - return exceptionMatchesNonNilFieldsOrClosure(exception, named: named, reason: reason, userInfo: userInfo, closure: closure) - } -} - -internal func setFailureMessageForException( - failureMessage: FailureMessage, - exception: NSException?, - named: String?, - reason: String?, - userInfo: NSDictionary?, - closure: ((NSException) -> Void)?) { - failureMessage.postfixMessage = "raise exception" - - if let named = named { - failureMessage.postfixMessage += " with name <\(named)>" - } - if let reason = reason { - failureMessage.postfixMessage += " with reason <\(reason)>" - } - if let userInfo = userInfo { - failureMessage.postfixMessage += " with userInfo <\(userInfo)>" - } - if let _ = closure { - failureMessage.postfixMessage += " that satisfies block" - } - if named == nil && reason == nil && userInfo == nil && closure == nil { - failureMessage.postfixMessage = "raise any exception" - } - - if let exception = exception { - failureMessage.actualValue = "\(classAsString(exception.dynamicType)) { name=\(exception.name), reason='\(stringify(exception.reason))', userInfo=\(stringify(exception.userInfo)) }" - } else { - failureMessage.actualValue = "no exception" - } -} - -internal func exceptionMatchesNonNilFieldsOrClosure( - exception: NSException?, - named: String?, - reason: String?, - userInfo: NSDictionary?, - closure: ((NSException) -> Void)?) -> Bool { - var matches = false - - if let exception = exception { - matches = true - - if named != nil && exception.name != named { - matches = false - } - if reason != nil && exception.reason != reason { - matches = false - } - if userInfo != nil && exception.userInfo != userInfo { - matches = false - } - if let closure = closure { - let assertions = gatherFailingExpectations { - closure(exception) - } - let messages = assertions.map { $0.message } - if messages.count > 0 { - matches = false - } - } - } - - return matches -} - -public class NMBObjCRaiseExceptionMatcher : NSObject, NMBMatcher { - internal var _name: String? - internal var _reason: String? - internal var _userInfo: NSDictionary? - internal var _block: ((NSException) -> Void)? - - internal init(name: String?, reason: String?, userInfo: NSDictionary?, block: ((NSException) -> Void)?) { - _name = name - _reason = reason - _userInfo = userInfo - _block = block - } - - public func matches(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - let block: () -> Any? = ({ actualBlock(); return nil }) - let expr = Expression(expression: block, location: location) - - return try! raiseException( - named: _name, - reason: _reason, - userInfo: _userInfo, - closure: _block - ).matches(expr, failureMessage: failureMessage) - } - - public func doesNotMatch(actualBlock: () -> NSObject!, failureMessage: FailureMessage, location: SourceLocation) -> Bool { - return !matches(actualBlock, failureMessage: failureMessage, location: location) - } - - public var named: (name: String) -> NMBObjCRaiseExceptionMatcher { - return ({ name in - return NMBObjCRaiseExceptionMatcher( - name: name, - reason: self._reason, - userInfo: self._userInfo, - block: self._block - ) - }) - } - - public var reason: (reason: String?) -> NMBObjCRaiseExceptionMatcher { - return ({ reason in - return NMBObjCRaiseExceptionMatcher( - name: self._name, - reason: reason, - userInfo: self._userInfo, - block: self._block - ) - }) - } - - public var userInfo: (userInfo: NSDictionary?) -> NMBObjCRaiseExceptionMatcher { - return ({ userInfo in - return NMBObjCRaiseExceptionMatcher( - name: self._name, - reason: self._reason, - userInfo: userInfo, - block: self._block - ) - }) - } - - public var satisfyingBlock: (block: ((NSException) -> Void)?) -> NMBObjCRaiseExceptionMatcher { - return ({ block in - return NMBObjCRaiseExceptionMatcher( - name: self._name, - reason: self._reason, - userInfo: self._userInfo, - block: block - ) - }) - } -} - -extension NMBObjCMatcher { - public class func raiseExceptionMatcher() -> NMBObjCRaiseExceptionMatcher { - return NMBObjCRaiseExceptionMatcher(name: nil, reason: nil, userInfo: nil, block: nil) - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift deleted file mode 100644 index d383a31..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift +++ /dev/null @@ -1,61 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual value matches with any of the matchers -/// provided in the variable list of matchers. -public func satisfyAnyOf(matchers: U...) -> NonNilMatcherFunc { - return satisfyAnyOf(matchers) -} - -internal func satisfyAnyOf(matchers: [U]) -> NonNilMatcherFunc { - return NonNilMatcherFunc { actualExpression, failureMessage in - let postfixMessages = NSMutableArray() - var matches = false - for matcher in matchers { - if try matcher.matches(actualExpression, failureMessage: failureMessage) { - matches = true - } - postfixMessages.addObject(NSString(string: "{\(failureMessage.postfixMessage)}")) - } - - failureMessage.postfixMessage = "match one of: " + postfixMessages.componentsJoinedByString(", or ") - if let actualValue = try actualExpression.evaluate() { - failureMessage.actualValue = "\(actualValue)" - } - - return matches - } -} - -public func ||(left: NonNilMatcherFunc, right: NonNilMatcherFunc) -> NonNilMatcherFunc { - return satisfyAnyOf(left, right) -} - -public func ||(left: MatcherFunc, right: MatcherFunc) -> NonNilMatcherFunc { - return satisfyAnyOf(left, right) -} - -#if _runtime(_ObjC) -extension NMBObjCMatcher { - public class func satisfyAnyOfMatcher(matchers: [NMBObjCMatcher]) -> NMBObjCMatcher { - return NMBObjCMatcher(canMatchNil: false) { actualExpression, failureMessage in - if matchers.isEmpty { - failureMessage.stringValue = "satisfyAnyOf must be called with at least one matcher" - return false - } - - var elementEvaluators = [NonNilMatcherFunc]() - for matcher in matchers { - let elementEvaluator: (Expression, FailureMessage) -> Bool = { - expression, failureMessage in - return matcher.matches( - {try! expression.evaluate()}, failureMessage: failureMessage, location: actualExpression.location) - } - - elementEvaluators.append(NonNilMatcherFunc(elementEvaluator)) - } - - return try! satisfyAnyOf(elementEvaluators).matches(actualExpression, failureMessage: failureMessage) - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/ThrowError.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/ThrowError.swift deleted file mode 100644 index 9563565..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Matchers/ThrowError.swift +++ /dev/null @@ -1,53 +0,0 @@ -import Foundation - -/// A Nimble matcher that succeeds when the actual expression throws an -/// error of the specified type or from the specified case. -/// -/// Errors are tried to be compared by their implementation of Equatable, -/// otherwise they fallback to comparision by _domain and _code. -/// -/// Alternatively, you can pass a closure to do any arbitrary custom matching -/// to the thrown error. The closure only gets called when an error was thrown. -/// -/// nil arguments indicates that the matcher should not attempt to match against -/// that parameter. -public func throwError( - error: T? = nil, - errorType: T.Type? = nil, - closure: ((T) -> Void)? = nil) -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - - var actualError: ErrorType? - do { - try actualExpression.evaluate() - } catch let catchedError { - actualError = catchedError - } - - setFailureMessageForError(failureMessage, actualError: actualError, error: error, errorType: errorType, closure: closure) - return errorMatchesNonNilFieldsOrClosure(actualError, error: error, errorType: errorType, closure: closure) - } -} - -/// A Nimble matcher that succeeds when the actual expression throws any -/// error or when the passed closures' arbitrary custom matching succeeds. -/// -/// This duplication to it's generic adequate is required to allow to receive -/// values of the existential type ErrorType in the closure. -/// -/// The closure only gets called when an error was thrown. -public func throwError( - closure closure: ((ErrorType) -> Void)? = nil) -> MatcherFunc { - return MatcherFunc { actualExpression, failureMessage in - - var actualError: ErrorType? - do { - try actualExpression.evaluate() - } catch let catchedError { - actualError = catchedError - } - - setFailureMessageForError(failureMessage, actualError: actualError, closure: closure) - return errorMatchesNonNilFieldsOrClosure(actualError, closure: closure) - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Nimble.h b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Nimble.h deleted file mode 100644 index 1eab61a..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Nimble.h +++ /dev/null @@ -1,7 +0,0 @@ -#import -#import "NMBExceptionCapture.h" -#import "NMBStringify.h" -#import "DSL.h" - -FOUNDATION_EXPORT double NimbleVersionNumber; -FOUNDATION_EXPORT const unsigned char NimbleVersionString[]; diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Async.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Async.swift deleted file mode 100644 index 8f1a6de..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Async.swift +++ /dev/null @@ -1,358 +0,0 @@ -import Foundation - -#if _runtime(_ObjC) -import Dispatch - -private let timeoutLeeway: UInt64 = NSEC_PER_MSEC -private let pollLeeway: UInt64 = NSEC_PER_MSEC - -/// Stores debugging information about callers -internal struct WaitingInfo: CustomStringConvertible { - let name: String - let file: FileString - let lineNumber: UInt - - var description: String { - return "\(name) at \(file):\(lineNumber)" - } -} - -internal protocol WaitLock { - func acquireWaitingLock(fnName: String, file: FileString, line: UInt) - func releaseWaitingLock() - func isWaitingLocked() -> Bool -} - -internal class AssertionWaitLock: WaitLock { - private var currentWaiter: WaitingInfo? = nil - init() { } - - func acquireWaitingLock(fnName: String, file: FileString, line: UInt) { - let info = WaitingInfo(name: fnName, file: file, lineNumber: line) - nimblePrecondition( - NSThread.isMainThread(), - "InvalidNimbleAPIUsage", - "\(fnName) can only run on the main thread." - ) - nimblePrecondition( - currentWaiter == nil, - "InvalidNimbleAPIUsage", - "Nested async expectations are not allowed to avoid creating flaky tests.\n\n" + - "The call to\n\t\(info)\n" + - "triggered this exception because\n\t\(currentWaiter!)\n" + - "is currently managing the main run loop." - ) - currentWaiter = info - } - - func isWaitingLocked() -> Bool { - return currentWaiter != nil - } - - func releaseWaitingLock() { - currentWaiter = nil - } -} - -internal enum AwaitResult { - /// Incomplete indicates None (aka - this value hasn't been fulfilled yet) - case Incomplete - /// TimedOut indicates the result reached its defined timeout limit before returning - case TimedOut - /// BlockedRunLoop indicates the main runloop is too busy processing other blocks to trigger - /// the timeout code. - /// - /// This may also mean the async code waiting upon may have never actually ran within the - /// required time because other timers & sources are running on the main run loop. - case BlockedRunLoop - /// The async block successfully executed and returned a given result - case Completed(T) - /// When a Swift Error is thrown - case ErrorThrown(ErrorType) - /// When an Objective-C Exception is raised - case RaisedException(NSException) - - func isIncomplete() -> Bool { - switch self { - case .Incomplete: return true - default: return false - } - } - - func isCompleted() -> Bool { - switch self { - case .Completed(_): return true - default: return false - } - } -} - -/// Holds the resulting value from an asynchronous expectation. -/// This class is thread-safe at receiving an "response" to this promise. -internal class AwaitPromise { - private(set) internal var asyncResult: AwaitResult = .Incomplete - private var signal: dispatch_semaphore_t - - init() { - signal = dispatch_semaphore_create(1) - } - - /// Resolves the promise with the given result if it has not been resolved. Repeated calls to - /// this method will resolve in a no-op. - /// - /// @returns a Bool that indicates if the async result was accepted or rejected because another - /// value was recieved first. - func resolveResult(result: AwaitResult) -> Bool { - if dispatch_semaphore_wait(signal, DISPATCH_TIME_NOW) == 0 { - self.asyncResult = result - return true - } else { - return false - } - } -} - -internal struct AwaitTrigger { - let timeoutSource: dispatch_source_t - let actionSource: dispatch_source_t? - let start: () throws -> Void -} - -/// Factory for building fully configured AwaitPromises and waiting for their results. -/// -/// This factory stores all the state for an async expectation so that Await doesn't -/// doesn't have to manage it. -internal class AwaitPromiseBuilder { - let awaiter: Awaiter - let waitLock: WaitLock - let trigger: AwaitTrigger - let promise: AwaitPromise - - internal init( - awaiter: Awaiter, - waitLock: WaitLock, - promise: AwaitPromise, - trigger: AwaitTrigger) { - self.awaiter = awaiter - self.waitLock = waitLock - self.promise = promise - self.trigger = trigger - } - - func timeout(timeoutInterval: NSTimeInterval, forcefullyAbortTimeout: NSTimeInterval) -> Self { - // = Discussion = - // - // There's a lot of technical decisions here that is useful to elaborate on. This is - // definitely more lower-level than the previous NSRunLoop based implementation. - // - // - // Why Dispatch Source? - // - // - // We're using a dispatch source to have better control of the run loop behavior. - // A timer source gives us deferred-timing control without having to rely as much on - // a run loop's traditional dispatching machinery (eg - NSTimers, DefaultRunLoopMode, etc.) - // which is ripe for getting corrupted by application code. - // - // And unlike dispatch_async(), we can control how likely our code gets prioritized to - // executed (see leeway parameter) + DISPATCH_TIMER_STRICT. - // - // This timer is assumed to run on the HIGH priority queue to ensure it maintains the - // highest priority over normal application / test code when possible. - // - // - // Run Loop Management - // - // In order to properly interrupt the waiting behavior performed by this factory class, - // this timer stops the main run loop to tell the waiter code that the result should be - // checked. - // - // In addition, stopping the run loop is used to halt code executed on the main run loop. - dispatch_source_set_timer( - trigger.timeoutSource, - dispatch_time(DISPATCH_TIME_NOW, Int64(timeoutInterval * Double(NSEC_PER_SEC))), - DISPATCH_TIME_FOREVER, - timeoutLeeway - ) - dispatch_source_set_event_handler(trigger.timeoutSource) { - guard self.promise.asyncResult.isIncomplete() else { return } - let timedOutSem = dispatch_semaphore_create(0) - let semTimedOutOrBlocked = dispatch_semaphore_create(0) - dispatch_semaphore_signal(semTimedOutOrBlocked) - let runLoop = CFRunLoopGetMain() - CFRunLoopPerformBlock(runLoop, kCFRunLoopDefaultMode) { - if dispatch_semaphore_wait(semTimedOutOrBlocked, DISPATCH_TIME_NOW) == 0 { - dispatch_semaphore_signal(timedOutSem) - dispatch_semaphore_signal(semTimedOutOrBlocked) - if self.promise.resolveResult(.TimedOut) { - CFRunLoopStop(CFRunLoopGetMain()) - } - } - } - // potentially interrupt blocking code on run loop to let timeout code run - CFRunLoopStop(runLoop) - let now = dispatch_time(DISPATCH_TIME_NOW, Int64(forcefullyAbortTimeout * Double(NSEC_PER_SEC))) - let didNotTimeOut = dispatch_semaphore_wait(timedOutSem, now) != 0 - let timeoutWasNotTriggered = dispatch_semaphore_wait(semTimedOutOrBlocked, 0) == 0 - if didNotTimeOut && timeoutWasNotTriggered { - if self.promise.resolveResult(.BlockedRunLoop) { - CFRunLoopStop(CFRunLoopGetMain()) - } - } - } - return self - } - - /// Blocks for an asynchronous result. - /// - /// @discussion - /// This function must be executed on the main thread and cannot be nested. This is because - /// this function (and it's related methods) coordinate through the main run loop. Tampering - /// with the run loop can cause undesireable behavior. - /// - /// This method will return an AwaitResult in the following cases: - /// - /// - The main run loop is blocked by other operations and the async expectation cannot be - /// be stopped. - /// - The async expectation timed out - /// - The async expectation succeeded - /// - The async expectation raised an unexpected exception (objc) - /// - The async expectation raised an unexpected error (swift) - /// - /// The returned AwaitResult will NEVER be .Incomplete. - func wait(fnName: String = #function, file: FileString = #file, line: UInt = #line) -> AwaitResult { - waitLock.acquireWaitingLock( - fnName, - file: file, - line: line) - - let capture = NMBExceptionCapture(handler: ({ exception in - self.promise.resolveResult(.RaisedException(exception)) - }), finally: ({ - self.waitLock.releaseWaitingLock() - })) - capture.tryBlock { - do { - try self.trigger.start() - } catch let error { - self.promise.resolveResult(.ErrorThrown(error)) - } - dispatch_resume(self.trigger.timeoutSource) - while self.promise.asyncResult.isIncomplete() { - // Stopping the run loop does not work unless we run only 1 mode - NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate.distantFuture()) - } - dispatch_suspend(self.trigger.timeoutSource) - dispatch_source_cancel(self.trigger.timeoutSource) - if let asyncSource = self.trigger.actionSource { - dispatch_source_cancel(asyncSource) - } - } - - return promise.asyncResult - } -} - -internal class Awaiter { - let waitLock: WaitLock - let timeoutQueue: dispatch_queue_t - let asyncQueue: dispatch_queue_t - - internal init( - waitLock: WaitLock, - asyncQueue: dispatch_queue_t, - timeoutQueue: dispatch_queue_t) { - self.waitLock = waitLock - self.asyncQueue = asyncQueue - self.timeoutQueue = timeoutQueue - } - - private func createTimerSource(queue: dispatch_queue_t) -> dispatch_source_t { - return dispatch_source_create( - DISPATCH_SOURCE_TYPE_TIMER, - 0, - DISPATCH_TIMER_STRICT, - queue - ) - } - - func performBlock( - closure: ((T) -> Void) throws -> Void) -> AwaitPromiseBuilder { - let promise = AwaitPromise() - let timeoutSource = createTimerSource(timeoutQueue) - var completionCount = 0 - let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: nil) { - try closure() { - completionCount += 1 - nimblePrecondition( - completionCount < 2, - "InvalidNimbleAPIUsage", - "Done closure's was called multiple times. waitUntil(..) expects its " + - "completion closure to only be called once.") - if promise.resolveResult(.Completed($0)) { - CFRunLoopStop(CFRunLoopGetMain()) - } - } - } - - return AwaitPromiseBuilder( - awaiter: self, - waitLock: waitLock, - promise: promise, - trigger: trigger) - } - - func poll(pollInterval: NSTimeInterval, closure: () throws -> T?) -> AwaitPromiseBuilder { - let promise = AwaitPromise() - let timeoutSource = createTimerSource(timeoutQueue) - let asyncSource = createTimerSource(asyncQueue) - let trigger = AwaitTrigger(timeoutSource: timeoutSource, actionSource: asyncSource) { - let interval = UInt64(pollInterval * Double(NSEC_PER_SEC)) - dispatch_source_set_timer(asyncSource, DISPATCH_TIME_NOW, interval, pollLeeway) - dispatch_source_set_event_handler(asyncSource) { - do { - if let result = try closure() { - if promise.resolveResult(.Completed(result)) { - CFRunLoopStop(CFRunLoopGetCurrent()) - } - } - } catch let error { - if promise.resolveResult(.ErrorThrown(error)) { - CFRunLoopStop(CFRunLoopGetCurrent()) - } - } - } - dispatch_resume(asyncSource) - } - - return AwaitPromiseBuilder( - awaiter: self, - waitLock: waitLock, - promise: promise, - trigger: trigger) - } -} - -internal func pollBlock( - pollInterval pollInterval: NSTimeInterval, - timeoutInterval: NSTimeInterval, - file: FileString, - line: UInt, - fnName: String = #function, - expression: () throws -> Bool) -> AwaitResult { - let awaiter = NimbleEnvironment.activeInstance.awaiter - let result = awaiter.poll(pollInterval) { () throws -> Bool? in - do { - if try expression() { - return true - } - return nil - } catch let error { - throw error - } - }.timeout(timeoutInterval, forcefullyAbortTimeout: timeoutInterval / 2.0).wait(fnName, file: file, line: line) - - return result -} - -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Errors.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Errors.swift deleted file mode 100644 index 29c4723..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Errors.swift +++ /dev/null @@ -1,133 +0,0 @@ -import Foundation - -// Generic - -internal func setFailureMessageForError( - failureMessage: FailureMessage, - postfixMessageVerb: String = "throw", - actualError: ErrorType?, - error: T? = nil, - errorType: T.Type? = nil, - closure: ((T) -> Void)? = nil) { - failureMessage.postfixMessage = "\(postfixMessageVerb) error" - - if let error = error { - if let error = error as? CustomDebugStringConvertible { - failureMessage.postfixMessage += " <\(error.debugDescription)>" - } else { - failureMessage.postfixMessage += " <\(error)>" - } - } else if errorType != nil || closure != nil { - failureMessage.postfixMessage += " from type <\(T.self)>" - } - if let _ = closure { - failureMessage.postfixMessage += " that satisfies block" - } - if error == nil && errorType == nil && closure == nil { - failureMessage.postfixMessage = "\(postfixMessageVerb) any error" - } - - if let actualError = actualError { - failureMessage.actualValue = "<\(actualError)>" - } else { - failureMessage.actualValue = "no error" - } -} - -internal func errorMatchesExpectedError( - actualError: ErrorType, - expectedError: T) -> Bool { - return actualError._domain == expectedError._domain - && actualError._code == expectedError._code -} - -internal func errorMatchesExpectedError( - actualError: ErrorType, - expectedError: T) -> Bool { - if let actualError = actualError as? T { - return actualError == expectedError - } - return false -} - -internal func errorMatchesNonNilFieldsOrClosure( - actualError: ErrorType?, - error: T? = nil, - errorType: T.Type? = nil, - closure: ((T) -> Void)? = nil) -> Bool { - var matches = false - - if let actualError = actualError { - matches = true - - if let error = error { - if !errorMatchesExpectedError(actualError, expectedError: error) { - matches = false - } - } - if let actualError = actualError as? T { - if let closure = closure { - let assertions = gatherFailingExpectations { - closure(actualError as T) - } - let messages = assertions.map { $0.message } - if messages.count > 0 { - matches = false - } - } - } else if errorType != nil && closure != nil { - // The closure expects another ErrorType as argument, so this - // is _supposed_ to fail, so that it becomes more obvious. - let assertions = gatherExpectations { - expect(actualError is T).to(equal(true)) - } - precondition(assertions.map { $0.message }.count > 0) - matches = false - } - } - - return matches -} - -// Non-generic - -internal func setFailureMessageForError( - failureMessage: FailureMessage, - actualError: ErrorType?, - closure: ((ErrorType) -> Void)?) { - failureMessage.postfixMessage = "throw error" - - if let _ = closure { - failureMessage.postfixMessage += " that satisfies block" - } else { - failureMessage.postfixMessage = "throw any error" - } - - if let actualError = actualError { - failureMessage.actualValue = "<\(actualError)>" - } else { - failureMessage.actualValue = "no error" - } -} - -internal func errorMatchesNonNilFieldsOrClosure( - actualError: ErrorType?, - closure: ((ErrorType) -> Void)?) -> Bool { - var matches = false - - if let actualError = actualError { - matches = true - - if let closure = closure { - let assertions = gatherFailingExpectations { - closure(actualError) - } - let messages = assertions.map { $0.message } - if messages.count > 0 { - matches = false - } - } - } - - return matches -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Functional.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Functional.swift deleted file mode 100644 index e85c755..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Functional.swift +++ /dev/null @@ -1,12 +0,0 @@ -import Foundation - -extension SequenceType { - internal func all(fn: Generator.Element -> Bool) -> Bool { - for item in self { - if !fn(item) { - return false - } - } - return true - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/SourceLocation.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/SourceLocation.swift deleted file mode 100644 index a7279aa..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/SourceLocation.swift +++ /dev/null @@ -1,31 +0,0 @@ -import Foundation - -// Ideally we would always use `StaticString` as the type for tracking the file name -// that expectations originate from, for consistency with `assert` etc. from the -// stdlib, and because recent versions of the XCTest overlay require `StaticString` -// when calling `XCTFail`. Under the Objective-C runtime (i.e. building on Mac), we -// have to use `String` instead because StaticString can't be generated from Objective-C -#if _runtime(_ObjC) -public typealias FileString = String -#else -public typealias FileString = StaticString -#endif - -public final class SourceLocation : NSObject { - public let file: FileString - public let line: UInt - - override init() { - file = "Unknown File" - line = 0 - } - - init(file: FileString, line: UInt) { - self.file = file - self.line = line - } - - override public var description: String { - return "\(file):\(line)" - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Stringers.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Stringers.swift deleted file mode 100644 index 9cb784b..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Sources/Nimble/Utils/Stringers.swift +++ /dev/null @@ -1,217 +0,0 @@ -import Foundation - - -internal func identityAsString(value: AnyObject?) -> String { - if let value = value { - return NSString(format: "<%p>", unsafeBitCast(value, Int.self)).description - } else { - return "nil" - } -} - -internal func classAsString(cls: AnyClass) -> String { -#if _runtime(_ObjC) - return NSStringFromClass(cls) -#else - return String(cls) -#endif -} - -internal func arrayAsString(items: [T], joiner: String = ", ") -> String { - return items.reduce("") { accum, item in - let prefix = (accum.isEmpty ? "" : joiner) - return accum + prefix + "\(stringify(item))" - } -} - -/// A type with a customized test output text representation. -/// -/// This textual representation is produced when values will be -/// printed in test runs, and may be useful when producing -/// error messages in custom matchers. -/// -/// - SeeAlso: `CustomDebugStringConvertible` -public protocol TestOutputStringConvertible { - var testDescription: String { get } -} - -extension Double: TestOutputStringConvertible { - public var testDescription: String { - return NSNumber(double: self).testDescription - } -} - -extension Float: TestOutputStringConvertible { - public var testDescription: String { - return NSNumber(float: self).testDescription - } -} - -extension NSNumber: TestOutputStringConvertible { - // This is using `NSString(format:)` instead of - // `String(format:)` because the latter somehow breaks - // the travis CI build on linux. - public var testDescription: String { - let description = self.description - - if description.containsString(".") { - // Travis linux swiftpm build doesn't like casting String to NSString, - // which is why this annoying nested initializer thing is here. - // Maybe this will change in a future snapshot. - let decimalPlaces = NSString(string: NSString(string: description) - .componentsSeparatedByString(".")[1]) - - if decimalPlaces.length > 4 { - return NSString(format: "%0.4f", self.doubleValue).description - } - } - return self.description - } -} - -extension Array: TestOutputStringConvertible { - public var testDescription: String { - let list = self.map(Nimble.stringify).joinWithSeparator(", ") - return "[\(list)]" - } -} - -extension AnySequence: TestOutputStringConvertible { - public var testDescription: String { - let generator = self.generate() - var strings = [String]() - var value: AnySequence.Generator.Element? - - repeat { - value = generator.next() - if let value = value { - strings.append(stringify(value)) - } - } while value != nil - - let list = strings.joinWithSeparator(", ") - return "[\(list)]" - } -} - -extension NSArray: TestOutputStringConvertible { - public var testDescription: String { - let list = Array(self).map(Nimble.stringify).joinWithSeparator(", ") - return "(\(list))" - } -} - -extension NSIndexSet: TestOutputStringConvertible { - public var testDescription: String { - let list = Array(self).map(Nimble.stringify).joinWithSeparator(", ") - return "(\(list))" - } -} - -extension String: TestOutputStringConvertible { - public var testDescription: String { - return self - } -} - -extension NSData: TestOutputStringConvertible { - public var testDescription: String { - #if os(Linux) - // FIXME: Swift on Linux triggers a segfault when calling NSData's hash() (last checked on 03-11-16) - return "NSData" - #else - return "NSData" - #endif - } -} - -/// -/// Returns a string appropriate for displaying in test output -/// from the provided value. -/// -/// - parameter value: A value that will show up in a test's output. -/// -/// - returns: The string that is returned can be -/// customized per type by conforming a type to the `TestOutputStringConvertible` -/// protocol. When stringifying a non-`TestOutputStringConvertible` type, this -/// function will return the value's debug description and then its -/// normal description if available and in that order. Otherwise it -/// will return the result of constructing a string from the value. -/// -/// - SeeAlso: `TestOutputStringConvertible` -@warn_unused_result -public func stringify(value: T) -> String { - if let value = value as? TestOutputStringConvertible { - return value.testDescription - } - - if let value = value as? CustomDebugStringConvertible { - return value.debugDescription - } - - return String(value) -} - -/// -SeeAlso: `stringify(value: T)` -@warn_unused_result -public func stringify(value: T?) -> String { - if let unboxed = value { - return stringify(unboxed) - } - return "nil" -} - -#if _runtime(_ObjC) -@objc public class NMBStringer: NSObject { - @warn_unused_result - @objc public class func stringify(obj: AnyObject?) -> String { - return Nimble.stringify(obj) - } -} -#endif - -// MARK: Collection Type Stringers - -/// Attempts to generate a pretty type string for a given value. If the value is of a Objective-C -/// collection type, or a subclass thereof, (e.g. `NSArray`, `NSDictionary`, etc.). -/// This function will return the type name of the root class of the class cluster for better -/// readability (e.g. `NSArray` instead of `__NSArrayI`). -/// -/// For values that don't have a type of an Objective-C collection, this function returns the -/// default type description. -/// -/// - parameter value: A value that will be used to determine a type name. -/// -/// - returns: The name of the class cluster root class for Objective-C collection types, or the -/// the `dynamicType` of the value for values of any other type. -public func prettyCollectionType(value: T) -> String { - #if _runtime(_ObjC) - // Check for types that are not in corelibs-foundation separately - if value is NSHashTable { - return String(NSHashTable.self) - } - #endif - - switch value { - case is NSArray: - return String(NSArray.self) - case is NSDictionary: - return String(NSDictionary.self) - case is NSSet: - return String(NSSet.self) - case is NSIndexSet: - return String(NSIndexSet.self) - default: - return String(value) - } -} - -/// Returns the type name for a given collection type. This overload is used by Swift -/// collection types. -/// -/// - parameter collection: A Swift `CollectionType` value. -/// -/// - returns: A string representing the `dynamicType` of the value. -public func prettyCollectionType(collection: T) -> String { - return String(collection.dynamicType) -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/LinuxMain.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/LinuxMain.swift deleted file mode 100644 index 5a58a7b..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/LinuxMain.swift +++ /dev/null @@ -1,37 +0,0 @@ -import XCTest -@testable import Nimbletest - -// This is the entry point for NimbleTests on Linux - -XCTMain([ - // AsynchronousTests(), - SynchronousTest(), - UserDescriptionTest(), - - // Matchers - AllPassTest(), - // BeAKindOfTest(), - BeAnInstanceOfTest(), - BeCloseToTest(), - BeginWithTest(), - BeGreaterThanOrEqualToTest(), - BeGreaterThanTest(), - BeIdenticalToObjectTest(), - BeIdenticalToTest(), - BeLessThanOrEqualToTest(), - BeLessThanTest(), - BeTruthyTest(), - BeTrueTest(), - BeFalsyTest(), - BeFalseTest(), - BeNilTest(), - ContainTest(), - EndWithTest(), - EqualTest(), - HaveCountTest(), - // MatchTest(), - // RaisesExceptionTest(), - ThrowErrorTest(), - SatisfyAnyOfTest(), - PostNotificationTest(), -]) diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/AsynchronousTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/AsynchronousTest.swift deleted file mode 100644 index 90c19ec..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/AsynchronousTest.swift +++ /dev/null @@ -1,200 +0,0 @@ -import Foundation -import XCTest -import Nimble - -// These tests require the ObjC runtimes do not currently have the GCD and run loop facilities -// required for working with Nimble's async matchers -#if _runtime(_ObjC) - -class AsyncTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testToEventuallyPositiveMatches", testToEventuallyPositiveMatches), - ("testToEventuallyNegativeMatches", testToEventuallyNegativeMatches), - ("testWaitUntilPositiveMatches", testWaitUntilPositiveMatches), - ("testToEventuallyWithCustomDefaultTimeout", testToEventuallyWithCustomDefaultTimeout), - ("testWaitUntilTimesOutIfNotCalled", testWaitUntilTimesOutIfNotCalled), - ("testWaitUntilTimesOutWhenExceedingItsTime", testWaitUntilTimesOutWhenExceedingItsTime), - ("testWaitUntilNegativeMatches", testWaitUntilNegativeMatches), - ("testWaitUntilDetectsStalledMainThreadActivity", testWaitUntilDetectsStalledMainThreadActivity), - ("testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed", testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed), - ("testWaitUntilErrorsIfDoneIsCalledMultipleTimes", testWaitUntilErrorsIfDoneIsCalledMultipleTimes), - ("testWaitUntilMustBeInMainThread", testWaitUntilMustBeInMainThread), - ("testToEventuallyMustBeInMainThread", testToEventuallyMustBeInMainThread), - ] - } - - let errorToThrow = NSError(domain: NSInternalInconsistencyException, code: 42, userInfo: nil) - - private func doThrowError() throws -> Int { - throw errorToThrow - } - - func testToEventuallyPositiveMatches() { - var value = 0 - deferToMainQueue { value = 1 } - expect { value }.toEventually(equal(1)) - - deferToMainQueue { value = 0 } - expect { value }.toEventuallyNot(equal(1)) - } - - func testToEventuallyNegativeMatches() { - let value = 0 - failsWithErrorMessage("expected to eventually not equal <0>, got <0>") { - expect { value }.toEventuallyNot(equal(0)) - } - failsWithErrorMessage("expected to eventually equal <1>, got <0>") { - expect { value }.toEventually(equal(1)) - } - failsWithErrorMessage("expected to eventually equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { - expect { try self.doThrowError() }.toEventually(equal(1)) - } - failsWithErrorMessage("expected to eventually not equal <0>, got an unexpected error thrown: <\(errorToThrow)>") { - expect { try self.doThrowError() }.toEventuallyNot(equal(0)) - } - } - - func testToEventuallyWithCustomDefaultTimeout() { - AsyncDefaults.Timeout = 2 - defer { - AsyncDefaults.Timeout = 1 - } - - var value = 0 - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { - NSThread.sleepForTimeInterval(1.1) - value = 1 - } - expect { value }.toEventually(equal(1)) - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { - NSThread.sleepForTimeInterval(1.1) - value = 0 - } - expect { value }.toEventuallyNot(equal(1)) - } - - func testWaitUntilPositiveMatches() { - waitUntil { done in - done() - } - waitUntil { done in - deferToMainQueue { - done() - } - } - } - - func testWaitUntilTimesOutIfNotCalled() { - failsWithErrorMessage("Waited more than 1.0 second") { - waitUntil(timeout: 1) { done in return } - } - } - - func testWaitUntilTimesOutWhenExceedingItsTime() { - var waiting = true - failsWithErrorMessage("Waited more than 0.01 seconds") { - waitUntil(timeout: 0.01) { done in - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { - NSThread.sleepForTimeInterval(0.1) - done() - waiting = false - } - } - } - - // "clear" runloop to ensure this test doesn't poison other tests - repeat { - NSRunLoop.mainRunLoop().runUntilDate(NSDate().dateByAddingTimeInterval(0.2)) - } while(waiting) - } - - func testWaitUntilNegativeMatches() { - failsWithErrorMessage("expected to equal <2>, got <1>") { - waitUntil { done in - NSThread.sleepForTimeInterval(0.1) - expect(1).to(equal(2)) - done() - } - } - } - - func testWaitUntilDetectsStalledMainThreadActivity() { - let msg = "-waitUntil() timed out but was unable to run the timeout handler because the main thread is unresponsive (0.5 seconds is allow after the wait times out). Conditions that may cause this include processing blocking IO on the main thread, calls to sleep(), deadlocks, and synchronous IPC. Nimble forcefully stopped run loop which may cause future failures in test run." - failsWithErrorMessage(msg) { - waitUntil(timeout: 1) { done in - NSThread.sleepForTimeInterval(5.0) - done() - } - } - } - - func testCombiningAsyncWaitUntilAndToEventuallyIsNotAllowed() { - // Currently we are unable to catch Objective-C exceptions when built by the Swift Package Manager -#if !SWIFT_PACKAGE - let referenceLine = #line + 9 - var msg = "Unexpected exception raised: Nested async expectations are not allowed " - msg += "to avoid creating flaky tests." - msg += "\n\n" - msg += "The call to\n\t" - msg += "expect(...).toEventually(...) at \(#file):\(referenceLine + 7)\n" - msg += "triggered this exception because\n\t" - msg += "waitUntil(...) at \(#file):\(referenceLine + 1)\n" - msg += "is currently managing the main run loop." - failsWithErrorMessage(msg) { // reference line - waitUntil(timeout: 2.0) { done in - var protected: Int = 0 - dispatch_async(dispatch_get_main_queue()) { - protected = 1 - } - - expect(protected).toEventually(equal(1)) - done() - } - } -#endif - } - - func testWaitUntilErrorsIfDoneIsCalledMultipleTimes() { -#if !SWIFT_PACKAGE - waitUntil { done in - deferToMainQueue { - done() - expect { - done() - }.to(raiseException(named: "InvalidNimbleAPIUsage")) - } - } -#endif - } - - func testWaitUntilMustBeInMainThread() { -#if !SWIFT_PACKAGE - var executedAsyncBlock: Bool = false - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { - expect { - waitUntil { done in done() } - }.to(raiseException(named: "InvalidNimbleAPIUsage")) - executedAsyncBlock = true - } - expect(executedAsyncBlock).toEventually(beTruthy()) -#endif - } - - func testToEventuallyMustBeInMainThread() { -#if !SWIFT_PACKAGE - var executedAsyncBlock: Bool = false - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { - expect { - expect(1).toEventually(equal(2)) - }.to(raiseException(named: "InvalidNimbleAPIUsage")) - executedAsyncBlock = true - } - expect(executedAsyncBlock).toEventually(beTruthy()) -#endif - } -} -#endif - diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Helpers/ObjectWithLazyProperty.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Helpers/ObjectWithLazyProperty.swift deleted file mode 100644 index 26e5a98..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Helpers/ObjectWithLazyProperty.swift +++ /dev/null @@ -1,7 +0,0 @@ -import Foundation - -class ObjectWithLazyProperty { - init() {} - lazy var value: String = "hello" - lazy var anotherValue: String = { return "world" }() -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Helpers/XCTestCaseProvider.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Helpers/XCTestCaseProvider.swift deleted file mode 100644 index c1465f6..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Helpers/XCTestCaseProvider.swift +++ /dev/null @@ -1,35 +0,0 @@ -import Foundation -import XCTest - -// XCTestCaseProvider is defined in swift-corelibs-xctest, but is not available -// in the XCTest that ships with Xcode. By defining this protocol on Apple platforms, -// we ensure that the tests fail in Xcode if they haven't been configured properly to -// be run with the open-source tools. - -#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) - -public protocol XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { get } -} - -extension XCTestCase { - override public func tearDown() { - if let provider = self as? XCTestCaseProvider { - provider.assertContainsTest(invocation!.selector.description) - } - - super.tearDown() - } -} - -extension XCTestCaseProvider { - private func assertContainsTest(name: String) { - let contains = self.allTests.contains({ test in - return test.0 == name - }) - - XCTAssert(contains, "Test '\(name)' is missing from the allTests array") - } -} - -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Helpers/utils.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Helpers/utils.swift deleted file mode 100644 index 9b29a0e..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Helpers/utils.swift +++ /dev/null @@ -1,92 +0,0 @@ -import Foundation -@testable import Nimble -import XCTest - -func failsWithErrorMessage(messages: [String], file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () throws -> Void) { - var filePath = file - var lineNumber = line - - let recorder = AssertionRecorder() - withAssertionHandler(recorder, closure: closure) - - for msg in messages { - var lastFailure: AssertionRecord? - var foundFailureMessage = false - - for assertion in recorder.assertions { - lastFailure = assertion - if assertion.message.stringValue == msg { - foundFailureMessage = true - break - } - } - - if foundFailureMessage { - continue - } - - if preferOriginalSourceLocation { - if let failure = lastFailure { - filePath = failure.location.file - lineNumber = failure.location.line - } - } - - let message: String - if let lastFailure = lastFailure { - message = "Got failure message: \"\(lastFailure.message.stringValue)\", but expected \"\(msg)\"" - } else { - message = "expected failure message, but got none" - } - NimbleAssertionHandler.assert(false, - message: FailureMessage(stringValue: message), - location: SourceLocation(file: filePath, line: lineNumber)) - } -} - -func failsWithErrorMessage(message: String, file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () -> Void) { - return failsWithErrorMessage( - [message], - file: file, - line: line, - preferOriginalSourceLocation: preferOriginalSourceLocation, - closure: closure - ) -} - -func failsWithErrorMessageForNil(message: String, file: FileString = #file, line: UInt = #line, preferOriginalSourceLocation: Bool = false, closure: () -> Void) { - failsWithErrorMessage("\(message) (use beNil() to match nils)", file: file, line: line, preferOriginalSourceLocation: preferOriginalSourceLocation, closure: closure) -} - -#if _runtime(_ObjC) - func deferToMainQueue(action: () -> Void) { - dispatch_async(dispatch_get_main_queue()) { - NSThread.sleepForTimeInterval(0.01) - action() - } - } -#endif - -public class NimbleHelper : NSObject { - public class func expectFailureMessage(message: NSString, block: () -> Void, file: FileString, line: UInt) { - failsWithErrorMessage(String(message), file: file, line: line, preferOriginalSourceLocation: true, closure: block) - } - - public class func expectFailureMessages(messages: [NSString], block: () -> Void, file: FileString, line: UInt) { - failsWithErrorMessage(messages.map({ String($0) }), file: file, line: line, preferOriginalSourceLocation: true, closure: block) - } - - public class func expectFailureMessageForNil(message: NSString, block: () -> Void, file: FileString, line: UInt) { - failsWithErrorMessageForNil(String(message), file: file, line: line, preferOriginalSourceLocation: true, closure: block) - } -} - -extension NSDate { - convenience init(dateTimeString:String) { - let dateFormatter = NSDateFormatter() - dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" - dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") - let date = dateFormatter.dateFromString(dateTimeString)! - self.init(timeInterval:0, sinceDate:date) - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Info.plist b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Info.plist deleted file mode 100644 index 6d32c15..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/AllPassTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/AllPassTest.swift deleted file mode 100644 index 8519b9f..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/AllPassTest.swift +++ /dev/null @@ -1,85 +0,0 @@ -import XCTest -import Nimble - -class AllPassTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testAllPassArray", testAllPassArray), - ("testAllPassMatcher", testAllPassMatcher), - ("testAllPassCollectionsWithOptionalsDontWork", testAllPassCollectionsWithOptionalsDontWork), - ("testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer", testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer), - ("testAllPassSet", testAllPassSet), - ("testAllPassWithNilAsExpectedValue", testAllPassWithNilAsExpectedValue), - ] - } - - func testAllPassArray() { - expect([1,2,3,4]).to(allPass({$0 < 5})) - expect([1,2,3,4]).toNot(allPass({$0 > 5})) - - failsWithErrorMessage( - "expected to all pass a condition, but failed first at element <3> in <[1, 2, 3, 4]>") { - expect([1,2,3,4]).to(allPass({$0 < 3})) - } - failsWithErrorMessage("expected to not all pass a condition") { - expect([1,2,3,4]).toNot(allPass({$0 < 5})) - } - failsWithErrorMessage( - "expected to all be something, but failed first at element <3> in <[1, 2, 3, 4]>") { - expect([1,2,3,4]).to(allPass("be something", {$0 < 3})) - } - failsWithErrorMessage("expected to not all be something") { - expect([1,2,3,4]).toNot(allPass("be something", {$0 < 5})) - } - } - - func testAllPassMatcher() { - expect([1,2,3,4]).to(allPass(beLessThan(5))) - expect([1,2,3,4]).toNot(allPass(beGreaterThan(5))) - - failsWithErrorMessage( - "expected to all be less than <3>, but failed first at element <3> in <[1, 2, 3, 4]>") { - expect([1,2,3,4]).to(allPass(beLessThan(3))) - } - failsWithErrorMessage("expected to not all be less than <5>") { - expect([1,2,3,4]).toNot(allPass(beLessThan(5))) - } - } - - func testAllPassCollectionsWithOptionalsDontWork() { - failsWithErrorMessage("expected to all be nil, but failed first at element in <[nil, nil, nil]>") { - expect([nil, nil, nil] as [Int?]).to(allPass(beNil())) - } - failsWithErrorMessage("expected to all pass a condition, but failed first at element in <[nil, nil, nil]>") { - expect([nil, nil, nil] as [Int?]).to(allPass({$0 == nil})) - } - } - - func testAllPassCollectionsWithOptionalsUnwrappingOneOptionalLayer() { - expect([nil, nil, nil] as [Int?]).to(allPass({$0! == nil})) - expect([nil, 1, nil] as [Int?]).toNot(allPass({$0! == nil})) - expect([1, 1, 1] as [Int?]).to(allPass({$0! == 1})) - expect([1, 1, nil] as [Int?]).toNot(allPass({$0! == 1})) - expect([1, 2, 3] as [Int?]).to(allPass({$0! < 4})) - expect([1, 2, 3] as [Int?]).toNot(allPass({$0! < 3})) - expect([1, 2, nil] as [Int?]).to(allPass({$0! < 3})) - } - - func testAllPassSet() { - expect(Set([1,2,3,4])).to(allPass({$0 < 5})) - expect(Set([1,2,3,4])).toNot(allPass({$0 > 5})) - - failsWithErrorMessage("expected to not all pass a condition") { - expect(Set([1,2,3,4])).toNot(allPass({$0 < 5})) - } - failsWithErrorMessage("expected to not all be something") { - expect(Set([1,2,3,4])).toNot(allPass("be something", {$0 < 5})) - } - } - - func testAllPassWithNilAsExpectedValue() { - failsWithErrorMessageForNil("expected to all pass") { - expect(nil as [Int]?).to(allPass(beLessThan(5))) - } - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeAKindOfTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeAKindOfTest.swift deleted file mode 100644 index 0202b17..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeAKindOfTest.swift +++ /dev/null @@ -1,56 +0,0 @@ -import XCTest -import Nimble - -#if _runtime(_ObjC) - -class TestNull : NSNull {} - -class BeAKindOfTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testPositiveMatch", testPositiveMatch), - ("testFailureMessages", testFailureMessages), - ("testSwiftTypesFailureMessages", testSwiftTypesFailureMessages), - ] - } - - func testPositiveMatch() { - expect(TestNull()).to(beAKindOf(NSNull)) - expect(NSObject()).to(beAKindOf(NSObject)) - expect(NSNumber(integer:1)).toNot(beAKindOf(NSDate)) - } - - func testFailureMessages() { - failsWithErrorMessageForNil("expected to not be a kind of NSNull, got ") { - expect(nil as NSNull?).toNot(beAKindOf(NSNull)) - } - failsWithErrorMessageForNil("expected to be a kind of NSString, got ") { - expect(nil as NSString?).to(beAKindOf(NSString)) - } - failsWithErrorMessage("expected to be a kind of NSString, got <__NSCFNumber instance>") { - expect(NSNumber(integer:1)).to(beAKindOf(NSString)) - } - failsWithErrorMessage("expected to not be a kind of NSNumber, got <__NSCFNumber instance>") { - expect(NSNumber(integer:1)).toNot(beAKindOf(NSNumber)) - } - } - - func testSwiftTypesFailureMessages() { - enum TestEnum { - case One, Two - } - failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" - + " will automatically type check Swift-only types. This expectation is redundant.") { - expect(1).to(beAKindOf(Int)) - } - failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" - + " will automatically type check Swift-only types. This expectation is redundant.") { - expect("test").to(beAKindOf(String)) - } - failsWithErrorMessage("beAKindOf only works on Objective-C types since the Swift compiler" - + " will automatically type check Swift-only types. This expectation is redundant.") { - expect(TestEnum.One).to(beAKindOf(TestEnum)) - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeAnInstanceOfTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeAnInstanceOfTest.swift deleted file mode 100644 index 41233db..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeAnInstanceOfTest.swift +++ /dev/null @@ -1,58 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeAnInstanceOfTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testPositiveMatch", testPositiveMatch), - ("testFailureMessages", testFailureMessages), - ("testSwiftTypesFailureMessages", testSwiftTypesFailureMessages), - ] - } - - func testPositiveMatch() { - expect(NSNull()).to(beAnInstanceOf(NSNull)) - expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSDate)) - } - - func testFailureMessages() { - failsWithErrorMessageForNil("expected to not be an instance of NSNull, got ") { - expect(nil as NSNull?).toNot(beAnInstanceOf(NSNull)) - } - failsWithErrorMessageForNil("expected to be an instance of NSString, got ") { - expect(nil as NSString?).to(beAnInstanceOf(NSString)) - } -#if _runtime(_ObjC) - let numberTypeName = "__NSCFNumber" -#else - let numberTypeName = "NSNumber" -#endif - failsWithErrorMessage("expected to be an instance of NSString, got <\(numberTypeName) instance>") { - expect(NSNumber(integer:1)).to(beAnInstanceOf(NSString)) - } - failsWithErrorMessage("expected to not be an instance of NSNumber, got <\(numberTypeName) instance>") { - expect(NSNumber(integer:1)).toNot(beAnInstanceOf(NSNumber)) - } - } - - func testSwiftTypesFailureMessages() { - enum TestEnum { - case One, Two - } - - failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" - + " will automatically type check Swift-only types. This expectation is redundant.") { - expect(1).to(beAnInstanceOf(Int)) - } - failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" - + " will automatically type check Swift-only types. This expectation is redundant.") { - expect("test").to(beAnInstanceOf(String)) - } - failsWithErrorMessage("beAnInstanceOf only works on Objective-C types since the Swift compiler" - + " will automatically type check Swift-only types. This expectation is redundant.") { - expect(TestEnum.One).to(beAnInstanceOf(TestEnum)) - } - } - -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeCloseToTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeCloseToTest.swift deleted file mode 100644 index 7ca2020..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeCloseToTest.swift +++ /dev/null @@ -1,154 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeCloseToTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testBeCloseTo", testBeCloseTo), - ("testBeCloseToWithin", testBeCloseToWithin), - ("testBeCloseToWithNSNumber", testBeCloseToWithNSNumber), - ("testBeCloseToWithNSDate", testBeCloseToWithNSDate), - ("testBeCloseToOperator", testBeCloseToOperator), - ("testBeCloseToWithinOperator", testBeCloseToWithinOperator), - ("testPlusMinusOperator", testPlusMinusOperator), - ("testBeCloseToOperatorWithNSDate", testBeCloseToOperatorWithNSDate), - ("testBeCloseToWithinOperatorWithNSDate", testBeCloseToWithinOperatorWithNSDate), - ("testPlusMinusOperatorWithNSDate", testPlusMinusOperatorWithNSDate), - ("testBeCloseToArray", testBeCloseToArray), - ] - } - - func testBeCloseTo() { - expect(1.2).to(beCloseTo(1.2001)) - expect(1.2 as CDouble).to(beCloseTo(1.2001)) - expect(1.2 as Float).to(beCloseTo(1.2001)) - - failsWithErrorMessage("expected to not be close to <1.2001> (within 0.0001), got <1.2>") { - expect(1.2).toNot(beCloseTo(1.2001)) - } - } - - func testBeCloseToWithin() { - expect(1.2).to(beCloseTo(9.300, within: 10)) - - failsWithErrorMessage("expected to not be close to <1.2001> (within 1), got <1.2>") { - expect(1.2).toNot(beCloseTo(1.2001, within: 1.0)) - } - } - - func testBeCloseToWithNSNumber() { - expect(NSNumber(double:1.2)).to(beCloseTo(9.300, within: 10)) - expect(NSNumber(double:1.2)).to(beCloseTo(NSNumber(double:9.300), within: 10)) - expect(1.2).to(beCloseTo(NSNumber(double:9.300), within: 10)) - - failsWithErrorMessage("expected to not be close to <1.2001> (within 1), got <1.2>") { - expect(NSNumber(double:1.2)).toNot(beCloseTo(1.2001, within: 1.0)) - } - } - - func testBeCloseToWithNSDate() { -#if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")).to(beCloseTo(NSDate(dateTimeString: "2015-08-26 11:43:05"), within: 10)) - - failsWithErrorMessage("expected to not be close to <2015-08-26 11:43:00.0050> (within 0.004), got <2015-08-26 11:43:00.0000>") { - - let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")).toNot(beCloseTo(expectedDate, within: 0.004)) - } -#endif - } - - func testBeCloseToOperator() { - expect(1.2) ≈ 1.2001 - expect(1.2 as CDouble) ≈ 1.2001 - - failsWithErrorMessage("expected to be close to <1.2002> (within 0.0001), got <1.2>") { - expect(1.2) ≈ 1.2002 - } - } - - func testBeCloseToWithinOperator() { - expect(1.2) ≈ (9.300, 10) - expect(1.2) == (9.300, 10) - - failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { - expect(1.2) ≈ (1.0, 0.1) - } - failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { - expect(1.2) == (1.0, 0.1) - } - } - - func testPlusMinusOperator() { - expect(1.2) ≈ 9.300 ± 10 - expect(1.2) == 9.300 ± 10 - - failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { - expect(1.2) ≈ 1.0 ± 0.1 - } - failsWithErrorMessage("expected to be close to <1> (within 0.1), got <1.2>") { - expect(1.2) == 1.0 ± 0.1 - } - } - - func testBeCloseToOperatorWithNSDate() { -#if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ NSDate(dateTimeString: "2015-08-26 11:43:00") - - failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.0001), got <2015-08-26 11:43:00.0000>") { - - let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ expectedDate - } -#endif - } - - func testBeCloseToWithinOperatorWithNSDate() { -#if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ (NSDate(dateTimeString: "2015-08-26 11:43:05"), 10) - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == (NSDate(dateTimeString: "2015-08-26 11:43:05"), 10) - - failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { - - let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ (expectedDate, 0.006) - } - failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { - - let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == (expectedDate, 0.006) - } -#endif - } - - func testPlusMinusOperatorWithNSDate() { -#if _runtime(_ObjC) // NSDateFormatter isn't functional in swift-corelibs-foundation yet. - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ NSDate(dateTimeString: "2015-08-26 11:43:05") ± 10 - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == NSDate(dateTimeString: "2015-08-26 11:43:05") ± 10 - - failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { - - let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) ≈ expectedDate ± 0.006 - } - failsWithErrorMessage("expected to be close to <2015-08-26 11:43:00.0050> (within 0.006), got <2015-08-26 11:43:00.0000>") { - - let expectedDate = NSDate(dateTimeString: "2015-08-26 11:43:00").dateByAddingTimeInterval(0.005) - expect(NSDate(dateTimeString: "2015-08-26 11:43:00")) == expectedDate ± 0.006 - } -#endif - } - - func testBeCloseToArray() { - expect([0.0, 1.1, 2.2]) ≈ [0.0001, 1.1001, 2.2001] - expect([0.0, 1.1, 2.2]).to(beCloseTo([0.1, 1.2, 2.3], within: 0.1)) - - failsWithErrorMessage("expected to be close to <[0, 1]> (each within 0.0001), got <[0, 1.1]>") { - expect([0.0, 1.1]) ≈ [0.0, 1.0] - } - failsWithErrorMessage("expected to be close to <[0.2, 1.2]> (each within 0.1), got <[0, 1.1]>") { - expect([0.0, 1.1]).to(beCloseTo([0.2, 1.2], within: 0.1)) - } - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeEmptyTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeEmptyTest.swift deleted file mode 100644 index 541327f..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeEmptyTest.swift +++ /dev/null @@ -1,82 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeEmptyTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testBeEmptyPositive", testBeEmptyPositive), - ("testBeEmptyNegative", testBeEmptyNegative), - ] - } - - func testBeEmptyPositive() { - expect([] as [Int]).to(beEmpty()) - expect([1]).toNot(beEmpty()) - - expect([] as [CInt]).to(beEmpty()) - expect([1] as [CInt]).toNot(beEmpty()) - -#if _runtime(_ObjC) - expect(NSDictionary() as? [Int:Int]).to(beEmpty()) - expect(NSDictionary(object: 1, forKey: 1) as? [Int:Int]).toNot(beEmpty()) -#endif - - expect(Dictionary()).to(beEmpty()) - expect(["hi": 1]).toNot(beEmpty()) - -#if _runtime(_ObjC) - expect(NSArray() as? [Int]).to(beEmpty()) - expect(NSArray(array: [1]) as? [Int]).toNot(beEmpty()) -#endif - - expect(NSSet()).to(beEmpty()) - expect(NSSet(array: [NSNumber(integer: 1)])).toNot(beEmpty()) - - expect(NSIndexSet()).to(beEmpty()) - expect(NSIndexSet(index: 1)).toNot(beEmpty()) - - expect(NSString()).to(beEmpty()) - expect(NSString(string: "hello")).toNot(beEmpty()) - - expect("").to(beEmpty()) - expect("foo").toNot(beEmpty()) - } - - func testBeEmptyNegative() { - failsWithErrorMessageForNil("expected to be empty, got ") { - expect(nil as NSString?).to(beEmpty()) - } - failsWithErrorMessageForNil("expected to not be empty, got ") { - expect(nil as [CInt]?).toNot(beEmpty()) - } - - failsWithErrorMessage("expected to not be empty, got <()>") { - expect(NSArray()).toNot(beEmpty()) - } - failsWithErrorMessage("expected to be empty, got <[1]>") { - expect([1]).to(beEmpty()) - } - - failsWithErrorMessage("expected to not be empty, got <{()}>") { - expect(NSSet()).toNot(beEmpty()); - } - failsWithErrorMessage("expected to be empty, got <{(1)}>") { - expect(NSSet(object: NSNumber(int: 1))).to(beEmpty()); - } - - failsWithErrorMessage("expected to not be empty, got <()>") { - expect(NSIndexSet()).toNot(beEmpty()); - } - failsWithErrorMessage("expected to be empty, got <(1)>") { - expect(NSIndexSet(index: 1)).to(beEmpty()); - } - - failsWithErrorMessage("expected to not be empty, got <>") { - expect("").toNot(beEmpty()) - } - failsWithErrorMessage("expected to be empty, got ") { - expect("foo").to(beEmpty()) - } - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeGreaterThanOrEqualToTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeGreaterThanOrEqualToTest.swift deleted file mode 100644 index 4a59c59..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeGreaterThanOrEqualToTest.swift +++ /dev/null @@ -1,50 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeGreaterThanOrEqualToTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testGreaterThanOrEqualTo", testGreaterThanOrEqualTo), - ("testGreaterThanOrEqualToOperator", testGreaterThanOrEqualToOperator), - ] - } - - func testGreaterThanOrEqualTo() { - expect(10).to(beGreaterThanOrEqualTo(10)) - expect(10).to(beGreaterThanOrEqualTo(2)) - expect(1).toNot(beGreaterThanOrEqualTo(2)) - expect(NSNumber(int:1)).toNot(beGreaterThanOrEqualTo(2)) - expect(NSNumber(int:2)).to(beGreaterThanOrEqualTo(NSNumber(int:2))) -#if _runtime(_ObjC) - expect(1).to(beGreaterThanOrEqualTo(NSNumber(int:0))) -#endif - - failsWithErrorMessage("expected to be greater than or equal to <2>, got <0>") { - expect(0).to(beGreaterThanOrEqualTo(2)) - return - } - failsWithErrorMessage("expected to not be greater than or equal to <1>, got <1>") { - expect(1).toNot(beGreaterThanOrEqualTo(1)) - return - } - failsWithErrorMessageForNil("expected to be greater than or equal to <-2>, got ") { - expect(nil as Int?).to(beGreaterThanOrEqualTo(-2)) - } - failsWithErrorMessageForNil("expected to not be greater than or equal to <1>, got ") { - expect(nil as Int?).toNot(beGreaterThanOrEqualTo(1)) - } - } - - func testGreaterThanOrEqualToOperator() { - expect(0) >= 0 - expect(1) >= 0 - expect(NSNumber(int:1)) >= 1 - expect(NSNumber(int:1)) >= NSNumber(int:1) - - failsWithErrorMessage("expected to be greater than or equal to <2>, got <1>") { - expect(1) >= 2 - return - } - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeGreaterThanTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeGreaterThanTest.swift deleted file mode 100644 index a0e5e4b..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeGreaterThanTest.swift +++ /dev/null @@ -1,46 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeGreaterThanTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testGreaterThan", testGreaterThan), - ("testGreaterThanOperator", testGreaterThanOperator), - ] - } - - func testGreaterThan() { - expect(10).to(beGreaterThan(2)) - expect(1).toNot(beGreaterThan(2)) -#if _runtime(_ObjC) - expect(NSNumber(int:3)).to(beGreaterThan(2)) -#endif - expect(NSNumber(int:1)).toNot(beGreaterThan(NSNumber(int:2))) - - failsWithErrorMessage("expected to be greater than <2>, got <0>") { - expect(0).to(beGreaterThan(2)) - } - failsWithErrorMessage("expected to not be greater than <0>, got <1>") { - expect(1).toNot(beGreaterThan(0)) - } - failsWithErrorMessageForNil("expected to be greater than <-2>, got ") { - expect(nil as Int?).to(beGreaterThan(-2)) - } - failsWithErrorMessageForNil("expected to not be greater than <0>, got ") { - expect(nil as Int?).toNot(beGreaterThan(0)) - } - } - - func testGreaterThanOperator() { - expect(1) > 0 - expect(NSNumber(int:1)) > NSNumber(int:0) -#if _runtime(_ObjC) - expect(NSNumber(int:1)) > 0 -#endif - failsWithErrorMessage("expected to be greater than <2>, got <1>") { - expect(1) > 2 - return - } - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeIdenticalToObjectTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeIdenticalToObjectTest.swift deleted file mode 100644 index c9c1fd8..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeIdenticalToObjectTest.swift +++ /dev/null @@ -1,64 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeIdenticalToObjectTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testBeIdenticalToPositive", testBeIdenticalToPositive), - ("testBeIdenticalToNegative", testBeIdenticalToNegative), - ("testBeIdenticalToPositiveMessage", testBeIdenticalToPositiveMessage), - ("testBeIdenticalToNegativeMessage", testBeIdenticalToNegativeMessage), - ("testFailsOnNils", testFailsOnNils), - ("testOperators", testOperators), - ] - } - - private class BeIdenticalToObjectTester {} - private let testObjectA = BeIdenticalToObjectTester() - private let testObjectB = BeIdenticalToObjectTester() - - func testBeIdenticalToPositive() { - expect(self.testObjectA).to(beIdenticalTo(testObjectA)) - } - - func testBeIdenticalToNegative() { - expect(self.testObjectA).toNot(beIdenticalTo(testObjectB)) - } - - func testBeIdenticalToPositiveMessage() { - let message = String(NSString(format: "expected to be identical to <%p>, got <%p>", - unsafeBitCast(testObjectB, Int.self), unsafeBitCast(testObjectA, Int.self))) - failsWithErrorMessage(message) { - expect(self.testObjectA).to(beIdenticalTo(self.testObjectB)) - } - } - - func testBeIdenticalToNegativeMessage() { - let message = String(NSString(format: "expected to not be identical to <%p>, got <%p>", - unsafeBitCast(testObjectA, Int.self), unsafeBitCast(testObjectA, Int.self))) - failsWithErrorMessage(message) { - expect(self.testObjectA).toNot(beIdenticalTo(self.testObjectA)) - } - } - - func testFailsOnNils() { - let message1 = String(NSString(format: "expected to be identical to <%p>, got nil", - unsafeBitCast(testObjectA, Int.self))) - failsWithErrorMessageForNil(message1) { - expect(nil as BeIdenticalToObjectTester?).to(beIdenticalTo(self.testObjectA)) - } - - let message2 = String(NSString(format: "expected to not be identical to <%p>, got nil", - unsafeBitCast(testObjectA, Int.self))) - failsWithErrorMessageForNil(message2) { - expect(nil as BeIdenticalToObjectTester?).toNot(beIdenticalTo(self.testObjectA)) - } - } - - func testOperators() { - expect(self.testObjectA) === testObjectA - expect(self.testObjectA) !== testObjectB - } - -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeIdenticalToTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeIdenticalToTest.swift deleted file mode 100644 index 1d80b5c..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeIdenticalToTest.swift +++ /dev/null @@ -1,68 +0,0 @@ -import Foundation -import XCTest -@testable import Nimble - -class BeIdenticalToTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testBeIdenticalToPositive", testBeIdenticalToPositive), - ("testBeIdenticalToNegative", testBeIdenticalToNegative), - ("testBeIdenticalToPositiveMessage", testBeIdenticalToPositiveMessage), - ("testBeIdenticalToNegativeMessage", testBeIdenticalToNegativeMessage), - ("testOperators", testOperators), - ("testBeAlias", testBeAlias) - ] - } - - func testBeIdenticalToPositive() { - let value = NSDate() - expect(value).to(beIdenticalTo(value)) - } - - func testBeIdenticalToNegative() { - expect(NSNumber(integer:1)).toNot(beIdenticalTo(NSString(string: "yo"))) - expect(NSArray(array: [NSNumber(integer: 1)])).toNot(beIdenticalTo(NSArray(array: [NSNumber(integer: 1)]))) - } - - func testBeIdenticalToPositiveMessage() { - let num1 = NSNumber(integer:1) - let num2 = NSNumber(integer:2) - let message = "expected to be identical to \(identityAsString(num2)), got \(identityAsString(num1))" - failsWithErrorMessage(message) { - expect(num1).to(beIdenticalTo(num2)) - } - } - - func testBeIdenticalToNegativeMessage() { - let value1 = NSArray(array: []) - let value2 = NSArray(array: []) - let message = "expected to not be identical to \(identityAsString(value2)), got \(identityAsString(value1))" - failsWithErrorMessage(message) { - expect(value1).toNot(beIdenticalTo(value2)) - } - } - - func testOperators() { - let value = NSDate() - expect(value) === value - expect(NSNumber(integer:1)) !== NSNumber(integer:2) - } - - func testBeAlias() { - let value = NSDate() - expect(value).to(be(value)) - expect(NSNumber(integer:1)).toNot(be(NSString(stringLiteral: "turtles"))) - #if _runtime(_ObjC) - expect([1]).toNot(be([1])) - #else - expect(NSArray(array: [NSNumber(integer: 1)])).toNot(beIdenticalTo(NSArray(array: [NSNumber(integer: 1)]))) - #endif - - let value1 = NSArray(array: []) - let value2 = NSArray(array: []) - let message = "expected to not be identical to \(identityAsString(value2)), got \(identityAsString(value1))" - failsWithErrorMessage(message) { - expect(value1).toNot(be(value2)) - } - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeLessThanOrEqualToTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeLessThanOrEqualToTest.swift deleted file mode 100644 index 7d2d7d0..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeLessThanOrEqualToTest.swift +++ /dev/null @@ -1,52 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeLessThanOrEqualToTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testLessThanOrEqualTo", testLessThanOrEqualTo), - ("testLessThanOrEqualToOperator", testLessThanOrEqualToOperator), - ] - } - - func testLessThanOrEqualTo() { - expect(10).to(beLessThanOrEqualTo(10)) - expect(2).to(beLessThanOrEqualTo(10)) - expect(2).toNot(beLessThanOrEqualTo(1)) - - expect(NSNumber(int:2)).to(beLessThanOrEqualTo(10)) - expect(NSNumber(int:2)).toNot(beLessThanOrEqualTo(1)) -#if _runtime(_ObjC) - expect(2).to(beLessThanOrEqualTo(NSNumber(int:10))) - expect(2).toNot(beLessThanOrEqualTo(NSNumber(int:1))) -#endif - - failsWithErrorMessage("expected to be less than or equal to <0>, got <2>") { - expect(2).to(beLessThanOrEqualTo(0)) - return - } - failsWithErrorMessage("expected to not be less than or equal to <0>, got <0>") { - expect(0).toNot(beLessThanOrEqualTo(0)) - return - } - failsWithErrorMessageForNil("expected to be less than or equal to <2>, got ") { - expect(nil as Int?).to(beLessThanOrEqualTo(2)) - return - } - failsWithErrorMessageForNil("expected to not be less than or equal to <-2>, got ") { - expect(nil as Int?).toNot(beLessThanOrEqualTo(-2)) - return - } - } - - func testLessThanOrEqualToOperator() { - expect(0) <= 1 - expect(1) <= 1 - - failsWithErrorMessage("expected to be less than or equal to <1>, got <2>") { - expect(2) <= 1 - return - } - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeLessThanTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeLessThanTest.swift deleted file mode 100644 index d21ccc6..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeLessThanTest.swift +++ /dev/null @@ -1,49 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeLessThanTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testLessThan", testLessThan), - ("testLessThanOperator", testLessThanOperator), - ] - } - - func testLessThan() { - expect(2).to(beLessThan(10)) - expect(2).toNot(beLessThan(1)) -#if _runtime(_ObjC) - expect(NSNumber(integer:2)).to(beLessThan(10)) - expect(NSNumber(integer:2)).toNot(beLessThan(1)) - - expect(2).to(beLessThan(NSNumber(integer:10))) - expect(2).toNot(beLessThan(NSNumber(integer:1))) -#endif - - failsWithErrorMessage("expected to be less than <0>, got <2>") { - expect(2).to(beLessThan(0)) - } - failsWithErrorMessage("expected to not be less than <1>, got <0>") { - expect(0).toNot(beLessThan(1)) - } - - failsWithErrorMessageForNil("expected to be less than <2>, got ") { - expect(nil as Int?).to(beLessThan(2)) - } - failsWithErrorMessageForNil("expected to not be less than <-1>, got ") { - expect(nil as Int?).toNot(beLessThan(-1)) - } - } - - func testLessThanOperator() { - expect(0) < 1 -#if _runtime(_ObjC) - expect(NSNumber(int:0)) < 1 -#endif - failsWithErrorMessage("expected to be less than <1>, got <2>") { - expect(2) < 1 - return - } - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeLogicalTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeLogicalTest.swift deleted file mode 100644 index 720c197..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeLogicalTest.swift +++ /dev/null @@ -1,204 +0,0 @@ -import XCTest -import Nimble - -enum ConvertsToBool : BooleanType, CustomStringConvertible { - case TrueLike, FalseLike - - var boolValue : Bool { - switch self { - case .TrueLike: return true - case .FalseLike: return false - } - } - - var description : String { - switch self { - case .TrueLike: return "TrueLike" - case .FalseLike: return "FalseLike" - } - } -} - -class BeTruthyTest : XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testShouldMatchNonNilTypes", testShouldMatchNonNilTypes), - ("testShouldMatchTrue", testShouldMatchTrue), - ("testShouldNotMatchNilTypes", testShouldNotMatchNilTypes), - ("testShouldNotMatchFalse", testShouldNotMatchFalse), - ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), - ("testShouldMatchBoolConvertibleTypesThatConvertToTrue", testShouldMatchBoolConvertibleTypesThatConvertToTrue), - ("testShouldNotMatchBoolConvertibleTypesThatConvertToFalse", testShouldNotMatchBoolConvertibleTypesThatConvertToFalse), - ] - } - - func testShouldMatchNonNilTypes() { - expect(true as Bool?).to(beTruthy()) - expect(1 as Int?).to(beTruthy()) - } - - func testShouldMatchTrue() { - expect(true).to(beTruthy()) - - failsWithErrorMessage("expected to not be truthy, got ") { - expect(true).toNot(beTruthy()) - } - } - - func testShouldNotMatchNilTypes() { - expect(false as Bool?).toNot(beTruthy()) - expect(nil as Bool?).toNot(beTruthy()) - expect(nil as Int?).toNot(beTruthy()) - } - - func testShouldNotMatchFalse() { - expect(false).toNot(beTruthy()) - - failsWithErrorMessage("expected to be truthy, got ") { - expect(false).to(beTruthy()) - } - } - - func testShouldNotMatchNilBools() { - expect(nil as Bool?).toNot(beTruthy()) - - failsWithErrorMessage("expected to be truthy, got ") { - expect(nil as Bool?).to(beTruthy()) - } - } - - func testShouldMatchBoolConvertibleTypesThatConvertToTrue() { - expect(ConvertsToBool.TrueLike).to(beTruthy()) - - failsWithErrorMessage("expected to not be truthy, got ") { - expect(ConvertsToBool.TrueLike).toNot(beTruthy()) - } - } - - func testShouldNotMatchBoolConvertibleTypesThatConvertToFalse() { - expect(ConvertsToBool.FalseLike).toNot(beTruthy()) - - failsWithErrorMessage("expected to be truthy, got ") { - expect(ConvertsToBool.FalseLike).to(beTruthy()) - } - } -} - -class BeTrueTest : XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testShouldMatchTrue", testShouldMatchTrue), - ("testShouldNotMatchFalse", testShouldNotMatchFalse), - ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), - ] - } - - func testShouldMatchTrue() { - expect(true).to(beTrue()) - - failsWithErrorMessage("expected to not be true, got ") { - expect(true).toNot(beTrue()) - } - } - - func testShouldNotMatchFalse() { - expect(false).toNot(beTrue()) - - failsWithErrorMessage("expected to be true, got ") { - expect(false).to(beTrue()) - } - } - - func testShouldNotMatchNilBools() { - failsWithErrorMessageForNil("expected to not be true, got ") { - expect(nil as Bool?).toNot(beTrue()) - } - - failsWithErrorMessageForNil("expected to be true, got ") { - expect(nil as Bool?).to(beTrue()) - } - } -} - -class BeFalsyTest : XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testShouldMatchNilTypes", testShouldMatchNilTypes), - ("testShouldNotMatchTrue", testShouldNotMatchTrue), - ("testShouldNotMatchNonNilTypes", testShouldNotMatchNonNilTypes), - ("testShouldMatchFalse", testShouldMatchFalse), - ("testShouldMatchNilBools", testShouldMatchNilBools), - ] - } - - func testShouldMatchNilTypes() { - expect(false as Bool?).to(beFalsy()) - expect(nil as Bool?).to(beFalsy()) - expect(nil as Int?).to(beFalsy()) - } - - func testShouldNotMatchTrue() { - expect(true).toNot(beFalsy()) - - failsWithErrorMessage("expected to be falsy, got ") { - expect(true).to(beFalsy()) - } - } - - func testShouldNotMatchNonNilTypes() { - expect(true as Bool?).toNot(beFalsy()) - expect(1 as Int?).toNot(beFalsy()) - } - - func testShouldMatchFalse() { - expect(false).to(beFalsy()) - - failsWithErrorMessage("expected to not be falsy, got ") { - expect(false).toNot(beFalsy()) - } - } - - func testShouldMatchNilBools() { - expect(nil as Bool?).to(beFalsy()) - - failsWithErrorMessage("expected to not be falsy, got ") { - expect(nil as Bool?).toNot(beFalsy()) - } - } -} - -class BeFalseTest : XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testShouldNotMatchTrue", testShouldNotMatchTrue), - ("testShouldMatchFalse", testShouldMatchFalse), - ("testShouldNotMatchNilBools", testShouldNotMatchNilBools), - ] - } - - func testShouldNotMatchTrue() { - expect(true).toNot(beFalse()) - - failsWithErrorMessage("expected to be false, got ") { - expect(true).to(beFalse()) - } - } - - func testShouldMatchFalse() { - expect(false).to(beFalse()) - - failsWithErrorMessage("expected to not be false, got ") { - expect(false).toNot(beFalse()) - } - } - - func testShouldNotMatchNilBools() { - failsWithErrorMessageForNil("expected to be false, got ") { - expect(nil as Bool?).to(beFalse()) - } - - failsWithErrorMessageForNil("expected to not be false, got ") { - expect(nil as Bool?).toNot(beFalse()) - } - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeNilTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeNilTest.swift deleted file mode 100644 index 261b6d4..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeNilTest.swift +++ /dev/null @@ -1,28 +0,0 @@ -import XCTest -import Nimble - -class BeNilTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testBeNil", testBeNil), - ] - } - - func producesNil() -> Array? { - return nil - } - - func testBeNil() { - expect(nil as Int?).to(beNil()) - expect(1 as Int?).toNot(beNil()) - expect(self.producesNil()).to(beNil()) - - failsWithErrorMessage("expected to not be nil, got ") { - expect(nil as Int?).toNot(beNil()) - } - - failsWithErrorMessage("expected to be nil, got <1>") { - expect(1 as Int?).to(beNil()) - } - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeVoidTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeVoidTest.swift deleted file mode 100644 index eb3886e..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeVoidTest.swift +++ /dev/null @@ -1,32 +0,0 @@ -import XCTest -import Nimble - -class BeVoidTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testBeVoid", testBeVoid), - ] - } - - func testBeVoid() { - expect(()).to(beVoid()) - expect(() as ()?).to(beVoid()) - expect(nil as ()?).toNot(beVoid()) - - expect(()) == () - expect(() as ()?) == () - expect(nil as ()?) != () - - failsWithErrorMessage("expected to not be void, got <()>") { - expect(()).toNot(beVoid()) - } - - failsWithErrorMessage("expected to not be void, got <()>") { - expect(() as ()?).toNot(beVoid()) - } - - failsWithErrorMessage("expected to be void, got ") { - expect(nil as ()?).to(beVoid()) - } - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeginWithTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeginWithTest.swift deleted file mode 100644 index cdef99a..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/BeginWithTest.swift +++ /dev/null @@ -1,51 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class BeginWithTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testPositiveMatches", testPositiveMatches), - ("testNegativeMatches", testNegativeMatches), - ] - } - - func testPositiveMatches() { - expect([1, 2, 3]).to(beginWith(1)) - expect([1, 2, 3]).toNot(beginWith(2)) - - expect("foobar").to(beginWith("foo")) - expect("foobar").toNot(beginWith("oo")) - - expect(NSString(string: "foobar").description).to(beginWith("foo")) - expect(NSString(string: "foobar").description).toNot(beginWith("oo")) - -#if _runtime(_ObjC) - expect(NSArray(array: ["a", "b"])).to(beginWith("a")) - expect(NSArray(array: ["a", "b"])).toNot(beginWith("b")) -#endif - } - - func testNegativeMatches() { - failsWithErrorMessageForNil("expected to begin with , got ") { - expect(nil as NSArray?).to(beginWith(NSString(string: "b"))) - } - failsWithErrorMessageForNil("expected to not begin with , got ") { - expect(nil as NSArray?).toNot(beginWith(NSString(string: "b"))) - } - - failsWithErrorMessage("expected to begin with <2>, got <[1, 2, 3]>") { - expect([1, 2, 3]).to(beginWith(2)) - } - failsWithErrorMessage("expected to not begin with <1>, got <[1, 2, 3]>") { - expect([1, 2, 3]).toNot(beginWith(1)) - } - failsWithErrorMessage("expected to begin with , got ") { - expect("batman").to(beginWith("atm")) - } - failsWithErrorMessage("expected to not begin with , got ") { - expect("batman").toNot(beginWith("bat")) - } - } - -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/ContainTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/ContainTest.swift deleted file mode 100644 index 359d190..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/ContainTest.swift +++ /dev/null @@ -1,95 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class ContainTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testContain", testContain), - ("testContainSubstring", testContainSubstring), - ("testContainObjCSubstring", testContainObjCSubstring), - ("testVariadicArguments", testVariadicArguments), - ("testCollectionArguments", testCollectionArguments), - ] - } - - func testContain() { - expect([1, 2, 3]).to(contain(1)) - expect([1, 2, 3] as [CInt]).to(contain(1 as CInt)) - expect([1, 2, 3] as Array).to(contain(1 as CInt)) - expect(["foo", "bar", "baz"]).to(contain("baz")) - expect([1, 2, 3]).toNot(contain(4)) - expect(["foo", "bar", "baz"]).toNot(contain("ba")) -#if _runtime(_ObjC) - expect(NSArray(array: ["a"])).to(contain(NSString(string: "a"))) - expect(NSArray(array: ["a"])).toNot(contain(NSString(string:"b"))) - expect(NSArray(object: 1) as NSArray?).to(contain(1)) -#endif - - failsWithErrorMessage("expected to contain , got <[a, b, c]>") { - expect(["a", "b", "c"]).to(contain("bar")) - } - failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { - expect(["a", "b", "c"]).toNot(contain("b")) - } - - failsWithErrorMessageForNil("expected to contain , got ") { - expect(nil as [String]?).to(contain("bar")) - } - failsWithErrorMessageForNil("expected to not contain , got ") { - expect(nil as [String]?).toNot(contain("b")) - } - } - - func testContainSubstring() { - expect("foo").to(contain("o")) - expect("foo").to(contain("oo")) - expect("foo").toNot(contain("z")) - expect("foo").toNot(contain("zz")) - - failsWithErrorMessage("expected to contain , got ") { - expect("foo").to(contain("bar")) - } - failsWithErrorMessage("expected to not contain , got ") { - expect("foo").toNot(contain("oo")) - } - } - - func testContainObjCSubstring() { - let str = NSString(string: "foo") - expect(str).to(contain(NSString(string: "o"))) - expect(str).to(contain(NSString(string: "oo"))) - expect(str).toNot(contain(NSString(string: "z"))) - expect(str).toNot(contain(NSString(string: "zz"))) - } - - func testVariadicArguments() { - expect([1, 2, 3]).to(contain(1, 2)) - expect([1, 2, 3]).toNot(contain(1, 4)) - - failsWithErrorMessage("expected to contain , got <[a, b, c]>") { - expect(["a", "b", "c"]).to(contain("a", "bar")) - } - - failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { - expect(["a", "b", "c"]).toNot(contain("bar", "b")) - } - } - - func testCollectionArguments() { - expect([1, 2, 3]).to(contain([1, 2])) - expect([1, 2, 3]).toNot(contain([1, 4])) - - let collection = Array(1...10) - let slice = Array(collection[3...5]) - expect(collection).to(contain(slice)) - - failsWithErrorMessage("expected to contain , got <[a, b, c]>") { - expect(["a", "b", "c"]).to(contain(["a", "bar"])) - } - - failsWithErrorMessage("expected to not contain , got <[a, b, c]>") { - expect(["a", "b", "c"]).toNot(contain(["bar", "b"])) - } - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/EndWithTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/EndWithTest.swift deleted file mode 100644 index 01020af..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/EndWithTest.swift +++ /dev/null @@ -1,51 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class EndWithTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testEndWithPositives", testEndWithPositives), - ("testEndWithNegatives", testEndWithNegatives), - ] - } - - func testEndWithPositives() { - expect([1, 2, 3]).to(endWith(3)) - expect([1, 2, 3]).toNot(endWith(2)) - - expect("foobar").to(endWith("bar")) - expect("foobar").toNot(endWith("oo")) - - expect(NSString(string: "foobar").description).to(endWith("bar")) - expect(NSString(string: "foobar").description).toNot(endWith("oo")) - -#if _runtime(_ObjC) - expect(NSArray(array: ["a", "b"])).to(endWith("b")) - expect(NSArray(array: ["a", "b"])).toNot(endWith("a")) -#endif - } - - func testEndWithNegatives() { - failsWithErrorMessageForNil("expected to end with <2>, got ") { - expect(nil as [Int]?).to(endWith(2)) - } - failsWithErrorMessageForNil("expected to not end with <2>, got ") { - expect(nil as [Int]?).toNot(endWith(2)) - } - - failsWithErrorMessage("expected to end with <2>, got <[1, 2, 3]>") { - expect([1, 2, 3]).to(endWith(2)) - } - failsWithErrorMessage("expected to not end with <3>, got <[1, 2, 3]>") { - expect([1, 2, 3]).toNot(endWith(3)) - } - failsWithErrorMessage("expected to end with , got ") { - expect("batman").to(endWith("atm")) - } - failsWithErrorMessage("expected to not end with , got ") { - expect("batman").toNot(endWith("man")) - } - } - -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/EqualTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/EqualTest.swift deleted file mode 100644 index 366f64e..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/EqualTest.swift +++ /dev/null @@ -1,274 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class EqualTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testEquality", testEquality), - ("testArrayEquality", testArrayEquality), - ("testSetEquality", testSetEquality), - ("testDoesNotMatchNils", testDoesNotMatchNils), - ("testDictionaryEquality", testDictionaryEquality), - ("testDataEquality", testDataEquality), - ("testNSObjectEquality", testNSObjectEquality), - ("testOperatorEquality", testOperatorEquality), - ("testOperatorEqualityWithArrays", testOperatorEqualityWithArrays), - ("testOperatorEqualityWithDictionaries", testOperatorEqualityWithDictionaries), - ("testOptionalEquality", testOptionalEquality), - ("testArrayOfOptionalsEquality", testArrayOfOptionalsEquality), - ("testDictionariesWithDifferentSequences", testDictionariesWithDifferentSequences), - ] - } - - func testEquality() { - expect(1 as CInt).to(equal(1 as CInt)) - expect(1 as CInt).to(equal(1)) - expect(1).to(equal(1)) - expect("hello").to(equal("hello")) - expect("hello").toNot(equal("world")) - - expect { - 1 - }.to(equal(1)) - - failsWithErrorMessage("expected to equal , got ") { - expect("hello").to(equal("world")) - } - failsWithErrorMessage("expected to not equal , got ") { - expect("hello").toNot(equal("hello")) - } - } - - func testArrayEquality() { - expect([1, 2, 3]).to(equal([1, 2, 3])) - expect([1, 2, 3]).toNot(equal([1, 2])) - expect([1, 2, 3]).toNot(equal([1, 2, 4])) - - let array1: Array = [1, 2, 3] - let array2: Array = [1, 2, 3] - expect(array1).to(equal(array2)) - expect(array1).to(equal([1, 2, 3])) - expect(array1).toNot(equal([1, 2] as Array)) - -#if _runtime(_ObjC) - expect(NSArray(array: [1, 2, 3])).to(equal(NSArray(array: [1, 2, 3]))) -#endif - - failsWithErrorMessage("expected to equal <[1, 2]>, got <[1, 2, 3]>") { - expect([1, 2, 3]).to(equal([1, 2])) - } - } - - func testSetEquality() { - expect(Set([1, 2])).to(equal(Set([1, 2]))) - expect(Set()).to(equal(Set())) - expect(Set()) == Set() - expect(Set([1, 2])) != Set() - - failsWithErrorMessageForNil("expected to equal <[1, 2]>, got ") { - expect(nil as Set?).to(equal(Set([1, 2]))) - } - - failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3]>, missing <[1]>") { - expect(Set([2, 3])).to(equal(Set([1, 2, 3]))) - } - - failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[1, 2, 3, 4]>, extra <[4]>") { - expect(Set([1, 2, 3, 4])).to(equal(Set([1, 2, 3]))) - } - - failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>") { - expect(Set([2, 3, 4])).to(equal(Set([1, 2, 3]))) - } - - failsWithErrorMessage("expected to equal <[1, 2, 3]>, got <[2, 3, 4]>, missing <[1]>, extra <[4]>") { - expect(Set([2, 3, 4])) == Set([1, 2, 3]) - } - - failsWithErrorMessage("expected to not equal <[1, 2, 3]>, got <[1, 2, 3]>") { - expect(Set([1, 2, 3])) != Set([1, 2, 3]) - } - } - - func testDoesNotMatchNils() { - failsWithErrorMessageForNil("expected to equal , got ") { - expect(nil as String?).to(equal(nil as String?)) - } - failsWithErrorMessageForNil("expected to not equal , got ") { - expect("foo").toNot(equal(nil as String?)) - } - failsWithErrorMessageForNil("expected to not equal , got ") { - expect(nil as String?).toNot(equal("bar")) - } - - failsWithErrorMessageForNil("expected to equal , got ") { - expect(nil as [Int]?).to(equal(nil as [Int]?)) - } - failsWithErrorMessageForNil("expected to not equal <[1]>, got ") { - expect(nil as [Int]?).toNot(equal([1])) - } - failsWithErrorMessageForNil("expected to not equal , got <[1]>") { - expect([1]).toNot(equal(nil as [Int]?)) - } - - failsWithErrorMessageForNil("expected to equal , got ") { - expect(nil as [Int: Int]?).to(equal(nil as [Int: Int]?)) - } - failsWithErrorMessageForNil("expected to not equal <[1: 1]>, got ") { - expect(nil as [Int: Int]?).toNot(equal([1: 1])) - } - failsWithErrorMessageForNil("expected to not equal , got <[1: 1]>") { - expect([1: 1]).toNot(equal(nil as [Int: Int]?)) - } - } - - func testDictionaryEquality() { - expect(["foo": "bar"]).to(equal(["foo": "bar"])) - expect(["foo": "bar"]).toNot(equal(["foo": "baz"])) - - let actual = ["foo": "bar"] - let expected = ["foo": "bar"] - let unexpected = ["foo": "baz"] - expect(actual).to(equal(expected)) - expect(actual).toNot(equal(unexpected)) - -#if _runtime(_ObjC) - expect(NSDictionary(object: "bar", forKey: "foo")).to(equal(["foo": "bar"])) - expect(NSDictionary(object: "bar", forKey: "foo")).to(equal(expected)) -#endif - } - - func testDataEquality() { - let actual = "foobar".dataUsingEncoding(NSUTF8StringEncoding) - let expected = "foobar".dataUsingEncoding(NSUTF8StringEncoding) - let unexpected = "foobarfoo".dataUsingEncoding(NSUTF8StringEncoding) - - expect(actual).to(equal(expected)) - expect(actual).toNot(equal(unexpected)) - - #if os(Linux) - // FIXME: Swift on Linux triggers a segfault when calling NSData's hash() (last checked on 03-11) - let expectedErrorMessage = "expected to equal >, got >" - #else - let expectedErrorMessage = "expected to equal >," - + " got >" - #endif - - failsWithErrorMessage(expectedErrorMessage) { - expect(actual).to(equal(unexpected)) - } - } - - func testNSObjectEquality() { - expect(NSNumber(integer:1)).to(equal(NSNumber(integer:1))) - expect(NSNumber(integer:1)) == NSNumber(integer:1) - expect(NSNumber(integer:1)) != NSNumber(integer:2) - expect { NSNumber(integer:1) }.to(equal(1)) - } - - func testOperatorEquality() { - expect("foo") == "foo" - expect("foo") != "bar" - - failsWithErrorMessage("expected to equal , got ") { - expect("hello") == "world" - return - } - failsWithErrorMessage("expected to not equal , got ") { - expect("hello") != "hello" - return - } - } - - func testOperatorEqualityWithArrays() { - let array1: Array = [1, 2, 3] - let array2: Array = [1, 2, 3] - let array3: Array = [1, 2] - expect(array1) == array2 - expect(array1) != array3 - } - - func testOperatorEqualityWithDictionaries() { - let dict1 = ["foo": "bar"] - let dict2 = ["foo": "bar"] - let dict3 = ["foo": "baz"] - expect(dict1) == dict2 - expect(dict1) != dict3 - } - - func testOptionalEquality() { - expect(1 as CInt?).to(equal(1)) - expect(1 as CInt?).to(equal(1 as CInt?)) - - expect(1).toNot(equal(nil)) - } - - func testArrayOfOptionalsEquality() { - let array1: Array = [1, nil, 3] - let array2: Array = [nil, 2, 3] - let array3: Array = [1, nil, 3] - - expect(array1).toNot(equal(array2)) - expect(array1).to(equal(array3)) - expect(array2).toNot(equal(array3)) - - let allNils1: Array = [nil, nil, nil, nil] - let allNils2: Array = [nil, nil, nil, nil] - let notReallyAllNils: Array = [nil, nil, nil, "turtles"] - - expect(allNils1).to(equal(allNils2)) - expect(allNils1).toNot(equal(notReallyAllNils)) - - let noNils1: Array = [1, 2, 3, 4, 5] - let noNils2: Array = [1, 3, 5, 7, 9] - - expect(noNils1).toNot(equal(noNils2)) - - failsWithErrorMessage("expected to equal <[Optional(1), nil]>, got <[nil, Optional(2)]>") { - let arrayOfOptionalInts: Array = [nil, 2] - let anotherArrayOfOptionalInts: Array = [1, nil] - expect(arrayOfOptionalInts).to(equal(anotherArrayOfOptionalInts)) - return - } - } - - func testDictionariesWithDifferentSequences() { - // see: https://github.com/Quick/Nimble/issues/61 - // these dictionaries generate different orderings of sequences. - let result = ["how":1, "think":1, "didnt":2, "because":1, - "interesting":1, "always":1, "right":1, "such":1, - "to":3, "say":1, "cool":1, "you":1, - "weather":3, "be":1, "went":1, "was":2, - "sometimes":1, "and":3, "mind":1, "rain":1, - "whole":1, "everything":1, "weather.":1, "down":1, - "kind":1, "mood.":1, "it":2, "everyday":1, "might":1, - "more":1, "have":2, "person":1, "could":1, "tenth":2, - "night":1, "write":1, "Youd":1, "affects":1, "of":3, - "Who":1, "us":1, "an":1, "I":4, "my":1, "much":2, - "wrong.":1, "peacefully.":1, "amazing":3, "would":4, - "just":1, "grade.":1, "Its":2, "The":2, "had":1, "that":1, - "the":5, "best":1, "but":1, "essay":1, "for":1, "summer":2, - "your":1, "grade":1, "vary":1, "pretty":1, "at":1, "rain.":1, - "about":1, "allow":1, "thought":1, "in":1, "sleep":1, "a":1, - "hot":1, "really":1, "beach":1, "life.":1, "we":1, "although":1] - - let storyCount = ["The":2, "summer":2, "of":3, "tenth":2, "grade":1, - "was":2, "the":5, "best":1, "my":1, "life.":1, "I":4, - "went":1, "to":3, "beach":1, "everyday":1, "and":3, - "we":1, "had":1, "amazing":3, "weather.":1, "weather":3, - "didnt":2, "really":1, "vary":1, "much":2, "always":1, - "pretty":1, "hot":1, "although":1, "sometimes":1, "at":1, - "night":1, "it":2, "would":4, "rain.":1, "mind":1, "rain":1, - "because":1, "cool":1, "everything":1, "down":1, "allow":1, - "us":1, "sleep":1, "peacefully.":1, "Its":2, "how":1, - "affects":1, "your":1, "mood.":1, "Who":1, "have":2, - "thought":1, "that":1, "could":1, "write":1, "a":1, - "whole":1, "essay":1, "just":1, "about":1, "in":1, - "grade.":1, "kind":1, "right":1, "Youd":1, "think":1, - "for":1, "such":1, "an":1, "interesting":1, "person":1, - "might":1, "more":1, "say":1, "but":1, "you":1, "be":1, "wrong.":1] - - expect(result).to(equal(storyCount)) - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/HaveCountTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/HaveCountTest.swift deleted file mode 100644 index 8d97b86..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/HaveCountTest.swift +++ /dev/null @@ -1,56 +0,0 @@ -import XCTest -import Nimble - -class HaveCountTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testHaveCountForArray", testHaveCountForArray), - ("testHaveCountForDictionary", testHaveCountForDictionary), - ("testHaveCountForSet", testHaveCountForSet), - ] - } - - func testHaveCountForArray() { - expect([1, 2, 3]).to(haveCount(3)) - expect([1, 2, 3]).notTo(haveCount(1)) - - failsWithErrorMessage("expected to have Array with count 1, got 3\nActual Value: [1, 2, 3]") { - expect([1, 2, 3]).to(haveCount(1)) - } - - failsWithErrorMessage("expected to not have Array with count 3, got 3\nActual Value: [1, 2, 3]") { - expect([1, 2, 3]).notTo(haveCount(3)) - } - } - - func testHaveCountForDictionary() { - let dictionary = ["1":1, "2":2, "3":3] - expect(dictionary).to(haveCount(3)) - expect(dictionary).notTo(haveCount(1)) - - failsWithErrorMessage("expected to have Dictionary with count 1, got 3\nActual Value: \(stringify(dictionary))") { - expect(dictionary).to(haveCount(1)) - } - - failsWithErrorMessage("expected to not have Dictionary with count 3, got 3" + - "\nActual Value: \(stringify(dictionary))") { - expect(dictionary).notTo(haveCount(3)) - } - } - - func testHaveCountForSet() { - let set = Set([1, 2, 3]) - expect(set).to(haveCount(3)) - expect(set).notTo(haveCount(1)) - - failsWithErrorMessage("expected to have Set with count 1, got 3" + - "\nActual Value: \(stringify(set))") { - expect(set).to(haveCount(1)) - } - - failsWithErrorMessage("expected to not have Set with count 3, got 3" + - "\nActual Value: \(stringify(set))") { - expect(set).notTo(haveCount(3)) - } - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/MatchErrorTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/MatchErrorTest.swift deleted file mode 100644 index c20369e..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/MatchErrorTest.swift +++ /dev/null @@ -1,78 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class MatchErrorTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testMatchErrorPositive", testMatchErrorPositive), - ("testMatchErrorNegative", testMatchErrorNegative), - ("testMatchNSErrorPositive", testMatchNSErrorPositive), - ("testMatchNSErrorNegative", testMatchNSErrorNegative), - ("testMatchPositiveMessage", testMatchPositiveMessage), - ("testMatchNegativeMessage", testMatchNegativeMessage), - ("testDoesNotMatchNils", testDoesNotMatchNils), - ] - } - - func testMatchErrorPositive() { - expect(Error.Laugh).to(matchError(Error.Laugh)) - expect(Error.Laugh).to(matchError(Error.self)) - expect(EquatableError.Parameterized(x: 1)).to(matchError(EquatableError.Parameterized(x: 1))) - - expect(Error.Laugh as ErrorType).to(matchError(Error.Laugh)) - } - - func testMatchErrorNegative() { - expect(Error.Laugh).toNot(matchError(Error.Cry)) - expect(Error.Laugh as ErrorType).toNot(matchError(Error.Cry)) - } - - func testMatchNSErrorPositive() { - let error1 = NSError(domain: "err", code: 0, userInfo: nil) - let error2 = NSError(domain: "err", code: 0, userInfo: nil) - - expect(error1).to(matchError(error2)) - } - - func testMatchNSErrorNegative() { - let error1 = NSError(domain: "err", code: 0, userInfo: nil) - let error2 = NSError(domain: "err", code: 1, userInfo: nil) - - expect(error1).toNot(matchError(error2)) - } - - func testMatchPositiveMessage() { - failsWithErrorMessage("expected to match error , got ") { - expect(EquatableError.Parameterized(x: 1)).to(matchError(EquatableError.Parameterized(x: 2))) - } - failsWithErrorMessage("expected to match error , got ") { - expect(Error.Laugh).to(matchError(Error.Cry)) - } - failsWithErrorMessage("expected to match error , got ") { - expect(CustomDebugStringConvertibleError.A).to(matchError(CustomDebugStringConvertibleError.B)) - } - - failsWithErrorMessage("expected to match error , got ") { - let error1 = NSError(domain: "err", code: 0, userInfo: nil) - let error2 = NSError(domain: "err", code: 1, userInfo: nil) - expect(error1).to(matchError(error2)) - } - } - - func testMatchNegativeMessage() { - failsWithErrorMessage("expected to not match error , got ") { - expect(Error.Laugh).toNot(matchError(Error.Laugh)) - } - } - - func testDoesNotMatchNils() { - failsWithErrorMessageForNil("expected to match error , got no error") { - expect(nil as ErrorType?).to(matchError(Error.Laugh)) - } - - failsWithErrorMessageForNil("expected to not match error , got no error") { - expect(nil as ErrorType?).toNot(matchError(Error.Laugh)) - } - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/MatchTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/MatchTest.swift deleted file mode 100644 index 61428f8..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/MatchTest.swift +++ /dev/null @@ -1,49 +0,0 @@ -import XCTest -import Nimble - -#if _runtime(_ObjC) - -class MatchTest:XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testMatchPositive", testMatchPositive), - ("testMatchNegative", testMatchNegative), - ("testMatchPositiveMessage", testMatchPositiveMessage), - ("testMatchNegativeMessage", testMatchNegativeMessage), - ("testMatchNils", testMatchNils), - ] - } - - func testMatchPositive() { - expect("11:14").to(match("\\d{2}:\\d{2}")) - } - - func testMatchNegative() { - expect("hello").toNot(match("\\d{2}:\\d{2}")) - } - - func testMatchPositiveMessage() { - let message = "expected to match <\\d{2}:\\d{2}>, got " - failsWithErrorMessage(message) { - expect("hello").to(match("\\d{2}:\\d{2}")) - } - } - - func testMatchNegativeMessage() { - let message = "expected to not match <\\d{2}:\\d{2}>, got <11:14>" - failsWithErrorMessage(message) { - expect("11:14").toNot(match("\\d{2}:\\d{2}")) - } - } - - func testMatchNils() { - failsWithErrorMessageForNil("expected to match <\\d{2}:\\d{2}>, got ") { - expect(nil as String?).to(match("\\d{2}:\\d{2}")) - } - - failsWithErrorMessageForNil("expected to not match <\\d{2}:\\d{2}>, got ") { - expect(nil as String?).toNot(match("\\d{2}:\\d{2}")) - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/PostNotificationTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/PostNotificationTest.swift deleted file mode 100644 index 9f06c7d..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/PostNotificationTest.swift +++ /dev/null @@ -1,107 +0,0 @@ -import XCTest -import Nimble -import Foundation - -class PostNotificationTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testPassesWhenNoNotificationsArePosted", testPassesWhenNoNotificationsArePosted), - ("testPassesWhenExpectedNotificationIsPosted", testPassesWhenExpectedNotificationIsPosted), - ("testPassesWhenAllExpectedNotificationsArePosted", testPassesWhenAllExpectedNotificationsArePosted), - ("testFailsWhenNoNotificationsArePosted", testFailsWhenNoNotificationsArePosted), - ("testFailsWhenNotificationWithWrongNameIsPosted", testFailsWhenNotificationWithWrongNameIsPosted), - ("testFailsWhenNotificationWithWrongObjectIsPosted", testFailsWhenNotificationWithWrongObjectIsPosted), - ("testPassesWhenExpectedNotificationEventuallyIsPosted", testPassesWhenExpectedNotificationEventuallyIsPosted), - ] - } - - var notificationCenter: NSNotificationCenter! - - #if _runtime(_ObjC) - override func setUp() { - _setUp() - super.setUp() - } - #else - func setUp() { - _setUp() - } - #endif - - - func _setUp() { - notificationCenter = NSNotificationCenter() - } - - func testPassesWhenNoNotificationsArePosted() { - expect { - // no notifications here! - return nil - }.to(postNotifications(beEmpty(), fromNotificationCenter: notificationCenter)) - } - - func testPassesWhenExpectedNotificationIsPosted() { - let testNotification = NSNotification(name: "Foo", object: nil) - expect { - self.notificationCenter.postNotification(testNotification) - }.to(postNotifications(equal([testNotification]), fromNotificationCenter: notificationCenter)) - } - - func testPassesWhenAllExpectedNotificationsArePosted() { - let foo = NSNumber(int: 1) - let bar = NSNumber(int: 2) - let n1 = NSNotification(name: "Foo", object: foo) - let n2 = NSNotification(name: "Bar", object: bar) - expect { - self.notificationCenter.postNotification(n1) - self.notificationCenter.postNotification(n2) - return nil - }.to(postNotifications(equal([n1, n2]), fromNotificationCenter: notificationCenter)) - } - - func testFailsWhenNoNotificationsArePosted() { - let testNotification = NSNotification(name: "Foo", object: nil) - failsWithErrorMessage("expected to equal <[\(testNotification)]>, got no notifications") { - expect { - // no notifications here! - return nil - }.to(postNotifications(equal([testNotification]), fromNotificationCenter: self.notificationCenter)) - } - } - - func testFailsWhenNotificationWithWrongNameIsPosted() { - let n1 = NSNotification(name: "Foo", object: nil) - let n2 = NSNotification(name: n1.name + "a", object: nil) - failsWithErrorMessage("expected to equal <[\(n1)]>, got <[\(n2)]>") { - expect { - self.notificationCenter.postNotification(n2) - return nil - }.to(postNotifications(equal([n1]), fromNotificationCenter: self.notificationCenter)) - } - } - - func testFailsWhenNotificationWithWrongObjectIsPosted() { - let n1 = NSNotification(name: "Foo", object: nil) - let n2 = NSNotification(name: n1.name, object: NSObject()) - failsWithErrorMessage("expected to equal <[\(n1)]>, got <[\(n2)]>") { - expect { - self.notificationCenter.postNotification(n2) - return nil - }.to(postNotifications(equal([n1]), fromNotificationCenter: self.notificationCenter)) - } - } - - func testPassesWhenExpectedNotificationEventuallyIsPosted() { - #if _runtime(_ObjC) - let testNotification = NSNotification(name: "Foo", object: nil) - expect { - deferToMainQueue { - self.notificationCenter.postNotification(testNotification) - } - return nil - }.toEventually(postNotifications(equal([testNotification]), fromNotificationCenter: notificationCenter)) - #else - print("\(#function) is missing because toEventually is not implement on this platform") - #endif - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/RaisesExceptionTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/RaisesExceptionTest.swift deleted file mode 100644 index 5135855..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/RaisesExceptionTest.swift +++ /dev/null @@ -1,166 +0,0 @@ -import XCTest -import Nimble - -#if _runtime(_ObjC) && !SWIFT_PACKAGE - -class RaisesExceptionTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testPositiveMatches", testPositiveMatches), - ("testPositiveMatchesWithClosures", testPositiveMatchesWithClosures), - ("testNegativeMatches", testNegativeMatches), - ("testNegativeMatchesDoNotCallClosureWithoutException", testNegativeMatchesDoNotCallClosureWithoutException), - ("testNegativeMatchesWithClosure", testNegativeMatchesWithClosure), - ] - } - - var anException = NSException(name: "laugh", reason: "Lulz", userInfo: ["key": "value"]) - - func testPositiveMatches() { - expect { self.anException.raise() }.to(raiseException()) - expect { self.anException.raise() }.to(raiseException(named: "laugh")) - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz")) - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"])) - } - - func testPositiveMatchesWithClosures() { - expect { self.anException.raise() }.to(raiseException { (exception: NSException) in - expect(exception.name).to(equal("laugh")) - }) - expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in - expect(exception.name).to(beginWith("lau")) - }) - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in - expect(exception.name).to(beginWith("lau")) - }) - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in - expect(exception.name).to(beginWith("lau")) - }) - - expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in - expect(exception.name).toNot(beginWith("as")) - }) - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in - expect(exception.name).toNot(beginWith("df")) - }) - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in - expect(exception.name).toNot(beginWith("as")) - }) - } - - func testNegativeMatches() { - failsWithErrorMessage("expected to raise exception with name , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.to(raiseException(named: "foo")) - } - - failsWithErrorMessage("expected to raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "bar")) - } - - failsWithErrorMessage( - "expected to raise exception with name with reason with userInfo <{k = v;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["k": "v"])) - } - - failsWithErrorMessage("expected to raise any exception, got no exception") { - expect { self.anException }.to(raiseException()) - } - failsWithErrorMessage("expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.toNot(raiseException()) - } - failsWithErrorMessage("expected to raise exception with name with reason , got no exception") { - expect { self.anException }.to(raiseException(named: "laugh", reason: "Lulz")) - } - - failsWithErrorMessage("expected to raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.to(raiseException(named: "bar", reason: "Lulz")) - } - failsWithErrorMessage("expected to not raise exception with name , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.toNot(raiseException(named: "laugh")) - } - failsWithErrorMessage("expected to not raise exception with name with reason , got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.toNot(raiseException(named: "laugh", reason: "Lulz")) - } - - failsWithErrorMessage("expected to not raise exception with name with reason with userInfo <{key = value;}>, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.toNot(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"])) - } - } - - func testNegativeMatchesDoNotCallClosureWithoutException() { - failsWithErrorMessage("expected to raise exception that satisfies block, got no exception") { - expect { self.anException }.to(raiseException { (exception: NSException) in - expect(exception.name).to(equal("foo")) - }) - } - - failsWithErrorMessage("expected to raise exception with name that satisfies block, got no exception") { - expect { self.anException }.to(raiseException(named: "foo") { (exception: NSException) in - expect(exception.name).to(equal("foo")) - }) - } - - failsWithErrorMessage("expected to raise exception with name with reason that satisfies block, got no exception") { - expect { self.anException }.to(raiseException(named: "foo", reason: "ha") { (exception: NSException) in - expect(exception.name).to(equal("foo")) - }) - } - - failsWithErrorMessage("expected to raise exception with name with reason with userInfo <{}> that satisfies block, got no exception") { - expect { self.anException }.to(raiseException(named: "foo", reason: "Lulz", userInfo: [:]) { (exception: NSException) in - expect(exception.name).to(equal("foo")) - }) - } - - failsWithErrorMessage("expected to not raise any exception, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.toNot(raiseException()) - } - } - - func testNegativeMatchesWithClosure() { - failsWithErrorMessage("expected to raise exception that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }") { - expect { self.anException.raise() }.to(raiseException { (exception: NSException) in - expect(exception.name).to(equal("foo")) - }) - } - - let innerFailureMessage = "expected to begin with , got " - - failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { - expect { self.anException.raise() }.to(raiseException(named: "laugh") { (exception: NSException) in - expect(exception.name).to(beginWith("fo")) - }) - } - - failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { - expect { self.anException.raise() }.to(raiseException(named: "lol") { (exception: NSException) in - expect(exception.name).to(beginWith("fo")) - }) - } - - failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz") { (exception: NSException) in - expect(exception.name).to(beginWith("fo")) - }) - } - - failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { - expect { self.anException.raise() }.to(raiseException(named: "lol", reason: "wrong") { (exception: NSException) in - expect(exception.name).to(beginWith("fo")) - }) - } - - failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason with userInfo <{key = value;}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { - expect { self.anException.raise() }.to(raiseException(named: "laugh", reason: "Lulz", userInfo: ["key": "value"]) { (exception: NSException) in - expect(exception.name).to(beginWith("fo")) - }) - } - - failsWithErrorMessage([innerFailureMessage, "expected to raise exception with name with reason with userInfo <{}> that satisfies block, got NSException { name=laugh, reason='Lulz', userInfo=[key: value] }"]) { - expect { self.anException.raise() }.to(raiseException(named: "lol", reason: "Lulz", userInfo: [:]) { (exception: NSException) in - expect(exception.name).to(beginWith("fo")) - }) - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/SatisfyAnyOfTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/SatisfyAnyOfTest.swift deleted file mode 100644 index 2fcabb1..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/SatisfyAnyOfTest.swift +++ /dev/null @@ -1,51 +0,0 @@ -import XCTest -import Nimble - -class SatisfyAnyOfTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testSatisfyAnyOf", testSatisfyAnyOf), - ("testOperatorOr", testOperatorOr), - ] - } - - func testSatisfyAnyOf() { - expect(2).to(satisfyAnyOf(equal(2), equal(3))) -#if _runtime(_ObjC) - expect(2).toNot(satisfyAnyOf(equal(3), equal("turtles"))) -#endif - expect([1,2,3]).to(satisfyAnyOf(equal([1,2,3]), allPass({$0 < 4}), haveCount(3))) - expect("turtle").toNot(satisfyAnyOf(contain("a"), endWith("magic"))) - expect(82.0).toNot(satisfyAnyOf(beLessThan(10.5), beGreaterThan(100.75), beCloseTo(50.1))) - expect(false).to(satisfyAnyOf(beTrue(), beFalse())) - expect(true).to(satisfyAnyOf(beTruthy(), beFalsy())) - - failsWithErrorMessage( - "expected to match one of: {equal <3>}, or {equal <4>}, or {equal <5>}, got 2") { - expect(2).to(satisfyAnyOf(equal(3), equal(4), equal(5))) - } - failsWithErrorMessage( - "expected to match one of: {all be less than 4, but failed first at element <5> in <[5, 6, 7]>}, or {equal <[1, 2, 3, 4]>}, got [5, 6, 7]") { - expect([5,6,7]).to(satisfyAnyOf(allPass("be less than 4", {$0 < 4}), equal([1,2,3,4]))) - } - failsWithErrorMessage( - "expected to match one of: {be true}, got false") { - expect(false).to(satisfyAnyOf(beTrue())) - } - failsWithErrorMessage( - "expected to not match one of: {be less than <10.5>}, or {be greater than <100.75>}, or {be close to <50.1> (within 0.0001)}, got 50.10001") { - expect(50.10001).toNot(satisfyAnyOf(beLessThan(10.5), beGreaterThan(100.75), beCloseTo(50.1))) - } - } - - func testOperatorOr() { - expect(2).to(equal(2) || equal(3)) -#if _runtime(_ObjC) - expect(2).toNot(equal(3) || equal("turtles")) -#endif - expect("turtle").toNot(contain("a") || endWith("magic")) - expect(82.0).toNot(beLessThan(10.5) || beGreaterThan(100.75)) - expect(false).to(beTrue() || beFalse()) - expect(true).to(beTruthy() || beFalsy()) - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/ThrowErrorTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/ThrowErrorTest.swift deleted file mode 100644 index 6332381..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/Matchers/ThrowErrorTest.swift +++ /dev/null @@ -1,155 +0,0 @@ -import XCTest -import Nimble - -enum Error : ErrorType { - case Laugh - case Cry -} - -enum EquatableError : ErrorType { - case Parameterized(x: Int) -} - -extension EquatableError : Equatable { -} - -func ==(lhs: EquatableError, rhs: EquatableError) -> Bool { - switch (lhs, rhs) { - case (.Parameterized(let l), .Parameterized(let r)): - return l == r - } -} - -enum CustomDebugStringConvertibleError : ErrorType { - case A - case B -} - -extension CustomDebugStringConvertibleError : CustomDebugStringConvertible { - var debugDescription : String { - return "code=\(_code)" - } -} - -class ThrowErrorTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testPositiveMatches", testPositiveMatches), - ("testPositiveMatchesWithClosures", testPositiveMatchesWithClosures), - ("testNegativeMatches", testNegativeMatches), - ("testPositiveNegatedMatches", testPositiveNegatedMatches), - ("testNegativeNegatedMatches", testNegativeNegatedMatches), - ("testNegativeMatchesDoNotCallClosureWithoutError", testNegativeMatchesDoNotCallClosureWithoutError), - ("testNegativeMatchesWithClosure", testNegativeMatchesWithClosure), - ] - } - - func testPositiveMatches() { - expect { throw Error.Laugh }.to(throwError()) - expect { throw Error.Laugh }.to(throwError(Error.Laugh)) - expect { throw Error.Laugh }.to(throwError(errorType: Error.self)) - expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 1))) - } - - func testPositiveMatchesWithClosures() { - // Generic typed closure - expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { error in - guard case EquatableError.Parameterized(let x) = error else { fail(); return } - expect(x) >= 1 - }) - // Explicit typed closure - expect { throw EquatableError.Parameterized(x: 42) }.to(throwError { (error: EquatableError) in - guard case .Parameterized(let x) = error else { fail(); return } - expect(x) >= 1 - }) - // Typed closure over errorType argument - expect { throw EquatableError.Parameterized(x: 42) }.to(throwError(errorType: EquatableError.self) { error in - guard case .Parameterized(let x) = error else { fail(); return } - expect(x) >= 1 - }) - // Typed closure over error argument - expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in - expect(error._domain).to(beginWith("Nim")) - }) - // Typed closure over error argument - expect { throw Error.Laugh }.to(throwError(Error.Laugh) { (error: Error) in - expect(error._domain).toNot(beginWith("as")) - }) - } - - func testNegativeMatches() { - // Same case, different arguments - failsWithErrorMessage("expected to throw error , got ") { - expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2))) - } - // Same case, different arguments - failsWithErrorMessage("expected to throw error , got ") { - expect { throw EquatableError.Parameterized(x: 1) }.to(throwError(EquatableError.Parameterized(x: 2))) - } - // Different case - failsWithErrorMessage("expected to throw error , got ") { - expect { throw Error.Laugh }.to(throwError(Error.Cry)) - } - // Different case with closure - failsWithErrorMessage("expected to throw error that satisfies block, got ") { - expect { throw Error.Laugh }.to(throwError(Error.Cry) { _ in return }) - } - // Different case, implementing CustomDebugStringConvertible - failsWithErrorMessage("expected to throw error , got ") { - expect { throw CustomDebugStringConvertibleError.A }.to(throwError(CustomDebugStringConvertibleError.B)) - } - } - - func testPositiveNegatedMatches() { - // No error at all - expect { return }.toNot(throwError()) - // Different case - expect { throw Error.Laugh }.toNot(throwError(Error.Cry)) - } - - func testNegativeNegatedMatches() { - // No error at all - failsWithErrorMessage("expected to not throw any error, got ") { - expect { throw Error.Laugh }.toNot(throwError()) - } - // Different error - failsWithErrorMessage("expected to not throw error , got ") { - expect { throw Error.Laugh }.toNot(throwError(Error.Laugh)) - } - } - - func testNegativeMatchesDoNotCallClosureWithoutError() { - failsWithErrorMessage("expected to throw error that satisfies block, got no error") { - expect { return }.to(throwError { error in - fail() - }) - } - - failsWithErrorMessage("expected to throw error that satisfies block, got no error") { - expect { return }.to(throwError(Error.Laugh) { error in - fail() - }) - } - } - - func testNegativeMatchesWithClosure() { -#if SWIFT_PACKAGE - let moduleName = "Nimbletest" -#else - let moduleName = "NimbleTests" -#endif - let innerFailureMessage = "expected to equal , got <\(moduleName).Error>" - let closure = { (error: Error) in - print("** In closure! With domain \(error._domain)") - expect(error._domain).to(equal("foo")) - } - - failsWithErrorMessage([innerFailureMessage, "expected to throw error from type that satisfies block, got "]) { - expect { throw Error.Laugh }.to(throwError(closure: closure)) - } - - failsWithErrorMessage([innerFailureMessage, "expected to throw error that satisfies block, got "]) { - expect { throw Error.Laugh }.to(throwError(Error.Laugh, closure: closure)) - } - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/SynchronousTests.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/SynchronousTests.swift deleted file mode 100644 index 4d6d531..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/SynchronousTests.swift +++ /dev/null @@ -1,129 +0,0 @@ -import Foundation -import XCTest -import Nimble - -class SynchronousTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testFailAlwaysFails", testFailAlwaysFails), - ("testUnexpectedErrorsThrownFails", testUnexpectedErrorsThrownFails), - ("testToMatchesIfMatcherReturnsTrue", testToMatchesIfMatcherReturnsTrue), - ("testToProvidesActualValueExpression", testToProvidesActualValueExpression), - ("testToProvidesAMemoizedActualValueExpression", testToProvidesActualValueExpression), - ("testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl", testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl), - ("testToMatchAgainstLazyProperties", testToMatchAgainstLazyProperties), - ("testToNotMatchesIfMatcherReturnsTrue", testToNotMatchesIfMatcherReturnsTrue), - ("testToNotProvidesActualValueExpression", testToNotProvidesActualValueExpression), - ("testToNotProvidesAMemoizedActualValueExpression", testToNotProvidesAMemoizedActualValueExpression), - ("testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl", testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl), - ("testToNotNegativeMatches", testToNotNegativeMatches), - ("testNotToMatchesLikeToNot", testNotToMatchesLikeToNot), - ] - } - - let errorToThrow = NSError(domain: NSCocoaErrorDomain, code: 42, userInfo: nil) - private func doThrowError() throws -> Int { - throw errorToThrow - } - - func testFailAlwaysFails() { - failsWithErrorMessage("My error message") { - fail("My error message") - } - failsWithErrorMessage("fail() always fails") { - fail() - } - } - - func testUnexpectedErrorsThrownFails() { -#if _runtime(_ObjC) // This test triggers a weird segfault on Linux currently - failsWithErrorMessage("expected to equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { - expect { try self.doThrowError() }.to(equal(1)) - } - failsWithErrorMessage("expected to not equal <1>, got an unexpected error thrown: <\(errorToThrow)>") { - expect { try self.doThrowError() }.toNot(equal(1)) - } -#endif - } - - func testToMatchesIfMatcherReturnsTrue() { - expect(1).to(MatcherFunc { expr, failure in true }) - expect{1}.to(MatcherFunc { expr, failure in true }) - } - - func testToProvidesActualValueExpression() { - var value: Int? - expect(1).to(MatcherFunc { expr, failure in value = try expr.evaluate(); return true }) - expect(value).to(equal(1)) - } - - func testToProvidesAMemoizedActualValueExpression() { - var callCount = 0 - expect{ callCount += 1 }.to(MatcherFunc { expr, failure in - try expr.evaluate() - try expr.evaluate() - return true - }) - expect(callCount).to(equal(1)) - } - - func testToProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() { - var callCount = 0 - expect{ callCount += 1 }.to(MatcherFunc { expr, failure in - expect(callCount).to(equal(0)) - try expr.evaluate() - return true - }) - expect(callCount).to(equal(1)) - } - - func testToMatchAgainstLazyProperties() { - expect(ObjectWithLazyProperty().value).to(equal("hello")) - expect(ObjectWithLazyProperty().value).toNot(equal("world")) - expect(ObjectWithLazyProperty().anotherValue).to(equal("world")) - expect(ObjectWithLazyProperty().anotherValue).toNot(equal("hello")) - } - - // repeated tests from to() for toNot() - func testToNotMatchesIfMatcherReturnsTrue() { - expect(1).toNot(MatcherFunc { expr, failure in false }) - expect{1}.toNot(MatcherFunc { expr, failure in false }) - } - - func testToNotProvidesActualValueExpression() { - var value: Int? - expect(1).toNot(MatcherFunc { expr, failure in value = try expr.evaluate(); return false }) - expect(value).to(equal(1)) - } - - func testToNotProvidesAMemoizedActualValueExpression() { - var callCount = 0 - expect{ callCount += 1 }.toNot(MatcherFunc { expr, failure in - try expr.evaluate() - try expr.evaluate() - return false - }) - expect(callCount).to(equal(1)) - } - - func testToNotProvidesAMemoizedActualValueExpressionIsEvaluatedAtMatcherControl() { - var callCount = 0 - expect{ callCount += 1 }.toNot(MatcherFunc { expr, failure in - expect(callCount).to(equal(0)) - try expr.evaluate() - return false - }) - expect(callCount).to(equal(1)) - } - - func testToNotNegativeMatches() { - failsWithErrorMessage("expected to not match, got <1>") { - expect(1).toNot(MatcherFunc { expr, failure in true }) - } - } - - - func testNotToMatchesLikeToNot() { - expect(1).notTo(MatcherFunc { expr, failure in false }) - } -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/UserDescriptionTest.swift b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/UserDescriptionTest.swift deleted file mode 100644 index 077ebed..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/UserDescriptionTest.swift +++ /dev/null @@ -1,70 +0,0 @@ -import XCTest -import Nimble - -class UserDescriptionTest: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testToMatcher_CustomFailureMessage", testToMatcher_CustomFailureMessage), - ("testNotToMatcher_CustomFailureMessage", testNotToMatcher_CustomFailureMessage), - ("testToNotMatcher_CustomFailureMessage", testToNotMatcher_CustomFailureMessage), - ("testToEventuallyMatch_CustomFailureMessage", testToEventuallyMatch_CustomFailureMessage), - ("testToEventuallyNotMatch_CustomFailureMessage", testToEventuallyNotMatch_CustomFailureMessage), - ("testToNotEventuallyMatch_CustomFailureMessage", testToNotEventuallyMatch_CustomFailureMessage), - ] - } - - func testToMatcher_CustomFailureMessage() { - failsWithErrorMessage( - "These aren't equal!\n" + - "expected to match, got <1>") { - expect(1).to(MatcherFunc { expr, failure in false }, description: "These aren't equal!") - } - } - - func testNotToMatcher_CustomFailureMessage() { - failsWithErrorMessage( - "These aren't equal!\n" + - "expected to not match, got <1>") { - expect(1).notTo(MatcherFunc { expr, failure in true }, description: "These aren't equal!") - } - } - - func testToNotMatcher_CustomFailureMessage() { - failsWithErrorMessage( - "These aren't equal!\n" + - "expected to not match, got <1>") { - expect(1).toNot(MatcherFunc { expr, failure in true }, description: "These aren't equal!") - } - } - - func testToEventuallyMatch_CustomFailureMessage() { -#if _runtime(_ObjC) - failsWithErrorMessage( - "These aren't eventually equal!\n" + - "expected to eventually equal <1>, got <0>") { - expect { 0 }.toEventually(equal(1), description: "These aren't eventually equal!") - } -#endif - } - - func testToEventuallyNotMatch_CustomFailureMessage() { -#if _runtime(_ObjC) - failsWithErrorMessage( - "These are eventually equal!\n" + - "expected to eventually not equal <1>, got <1>") { - expect { 1 }.toEventuallyNot(equal(1), description: "These are eventually equal!") - } -#endif - } - - func testToNotEventuallyMatch_CustomFailureMessage() { -#if _runtime(_ObjC) - failsWithErrorMessage( - "These are eventually equal!\n" + - "expected to eventually not equal <1>, got <1>") { - expect { 1 }.toEventuallyNot(equal(1), description: "These are eventually equal!") - } -#endif - } - -} diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/NimbleSpecHelper.h b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/NimbleSpecHelper.h deleted file mode 100644 index 282993d..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/NimbleSpecHelper.h +++ /dev/null @@ -1,15 +0,0 @@ -@import Nimble; -#import "NimbleTests-Swift.h" - -// Use this when you want to verify the failure message for when an expectation fails -#define expectFailureMessage(MSG, BLOCK) \ -[NimbleHelper expectFailureMessage:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__]; - -#define expectFailureMessages(MSGS, BLOCK) \ -[NimbleHelper expectFailureMessages:(MSGS) block:(BLOCK) file:@(__FILE__) line:__LINE__]; - - -// Use this when you want to verify the failure message with the nil message postfixed -// to it: " (use beNil() to match nils)" -#define expectNilFailureMessage(MSG, BLOCK) \ -[NimbleHelper expectFailureMessageForNil:(MSG) block:(BLOCK) file:@(__FILE__) line:__LINE__]; diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCAllPassTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCAllPassTest.m deleted file mode 100644 index 1146920..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCAllPassTest.m +++ /dev/null @@ -1,38 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCAllPassTest : XCTestCase - -@end - -@implementation ObjCAllPassTest - -- (void)testPositiveMatches { - expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@5))); - expect(@[@1, @2, @3,@4]).toNot(allPass(beGreaterThan(@5))); - - expect([NSSet setWithArray:@[@1, @2, @3,@4]]).to(allPass(beLessThan(@5))); - expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beGreaterThan(@5))); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to all be less than <3>, but failed first at element" - " <3> in <[1, 2, 3, 4]>", ^{ - expect(@[@1, @2, @3,@4]).to(allPass(beLessThan(@3))); - }); - expectFailureMessage(@"expected to not all be less than <5>", ^{ - expect(@[@1, @2, @3,@4]).toNot(allPass(beLessThan(@5))); - }); - expectFailureMessage(@"expected to not all be less than <5>", ^{ - expect([NSSet setWithArray:@[@1, @2, @3,@4]]).toNot(allPass(beLessThan(@5))); - }); - expectFailureMessage(@"allPass only works with NSFastEnumeration" - " (NSArray, NSSet, ...) of NSObjects, got <3>", ^{ - expect(@3).to(allPass(beLessThan(@5))); - }); - expectFailureMessage(@"allPass only works with NSFastEnumeration" - " (NSArray, NSSet, ...) of NSObjects, got <3>", ^{ - expect(@3).toNot(allPass(beLessThan(@5))); - }); -} -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCAsyncTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCAsyncTest.m deleted file mode 100644 index f052e74..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCAsyncTest.m +++ /dev/null @@ -1,55 +0,0 @@ -#import -#import -#import "NimbleSpecHelper.h" - -@interface ObjCAsyncTest : XCTestCase - -@end - -@implementation ObjCAsyncTest - -- (void)testAsync { - __block id obj = @1; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - obj = nil; - }); - expect(obj).toEventually(beNil()); -} - - -- (void)testAsyncWithCustomTimeout { - __block id obj = nil; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - obj = @1; - }); - expect(obj).withTimeout(5).toEventuallyNot(beNil()); -} - -- (void)testAsyncCallback { - waitUntil(^(void (^done)(void)){ - done(); - }); - - expectFailureMessage(@"Waited more than 1.0 second", ^{ - waitUntil(^(void (^done)(void)){ /* ... */ }); - }); - - expectFailureMessage(@"Waited more than 0.01 seconds", ^{ - waitUntilTimeout(0.01, ^(void (^done)(void)){ - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - [NSThread sleepForTimeInterval:0.1]; - done(); - }); - }); - }); - - expectFailureMessage(@"expected to equal , got ", ^{ - waitUntil(^(void (^done)(void)){ - [NSThread sleepForTimeInterval:0.1]; - expect(@"hello").to(equal(@"goodbye")); - done(); - }); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeAnInstanceOfTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeAnInstanceOfTest.m deleted file mode 100644 index f5fca2d..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeAnInstanceOfTest.m +++ /dev/null @@ -1,34 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeAnInstanceOfTest : XCTestCase -@end - -@implementation ObjCBeAnInstanceOfTest - -- (void)testPositiveMatches { - NSNull *obj = [NSNull null]; - expect(obj).to(beAnInstanceOf([NSNull class])); - expect(@1).toNot(beAnInstanceOf([NSNull class])); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be an instance of NSNull, got <__NSCFNumber instance>", ^{ - expect(@1).to(beAnInstanceOf([NSNull class])); - }); - expectFailureMessage(@"expected to not be an instance of NSNull, got ", ^{ - expect([NSNull null]).toNot(beAnInstanceOf([NSNull class])); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to be an instance of NSNull, got ", ^{ - expect(nil).to(beAnInstanceOf([NSNull class])); - }); - - expectNilFailureMessage(@"expected to not be an instance of NSNull, got ", ^{ - expect(nil).toNot(beAnInstanceOf([NSNull class])); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeCloseToTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeCloseToTest.m deleted file mode 100644 index c3f5639..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeCloseToTest.m +++ /dev/null @@ -1,36 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeCloseToTest : XCTestCase - -@end - -@implementation ObjCBeCloseToTest - -- (void)testPositiveMatches { - expect(@1.2).to(beCloseTo(@1.2001)); - expect(@1.2).to(beCloseTo(@2).within(10)); - expect(@2).toNot(beCloseTo(@1)); - expect(@1.00001).toNot(beCloseTo(@1).within(0.00000001)); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be close to <0> (within 0.001), got <1>", ^{ - expect(@1).to(beCloseTo(@0)); - }); - expectFailureMessage(@"expected to not be close to <0> (within 0.001), got <0.0001>", ^{ - expect(@(0.0001)).toNot(beCloseTo(@0)); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to be close to <0> (within 0.001), got ", ^{ - expect(nil).to(beCloseTo(@0)); - }); - expectNilFailureMessage(@"expected to not be close to <0> (within 0.001), got ", ^{ - expect(nil).toNot(beCloseTo(@0)); - }); -} - - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeEmptyTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeEmptyTest.m deleted file mode 100644 index 723d642..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeEmptyTest.m +++ /dev/null @@ -1,89 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeEmptyTest : XCTestCase -@end - -@implementation ObjCBeEmptyTest - -- (void)testPositiveMatches { - expect(@[]).to(beEmpty()); - expect(@"").to(beEmpty()); - expect(@{}).to(beEmpty()); - expect([NSSet set]).to(beEmpty()); - expect([NSIndexSet indexSet]).to(beEmpty()); - expect([NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory]).to(beEmpty()); - - expect(@[@1, @2]).toNot(beEmpty()); - expect(@"a").toNot(beEmpty()); - expect(@{@"key": @"value"}).toNot(beEmpty()); - expect([NSSet setWithObject:@1]).toNot(beEmpty()); - expect([NSIndexSet indexSetWithIndex:1]).toNot(beEmpty()); - - NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; - [table addObject:@1]; - expect(table).toNot(beEmpty()); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be empty, got ", ^{ - expect(@"foo").to(beEmpty()); - }); - expectFailureMessage(@"expected to be empty, got <(1)>", ^{ - expect(@[@1]).to(beEmpty()); - }); - expectFailureMessage(@"expected to be empty, got <{key = value;}>", ^{ - expect(@{@"key": @"value"}).to(beEmpty()); - }); - expectFailureMessage(@"expected to be empty, got <{(1)}>", ^{ - expect([NSSet setWithObject:@1]).to(beEmpty()); - }); - expectFailureMessage(@"expected to be empty, got <(1)>", ^{ - expect([NSIndexSet indexSetWithIndex:1]).to(beEmpty()); - }); - NSHashTable *table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; - [table addObject:@1]; - NSString *tableString = [[table description] stringByReplacingOccurrencesOfString:@"\n" withString:@""]; - expectFailureMessage(([NSString stringWithFormat:@"expected to be empty, got <%@>", tableString]), ^{ - expect(table).to(beEmpty()); - }); - - expectFailureMessage(@"expected to not be empty, got <>", ^{ - expect(@"").toNot(beEmpty()); - }); - expectFailureMessage(@"expected to not be empty, got <()>", ^{ - expect(@[]).toNot(beEmpty()); - }); - expectFailureMessage(@"expected to not be empty, got <{}>", ^{ - expect(@{}).toNot(beEmpty()); - }); - expectFailureMessage(@"expected to not be empty, got <{(1)}>", ^{ - expect([NSSet setWithObject:@1]).toNot(beEmpty()); - }); - expectFailureMessage(@"expected to not be empty, got <(1)>", ^{ - expect([NSIndexSet indexSetWithIndex:1]).toNot(beEmpty()); - }); - expectFailureMessage(@"expected to not be empty, got ", ^{ - expect([NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]).toNot(beEmpty()); - }); -} - -- (void)testItDoesNotMatchNil { - expectNilFailureMessage(@"expected to be empty, got ", ^{ - expect(nil).to(beEmpty()); - }); - expectNilFailureMessage(@"expected to not be empty, got ", ^{ - expect(nil).toNot(beEmpty()); - }); -} - -- (void)testItReportsTypesItMatchesAgainst { - expectFailureMessage(@"expected to be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type", ^{ - expect(@1).to(beEmpty()); - }); - expectFailureMessage(@"expected to not be empty (only works for NSArrays, NSSets, NSIndexSets, NSDictionaries, NSHashTables, and NSStrings), got __NSCFNumber type", ^{ - expect(@1).toNot(beEmpty()); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeFalseTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeFalseTest.m deleted file mode 100644 index 5b99842..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeFalseTest.m +++ /dev/null @@ -1,24 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeFalseTest : XCTestCase - -@end - -@implementation ObjCBeFalseTest - -- (void)testPositiveMatches { - expect(@NO).to(beFalse()); - expect(@YES).toNot(beFalse()); -} - -- (void)testNegativeMatches { - expectNilFailureMessage(@"expected to be false, got ", ^{ - expect(nil).to(beFalse()); - }); - expectNilFailureMessage(@"expected to not be false, got ", ^{ - expect(nil).toNot(beFalse()); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeFalsyTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeFalsyTest.m deleted file mode 100644 index 4b6281e..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeFalsyTest.m +++ /dev/null @@ -1,28 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeFalsyTest : XCTestCase - -@end - -@implementation ObjCBeFalsyTest - -- (void)testPositiveMatches { - expect(@NO).to(beFalsy()); - expect(@YES).toNot(beFalsy()); - expect(nil).to(beFalsy()); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to not be falsy, got ", ^{ - expect(nil).toNot(beFalsy()); - }); - expectFailureMessage(@"expected to be falsy, got <1>", ^{ - expect(@1).to(beFalsy()); - }); - expectFailureMessage(@"expected to be truthy, got <0>", ^{ - expect(@NO).to(beTruthy()); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanOrEqualToTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanOrEqualToTest.m deleted file mode 100644 index cec26c7..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanOrEqualToTest.m +++ /dev/null @@ -1,33 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeGreaterThanOrEqualToTest : XCTestCase - -@end - -@implementation ObjCBeGreaterThanOrEqualToTest - -- (void)testPositiveMatches { - expect(@2).to(beGreaterThanOrEqualTo(@2)); - expect(@2).toNot(beGreaterThanOrEqualTo(@3)); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be greater than or equal to <0>, got <-1>", ^{ - expect(@(-1)).to(beGreaterThanOrEqualTo(@0)); - }); - expectFailureMessage(@"expected to not be greater than or equal to <1>, got <2>", ^{ - expect(@2).toNot(beGreaterThanOrEqualTo(@(1))); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to be greater than or equal to <-1>, got ", ^{ - expect(nil).to(beGreaterThanOrEqualTo(@(-1))); - }); - expectNilFailureMessage(@"expected to not be greater than or equal to <1>, got ", ^{ - expect(nil).toNot(beGreaterThanOrEqualTo(@(1))); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanTest.m deleted file mode 100644 index 5ad3087..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeGreaterThanTest.m +++ /dev/null @@ -1,33 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeGreaterThanTest : XCTestCase - -@end - -@implementation ObjCBeGreaterThanTest - -- (void)testPositiveMatches { - expect(@2).to(beGreaterThan(@1)); - expect(@2).toNot(beGreaterThan(@2)); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be greater than <0>, got <-1>", ^{ - expect(@(-1)).to(beGreaterThan(@(0))); - }); - expectFailureMessage(@"expected to not be greater than <1>, got <0>", ^{ - expect(@0).toNot(beGreaterThan(@(1))); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to be greater than <-1>, got ", ^{ - expect(nil).to(beGreaterThan(@(-1))); - }); - expectNilFailureMessage(@"expected to not be greater than <1>, got ", ^{ - expect(nil).toNot(beGreaterThan(@(1))); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeIdenticalToTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeIdenticalToTest.m deleted file mode 100644 index ab60a81..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeIdenticalToTest.m +++ /dev/null @@ -1,62 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeIdenticalToTest : XCTestCase - -@end - -@implementation ObjCBeIdenticalToTest - -- (void)testPositiveMatches { - NSNull *obj = [NSNull null]; - expect(obj).to(beIdenticalTo([NSNull null])); - expect(@2).toNot(beIdenticalTo(@3)); -} - -- (void)testNegativeMatches { - NSNull *obj = [NSNull null]; - expectFailureMessage(([NSString stringWithFormat:@"expected to be identical to <%p>, got <%p>", obj, @2]), ^{ - expect(@2).to(beIdenticalTo(obj)); - }); - expectFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got <%p>", obj, obj]), ^{ - expect(obj).toNot(beIdenticalTo(obj)); - }); -} - -- (void)testNilMatches { - NSNull *obj = [NSNull null]; - expectNilFailureMessage(@"expected to be identical to nil, got nil", ^{ - expect(nil).to(beIdenticalTo(nil)); - }); - expectNilFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got nil", obj]), ^{ - expect(nil).toNot(beIdenticalTo(obj)); - }); -} - -- (void)testAliasPositiveMatches { - NSNull *obj = [NSNull null]; - expect(obj).to(be([NSNull null])); - expect(@2).toNot(be(@3)); -} - -- (void)testAliasNegativeMatches { - NSNull *obj = [NSNull null]; - expectFailureMessage(([NSString stringWithFormat:@"expected to be identical to <%p>, got <%p>", obj, @2]), ^{ - expect(@2).to(be(obj)); - }); - expectFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got <%p>", obj, obj]), ^{ - expect(obj).toNot(be(obj)); - }); -} - -- (void)testAliasNilMatches { - NSNull *obj = [NSNull null]; - expectNilFailureMessage(@"expected to be identical to nil, got nil", ^{ - expect(nil).to(be(nil)); - }); - expectNilFailureMessage(([NSString stringWithFormat:@"expected to not be identical to <%p>, got nil", obj]), ^{ - expect(nil).toNot(be(obj)); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeKindOfTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeKindOfTest.m deleted file mode 100644 index 7eee261..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeKindOfTest.m +++ /dev/null @@ -1,34 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeKindOfTest : XCTestCase - -@end - -@implementation ObjCBeKindOfTest - -- (void)testPositiveMatches { - NSMutableArray *array = [NSMutableArray array]; - expect(array).to(beAKindOf([NSArray class])); - expect(@1).toNot(beAKindOf([NSNull class])); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be a kind of NSNull, got <__NSCFNumber instance>", ^{ - expect(@1).to(beAKindOf([NSNull class])); - }); - expectFailureMessage(@"expected to not be a kind of NSNull, got ", ^{ - expect([NSNull null]).toNot(beAKindOf([NSNull class])); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to be a kind of NSNull, got ", ^{ - expect(nil).to(beAKindOf([NSNull class])); - }); - expectNilFailureMessage(@"expected to not be a kind of NSNull, got ", ^{ - expect(nil).toNot(beAKindOf([NSNull class])); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeLessThanOrEqualToTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeLessThanOrEqualToTest.m deleted file mode 100644 index dbd2062..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeLessThanOrEqualToTest.m +++ /dev/null @@ -1,33 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeLessThanOrEqualToTest : XCTestCase - -@end - -@implementation ObjCBeLessThanOrEqualToTest - -- (void)testPositiveMatches { - expect(@2).to(beLessThanOrEqualTo(@2)); - expect(@2).toNot(beLessThanOrEqualTo(@1)); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be less than or equal to <1>, got <2>", ^{ - expect(@2).to(beLessThanOrEqualTo(@1)); - }); - expectFailureMessage(@"expected to not be less than or equal to <1>, got <1>", ^{ - expect(@1).toNot(beLessThanOrEqualTo(@1)); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to be less than or equal to <1>, got ", ^{ - expect(nil).to(beLessThanOrEqualTo(@1)); - }); - expectNilFailureMessage(@"expected to not be less than or equal to <-1>, got ", ^{ - expect(nil).toNot(beLessThanOrEqualTo(@(-1))); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeLessThanTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeLessThanTest.m deleted file mode 100644 index 4d9da72..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeLessThanTest.m +++ /dev/null @@ -1,33 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeLessThanTest : XCTestCase - -@end - -@implementation ObjCBeLessThanTest - -- (void)testPositiveMatches { - expect(@2).to(beLessThan(@3)); - expect(@2).toNot(beLessThan(@2)); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be less than <0>, got <-1>", ^{ - expect(@(-1)).to(beLessThan(@0)); - }); - expectFailureMessage(@"expected to not be less than <1>, got <0>", ^{ - expect(@0).toNot(beLessThan(@1)); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to be less than <-1>, got ", ^{ - expect(nil).to(beLessThan(@(-1))); - }); - expectNilFailureMessage(@"expected to not be less than <1>, got ", ^{ - expect(nil).toNot(beLessThan(@1)); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeNilTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeNilTest.m deleted file mode 100644 index a43ee50..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeNilTest.m +++ /dev/null @@ -1,24 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeNilTest : XCTestCase - -@end - -@implementation ObjCBeNilTest - -- (void)testPositiveMatches { - expect(nil).to(beNil()); - expect(@NO).toNot(beNil()); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be nil, got <1>", ^{ - expect(@1).to(beNil()); - }); - expectFailureMessage(@"expected to not be nil, got ", ^{ - expect(nil).toNot(beNil()); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeTrueTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeTrueTest.m deleted file mode 100644 index 3f10ce3..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeTrueTest.m +++ /dev/null @@ -1,25 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeTrueTest : XCTestCase - -@end - -@implementation ObjCBeTrueTest - -- (void)testPositiveMatches { - expect(@YES).to(beTrue()); - expect(@NO).toNot(beTrue()); - expect(nil).toNot(beTrue()); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be true, got <0>", ^{ - expect(@NO).to(beTrue()); - }); - expectFailureMessage(@"expected to be true, got ", ^{ - expect(nil).to(beTrue()); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeTruthyTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeTruthyTest.m deleted file mode 100644 index 93180a2..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeTruthyTest.m +++ /dev/null @@ -1,28 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeTruthyTest : XCTestCase - -@end - -@implementation ObjCBeTruthyTest - -- (void)testPositiveMatches { - expect(@YES).to(beTruthy()); - expect(@NO).toNot(beTruthy()); - expect(nil).toNot(beTruthy()); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to be truthy, got ", ^{ - expect(nil).to(beTruthy()); - }); - expectFailureMessage(@"expected to not be truthy, got <1>", ^{ - expect(@1).toNot(beTruthy()); - }); - expectFailureMessage(@"expected to be truthy, got <0>", ^{ - expect(@NO).to(beTruthy()); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeginWithTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeginWithTest.m deleted file mode 100644 index 5ca7be4..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCBeginWithTest.m +++ /dev/null @@ -1,37 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCBeginWithTest : XCTestCase - -@end - -@implementation ObjCBeginWithTest - -- (void)testPositiveMatches { - expect(@"hello world!").to(beginWith(@"hello")); - expect(@"hello world!").toNot(beginWith(@"world")); - - NSArray *array = @[@1, @2]; - expect(array).to(beginWith(@1)); - expect(array).toNot(beginWith(@2)); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to begin with , got ", ^{ - expect(@"foo").to(beginWith(@"bar")); - }); - expectFailureMessage(@"expected to not begin with , got ", ^{ - expect(@"foo").toNot(beginWith(@"foo")); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to begin with <1>, got ", ^{ - expect(nil).to(beginWith(@1)); - }); - expectNilFailureMessage(@"expected to not begin with <1>, got ", ^{ - expect(nil).toNot(beginWith(@1)); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCContainTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCContainTest.m deleted file mode 100644 index 92bb9f9..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCContainTest.m +++ /dev/null @@ -1,67 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCContainTest : XCTestCase - -@end - -@implementation ObjCContainTest - -- (void)testPositiveMatches { - NSArray *array = @[@1, @2]; - expect(array).to(contain(@1)); - expect(array).toNot(contain(@"HI")); - expect(@"String").to(contain(@"Str")); - expect(@"Other").toNot(contain(@"Str")); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to contain <3>, got <(1, 2)>", ^{ - expect((@[@1, @2])).to(contain(@3)); - }); - expectFailureMessage(@"expected to not contain <2>, got <(1, 2)>", ^{ - expect((@[@1, @2])).toNot(contain(@2)); - }); - - expectFailureMessage(@"expected to contain , got ", ^{ - expect(@"la").to(contain(@"hi")); - }); - expectFailureMessage(@"expected to not contain , got ", ^{ - expect(@"hihihi").toNot(contain(@"hi")); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to contain <3>, got ", ^{ - expect(nil).to(contain(@3)); - }); - expectNilFailureMessage(@"expected to not contain <3>, got ", ^{ - expect(nil).toNot(contain(@3)); - }); - - expectNilFailureMessage(@"expected to contain , got ", ^{ - expect(nil).to(contain(@"hi")); - }); - expectNilFailureMessage(@"expected to not contain , got ", ^{ - expect(nil).toNot(contain(@"hi")); - }); -} - -- (void)testVariadicArguments { - NSArray *array = @[@1, @2]; - expect(array).to(contain(@1, @2)); - expect(array).toNot(contain(@"HI", @"whale")); - expect(@"String").to(contain(@"Str", @"ng")); - expect(@"Other").toNot(contain(@"Str", @"Oth")); - - - expectFailureMessage(@"expected to contain , got <(a, b, c)>", ^{ - expect(@[@"a", @"b", @"c"]).to(contain(@"a", @"bar")); - }); - - expectFailureMessage(@"expected to not contain , got <(a, b, c)>", ^{ - expect(@[@"a", @"b", @"c"]).toNot(contain(@"bar", @"b")); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCEndWithTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCEndWithTest.m deleted file mode 100644 index b960f01..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCEndWithTest.m +++ /dev/null @@ -1,37 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCEndWithTest : XCTestCase - -@end - -@implementation ObjCEndWithTest - -- (void)testPositiveMatches { - NSArray *array = @[@1, @2]; - expect(@"hello world!").to(endWith(@"world!")); - expect(@"hello world!").toNot(endWith(@"hello")); - expect(array).to(endWith(@2)); - expect(array).toNot(endWith(@1)); - expect(@1).toNot(contain(@"foo")); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to end with , got ", ^{ - expect(@"hello world!").to(endWith(@"?")); - }); - expectFailureMessage(@"expected to not end with , got ", ^{ - expect(@"hello world!").toNot(endWith(@"!")); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to end with <1>, got ", ^{ - expect(nil).to(endWith(@1)); - }); - expectNilFailureMessage(@"expected to not end with <1>, got ", ^{ - expect(nil).toNot(endWith(@1)); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCEqualTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCEqualTest.m deleted file mode 100644 index e5a2be0..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCEqualTest.m +++ /dev/null @@ -1,35 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCEqualTest : XCTestCase - -@end - -@implementation ObjCEqualTest - -- (void)testPositiveMatches { - expect(@1).to(equal(@1)); - expect(@1).toNot(equal(@2)); - expect(@1).notTo(equal(@2)); - expect(@"hello").to(equal(@"hello")); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to equal <2>, got <1>", ^{ - expect(@1).to(equal(@2)); - }); - expectFailureMessage(@"expected to not equal <1>, got <1>", ^{ - expect(@1).toNot(equal(@1)); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to equal , got ", ^{ - expect(nil).to(equal(nil)); - }); - expectNilFailureMessage(@"expected to not equal , got ", ^{ - expect(nil).toNot(equal(nil)); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCHaveCount.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCHaveCount.m deleted file mode 100644 index af97f7c..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCHaveCount.m +++ /dev/null @@ -1,105 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCHaveCountTest : XCTestCase - -@end - -@implementation ObjCHaveCountTest - -- (void)testHaveCountForNSArray { - expect(@[@1, @2, @3]).to(haveCount(@3)); - expect(@[@1, @2, @3]).notTo(haveCount(@1)); - - expect(@[]).to(haveCount(@0)); - expect(@[@1]).notTo(haveCount(@0)); - - expectFailureMessage(@"expected to have NSArray with count 1, got 3\nActual Value: (1, 2, 3)", ^{ - expect(@[@1, @2, @3]).to(haveCount(@1)); - }); - - expectFailureMessage(@"expected to not have NSArray with count 3, got 3\nActual Value: (1, 2, 3)", ^{ - expect(@[@1, @2, @3]).notTo(haveCount(@3)); - }); - -} - -- (void)testHaveCountForNSDictionary { - expect(@{@"1":@1, @"2":@2, @"3":@3}).to(haveCount(@3)); - expect(@{@"1":@1, @"2":@2, @"3":@3}).notTo(haveCount(@1)); - - expectFailureMessage(@"expected to have NSDictionary with count 1, got 3\nActual Value: {1 = 1;2 = 2;3 = 3;}", ^{ - expect(@{@"1":@1, @"2":@2, @"3":@3}).to(haveCount(@1)); - }); - - expectFailureMessage(@"expected to not have NSDictionary with count 3, got 3\nActual Value: {1 = 1;2 = 2;3 = 3;}", ^{ - expect(@{@"1":@1, @"2":@2, @"3":@3}).notTo(haveCount(@3)); - }); -} - -- (void)testHaveCountForNSHashtable { - NSHashTable *const table = [NSHashTable hashTableWithOptions:NSPointerFunctionsStrongMemory]; - [table addObject:@1]; - [table addObject:@2]; - [table addObject:@3]; - - expect(table).to(haveCount(@3)); - expect(table).notTo(haveCount(@1)); - - NSString *msg = [NSString stringWithFormat: - @"expected to have NSHashTable with count 1, got 3\nActual Value: %@", - [table.description stringByReplacingOccurrencesOfString:@"\n" withString:@""]]; - expectFailureMessage(msg, ^{ - expect(table).to(haveCount(@1)); - }); - - - msg = [NSString stringWithFormat: - @"expected to not have NSHashTable with count 3, got 3\nActual Value: %@", - [table.description stringByReplacingOccurrencesOfString:@"\n" withString:@""]]; - expectFailureMessage(msg, ^{ - expect(table).notTo(haveCount(@3)); - }); -} - -- (void)testHaveCountForNSSet { - NSSet *const set = [NSSet setWithArray:@[@1, @2, @3]]; - - expect(set).to(haveCount(@3)); - expect(set).notTo(haveCount(@1)); - - expectFailureMessage(@"expected to have NSSet with count 1, got 3\nActual Value: {(3,1,2)}", ^{ - expect(set).to(haveCount(@1)); - }); - - expectFailureMessage(@"expected to not have NSSet with count 3, got 3\nActual Value: {(3,1,2)}", ^{ - expect(set).notTo(haveCount(@3)); - }); -} - -- (void)testHaveCountForNSIndexSet { - NSIndexSet *const set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]; - - expect(set).to(haveCount(@3)); - expect(set).notTo(haveCount(@1)); - - expectFailureMessage(@"expected to have NSIndexSet with count 1, got 3\nActual Value: (1, 2, 3)", ^{ - expect(set).to(haveCount(@1)); - }); - - expectFailureMessage(@"expected to not have NSIndexSet with count 3, got 3\nActual Value: (1, 2, 3)", ^{ - expect(set).notTo(haveCount(@3)); - }); -} - -- (void)testHaveCountForUnsupportedTypes { - expectFailureMessage(@"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFConstantString", ^{ - expect(@"string").to(haveCount(@6)); - }); - - expectFailureMessage(@"expected to get type of NSArray, NSSet, NSDictionary, or NSHashTable, got __NSCFNumber", ^{ - expect(@1).to(haveCount(@6)); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCMatchTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCMatchTest.m deleted file mode 100644 index 2342ae4..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCMatchTest.m +++ /dev/null @@ -1,33 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCMatchTest : XCTestCase - -@end - -@implementation ObjCMatchTest - -- (void)testPositiveMatches { - expect(@"11:14").to(match(@"\\d{2}:\\d{2}")); - expect(@"hello").toNot(match(@"\\d{2}:\\d{2}")); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to match <\\d{2}:\\d{2}>, got ", ^{ - expect(@"hello").to(match(@"\\d{2}:\\d{2}")); - }); - expectFailureMessage(@"expected to not match <\\d{2}:\\d{2}>, got <11:22>", ^{ - expect(@"11:22").toNot(match(@"\\d{2}:\\d{2}")); - }); -} - -- (void)testNilMatches { - expectNilFailureMessage(@"expected to match <\\d{2}:\\d{2}>, got ", ^{ - expect(nil).to(match(@"\\d{2}:\\d{2}")); - }); - expectNilFailureMessage(@"expected to not match <\\d{2}:\\d{2}>, got ", ^{ - expect(nil).toNot(match(@"\\d{2}:\\d{2}")); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCRaiseExceptionTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCRaiseExceptionTest.m deleted file mode 100644 index 3179388..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCRaiseExceptionTest.m +++ /dev/null @@ -1,178 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCRaiseExceptionTest : XCTestCase - -@end - -@implementation ObjCRaiseExceptionTest - -- (void)testPositiveMatches { - __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException - reason:@"No food" - userInfo:@{@"key": @"value"}]; - expectAction(^{ @throw exception; }).to(raiseException()); - expectAction(^{ [exception raise]; }).to(raiseException()); - expectAction(^{ [exception raise]; }).to(raiseException().named(NSInvalidArgumentException)); - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food")); - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food"). - userInfo(@{@"key": @"value"})); - - expectAction(^{ }).toNot(raiseException()); -} - -- (void)testPositiveMatchesWithBlocks { - __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException - reason:@"No food" - userInfo:@{@"key": @"value"}]; - expectAction(^{ [exception raise]; }).to(raiseException(). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food"). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food"). - userInfo(@{@"key": @"value"}). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); -} - -- (void)testNegativeMatches { - __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException - reason:@"No food" - userInfo:@{@"key": @"value"}]; - - expectFailureMessage(@"expected to raise any exception, got no exception", ^{ - expectAction(^{ }).to(raiseException()); - }); - - expectFailureMessage(@"expected to raise exception with name , got no exception", ^{ - expectAction(^{ }).to(raiseException(). - named(@"foo")); - }); - - expectFailureMessage(@"expected to raise exception with name with reason , got no exception", ^{ - expectAction(^{ }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"cakes")); - }); - - expectFailureMessage(@"expected to raise exception with name with reason with userInfo <{k = v;}>, got no exception", ^{ - expectAction(^{ }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food"). - userInfo(@{@"k": @"v"})); - }); - - expectFailureMessage(@"expected to not raise any exception, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }", ^{ - expectAction(^{ [exception raise]; }).toNot(raiseException()); - }); -} - -- (void)testNegativeMatchesWithPassingBlocks { - __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException - reason:@"No food" - userInfo:@{@"key": @"value"}]; - expectFailureMessage(@"expected to raise exception that satisfies block, got no exception", ^{ - expect(exception).to(raiseException(). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(@"LOL")); - })); - }); - - NSString *outerFailureMessage = @"expected to raise exception that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; - expectFailureMessages((@[outerFailureMessage]), ^{ - expectAction(^{ [exception raise]; }).to(raiseException(). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); - }); - - outerFailureMessage = @"expected to raise exception with name that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; - expectFailureMessages((@[outerFailureMessage]), ^{ - expectAction(^{ [exception raise]; }).to(raiseException(). - named(@"foo"). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); - }); - - outerFailureMessage = @"expected to raise exception with name with reason that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; - expectFailureMessages((@[outerFailureMessage]), ^{ - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"bar"). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); - }); - - outerFailureMessage = @"expected to raise exception with name with reason with userInfo <{}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; - expectFailureMessages((@[outerFailureMessage]), ^{ - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food"). - userInfo(@{}). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(NSInvalidArgumentException)); - })); - }); -} - -- (void)testNegativeMatchesWithNegativeBlocks { - __block NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException - reason:@"No food" - userInfo:@{@"key": @"value"}]; - NSString *outerFailureMessage; - - NSString const *innerFailureMessage = @"expected to equal , got "; - outerFailureMessage = @"expected to raise exception with name that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; - expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(@"foo")); - })); - }); - - - outerFailureMessage = @"expected to raise exception with name with reason that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; - expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food"). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(@"foo")); - })); - }); - - - outerFailureMessage = @"expected to raise exception with name with reason with userInfo <{key = value;}> that satisfies block, got NSException { name=NSInvalidArgumentException, reason='No food', userInfo=[key: value] }"; - expectFailureMessages((@[outerFailureMessage, innerFailureMessage]), ^{ - expectAction(^{ [exception raise]; }).to(raiseException(). - named(NSInvalidArgumentException). - reason(@"No food"). - userInfo(@{@"key": @"value"}). - satisfyingBlock(^(NSException *exception) { - expect(exception.name).to(equal(@"foo")); - })); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCSatisfyAnyOfTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCSatisfyAnyOfTest.m deleted file mode 100644 index 4c80abc..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCSatisfyAnyOfTest.m +++ /dev/null @@ -1,32 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCSatisfyAnyOfTest : XCTestCase - -@end - -@implementation ObjCSatisfyAnyOfTest - -- (void)testPositiveMatches { - expect(@2).to(satisfyAnyOf(equal(@2), equal(@3))); - expect(@2).toNot(satisfyAnyOf(equal(@3), equal(@16))); - expect(@[@1, @2, @3]).to(satisfyAnyOf(equal(@[@1, @2, @3]), allPass(beLessThan(@4)))); - expect(@NO).to(satisfyAnyOf(beTrue(), beFalse())); - expect(@YES).to(satisfyAnyOf(beTrue(), beFalse())); -} - -- (void)testNegativeMatches { - expectFailureMessage(@"expected to match one of: {equal <3>}, or {equal <4>}, or {equal <5>}, got 2", ^{ - expect(@2).to(satisfyAnyOf(equal(@3), equal(@4), equal(@5))); - }); - - expectFailureMessage(@"expected to match one of: {all be less than <4>, but failed first at element" - " <5> in <[5, 6, 7]>}, or {equal <(1, 2, 3, 4)>}, got (5,6,7)", ^{ - expect(@[@5, @6, @7]).to(satisfyAnyOf(allPass(beLessThan(@4)), equal(@[@1, @2, @3, @4]))); - }); - - expectFailureMessage(@"satisfyAnyOf must be called with at least one matcher", ^{ - expect(@"turtles").to(satisfyAnyOf()); - }); -} -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCSyncTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCSyncTest.m deleted file mode 100644 index 2aae816..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCSyncTest.m +++ /dev/null @@ -1,21 +0,0 @@ -#import -#import -#import "NimbleSpecHelper.h" - -@interface ObjCSyncTest : XCTestCase - -@end - -@implementation ObjCSyncTest - -- (void)testFailureExpectation { - expectFailureMessage(@"fail() always fails", ^{ - fail(); - }); - - expectFailureMessage(@"This always fails", ^{ - failWithMessage(@"This always fails"); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCUserDescriptionTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCUserDescriptionTest.m deleted file mode 100644 index ffb5407..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjCUserDescriptionTest.m +++ /dev/null @@ -1,52 +0,0 @@ -#import -#import "NimbleSpecHelper.h" - -@interface ObjCUserDescriptionTest : XCTestCase - -@end - -@implementation ObjCUserDescriptionTest - -- (void)testToWithDescription { - expectFailureMessage(@"These are equal!\n" - "expected to equal <2>, got <1>", ^{ - expect(@1).toWithDescription(equal(@2), @"These are equal!"); - }); -} - -- (void)testToNotWithDescription { - expectFailureMessage(@"These aren't equal!\n" - "expected to not equal <1>, got <1>", ^{ - expect(@1).toNotWithDescription(equal(@1), @"These aren't equal!"); - }); -} - -- (void)testNotToWithDescription { - expectFailureMessage(@"These aren't equal!\n" - "expected to not equal <1>, got <1>", ^{ - expect(@1).notToWithDescription(equal(@1), @"These aren't equal!"); - }); -} - -- (void)testToEventuallyWithDescription { - expectFailureMessage(@"These are equal!\n" - "expected to eventually equal <2>, got <1>", ^{ - expect(@1).toEventuallyWithDescription(equal(@2), @"These are equal!"); - }); -} - -- (void)testToEventuallyNotWithDescription { - expectFailureMessage(@"These aren't equal!\n" - "expected to eventually not equal <1>, got <1>", ^{ - expect(@1).toEventuallyNotWithDescription(equal(@1), @"These aren't equal!"); - }); -} - -- (void)testToNotEventuallyWithDescription { - expectFailureMessage(@"These aren't equal!\n" - "expected to eventually not equal <1>, got <1>", ^{ - expect(@1).toNotEventuallyWithDescription(equal(@1), @"These aren't equal!"); - }); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjcStringersTest.m b/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjcStringersTest.m deleted file mode 100644 index 4ba2eae..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/Tests/Nimble/objc/ObjcStringersTest.m +++ /dev/null @@ -1,31 +0,0 @@ -@import XCTest; -@import Nimble; - -@interface ObjcStringersTest : XCTestCase - -@end - -@implementation ObjcStringersTest - -- (void)testItCanStringifyArrays { - NSArray *array = @[@1, @2, @3]; - NSString *result = NMBStringify(array); - - expect(result).to(equal(@"(1, 2, 3)")); -} - -- (void)testItCanStringifyIndexSets { - NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]; - NSString *result = NMBStringify(indexSet); - - expect(result).to(equal(@"(1, 2, 3)")); -} - -- (void)testItRoundsLongDecimals { - NSNumber *num = @291.123782163; - NSString *result = NMBStringify(num); - - expect(result).to(equal(@"291.1238")); -} - -@end diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/circle.yml b/Carthage/Checkouts/Quick/Externals/Nimble/circle.yml deleted file mode 100644 index 5b9e306..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/circle.yml +++ /dev/null @@ -1,16 +0,0 @@ -machine: - xcode: - version: "7.3" - -dependencies: - pre: - - eval "$(curl -sL https://gist.githubusercontent.com/kylef/5c0475ff02b7c7671d2a/raw/02090c7ede5a637b76e6df1710e83cd0bbe7dcdf/swiftenv-install.sh)" - -test: - override: - - NIMBLE_RUNTIME_IOS_SDK_VERSION=9.0 ./test ios - - NIMBLE_RUNTIME_OSX_SDK_VERSION=10.10 ./test osx - - eval "$(swiftenv init -)"; ./test swiftpm: - environment: - SWIFTENV_ROOT: $HOME/.swiftenv - PATH: $SWIFTENV_ROOT/bin:$PATH diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/script/release b/Carthage/Checkouts/Quick/Externals/Nimble/script/release deleted file mode 100755 index 62840f6..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/script/release +++ /dev/null @@ -1,186 +0,0 @@ -#!/usr/bin/env sh -REMOTE_BRANCH=master -POD_NAME=Nimble -PODSPEC=Nimble.podspec - -POD=${COCOAPODS:-pod} - -function help { - echo "Usage: release VERSION RELEASE_NOTES [-f]" - echo - echo "VERSION should be the version to release, should not include the 'v' prefix" - echo "RELEASE_NOTES should be a file that lists all the release notes for this version" - echo " if file does not exist, creates a git-style commit with a diff as a comment" - echo - echo "FLAGS" - echo " -f Forces override of tag" - echo - echo " Example: ./release 1.0.0-rc.2 ./release-notes.txt" - echo - echo "HINT: use 'git diff ...HEAD' to build the release notes" - echo - exit 2 -} - -function die { - echo "[ERROR] $@" - echo - exit 1 -} - -if [ $# -lt 2 ]; then - help -fi - -VERSION=$1 -RELEASE_NOTES=$2 -FORCE_TAG=$3 - -VERSION_TAG="v$VERSION" - -echo "-> Verifying Local Directory for Release" - -if [ -z "`which $POD`" ]; then - die "Cocoapods is required to produce a release. Aborting." -fi -echo " > Cocoapods is installed" - -echo " > Is this a reasonable tag?" - -echo $VERSION_TAG | grep -q "^vv" -if [ $? -eq 0 ]; then - die "This tag ($VERSION) is an incorrect format. You should remove the 'v' prefix." -fi - -echo $VERSION_TAG | grep -q -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" -if [ $? -ne 0 ]; then - die "This tag ($VERSION) is an incorrect format. It should be in 'v{MAJOR}.{MINOR}.{PATCH}(-{PRERELEASE_NAME}.{PRERELEASE_VERSION})' form." -fi - -echo " > Is this version ($VERSION) unique?" -git describe --exact-match "$VERSION_TAG" > /dev/null 2>&1 -if [ $? -eq 0 ]; then - if [ -z "$FORCE_TAG" ]; then - die "This tag ($VERSION) already exists. Aborting. Append '-f' to override" - else - echo " > NO, but force was specified." - fi -else - echo " > Yes, tag is unique" -fi - -if [ ! -f "$RELEASE_NOTES" ]; then - echo " > Failed to find $RELEASE_NOTES. Prompting editor" - RELEASE_NOTES=.release-changes - LATEST_TAG=`git for-each-ref refs/tags --sort=-refname --format="%(refname:short)" | grep -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" | ruby -e 'puts STDIN.read.split("\n").sort { |a,b| Gem::Version.new(a.gsub(/^v/, "")) <=> Gem::Version.new(b.gsub(/^v/, "")) }.last'` - echo " > Latest tag ${LATEST_TAG}" - echo "${POD_NAME} v$VERSION" > $RELEASE_NOTES - echo "================" >> $RELEASE_NOTES - echo >> $RELEASE_NOTES - echo "# Changelog from ${LATEST_TAG}..HEAD" >> $RELEASE_NOTES - git log ${LATEST_TAG}..HEAD | sed -e 's/^/# /' >> $RELEASE_NOTES - $EDITOR $RELEASE_NOTES - diff -q $RELEASE_NOTES ${RELEASE_NOTES}.backup > /dev/null 2>&1 - STATUS=$? - rm ${RELEASE_NOTES}.backup - if [ $STATUS -eq 0 ]; then - rm $RELEASE_NOTES - die "No changes in release notes file. Aborting." - fi -fi -echo " > Release notes: $RELEASE_NOTES" - -if [ ! -f "$PODSPEC" ]; then - die "Cannot find podspec: $PODSPEC. Aborting." -fi -echo " > Podspec exists" - -git config --get user.signingkey > /dev/null || { - echo "[ERROR] No PGP found to sign tag. Aborting." - echo - echo " Creating a release requires signing the tag for security purposes. This allows users to verify the git cloned tree is from a trusted source." - echo " From a security perspective, it is not considered safe to trust the commits (including Author & Signed-off fields). It is easy for any" - echo " intermediate between you and the end-users to modify the git repository." - echo - echo " While not all users may choose to verify the PGP key for tagged releases. It is a good measure to ensure 'this is an official release'" - echo " from the official maintainers." - echo - echo " If you're creating your PGP key for the first time, use RSA with at least 4096 bits." - echo - echo "Related resources:" - echo " - Configuring your system for PGP: https://git-scm.com/book/tr/v2/Git-Tools-Signing-Your-Work" - echo " - Why: http://programmers.stackexchange.com/questions/212192/what-are-the-advantages-and-disadvantages-of-cryptographically-signing-commits-a" - echo - exit 2 -} -echo " > Found PGP key for git" - -# Verify cocoapods trunk ownership -pod trunk me | grep -q "$POD_NAME" || die "You do not have access to pod repository $POD_NAME. Aborting." -echo " > Verified ownership to $POD_NAME pod" - - -echo "--- Releasing version $VERSION (tag: $VERSION_TAG)..." - -function restore_podspec { - if [ -f "${PODSPEC}.backup" ]; then - mv -f ${PODSPEC}{.backup,} - fi -} - -echo "-> Ensuring no differences to origin/$REMOTE_BRANCH" -git fetch origin || die "Failed to fetch origin" -git diff --quiet HEAD "origin/$REMOTE_BRANCH" || die "HEAD is not aligned to origin/$REMOTE_BRANCH. Cannot update version safely" - - -echo "-> Setting podspec version" -cat "$PODSPEC" | grep 's.version' | grep -q "\"$VERSION\"" -SET_PODSPEC_VERSION=$? -if [ $SET_PODSPEC_VERSION -eq 0 ]; then - echo " > Podspec already set to $VERSION. Skipping." -else - sed -i.backup "s/s.version *= *\".*\"/s.version = \"$VERSION\"/g" "$PODSPEC" || { - restore_podspec - die "Failed to update version in podspec" - } - - git add ${PODSPEC} || { restore_podspec; die "Failed to add ${PODSPEC} to INDEX"; } - git commit -m "Bumping version to $VERSION" || { restore_podspec; die "Failed to push updated version: $VERSION"; } -fi - -if [ -z "$FORCE_TAG" ]; then - echo "-> Tagging version" - git tag -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" - echo "-> Pushing tag to origin" - git push origin "$VERSION_TAG" || die "Failed to push tag '$VERSION_TAG' to origin" -else - echo "-> Tagging version (force)" - git tag -f -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" - echo "-> Pushing tag to origin (force)" - git push origin "$VERSION_TAG" -f || die "Failed to push tag '$VERSION_TAG' to origin" -fi - -if [ $SET_PODSPEC_VERSION -ne 0 ]; then - git push origin "$REMOTE_BRANCH" || die "Failed to push to origin" - echo " > Pushed version to origin" -fi - -echo -echo "---------------- Released as $VERSION_TAG ----------------" -echo - -echo -echo "Pushing to pod trunk..." - -$POD trunk push "$PODSPEC" - -echo -echo "================ Finalizing the Release ================" -echo -echo " - Opening GitHub to mark this as a release..." -echo " - Paste the contents of $RELEASE_NOTES into the release notes. Tweak for GitHub styling." -echo " - Announce!" - -open "https://github.com/Quick/Nimble/releases/new?tag=$VERSION_TAG" - -rm ${PODSPEC}.backup diff --git a/Carthage/Checkouts/Quick/Externals/Nimble/test b/Carthage/Checkouts/Quick/Externals/Nimble/test deleted file mode 100755 index d4cb253..0000000 --- a/Carthage/Checkouts/Quick/Externals/Nimble/test +++ /dev/null @@ -1,140 +0,0 @@ -#!/bin/bash - -GREEN="\033[0;32m" -CLEAR="\033[0m" - -if which xcodebuild > /dev/null; then - echo -e "Gathering ${GREEN}xcodebuild sdk versions${CLEAR}..." - BUILD_DIR=`pwd`/build - LATEST_IOS_SDK_VERSION=`xcodebuild -showsdks | grep iphonesimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` - LATEST_TVOS_SDK_VERSION=`xcodebuild -showsdks | grep appletvsimulator | cut -d ' ' -f 4 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` - LATEST_OSX_SDK_VERSION=`xcodebuild -showsdks | grep 'macosx' | cut -d ' ' -f 3 | ruby -e 'puts STDIN.read.chomp.split("\n").last'` - BUILD_IOS_SDK_VERSION=${NIMBLE_BUILD_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION} - RUNTIME_IOS_SDK_VERSION=${NIMBLE_RUNTIME_IOS_SDK_VERSION:-$LATEST_IOS_SDK_VERSION} - BUILD_TVOS_SDK_VERSION=${NIMBLE_BUILD_TVOS_SDK_VERSION:-$LATEST_TVOS_SDK_VERSION} - RUNTIME_TVOS_SDK_VERSION=${NIMBLE_RUNTIME_TVOS_SDK_VERSION:-$LATEST_TVOS_SDK_VERSION} - BUILD_OSX_SDK_VERSION=${NIMBLE_BUILD_OSX_SDK_VERSION:-$LATEST_OSX_SDK_VERSION} -fi - -set -e - -function color_if_overridden { - local actual=$1 - local env_var=$2 - if [ -z "$env_var" ]; then - printf "$actual" - else - printf "$GREEN$actual$CLEAR" - fi -} - -function print_env { - echo "=== Environment ===" - echo " iOS:" - echo " Latest iOS SDK: $LATEST_IOS_SDK_VERSION" - echo " Building with iOS SDK: `color_if_overridden $BUILD_IOS_SDK_VERSION $NIMBLE_BUILD_IOS_SDK_VERSION`" - echo " Running with iOS SDK: `color_if_overridden $RUNTIME_IOS_SDK_VERSION $NIMBLE_RUNTIME_IOS_SDK_VERSION`" - echo - echo " tvOS:" - echo " Latest tvOS SDK: $LATEST_TVOS_SDK_VERSION" - echo " Building with tvOS SDK: `color_if_overridden $BUILD_TVOS_SDK_VERSION $NIMBLE_BUILD_TVOS_SDK_VERSION`" - echo " Running with tvOS SDK: `color_if_overridden $RUNTIME_TVOS_SDK_VERSION $NIMBLE_RUNTIME_TVOS_SDK_VERSION`" - echo - echo " Mac OS X:" - echo " Latest OS X SDK: $LATEST_OSX_SDK_VERSION" - echo " Building with OS X SDK: `color_if_overridden $BUILD_OSX_SDK_VERSION $NIMBLE_BUILD_OSX_SDK_VERSION`" - echo - echo "======= END =======" - echo -} - -function run { - echo -e "$GREEN==>$CLEAR $@" - "$@" -} - -function test_ios { - run osascript -e 'tell app "Simulator" to quit' - run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-iOS" -configuration "Debug" -sdk "iphonesimulator$BUILD_IOS_SDK_VERSION" -destination "name=iPad Air,OS=$RUNTIME_IOS_SDK_VERSION" build test - - run osascript -e 'tell app "Simulator" to quit' - run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-iOS" -configuration "Debug" -sdk "iphonesimulator$BUILD_IOS_SDK_VERSION" -destination "name=iPhone 5s,OS=$RUNTIME_IOS_SDK_VERSION" build test -} - -function test_tvos { - run osascript -e 'tell app "Simulator" to quit' - run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-tvOS" -configuration "Debug" -sdk "appletvsimulator$BUILD_TVOS_SDK_VERSION" -destination "name=Apple TV 1080p,OS=$RUNTIME_TVOS_SDK_VERSION" build test -} - -function test_osx { - run xcodebuild -project Nimble.xcodeproj -scheme "Nimble-OSX" -configuration "Debug" -sdk "macosx$BUILD_OSX_SDK_VERSION" build test -} - -function test_podspec { - echo "Gathering CocoaPods installation information..." - run bundle exec pod --version - echo "Linting podspec..." - run bundle exec pod lib lint Nimble.podspec -} - -function test_swiftpm { - run swift build --clean && swift build && swift test -} - -function test() { - test_ios - test_tvos - test_osx - - if which swift-test; then - test_swiftpm - else - echo "Not testing with the Swift Package Manager because swift-test is not installed" - fi -} - -function clean { - run rm -rf ~/Library/Developer/Xcode/DerivedData\; true -} - -function help { - echo "Usage: $0 COMMANDS" - echo - echo "COMMANDS:" - echo " clean - Cleans the derived data directory of Xcode. Assumes default location" - echo " ios - Runs the tests as an iOS device" - echo " tvos - Runs the tests as an tvOS device" - echo " osx - Runs the tests on Mac OS X 10.10 (Yosemite and newer only)" - echo " podspec - Runs pod lib lint against the podspec to detect breaking changes" - echo " all - Runs the all tests of ios, tvos and osx" - echo " swiftpm - Runs the tests built by the Swift Package Manager" - echo " help - Displays this help" - echo - exit 1 -} - -function main { - print_env - for arg in $@ - do - case "$arg" in - clean) clean ;; - ios) test_ios ;; - tvos) test_tvos ;; - osx) test_osx ;; - podspec) test_podspec ;; - test) test ;; - all) test ;; - swiftpm) test_swiftpm ;; - help) help ;; - esac - done - - if [ $# -eq 0 ]; then - clean - test - fi -} - -main $@ - diff --git a/Carthage/Checkouts/Quick/Gemfile b/Carthage/Checkouts/Quick/Gemfile deleted file mode 100644 index dc5f8a8..0000000 --- a/Carthage/Checkouts/Quick/Gemfile +++ /dev/null @@ -1,3 +0,0 @@ -source "https://rubygems.org" - -gem 'cocoapods', '1.0' diff --git a/Carthage/Checkouts/Quick/Gemfile.lock b/Carthage/Checkouts/Quick/Gemfile.lock deleted file mode 100644 index 5f9326b..0000000 --- a/Carthage/Checkouts/Quick/Gemfile.lock +++ /dev/null @@ -1,67 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - activesupport (4.2.6) - i18n (~> 0.7) - json (~> 1.7, >= 1.7.7) - minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) - tzinfo (~> 1.1) - claide (1.0.0) - cocoapods (1.0.0) - activesupport (>= 4.0.2) - claide (>= 1.0.0, < 2.0) - cocoapods-core (= 1.0.0) - cocoapods-deintegrate (>= 1.0.0, < 2.0) - cocoapods-downloader (>= 1.0.0, < 2.0) - cocoapods-plugins (>= 1.0.0, < 2.0) - cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-stats (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.0.0, < 2.0) - cocoapods-try (>= 1.0.0, < 2.0) - colored (~> 1.2) - escape (~> 0.0.4) - fourflusher (~> 0.3.0) - molinillo (~> 0.4.5) - nap (~> 1.0) - xcodeproj (>= 1.0.0, < 2.0) - cocoapods-core (1.0.0) - activesupport (>= 4.0.2) - fuzzy_match (~> 2.0.4) - nap (~> 1.0) - cocoapods-deintegrate (1.0.0) - cocoapods-downloader (1.0.0) - cocoapods-plugins (1.0.0) - nap - cocoapods-search (1.0.0) - cocoapods-stats (1.0.0) - cocoapods-trunk (1.0.0) - nap (>= 0.8, < 2.0) - netrc (= 0.7.8) - cocoapods-try (1.0.0) - colored (1.2) - escape (0.0.4) - fourflusher (0.3.0) - fuzzy_match (2.0.4) - i18n (0.7.0) - json (1.8.3) - minitest (5.8.4) - molinillo (0.4.5) - nap (1.1.0) - netrc (0.7.8) - thread_safe (0.3.5) - tzinfo (1.2.2) - thread_safe (~> 0.1) - xcodeproj (1.0.0) - activesupport (>= 3) - claide (>= 1.0.0, < 2.0) - colored (~> 1.2) - -PLATFORMS - ruby - -DEPENDENCIES - cocoapods (= 1.0) - -BUNDLED WITH - 1.11.2 diff --git a/Carthage/Checkouts/Quick/LICENSE b/Carthage/Checkouts/Quick/LICENSE deleted file mode 100644 index e900165..0000000 --- a/Carthage/Checkouts/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/Carthage/Checkouts/Quick/Package.swift b/Carthage/Checkouts/Quick/Package.swift deleted file mode 100644 index 1bc4211..0000000 --- a/Carthage/Checkouts/Quick/Package.swift +++ /dev/null @@ -1,16 +0,0 @@ -import PackageDescription - -let package = Package( - name: "Quick", - targets: [ - Target(name: "QuickTests", dependencies: [.Target(name: "Quick"), .Target(name: "QuickTestHelpers")]), - Target(name: "QuickFocusedTests", dependencies: [.Target(name: "Quick"), .Target(name: "QuickTestHelpers")]), - Target(name: "QuickTestHelpers", dependencies: [.Target(name: "Quick")]), - ], - // TODO: Once the `test` command has been implemented in the Swift Package Manager, this should be changed to - // be `testDependencies:` instead. For now it has to be done like this for the library to get linked with the test targets. - // See: https://github.com/apple/swift-evolution/blob/master/proposals/0019-package-manager-testing.md - dependencies: [ - .Package(url: "https://github.com/briancroom/Nimble", majorVersion: 3) - ] -) diff --git a/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Objective-C/___FILEBASENAME___.h b/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Objective-C/___FILEBASENAME___.h deleted file mode 100644 index 6a7106e..0000000 --- a/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Objective-C/___FILEBASENAME___.h +++ /dev/null @@ -1,6 +0,0 @@ -@import Quick; - -@interface ___FILEBASENAMEASIDENTIFIER___ : QuickConfiguration - -@end - diff --git a/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Objective-C/___FILEBASENAME___.m b/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Objective-C/___FILEBASENAME___.m deleted file mode 100644 index 5ea1c4b..0000000 --- a/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Objective-C/___FILEBASENAME___.m +++ /dev/null @@ -1,10 +0,0 @@ -#import "___FILEBASENAMEASIDENTIFIER___.h" - -@implementation ___FILEBASENAMEASIDENTIFIER___ - -+ (void)configure:(Configuration *)configuration { - -} - -@end - diff --git a/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Swift/___FILEBASENAME___.swift b/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Swift/___FILEBASENAME___.swift deleted file mode 100644 index c44b776..0000000 --- a/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/Swift/___FILEBASENAME___.swift +++ /dev/null @@ -1,8 +0,0 @@ -import Quick - -class ___FILEBASENAMEASIDENTIFIER___: QuickConfiguration { - override class func configure(configuration: Configuration) { - - } -} - diff --git a/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/TemplateIcon.icns b/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/TemplateIcon.icns deleted file mode 100644 index 5cb4ae9..0000000 Binary files a/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/TemplateIcon.icns and /dev/null differ diff --git a/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/TemplateInfo.plist b/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/TemplateInfo.plist deleted file mode 100755 index 146a6df..0000000 --- a/Carthage/Checkouts/Quick/Quick Templates/Quick Configuration Class.xctemplate/TemplateInfo.plist +++ /dev/null @@ -1,73 +0,0 @@ - - - - - Kind - Xcode.IDEKit.TextSubstitutionFileTemplateKind - Description - A QuickConfiguration subclass. - Summary - A QuickConfiguration subclass, overload +configure: to configure the behaviour when running specs, shared examples that are used across spec files. - SortOrder - 1 - BuildableType - Test - DefaultCompletionName - Spec - Options - - - Description - Name of the Quick Configuration - Identifier - productName - Name - QuickConfiguration Name: - NotPersisted - - Required - - Type - text - - - AllowedTypes - - Swift - - public.swift-source - - Objective-C - - public.objective-c-source - public.objective-c-plus-plus-source - - - Default - Swift - Description - The implementation language - Identifier - languageChoice - MainTemplateFiles - - Objective-C - ___FILEBASENAME___.m - Swift - ___FILEBASENAME___.swift - - Name - Language: - Required - Yes - Type - popup - Values - - Swift - Objective-C - - - - - diff --git a/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/Objective-C/___FILEBASENAME___.m b/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/Objective-C/___FILEBASENAME___.m deleted file mode 100644 index 9fa2cba..0000000 --- a/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/Objective-C/___FILEBASENAME___.m +++ /dev/null @@ -1,6 +0,0 @@ -#import -#import - -QuickSpecBegin(___FILEBASENAMEASIDENTIFIER___) - -QuickSpecEnd diff --git a/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/Swift/___FILEBASENAME___.swift b/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/Swift/___FILEBASENAME___.swift deleted file mode 100644 index 1d84626..0000000 --- a/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/Swift/___FILEBASENAME___.swift +++ /dev/null @@ -1,8 +0,0 @@ -import Quick -import Nimble - -class ___FILEBASENAMEASIDENTIFIER___: QuickSpec { - override func spec() { - - } -} diff --git a/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/TemplateIcon.icns b/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/TemplateIcon.icns deleted file mode 100644 index 5cb4ae9..0000000 Binary files a/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/TemplateIcon.icns and /dev/null differ diff --git a/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/TemplateInfo.plist b/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/TemplateInfo.plist deleted file mode 100755 index 7b8088f..0000000 --- a/Carthage/Checkouts/Quick/Quick Templates/Quick Spec Class.xctemplate/TemplateInfo.plist +++ /dev/null @@ -1,73 +0,0 @@ - - - - - Kind - Xcode.IDEKit.TextSubstitutionFileTemplateKind - Description - A class implementing a Quick spec. - Summary - A class implementing a Quick spec - SortOrder - 1 - BuildableType - Test - DefaultCompletionName - Spec - Options - - - Description - Name of the Quick spec class - Identifier - productName - Name - Spec Name: - NotPersisted - - Required - - Type - text - - - AllowedTypes - - Swift - - public.swift-source - - Objective-C - - public.objective-c-source - public.objective-c-plus-plus-source - - - Default - Swift - Description - The implementation language - Identifier - languageChoice - MainTemplateFiles - - Objective-C - ___FILEBASENAME___.m - Swift - ___FILEBASENAME___.swift - - Name - Language: - Required - Yes - Type - popup - Values - - Swift - Objective-C - - - - - diff --git a/Carthage/Checkouts/Quick/Quick.podspec b/Carthage/Checkouts/Quick/Quick.podspec deleted file mode 100644 index 52ec698..0000000 --- a/Carthage/Checkouts/Quick/Quick.podspec +++ /dev/null @@ -1,38 +0,0 @@ -Pod::Spec.new do |s| - s.name = "Quick" - s.version = "0.9.3" - s.summary = "The Swift (and Objective-C) testing framework." - - s.description = <<-DESC - Quick is a behavior-driven development framework for Swift and Objective-C. Inspired by RSpec, Specta, and Ginkgo. - DESC - - s.homepage = "https://github.com/Quick/Quick" - s.license = { :type => "Apache 2.0", :file => "LICENSE" } - - s.author = "Quick Contributors" - s.ios.deployment_target = "7.0" - s.osx.deployment_target = "10.9" - s.tvos.deployment_target = '9.0' - - s.source = { :git => "https://github.com/Quick/Quick.git", :tag => "v#{s.version}" } - s.source_files = "Sources/Quick/**/*.{swift,h,m}" - - s.public_header_files = [ - 'Sources/Quick/Configuration/QuickConfiguration.h', - 'Sources/Quick/DSL/QCKDSL.h', - 'Sources/Quick/Quick.h', - 'Sources/Quick/QuickSpec.h', - ] - - s.exclude_files = [ - 'Sources/Quick/Configuration/QuickConfiguration.swift', - 'Sources/Quick/QuickSpec.swift', - 'Sources/Quick/QuickMain.swift', - ] - - s.framework = "XCTest" - s.requires_arc = true - s.user_target_xcconfig = { 'FRAMEWORK_SEARCH_PATHS' => '$(PLATFORM_DIR)/Developer/Library/Frameworks' } - s.pod_target_xcconfig = { 'ENABLE_BITCODE' => 'NO' } -end diff --git a/Carthage/Checkouts/Quick/Quick.xcodeproj/project.pbxproj b/Carthage/Checkouts/Quick/Quick.xcodeproj/project.pbxproj deleted file mode 100644 index 3e5eded..0000000 --- a/Carthage/Checkouts/Quick/Quick.xcodeproj/project.pbxproj +++ /dev/null @@ -1,2212 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 1F118CDF1BDCA4AB005013A2 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118CD51BDCA4AB005013A2 /* Quick.framework */; }; - 1F118CF51BDCA4BB005013A2 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118CD51BDCA4AB005013A2 /* Quick.framework */; }; - 1F118CFB1BDCA536005013A2 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */; }; - 1F118CFC1BDCA536005013A2 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA169E4719FF5DF100619816 /* Configuration.swift */; }; - 1F118CFD1BDCA536005013A2 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E519FCAEE8002858A7 /* World+DSL.swift */; }; - 1F118CFE1BDCA536005013A2 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E219FCAEE8002858A7 /* DSL.swift */; }; - 1F118CFF1BDCA536005013A2 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E419FCAEE8002858A7 /* QCKDSL.m */; }; - 1F118D001BDCA536005013A2 /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BDF19FF5599005DF92A /* Closures.swift */; }; - 1F118D011BDCA536005013A2 /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE019FF5599005DF92A /* ExampleHooks.swift */; }; - 1F118D021BDCA536005013A2 /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE119FF5599005DF92A /* SuiteHooks.swift */; }; - 1F118D031BDCA536005013A2 /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A619515CA700CE1B99 /* World.swift */; }; - 1F118D041BDCA536005013A2 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759E19515CA700CE1B99 /* Example.swift */; }; - 1F118D051BDCA536005013A2 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA02C91819A8073100093156 /* ExampleMetadata.swift */; }; - 1F118D061BDCA536005013A2 /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */; }; - 1F118D071BDCA536005013A2 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759C19515CA700CE1B99 /* Callsite.swift */; }; - 1F118D081BDCA536005013A2 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA6B30171A4DB0D500FFB148 /* Filter.swift */; }; - 1F118D091BDCA536005013A2 /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A519515CA700CE1B99 /* QuickSpec.m */; }; - 1F118D0A1BDCA536005013A2 /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */; }; - 1F118D0C1BDCA543005013A2 /* QuickConfigurationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */; }; - 1F118D0D1BDCA547005013A2 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; - 1F118D0E1BDCA547005013A2 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; - 1F118D0F1BDCA54B005013A2 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */; }; - 1F118D101BDCA556005013A2 /* Configuration+AfterEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */; }; - 1F118D111BDCA556005013A2 /* Configuration+AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */; }; - 1F118D121BDCA556005013A2 /* ItTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7AE6F019FC493F000AFDCE /* ItTests.swift */; }; - 1F118D131BDCA556005013A2 /* ItTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */; }; - 1F118D141BDCA556005013A2 /* FailureTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */; }; - 1F118D151BDCA556005013A2 /* FailureUsingXCTAssertTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */; }; - 1F118D161BDCA556005013A2 /* BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA87078219F48775008C04AC /* BeforeEachTests.swift */; }; - 1F118D171BDCA556005013A2 /* BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */; }; - 1F118D181BDCA556005013A2 /* AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA05D60F19F73A3800771050 /* AfterEachTests.swift */; }; - 1F118D191BDCA556005013A2 /* AfterEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */; }; - 1F118D1A1BDCA556005013A2 /* PendingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAA63EA219F7637300CD0A3B /* PendingTests.swift */; }; - 1F118D1B1BDCA556005013A2 /* PendingTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */; }; - 1F118D1C1BDCA556005013A2 /* BeforeSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */; }; - 1F118D1D1BDCA556005013A2 /* BeforeSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */; }; - 1F118D1E1BDCA556005013A2 /* AfterSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */; }; - 1F118D1F1BDCA556005013A2 /* AfterSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */; }; - 1F118D201BDCA556005013A2 /* SharedExamplesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */; }; - 1F118D211BDCA556005013A2 /* SharedExamplesTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */; }; - 1F118D221BDCA556005013A2 /* SharedExamples+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */; }; - 1F118D231BDCA556005013A2 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */; }; - 1F118D241BDCA561005013A2 /* FocusedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9876BF1A4C87200004AA17 /* FocusedTests.swift */; }; - 1F118D251BDCA561005013A2 /* FocusedTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */; }; - 1F118D261BDCA5AF005013A2 /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC81B110699006F61EC /* World+DSL.h */; }; - 1F118D271BDCA5AF005013A2 /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC21B1105BC006F61EC /* World.h */; }; - 1F118D281BDCA5AF005013A2 /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */; }; - 1F118D291BDCA5B6005013A2 /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F118D2A1BDCA5B6005013A2 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3124E319FCAEE8002858A7 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F118D2B1BDCA5B6005013A2 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB6B931943873100289F44 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F118D2C1BDCA5B6005013A2 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A419515CA700CE1B99 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F118D351BDCA657005013A2 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118D341BDCA657005013A2 /* Nimble.framework */; }; - 1F118D371BDCA65C005013A2 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F118D361BDCA65C005013A2 /* Nimble.framework */; }; - 1F118D381BDCA6E1005013A2 /* Configuration+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */; }; - 1F118D391BDCA6E6005013A2 /* Configuration+BeforeEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */; }; - 1FD0CFAD1AFA0B8C00874CC1 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; }; - 34C586011C4ABD3F00D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; - 34C586021C4ABD3F00D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; - 34C586031C4ABD4000D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; - 34C586041C4ABD4000D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; - 34C586051C4ABD4100D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; - 34C586061C4ABD4100D4F057 /* XCTestCaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */; }; - 34C586081C4AC5E500D4F057 /* ErrorUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C586071C4AC5E500D4F057 /* ErrorUtility.swift */; }; - 34C586091C4AC5E500D4F057 /* ErrorUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C586071C4AC5E500D4F057 /* ErrorUtility.swift */; }; - 34C5860A1C4AC5E500D4F057 /* ErrorUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C586071C4AC5E500D4F057 /* ErrorUtility.swift */; }; - 34F375A719515CA700CE1B99 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759C19515CA700CE1B99 /* Callsite.swift */; }; - 34F375A819515CA700CE1B99 /* Callsite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759C19515CA700CE1B99 /* Callsite.swift */; }; - 34F375AB19515CA700CE1B99 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759E19515CA700CE1B99 /* Example.swift */; }; - 34F375AC19515CA700CE1B99 /* Example.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759E19515CA700CE1B99 /* Example.swift */; }; - 34F375AD19515CA700CE1B99 /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */; }; - 34F375AE19515CA700CE1B99 /* ExampleGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */; }; - 34F375AF19515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */; }; - 34F375B019515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */; }; - 34F375B119515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */; }; - 34F375B219515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */; }; - 34F375B719515CA700CE1B99 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A419515CA700CE1B99 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34F375B819515CA700CE1B99 /* QuickSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 34F375A419515CA700CE1B99 /* QuickSpec.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34F375B919515CA700CE1B99 /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A519515CA700CE1B99 /* QuickSpec.m */; }; - 34F375BA19515CA700CE1B99 /* QuickSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A519515CA700CE1B99 /* QuickSpec.m */; }; - 34F375BB19515CA700CE1B99 /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A619515CA700CE1B99 /* World.swift */; }; - 34F375BC19515CA700CE1B99 /* World.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34F375A619515CA700CE1B99 /* World.swift */; }; - 470D6ECB1A43442400043E50 /* AfterEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */; }; - 470D6ECC1A43442900043E50 /* AfterEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */; }; - 471590401A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */; }; - 471590411A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */; }; - 4728253B1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */; }; - 4728253C1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */; }; - 4748E8941A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */; }; - 4748E8951A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */; }; - 4772173A1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */; }; - 4772173B1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */; }; - 47876F7D1A49AD63002575C7 /* BeforeSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */; }; - 47876F7E1A49AD71002575C7 /* BeforeSuiteTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */; }; - 479C31E31A36171B00DA8718 /* ItTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */; }; - 479C31E41A36172700DA8718 /* ItTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */; }; - 47FAEA361A3F49E6005A1D2F /* BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */; }; - 47FAEA371A3F49EB005A1D2F /* BeforeEachTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */; }; - 5A5D118719473F2100F6D13D /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A5D117C19473F2100F6D13D /* Quick.framework */; }; - 5A5D11A7194740E000F6D13D /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB6B931943873100289F44 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B44ADBE1C5444940007AF2E /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B44ADBD1C5444940007AF2E /* HooksPhase.swift */; }; - 7B44ADBF1C5444940007AF2E /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B44ADBD1C5444940007AF2E /* HooksPhase.swift */; }; - 7B44ADC01C5444940007AF2E /* HooksPhase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B44ADBD1C5444940007AF2E /* HooksPhase.swift */; }; - 7B5358CE1C3D4FBC00A23FAA /* ContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358CA1C3D4E2A00A23FAA /* ContextTests.swift */; }; - 7B5358CF1C3D4FBE00A23FAA /* ContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358CA1C3D4E2A00A23FAA /* ContextTests.swift */; }; - 7B5358D01C3D4FC000A23FAA /* ContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B5358CA1C3D4E2A00A23FAA /* ContextTests.swift */; }; - 8D010A571C11726F00633E2B /* DescribeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D010A561C11726F00633E2B /* DescribeTests.swift */; }; - 8D010A581C11726F00633E2B /* DescribeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D010A561C11726F00633E2B /* DescribeTests.swift */; }; - 8D010A591C11726F00633E2B /* DescribeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D010A561C11726F00633E2B /* DescribeTests.swift */; }; - 96327C631C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */ = {isa = PBXBuildFile; fileRef = 96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */; }; - 96327C641C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */ = {isa = PBXBuildFile; fileRef = 96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */; }; - 96327C651C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */ = {isa = PBXBuildFile; fileRef = 96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */; }; - 96327C661C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */ = {isa = PBXBuildFile; fileRef = 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */; }; - 96327C671C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */ = {isa = PBXBuildFile; fileRef = 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */; }; - 96327C681C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */ = {isa = PBXBuildFile; fileRef = 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */; }; - AE4E58131C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; - AE4E58141C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; - AE4E58151C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; - AE4E58161C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; - AE4E58171C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; - AE4E58181C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */ = {isa = PBXBuildFile; fileRef = AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */; }; - AED9C8631CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */; }; - AED9C8641CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */; }; - AED9C8651CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */; }; - CE57CEDD1C430BD200D63004 /* NSBundle+CurrentTestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED81C430BD200D63004 /* NSBundle+CurrentTestBundle.swift */; }; - CE57CEDE1C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED91C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift */; }; - CE57CEDF1C430BD200D63004 /* QuickTestSuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDA1C430BD200D63004 /* QuickTestSuite.swift */; }; - CE57CEE01C430BD200D63004 /* String+FileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDB1C430BD200D63004 /* String+FileName.swift */; }; - CE57CEE11C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDC1C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m */; }; - CE590E1A1C431FE300253D19 /* QuickTestSuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDA1C430BD200D63004 /* QuickTestSuite.swift */; }; - CE590E1B1C431FE300253D19 /* QuickSelectedTestSuiteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED91C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift */; }; - CE590E1C1C431FE300253D19 /* NSBundle+CurrentTestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED81C430BD200D63004 /* NSBundle+CurrentTestBundle.swift */; }; - CE590E1D1C431FE300253D19 /* String+FileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDB1C430BD200D63004 /* String+FileName.swift */; }; - CE590E1E1C431FE300253D19 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDC1C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m */; }; - CE590E1F1C431FE400253D19 /* QuickTestSuite.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDA1C430BD200D63004 /* QuickTestSuite.swift */; }; - CE590E201C431FE400253D19 /* QuickSelectedTestSuiteBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED91C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift */; }; - CE590E211C431FE400253D19 /* NSBundle+CurrentTestBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CED81C430BD200D63004 /* NSBundle+CurrentTestBundle.swift */; }; - CE590E221C431FE400253D19 /* String+FileName.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDB1C430BD200D63004 /* String+FileName.swift */; }; - CE590E231C431FE400253D19 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE57CEDC1C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m */; }; - DA02C91919A8073100093156 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA02C91819A8073100093156 /* ExampleMetadata.swift */; }; - DA02C91A19A8073100093156 /* ExampleMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA02C91819A8073100093156 /* ExampleMetadata.swift */; }; - DA05D61019F73A3800771050 /* AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA05D60F19F73A3800771050 /* AfterEachTests.swift */; }; - DA05D61119F73A3800771050 /* AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA05D60F19F73A3800771050 /* AfterEachTests.swift */; }; - DA07722E1A4E5B7B0098839D /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; - DA07722F1A4E5B7C0098839D /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; - DA169E4819FF5DF100619816 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA169E4719FF5DF100619816 /* Configuration.swift */; }; - DA169E4919FF5DF100619816 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA169E4719FF5DF100619816 /* Configuration.swift */; }; - DA3124E619FCAEE8002858A7 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E219FCAEE8002858A7 /* DSL.swift */; }; - DA3124E719FCAEE8002858A7 /* DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E219FCAEE8002858A7 /* DSL.swift */; }; - DA3124E819FCAEE8002858A7 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3124E319FCAEE8002858A7 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA3124E919FCAEE8002858A7 /* QCKDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DA3124E319FCAEE8002858A7 /* QCKDSL.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA3124EA19FCAEE8002858A7 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E419FCAEE8002858A7 /* QCKDSL.m */; }; - DA3124EB19FCAEE8002858A7 /* QCKDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E419FCAEE8002858A7 /* QCKDSL.m */; }; - DA3124EC19FCAEE8002858A7 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E519FCAEE8002858A7 /* World+DSL.swift */; }; - DA3124ED19FCAEE8002858A7 /* World+DSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA3124E519FCAEE8002858A7 /* World+DSL.swift */; }; - DA3E7A341A1E66C600CCE408 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; }; - DA3E7A351A1E66CB00CCE408 /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; }; - DA408BE219FF5599005DF92A /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BDF19FF5599005DF92A /* Closures.swift */; }; - DA408BE319FF5599005DF92A /* Closures.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BDF19FF5599005DF92A /* Closures.swift */; }; - DA408BE419FF5599005DF92A /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE019FF5599005DF92A /* ExampleHooks.swift */; }; - DA408BE519FF5599005DF92A /* ExampleHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE019FF5599005DF92A /* ExampleHooks.swift */; }; - DA408BE619FF5599005DF92A /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE119FF5599005DF92A /* SuiteHooks.swift */; }; - DA408BE719FF5599005DF92A /* SuiteHooks.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA408BE119FF5599005DF92A /* SuiteHooks.swift */; }; - DA5663EE1A4C8D8500193C88 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEB6B8E1943873100289F44 /* Quick.framework */; }; - DA5663F41A4C8D9A00193C88 /* FocusedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9876BF1A4C87200004AA17 /* FocusedTests.swift */; }; - DA6B30181A4DB0D500FFB148 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA6B30171A4DB0D500FFB148 /* Filter.swift */; }; - DA6B30191A4DB0D500FFB148 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA6B30171A4DB0D500FFB148 /* Filter.swift */; }; - DA7AE6F119FC493F000AFDCE /* ItTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7AE6F019FC493F000AFDCE /* ItTests.swift */; }; - DA7AE6F219FC493F000AFDCE /* ItTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7AE6F019FC493F000AFDCE /* ItTests.swift */; }; - DA8940F01B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */; }; - DA8940F11B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */; }; - DA8C00211A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */; }; - DA8C00221A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */; }; - DA8F919919F31680006F6675 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; - DA8F919A19F31680006F6675 /* QCKSpecRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919619F31680006F6675 /* QCKSpecRunner.m */; }; - DA8F919D19F31921006F6675 /* FailureTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */; }; - DA8F919E19F31921006F6675 /* FailureTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */; }; - DA8F91A519F3208B006F6675 /* BeforeSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */; }; - DA8F91A619F3208B006F6675 /* BeforeSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */; }; - DA8F91A819F32556006F6675 /* AfterSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */; }; - DA8F91A919F32556006F6675 /* AfterSuiteTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */; }; - DA8F91AB19F3299E006F6675 /* SharedExamplesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */; }; - DA8F91AC19F3299E006F6675 /* SharedExamplesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */; }; - DA8F91AE19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */; }; - DA8F91AF19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */; }; - DA9876B81A4C70EB0004AA17 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A5D117C19473F2100F6D13D /* Quick.framework */; }; - DA9876C11A4C87200004AA17 /* FocusedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9876BF1A4C87200004AA17 /* FocusedTests.swift */; }; - DAA63EA319F7637300CD0A3B /* PendingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAA63EA219F7637300CD0A3B /* PendingTests.swift */; }; - DAA63EA419F7637300CD0A3B /* PendingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAA63EA219F7637300CD0A3B /* PendingTests.swift */; }; - DAA7C0D719F777EB0093D1D9 /* BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA87078219F48775008C04AC /* BeforeEachTests.swift */; }; - DAB0136F19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */; }; - DAB0137019FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */; }; - DAB067E919F7801C00F970AC /* BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA87078219F48775008C04AC /* BeforeEachTests.swift */; }; - DAD297651AA8129D001D25CD /* Nimble.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8100E901A1E4447007595ED /* Nimble.framework */; }; - DAE714F019FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */; }; - DAE714F119FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */; }; - DAE714F319FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */; }; - DAE714F419FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */; }; - DAE714F719FF6812005905B8 /* Configuration+AfterEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */; }; - DAE714F819FF6812005905B8 /* Configuration+AfterEach.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */; }; - DAE714FA19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */; }; - DAE714FB19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */; }; - DAE714FE19FF6A62005905B8 /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE714FF19FF6A62005905B8 /* QuickConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAE7150019FF6A62005905B8 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */; }; - DAE7150119FF6A62005905B8 /* QuickConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */; }; - DAEB6B941943873100289F44 /* Quick.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB6B931943873100289F44 /* Quick.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAEB6B9A1943873100289F44 /* Quick.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEB6B8E1943873100289F44 /* Quick.framework */; }; - DAED1EC41B1105BC006F61EC /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC21B1105BC006F61EC /* World.h */; }; - DAED1EC51B1105BC006F61EC /* World.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC21B1105BC006F61EC /* World.h */; }; - DAED1ECA1B110699006F61EC /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC81B110699006F61EC /* World+DSL.h */; }; - DAED1ECB1B110699006F61EC /* World+DSL.h in Headers */ = {isa = PBXBuildFile; fileRef = DAED1EC81B110699006F61EC /* World+DSL.h */; }; - DAF28BC31A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */; }; - DAF28BC41A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */ = {isa = PBXBuildFile; fileRef = DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 047655511949F4CB00B288BB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAEB6B8D1943873100289F44; - remoteInfo = Quick; - }; - 047655531949F4CB00B288BB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAEB6B8D1943873100289F44; - remoteInfo = Quick; - }; - 04765555194A327000B288BB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAEB6B8D1943873100289F44; - remoteInfo = Quick; - }; - 04DC97E4194B4A6000CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAEB6B8D1943873100289F44; - remoteInfo = Quick; - }; - 04DC97E6194B4A6000CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAEB6B8D1943873100289F44; - remoteInfo = Quick; - }; - 04DC97E8194B4B7E00CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5A5D117B19473F2100F6D13D; - remoteInfo = "Quick-iOS"; - }; - 04DC97EA194B4B9B00CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5A5D117B19473F2100F6D13D; - remoteInfo = "Quick-iOS"; - }; - 04DC97F0194B82DB00CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAEB6B8D1943873100289F44; - remoteInfo = Quick; - }; - 04DC97F2194B82DE00CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5A5D117B19473F2100F6D13D; - remoteInfo = "Quick-iOS"; - }; - 04DC97F6194B831200CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5A5D117B19473F2100F6D13D; - remoteInfo = "Quick-iOS"; - }; - 04DC97F8194B834000CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAEB6B8D1943873100289F44; - remoteInfo = Quick; - }; - 04DC97FA194B834100CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5A5D117B19473F2100F6D13D; - remoteInfo = "Quick-iOS"; - }; - 04DC97FC194B834B00CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAEB6B8D1943873100289F44; - remoteInfo = Quick; - }; - 04DC97FE194B835E00CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5A5D117B19473F2100F6D13D; - remoteInfo = "Quick-iOS"; - }; - 04DC9800194B836100CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAEB6B8D1943873100289F44; - remoteInfo = Quick; - }; - 04DC9802194B836300CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5A5D117B19473F2100F6D13D; - remoteInfo = "Quick-iOS"; - }; - 04DC9804194B838400CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAEB6B8D1943873100289F44; - remoteInfo = Quick; - }; - 04DC9806194B838700CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5A5D117B19473F2100F6D13D; - remoteInfo = "Quick-iOS"; - }; - 04DC9808194B838B00CE00B6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAEB6B8D1943873100289F44; - remoteInfo = Quick; - }; - 1F118CE01BDCA4AB005013A2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F118CD41BDCA4AB005013A2; - remoteInfo = "Quick-tvOS"; - }; - 1F118CF61BDCA4BB005013A2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 1F118CD41BDCA4AB005013A2; - remoteInfo = "Quick-tvOS"; - }; - 5A5D118819473F2100F6D13D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5A5D117B19473F2100F6D13D; - remoteInfo = "Quick-iOS"; - }; - 5A5D11EF194741B500F6D13D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5A5D117B19473F2100F6D13D; - remoteInfo = "Quick-iOS"; - }; - 5A5D11F1194741B500F6D13D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5A5D117B19473F2100F6D13D; - remoteInfo = "Quick-iOS"; - }; - 93625F381951DDC8006B1FE1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAEB6B8D1943873100289F44; - remoteInfo = Quick; - }; - DA5663EF1A4C8D8500193C88 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAEB6B8D1943873100289F44; - remoteInfo = "Quick-OSX"; - }; - DA9876B91A4C70EB0004AA17 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5A5D117B19473F2100F6D13D; - remoteInfo = "Quick-iOS"; - }; - DAEB6B9B1943873100289F44 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = DAEB6B851943873100289F44 /* Project object */; - proxyType = 1; - remoteGlobalIDString = DAEB6B8D1943873100289F44; - remoteInfo = Quick; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 1F118CD51BDCA4AB005013A2 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F118CDE1BDCA4AB005013A2 /* Quick-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Quick-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F118CF01BDCA4BB005013A2 /* QuickFocused-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "QuickFocused-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F118D341BDCA657005013A2 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = "Externals/Nimble/build/Debug-appletvos/Nimble.framework"; sourceTree = ""; }; - 1F118D361BDCA65C005013A2 /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Nimble.framework; path = "Externals/Nimble/build/Debug-appletvos/Nimble.framework"; sourceTree = ""; }; - 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = XCTestCaseProvider.swift; sourceTree = ""; }; - 34C586071C4AC5E500D4F057 /* ErrorUtility.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ErrorUtility.swift; sourceTree = ""; }; - 34F3759C19515CA700CE1B99 /* Callsite.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Callsite.swift; sourceTree = ""; }; - 34F3759E19515CA700CE1B99 /* Example.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Example.swift; sourceTree = ""; }; - 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleGroup.swift; sourceTree = ""; }; - 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+QCKSelectorName.h"; sourceTree = ""; }; - 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+QCKSelectorName.m"; sourceTree = ""; }; - 34F375A419515CA700CE1B99 /* QuickSpec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickSpec.h; sourceTree = ""; }; - 34F375A519515CA700CE1B99 /* QuickSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuickSpec.m; sourceTree = ""; }; - 34F375A619515CA700CE1B99 /* World.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = World.swift; sourceTree = ""; }; - 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "AfterEachTests+ObjC.m"; sourceTree = ""; }; - 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "PendingTests+ObjC.m"; sourceTree = ""; }; - 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SharedExamplesTests+ObjC.m"; sourceTree = ""; }; - 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SharedExamples+BeforeEachTests+ObjC.m"; sourceTree = ""; }; - 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "AfterSuiteTests+ObjC.m"; sourceTree = ""; }; - 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "BeforeSuiteTests+ObjC.m"; sourceTree = ""; }; - 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ItTests+ObjC.m"; sourceTree = ""; }; - 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "BeforeEachTests+ObjC.m"; sourceTree = ""; }; - 5A5D117C19473F2100F6D13D /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5A5D118619473F2100F6D13D /* Quick-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Quick-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - 7B44ADBD1C5444940007AF2E /* HooksPhase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HooksPhase.swift; sourceTree = ""; }; - 7B5358CA1C3D4E2A00A23FAA /* ContextTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContextTests.swift; sourceTree = ""; }; - 8D010A561C11726F00633E2B /* DescribeTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DescribeTests.swift; sourceTree = ""; }; - 96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "QuickSpec+QuickSpec_MethodList.h"; sourceTree = ""; }; - 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "QuickSpec+QuickSpec_MethodList.m"; sourceTree = ""; }; - AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestObservationCenter+QCKSuspendObservation.m"; sourceTree = ""; }; - AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrossReferencingSpecs.swift; sourceTree = ""; }; - CE57CED81C430BD200D63004 /* NSBundle+CurrentTestBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSBundle+CurrentTestBundle.swift"; sourceTree = ""; }; - CE57CED91C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QuickSelectedTestSuiteBuilder.swift; sourceTree = ""; }; - CE57CEDA1C430BD200D63004 /* QuickTestSuite.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QuickTestSuite.swift; sourceTree = ""; }; - CE57CEDB1C430BD200D63004 /* String+FileName.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+FileName.swift"; sourceTree = ""; }; - CE57CEDC1C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "XCTestSuite+QuickTestSuiteBuilder.m"; sourceTree = ""; }; - DA02C91819A8073100093156 /* ExampleMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleMetadata.swift; sourceTree = ""; }; - DA05D60F19F73A3800771050 /* AfterEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AfterEachTests.swift; sourceTree = ""; }; - DA169E4719FF5DF100619816 /* Configuration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Configuration.swift; sourceTree = ""; }; - DA3124E219FCAEE8002858A7 /* DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DSL.swift; sourceTree = ""; }; - DA3124E319FCAEE8002858A7 /* QCKDSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QCKDSL.h; sourceTree = ""; }; - DA3124E419FCAEE8002858A7 /* QCKDSL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QCKDSL.m; sourceTree = ""; }; - DA3124E519FCAEE8002858A7 /* World+DSL.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "World+DSL.swift"; sourceTree = ""; }; - DA408BDF19FF5599005DF92A /* Closures.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Closures.swift; sourceTree = ""; }; - DA408BE019FF5599005DF92A /* ExampleHooks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleHooks.swift; sourceTree = ""; }; - DA408BE119FF5599005DF92A /* SuiteHooks.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SuiteHooks.swift; sourceTree = ""; }; - DA5663E81A4C8D8500193C88 /* QuickFocused-OSXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "QuickFocused-OSXTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - DA6B30171A4DB0D500FFB148 /* Filter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Filter.swift; sourceTree = ""; }; - DA7AE6F019FC493F000AFDCE /* ItTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItTests.swift; sourceTree = ""; }; - DA87078219F48775008C04AC /* BeforeEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeforeEachTests.swift; sourceTree = ""; }; - DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "FailureUsingXCTAssertTests+ObjC.m"; sourceTree = ""; }; - DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuickConfigurationTests.m; sourceTree = ""; }; - DA8F919519F31680006F6675 /* QCKSpecRunner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QCKSpecRunner.h; sourceTree = ""; }; - DA8F919619F31680006F6675 /* QCKSpecRunner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QCKSpecRunner.m; sourceTree = ""; }; - DA8F919719F31680006F6675 /* QuickTestsBridgingHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickTestsBridgingHeader.h; sourceTree = ""; }; - DA8F919819F31680006F6675 /* XCTestObservationCenter+QCKSuspendObservation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "XCTestObservationCenter+QCKSuspendObservation.h"; sourceTree = ""; }; - DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "FailureTests+ObjC.m"; sourceTree = ""; }; - DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BeforeSuiteTests.swift; sourceTree = ""; }; - DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AfterSuiteTests.swift; sourceTree = ""; }; - DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SharedExamplesTests.swift; sourceTree = ""; }; - DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FunctionalTests_SharedExamplesTests_SharedExamples.swift; sourceTree = ""; }; - DA9876B21A4C70EB0004AA17 /* QuickFocused-iOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "QuickFocused-iOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - DA9876BF1A4C87200004AA17 /* FocusedTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FocusedTests.swift; sourceTree = ""; }; - DA9876C01A4C87200004AA17 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DAA63EA219F7637300CD0A3B /* PendingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PendingTests.swift; sourceTree = ""; }; - DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SharedExamples+BeforeEachTests.swift"; sourceTree = ""; }; - DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Configuration+BeforeEachTests.swift"; sourceTree = ""; }; - DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Configuration+BeforeEach.swift"; sourceTree = ""; }; - DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Configuration+AfterEach.swift"; sourceTree = ""; }; - DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Configuration+AfterEachTests.swift"; sourceTree = ""; }; - DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QuickConfiguration.h; sourceTree = ""; }; - DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QuickConfiguration.m; sourceTree = ""; }; - DAEB6B8E1943873100289F44 /* Quick.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Quick.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - DAEB6B921943873100289F44 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DAEB6B931943873100289F44 /* Quick.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Quick.h; sourceTree = ""; }; - DAEB6B991943873100289F44 /* Quick-OSXTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Quick-OSXTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - DAEB6B9F1943873100289F44 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DAED1EC21B1105BC006F61EC /* World.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = World.h; sourceTree = ""; }; - DAED1EC81B110699006F61EC /* World+DSL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "World+DSL.h"; sourceTree = ""; }; - DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "FocusedTests+ObjC.m"; sourceTree = ""; }; - F8100E901A1E4447007595ED /* Nimble.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Nimble.framework; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 1F118CD11BDCA4AB005013A2 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F118CDB1BDCA4AB005013A2 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F118CDF1BDCA4AB005013A2 /* Quick.framework in Frameworks */, - 1F118D351BDCA657005013A2 /* Nimble.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F118CED1BDCA4BB005013A2 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F118CF51BDCA4BB005013A2 /* Quick.framework in Frameworks */, - 1F118D371BDCA65C005013A2 /* Nimble.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5A5D117819473F2100F6D13D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5A5D118319473F2100F6D13D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 5A5D118719473F2100F6D13D /* Quick.framework in Frameworks */, - DA3E7A351A1E66CB00CCE408 /* Nimble.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA5663E51A4C8D8500193C88 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DA5663EE1A4C8D8500193C88 /* Quick.framework in Frameworks */, - 1FD0CFAD1AFA0B8C00874CC1 /* Nimble.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA9876AF1A4C70EB0004AA17 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DA9876B81A4C70EB0004AA17 /* Quick.framework in Frameworks */, - DAD297651AA8129D001D25CD /* Nimble.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DAEB6B8A1943873100289F44 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DAEB6B961943873100289F44 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DA3E7A341A1E66C600CCE408 /* Nimble.framework in Frameworks */, - DAEB6B9A1943873100289F44 /* Quick.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 1F118D331BDCA645005013A2 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 1F118D361BDCA65C005013A2 /* Nimble.framework */, - 1F118D341BDCA657005013A2 /* Nimble.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - DA169E4619FF5DF100619816 /* Configuration */ = { - isa = PBXGroup; - children = ( - DAE714FC19FF6A62005905B8 /* QuickConfiguration.h */, - DAE714FD19FF6A62005905B8 /* QuickConfiguration.m */, - DA169E4719FF5DF100619816 /* Configuration.swift */, - ); - path = Configuration; - sourceTree = ""; - }; - DA3124E119FCAEE8002858A7 /* DSL */ = { - isa = PBXGroup; - children = ( - DA3124E519FCAEE8002858A7 /* World+DSL.swift */, - DAED1EC81B110699006F61EC /* World+DSL.h */, - DA3124E219FCAEE8002858A7 /* DSL.swift */, - DA3124E319FCAEE8002858A7 /* QCKDSL.h */, - DA3124E419FCAEE8002858A7 /* QCKDSL.m */, - ); - path = DSL; - sourceTree = ""; - }; - DA408BDE19FF5599005DF92A /* Hooks */ = { - isa = PBXGroup; - children = ( - DA408BDF19FF5599005DF92A /* Closures.swift */, - DA408BE019FF5599005DF92A /* ExampleHooks.swift */, - DA408BE119FF5599005DF92A /* SuiteHooks.swift */, - 7B44ADBD1C5444940007AF2E /* HooksPhase.swift */, - ); - path = Hooks; - sourceTree = ""; - }; - DA8F919419F31680006F6675 /* Helpers */ = { - isa = PBXGroup; - children = ( - DA8F919719F31680006F6675 /* QuickTestsBridgingHeader.h */, - DA8F919519F31680006F6675 /* QCKSpecRunner.h */, - DA8F919619F31680006F6675 /* QCKSpecRunner.m */, - 34ACFB7B1C34859300942064 /* XCTestCaseProvider.swift */, - DA8F919819F31680006F6675 /* XCTestObservationCenter+QCKSuspendObservation.h */, - 96327C611C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h */, - 96327C621C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m */, - AEB080BB1C72F028004917D3 /* XCTestObservationCenter+QCKSuspendObservation.m */, - ); - path = Helpers; - sourceTree = ""; - }; - DA8F919B19F3189D006F6675 /* FunctionalTests */ = { - isa = PBXGroup; - children = ( - DAE714E919FF65A6005905B8 /* Configuration */, - DA7AE6F019FC493F000AFDCE /* ItTests.swift */, - 479C31E11A36156E00DA8718 /* ItTests+ObjC.m */, - 8D010A561C11726F00633E2B /* DescribeTests.swift */, - DA8F919C19F31921006F6675 /* FailureTests+ObjC.m */, - DA8940EF1B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m */, - DA87078219F48775008C04AC /* BeforeEachTests.swift */, - 47FAEA341A3F45ED005A1D2F /* BeforeEachTests+ObjC.m */, - DA05D60F19F73A3800771050 /* AfterEachTests.swift */, - 470D6EC91A43409600043E50 /* AfterEachTests+ObjC.m */, - DAA63EA219F7637300CD0A3B /* PendingTests.swift */, - 4715903F1A488F3F00FBA644 /* PendingTests+ObjC.m */, - DA8F91A419F3208B006F6675 /* BeforeSuiteTests.swift */, - 47876F7B1A4999B0002575C7 /* BeforeSuiteTests+ObjC.m */, - DA8F91A719F32556006F6675 /* AfterSuiteTests.swift */, - 477217391A59C1B00022013E /* AfterSuiteTests+ObjC.m */, - DA8F91AA19F3299E006F6675 /* SharedExamplesTests.swift */, - 4728253A1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m */, - DAB0136E19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift */, - 4748E8931A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m */, - 7B5358CA1C3D4E2A00A23FAA /* ContextTests.swift */, - AED9C8621CC8A7BD00432F62 /* CrossReferencingSpecs.swift */, - ); - path = FunctionalTests; - sourceTree = ""; - }; - DA9876BE1A4C87200004AA17 /* QuickFocusedTests */ = { - isa = PBXGroup; - children = ( - DA9876BF1A4C87200004AA17 /* FocusedTests.swift */, - DAF28BC21A4DB8EC00A5D9BF /* FocusedTests+ObjC.m */, - DA9876C31A4C87310004AA17 /* Supporting Files */, - ); - name = QuickFocusedTests; - path = Sources/QuickFocusedTests; - sourceTree = ""; - }; - DA9876C31A4C87310004AA17 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - DA9876C01A4C87200004AA17 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - DAE714E919FF65A6005905B8 /* Configuration */ = { - isa = PBXGroup; - children = ( - DAE714F519FF67FF005905B8 /* AfterEach */, - DAE714EA19FF65A6005905B8 /* BeforeEach */, - ); - path = Configuration; - sourceTree = ""; - }; - DAE714EA19FF65A6005905B8 /* BeforeEach */ = { - isa = PBXGroup; - children = ( - DAE714F219FF65E7005905B8 /* Configuration+BeforeEach.swift */, - DAE714EF19FF65D3005905B8 /* Configuration+BeforeEachTests.swift */, - ); - path = BeforeEach; - sourceTree = ""; - }; - DAE714F519FF67FF005905B8 /* AfterEach */ = { - isa = PBXGroup; - children = ( - DAE714F619FF6812005905B8 /* Configuration+AfterEach.swift */, - DAE714F919FF682A005905B8 /* Configuration+AfterEachTests.swift */, - ); - path = AfterEach; - sourceTree = ""; - }; - DAEB6B841943873100289F44 = { - isa = PBXGroup; - children = ( - DAEB6B901943873100289F44 /* Quick */, - DAEB6B9D1943873100289F44 /* QuickTests */, - DA9876BE1A4C87200004AA17 /* QuickFocusedTests */, - DAEB6B8F1943873100289F44 /* Products */, - 1F118D331BDCA645005013A2 /* Frameworks */, - ); - indentWidth = 4; - sourceTree = ""; - tabWidth = 4; - }; - DAEB6B8F1943873100289F44 /* Products */ = { - isa = PBXGroup; - children = ( - DAEB6B8E1943873100289F44 /* Quick.framework */, - DAEB6B991943873100289F44 /* Quick-OSXTests.xctest */, - 5A5D117C19473F2100F6D13D /* Quick.framework */, - 5A5D118619473F2100F6D13D /* Quick-iOSTests.xctest */, - DA9876B21A4C70EB0004AA17 /* QuickFocused-iOSTests.xctest */, - DA5663E81A4C8D8500193C88 /* QuickFocused-OSXTests.xctest */, - 1F118CD51BDCA4AB005013A2 /* Quick.framework */, - 1F118CDE1BDCA4AB005013A2 /* Quick-tvOSTests.xctest */, - 1F118CF01BDCA4BB005013A2 /* QuickFocused-tvOSTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - DAEB6B901943873100289F44 /* Quick */ = { - isa = PBXGroup; - children = ( - DA169E4619FF5DF100619816 /* Configuration */, - DA3124E119FCAEE8002858A7 /* DSL */, - DA408BDE19FF5599005DF92A /* Hooks */, - DAEB6B931943873100289F44 /* Quick.h */, - 34F375A619515CA700CE1B99 /* World.swift */, - DAED1EC21B1105BC006F61EC /* World.h */, - 34F3759E19515CA700CE1B99 /* Example.swift */, - DA02C91819A8073100093156 /* ExampleMetadata.swift */, - 34F3759F19515CA700CE1B99 /* ExampleGroup.swift */, - 34F3759C19515CA700CE1B99 /* Callsite.swift */, - DA6B30171A4DB0D500FFB148 /* Filter.swift */, - 34F375A419515CA700CE1B99 /* QuickSpec.h */, - 34F375A519515CA700CE1B99 /* QuickSpec.m */, - CE57CEDA1C430BD200D63004 /* QuickTestSuite.swift */, - CE57CED91C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift */, - CE57CED81C430BD200D63004 /* NSBundle+CurrentTestBundle.swift */, - 34F375A019515CA700CE1B99 /* NSString+QCKSelectorName.h */, - 34F375A119515CA700CE1B99 /* NSString+QCKSelectorName.m */, - CE57CEDB1C430BD200D63004 /* String+FileName.swift */, - CE57CEDC1C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m */, - 34C586071C4AC5E500D4F057 /* ErrorUtility.swift */, - DAEB6B911943873100289F44 /* Supporting Files */, - ); - name = Quick; - path = Sources/Quick; - sourceTree = ""; - }; - DAEB6B911943873100289F44 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - DAEB6B921943873100289F44 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - DAEB6B9D1943873100289F44 /* QuickTests */ = { - isa = PBXGroup; - children = ( - DA8C00201A01E4B900CE58A6 /* QuickConfigurationTests.m */, - DA8F919419F31680006F6675 /* Helpers */, - DAEB6BCD194387D700289F44 /* Fixtures */, - DA8F919B19F3189D006F6675 /* FunctionalTests */, - F8100E941A1E4469007595ED /* Frameworks */, - DAEB6B9E1943873100289F44 /* Supporting Files */, - ); - name = QuickTests; - path = Sources/QuickTests; - sourceTree = ""; - }; - DAEB6B9E1943873100289F44 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - DAEB6B9F1943873100289F44 /* Info.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - DAEB6BCD194387D700289F44 /* Fixtures */ = { - isa = PBXGroup; - children = ( - DA8F91AD19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift */, - ); - path = Fixtures; - sourceTree = ""; - }; - F8100E941A1E4469007595ED /* Frameworks */ = { - isa = PBXGroup; - children = ( - F8100E901A1E4447007595ED /* Nimble.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 1F118CD21BDCA4AB005013A2 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F118D2B1BDCA5B6005013A2 /* Quick.h in Headers */, - 1F118D261BDCA5AF005013A2 /* World+DSL.h in Headers */, - 96327C651C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */, - 1F118D271BDCA5AF005013A2 /* World.h in Headers */, - 1F118D2A1BDCA5B6005013A2 /* QCKDSL.h in Headers */, - 1F118D2C1BDCA5B6005013A2 /* QuickSpec.h in Headers */, - 1F118D281BDCA5AF005013A2 /* NSString+QCKSelectorName.h in Headers */, - 1F118D291BDCA5B6005013A2 /* QuickConfiguration.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5A5D117919473F2100F6D13D /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 34F375B019515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */, - DAE714FF19FF6A62005905B8 /* QuickConfiguration.h in Headers */, - 96327C641C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */, - DA3124E919FCAEE8002858A7 /* QCKDSL.h in Headers */, - DAED1ECB1B110699006F61EC /* World+DSL.h in Headers */, - DAED1EC51B1105BC006F61EC /* World.h in Headers */, - 34F375B819515CA700CE1B99 /* QuickSpec.h in Headers */, - 5A5D11A7194740E000F6D13D /* Quick.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DAEB6B8B1943873100289F44 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 34F375AF19515CA700CE1B99 /* NSString+QCKSelectorName.h in Headers */, - DAE714FE19FF6A62005905B8 /* QuickConfiguration.h in Headers */, - 96327C631C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.h in Headers */, - DA3124E819FCAEE8002858A7 /* QCKDSL.h in Headers */, - DAED1ECA1B110699006F61EC /* World+DSL.h in Headers */, - DAED1EC41B1105BC006F61EC /* World.h in Headers */, - 34F375B719515CA700CE1B99 /* QuickSpec.h in Headers */, - DAEB6B941943873100289F44 /* Quick.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 1F118CD41BDCA4AB005013A2 /* Quick-tvOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F118CE61BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget "Quick-tvOS" */; - buildPhases = ( - 1F118CD01BDCA4AB005013A2 /* Sources */, - 1F118CD11BDCA4AB005013A2 /* Frameworks */, - 1F118CD21BDCA4AB005013A2 /* Headers */, - 1F118CD31BDCA4AB005013A2 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Quick-tvOS"; - productName = "Quick-tvOS"; - productReference = 1F118CD51BDCA4AB005013A2 /* Quick.framework */; - productType = "com.apple.product-type.framework"; - }; - 1F118CDD1BDCA4AB005013A2 /* Quick-tvOSTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F118CE91BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget "Quick-tvOSTests" */; - buildPhases = ( - 1F118CDA1BDCA4AB005013A2 /* Sources */, - 1F118CDB1BDCA4AB005013A2 /* Frameworks */, - 1F118CDC1BDCA4AB005013A2 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1F118CE11BDCA4AB005013A2 /* PBXTargetDependency */, - ); - name = "Quick-tvOSTests"; - productName = "Quick-tvOSTests"; - productReference = 1F118CDE1BDCA4AB005013A2 /* Quick-tvOSTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 1F118CEF1BDCA4BB005013A2 /* QuickFocused-tvOSTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1F118CF81BDCA4BC005013A2 /* Build configuration list for PBXNativeTarget "QuickFocused-tvOSTests" */; - buildPhases = ( - 1F118CEC1BDCA4BB005013A2 /* Sources */, - 1F118CED1BDCA4BB005013A2 /* Frameworks */, - 1F118CEE1BDCA4BB005013A2 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1F118CF71BDCA4BB005013A2 /* PBXTargetDependency */, - ); - name = "QuickFocused-tvOSTests"; - productName = "QuickFocused-tvOSTests"; - productReference = 1F118CF01BDCA4BB005013A2 /* QuickFocused-tvOSTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 5A5D117B19473F2100F6D13D /* Quick-iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5A5D119319473F2100F6D13D /* Build configuration list for PBXNativeTarget "Quick-iOS" */; - buildPhases = ( - 5A5D117719473F2100F6D13D /* Sources */, - 5A5D117819473F2100F6D13D /* Frameworks */, - 5A5D117919473F2100F6D13D /* Headers */, - 5A5D117A19473F2100F6D13D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Quick-iOS"; - productName = "Quick-iOS"; - productReference = 5A5D117C19473F2100F6D13D /* Quick.framework */; - productType = "com.apple.product-type.framework"; - }; - 5A5D118519473F2100F6D13D /* Quick-iOSTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5A5D119419473F2100F6D13D /* Build configuration list for PBXNativeTarget "Quick-iOSTests" */; - buildPhases = ( - 5A5D118219473F2100F6D13D /* Sources */, - 5A5D118319473F2100F6D13D /* Frameworks */, - 5A5D118419473F2100F6D13D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 5A5D118919473F2100F6D13D /* PBXTargetDependency */, - 5A5D11F0194741B500F6D13D /* PBXTargetDependency */, - 5A5D11F2194741B500F6D13D /* PBXTargetDependency */, - 04DC97E9194B4B7E00CE00B6 /* PBXTargetDependency */, - 04DC97EB194B4B9B00CE00B6 /* PBXTargetDependency */, - 04DC97F3194B82DE00CE00B6 /* PBXTargetDependency */, - 04DC97F7194B831200CE00B6 /* PBXTargetDependency */, - 04DC97FB194B834100CE00B6 /* PBXTargetDependency */, - 04DC97FF194B835E00CE00B6 /* PBXTargetDependency */, - 04DC9803194B836300CE00B6 /* PBXTargetDependency */, - 04DC9807194B838700CE00B6 /* PBXTargetDependency */, - ); - name = "Quick-iOSTests"; - productName = "Quick-iOSTests"; - productReference = 5A5D118619473F2100F6D13D /* Quick-iOSTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - DA5663E71A4C8D8500193C88 /* QuickFocused-OSXTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = DA5663F31A4C8D8500193C88 /* Build configuration list for PBXNativeTarget "QuickFocused-OSXTests" */; - buildPhases = ( - DA5663E41A4C8D8500193C88 /* Sources */, - DA5663E51A4C8D8500193C88 /* Frameworks */, - DA5663E61A4C8D8500193C88 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - DA5663F01A4C8D8500193C88 /* PBXTargetDependency */, - ); - name = "QuickFocused-OSXTests"; - productName = "QuickFocused-OSXTests"; - productReference = DA5663E81A4C8D8500193C88 /* QuickFocused-OSXTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - DA9876B11A4C70EB0004AA17 /* QuickFocused-iOSTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = DA9876BD1A4C70EB0004AA17 /* Build configuration list for PBXNativeTarget "QuickFocused-iOSTests" */; - buildPhases = ( - DA9876AE1A4C70EB0004AA17 /* Sources */, - DA9876AF1A4C70EB0004AA17 /* Frameworks */, - DA9876B01A4C70EB0004AA17 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - DA9876BA1A4C70EB0004AA17 /* PBXTargetDependency */, - ); - name = "QuickFocused-iOSTests"; - productName = "QuickFocused-iOSTests"; - productReference = DA9876B21A4C70EB0004AA17 /* QuickFocused-iOSTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - DAEB6B8D1943873100289F44 /* Quick-OSX */ = { - isa = PBXNativeTarget; - buildConfigurationList = DAEB6BA41943873200289F44 /* Build configuration list for PBXNativeTarget "Quick-OSX" */; - buildPhases = ( - DAEB6B891943873100289F44 /* Sources */, - DAEB6B8A1943873100289F44 /* Frameworks */, - DAEB6B8B1943873100289F44 /* Headers */, - DAEB6B8C1943873100289F44 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Quick-OSX"; - productName = Quick; - productReference = DAEB6B8E1943873100289F44 /* Quick.framework */; - productType = "com.apple.product-type.framework"; - }; - DAEB6B981943873100289F44 /* Quick-OSXTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = DAEB6BA71943873200289F44 /* Build configuration list for PBXNativeTarget "Quick-OSXTests" */; - buildPhases = ( - DAEB6B951943873100289F44 /* Sources */, - DAEB6B961943873100289F44 /* Frameworks */, - DAEB6B971943873100289F44 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - DAEB6B9C1943873100289F44 /* PBXTargetDependency */, - 047655521949F4CB00B288BB /* PBXTargetDependency */, - 047655541949F4CB00B288BB /* PBXTargetDependency */, - 04765556194A327000B288BB /* PBXTargetDependency */, - 04DC97E5194B4A6000CE00B6 /* PBXTargetDependency */, - 04DC97E7194B4A6000CE00B6 /* PBXTargetDependency */, - 04DC97F1194B82DB00CE00B6 /* PBXTargetDependency */, - 04DC97F9194B834000CE00B6 /* PBXTargetDependency */, - 04DC97FD194B834B00CE00B6 /* PBXTargetDependency */, - 04DC9801194B836100CE00B6 /* PBXTargetDependency */, - 04DC9805194B838400CE00B6 /* PBXTargetDependency */, - 04DC9809194B838B00CE00B6 /* PBXTargetDependency */, - 93625F391951DDC8006B1FE1 /* PBXTargetDependency */, - ); - name = "Quick-OSXTests"; - productName = QuickTests; - productReference = DAEB6B991943873100289F44 /* Quick-OSXTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - DAEB6B851943873100289F44 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0710; - LastUpgradeCheck = 0800; - ORGANIZATIONNAME = "Brian Ivan Gesiak"; - TargetAttributes = { - 1F118CD41BDCA4AB005013A2 = { - CreatedOnToolsVersion = 7.1; - LastSwiftMigration = 0800; - }; - 1F118CDD1BDCA4AB005013A2 = { - CreatedOnToolsVersion = 7.1; - LastSwiftMigration = 0800; - }; - 1F118CEF1BDCA4BB005013A2 = { - CreatedOnToolsVersion = 7.1; - LastSwiftMigration = 0800; - }; - 5A5D117B19473F2100F6D13D = { - CreatedOnToolsVersion = 6.0; - LastSwiftMigration = 0800; - }; - 5A5D118519473F2100F6D13D = { - CreatedOnToolsVersion = 6.0; - LastSwiftMigration = 0800; - TestTargetID = 5A5D117B19473F2100F6D13D; - }; - DA5663E71A4C8D8500193C88 = { - CreatedOnToolsVersion = 6.2; - LastSwiftMigration = 0800; - }; - DA9876B11A4C70EB0004AA17 = { - CreatedOnToolsVersion = 6.2; - LastSwiftMigration = 0800; - }; - DAEB6B8D1943873100289F44 = { - CreatedOnToolsVersion = 6.0; - LastSwiftMigration = 0800; - }; - DAEB6B981943873100289F44 = { - CreatedOnToolsVersion = 6.0; - LastSwiftMigration = 0800; - TestTargetID = DAEB6B8D1943873100289F44; - }; - }; - }; - buildConfigurationList = DAEB6B881943873100289F44 /* Build configuration list for PBXProject "Quick" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = DAEB6B841943873100289F44; - productRefGroup = DAEB6B8F1943873100289F44 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - DAEB6B8D1943873100289F44 /* Quick-OSX */, - DAEB6B981943873100289F44 /* Quick-OSXTests */, - DA5663E71A4C8D8500193C88 /* QuickFocused-OSXTests */, - 5A5D117B19473F2100F6D13D /* Quick-iOS */, - 5A5D118519473F2100F6D13D /* Quick-iOSTests */, - DA9876B11A4C70EB0004AA17 /* QuickFocused-iOSTests */, - 1F118CD41BDCA4AB005013A2 /* Quick-tvOS */, - 1F118CDD1BDCA4AB005013A2 /* Quick-tvOSTests */, - 1F118CEF1BDCA4BB005013A2 /* QuickFocused-tvOSTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 1F118CD31BDCA4AB005013A2 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F118CDC1BDCA4AB005013A2 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F118CEE1BDCA4BB005013A2 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5A5D117A19473F2100F6D13D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5A5D118419473F2100F6D13D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA5663E61A4C8D8500193C88 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA9876B01A4C70EB0004AA17 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DAEB6B8C1943873100289F44 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DAEB6B971943873100289F44 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 1F118CD01BDCA4AB005013A2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 96327C681C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */, - 1F118D031BDCA536005013A2 /* World.swift in Sources */, - CE590E201C431FE400253D19 /* QuickSelectedTestSuiteBuilder.swift in Sources */, - 1F118CFC1BDCA536005013A2 /* Configuration.swift in Sources */, - 1F118D021BDCA536005013A2 /* SuiteHooks.swift in Sources */, - 1F118CFB1BDCA536005013A2 /* QuickConfiguration.m in Sources */, - 34C5860A1C4AC5E500D4F057 /* ErrorUtility.swift in Sources */, - 1F118D041BDCA536005013A2 /* Example.swift in Sources */, - 1F118CFF1BDCA536005013A2 /* QCKDSL.m in Sources */, - CE590E211C431FE400253D19 /* NSBundle+CurrentTestBundle.swift in Sources */, - 1F118D071BDCA536005013A2 /* Callsite.swift in Sources */, - CE590E231C431FE400253D19 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */, - 1F118D081BDCA536005013A2 /* Filter.swift in Sources */, - 1F118CFD1BDCA536005013A2 /* World+DSL.swift in Sources */, - CE590E221C431FE400253D19 /* String+FileName.swift in Sources */, - 1F118D0A1BDCA536005013A2 /* NSString+QCKSelectorName.m in Sources */, - 1F118CFE1BDCA536005013A2 /* DSL.swift in Sources */, - 7B44ADC01C5444940007AF2E /* HooksPhase.swift in Sources */, - 1F118D001BDCA536005013A2 /* Closures.swift in Sources */, - 1F118D051BDCA536005013A2 /* ExampleMetadata.swift in Sources */, - 1F118D061BDCA536005013A2 /* ExampleGroup.swift in Sources */, - CE590E1F1C431FE400253D19 /* QuickTestSuite.swift in Sources */, - 1F118D091BDCA536005013A2 /* QuickSpec.m in Sources */, - 1F118D011BDCA536005013A2 /* ExampleHooks.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F118CDA1BDCA4AB005013A2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F118D381BDCA6E1005013A2 /* Configuration+BeforeEachTests.swift in Sources */, - 1F118D121BDCA556005013A2 /* ItTests.swift in Sources */, - 1F118D1C1BDCA556005013A2 /* BeforeSuiteTests.swift in Sources */, - 1F118D1D1BDCA556005013A2 /* BeforeSuiteTests+ObjC.m in Sources */, - 1F118D0E1BDCA547005013A2 /* QCKSpecRunner.m in Sources */, - 1F118D141BDCA556005013A2 /* FailureTests+ObjC.m in Sources */, - 1F118D0F1BDCA54B005013A2 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */, - 1F118D101BDCA556005013A2 /* Configuration+AfterEach.swift in Sources */, - 1F118D1F1BDCA556005013A2 /* AfterSuiteTests+ObjC.m in Sources */, - 1F118D1A1BDCA556005013A2 /* PendingTests.swift in Sources */, - 1F118D171BDCA556005013A2 /* BeforeEachTests+ObjC.m in Sources */, - 1F118D231BDCA556005013A2 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */, - 1F118D151BDCA556005013A2 /* FailureUsingXCTAssertTests+ObjC.m in Sources */, - 1F118D131BDCA556005013A2 /* ItTests+ObjC.m in Sources */, - 1F118D191BDCA556005013A2 /* AfterEachTests+ObjC.m in Sources */, - 1F118D221BDCA556005013A2 /* SharedExamples+BeforeEachTests.swift in Sources */, - AE4E58171C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, - AED9C8651CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */, - 1F118D211BDCA556005013A2 /* SharedExamplesTests+ObjC.m in Sources */, - 1F118D201BDCA556005013A2 /* SharedExamplesTests.swift in Sources */, - 1F118D0C1BDCA543005013A2 /* QuickConfigurationTests.m in Sources */, - 1F118D391BDCA6E6005013A2 /* Configuration+BeforeEach.swift in Sources */, - 1F118D181BDCA556005013A2 /* AfterEachTests.swift in Sources */, - 1F118D1B1BDCA556005013A2 /* PendingTests+ObjC.m in Sources */, - 34C586051C4ABD4100D4F057 /* XCTestCaseProvider.swift in Sources */, - 8D010A591C11726F00633E2B /* DescribeTests.swift in Sources */, - 1F118D1E1BDCA556005013A2 /* AfterSuiteTests.swift in Sources */, - 1F118D111BDCA556005013A2 /* Configuration+AfterEachTests.swift in Sources */, - 1F118D161BDCA556005013A2 /* BeforeEachTests.swift in Sources */, - 7B5358D01C3D4FC000A23FAA /* ContextTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1F118CEC1BDCA4BB005013A2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1F118D0D1BDCA547005013A2 /* QCKSpecRunner.m in Sources */, - 34C586061C4ABD4100D4F057 /* XCTestCaseProvider.swift in Sources */, - 1F118D241BDCA561005013A2 /* FocusedTests.swift in Sources */, - 1F118D251BDCA561005013A2 /* FocusedTests+ObjC.m in Sources */, - AE4E58181C73097E00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5A5D117719473F2100F6D13D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 96327C671C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */, - 34F375B219515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */, - CE590E1B1C431FE300253D19 /* QuickSelectedTestSuiteBuilder.swift in Sources */, - DA3124EB19FCAEE8002858A7 /* QCKDSL.m in Sources */, - DA408BE319FF5599005DF92A /* Closures.swift in Sources */, - DA02C91A19A8073100093156 /* ExampleMetadata.swift in Sources */, - 34C586091C4AC5E500D4F057 /* ErrorUtility.swift in Sources */, - DA408BE719FF5599005DF92A /* SuiteHooks.swift in Sources */, - 34F375BA19515CA700CE1B99 /* QuickSpec.m in Sources */, - CE590E1C1C431FE300253D19 /* NSBundle+CurrentTestBundle.swift in Sources */, - DAE7150119FF6A62005905B8 /* QuickConfiguration.m in Sources */, - CE590E1E1C431FE300253D19 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */, - 34F375A819515CA700CE1B99 /* Callsite.swift in Sources */, - 34F375AE19515CA700CE1B99 /* ExampleGroup.swift in Sources */, - CE590E1D1C431FE300253D19 /* String+FileName.swift in Sources */, - 34F375BC19515CA700CE1B99 /* World.swift in Sources */, - DA169E4919FF5DF100619816 /* Configuration.swift in Sources */, - 7B44ADBF1C5444940007AF2E /* HooksPhase.swift in Sources */, - DA3124ED19FCAEE8002858A7 /* World+DSL.swift in Sources */, - DA408BE519FF5599005DF92A /* ExampleHooks.swift in Sources */, - 34F375AC19515CA700CE1B99 /* Example.swift in Sources */, - CE590E1A1C431FE300253D19 /* QuickTestSuite.swift in Sources */, - DA3124E719FCAEE8002858A7 /* DSL.swift in Sources */, - DA6B30191A4DB0D500FFB148 /* Filter.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5A5D118219473F2100F6D13D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DAE714F819FF6812005905B8 /* Configuration+AfterEach.swift in Sources */, - DAA7C0D719F777EB0093D1D9 /* BeforeEachTests.swift in Sources */, - DA8F919A19F31680006F6675 /* QCKSpecRunner.m in Sources */, - DA8940F11B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */, - 4728253C1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */, - DAE714F119FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */, - DA05D61119F73A3800771050 /* AfterEachTests.swift in Sources */, - DAB0137019FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */, - DA8F91A619F3208B006F6675 /* BeforeSuiteTests.swift in Sources */, - DA8C00221A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */, - DAA63EA419F7637300CD0A3B /* PendingTests.swift in Sources */, - DA8F91AC19F3299E006F6675 /* SharedExamplesTests.swift in Sources */, - DA7AE6F219FC493F000AFDCE /* ItTests.swift in Sources */, - 4748E8951A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */, - DA8F91AF19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */, - DAE714FB19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */, - AE4E58151C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, - AED9C8641CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */, - 471590411A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */, - DA8F919E19F31921006F6675 /* FailureTests+ObjC.m in Sources */, - DAE714F419FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */, - DA8F91A919F32556006F6675 /* AfterSuiteTests.swift in Sources */, - 4772173B1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */, - 479C31E41A36172700DA8718 /* ItTests+ObjC.m in Sources */, - 34C586031C4ABD4000D4F057 /* XCTestCaseProvider.swift in Sources */, - 8D010A581C11726F00633E2B /* DescribeTests.swift in Sources */, - 47FAEA371A3F49EB005A1D2F /* BeforeEachTests+ObjC.m in Sources */, - 470D6ECC1A43442900043E50 /* AfterEachTests+ObjC.m in Sources */, - 47876F7E1A49AD71002575C7 /* BeforeSuiteTests+ObjC.m in Sources */, - 7B5358CF1C3D4FBE00A23FAA /* ContextTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA5663E41A4C8D8500193C88 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DA07722E1A4E5B7B0098839D /* QCKSpecRunner.m in Sources */, - 34C586021C4ABD3F00D4F057 /* XCTestCaseProvider.swift in Sources */, - DA5663F41A4C8D9A00193C88 /* FocusedTests.swift in Sources */, - DAF28BC31A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */, - AE4E58141C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DA9876AE1A4C70EB0004AA17 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DA07722F1A4E5B7C0098839D /* QCKSpecRunner.m in Sources */, - 34C586041C4ABD4000D4F057 /* XCTestCaseProvider.swift in Sources */, - DA9876C11A4C87200004AA17 /* FocusedTests.swift in Sources */, - DAF28BC41A4DB8EC00A5D9BF /* FocusedTests+ObjC.m in Sources */, - AE4E58161C73097C00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DAEB6B891943873100289F44 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 96327C661C56E90C00405AB3 /* QuickSpec+QuickSpec_MethodList.m in Sources */, - 34F375B119515CA700CE1B99 /* NSString+QCKSelectorName.m in Sources */, - CE57CEDE1C430BD200D63004 /* QuickSelectedTestSuiteBuilder.swift in Sources */, - DA3124EA19FCAEE8002858A7 /* QCKDSL.m in Sources */, - DA408BE219FF5599005DF92A /* Closures.swift in Sources */, - CE57CEDD1C430BD200D63004 /* NSBundle+CurrentTestBundle.swift in Sources */, - DA02C91919A8073100093156 /* ExampleMetadata.swift in Sources */, - CE57CEDF1C430BD200D63004 /* QuickTestSuite.swift in Sources */, - 34C586081C4AC5E500D4F057 /* ErrorUtility.swift in Sources */, - DA408BE619FF5599005DF92A /* SuiteHooks.swift in Sources */, - 34F375B919515CA700CE1B99 /* QuickSpec.m in Sources */, - CE57CEE11C430BD200D63004 /* XCTestSuite+QuickTestSuiteBuilder.m in Sources */, - DAE7150019FF6A62005905B8 /* QuickConfiguration.m in Sources */, - 34F375A719515CA700CE1B99 /* Callsite.swift in Sources */, - CE57CEE01C430BD200D63004 /* String+FileName.swift in Sources */, - 34F375AD19515CA700CE1B99 /* ExampleGroup.swift in Sources */, - 34F375BB19515CA700CE1B99 /* World.swift in Sources */, - DA169E4819FF5DF100619816 /* Configuration.swift in Sources */, - 7B44ADBE1C5444940007AF2E /* HooksPhase.swift in Sources */, - DA3124EC19FCAEE8002858A7 /* World+DSL.swift in Sources */, - DA408BE419FF5599005DF92A /* ExampleHooks.swift in Sources */, - 34F375AB19515CA700CE1B99 /* Example.swift in Sources */, - DA3124E619FCAEE8002858A7 /* DSL.swift in Sources */, - DA6B30181A4DB0D500FFB148 /* Filter.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DAEB6B951943873100289F44 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DAE714F719FF6812005905B8 /* Configuration+AfterEach.swift in Sources */, - DAB067E919F7801C00F970AC /* BeforeEachTests.swift in Sources */, - DA8F919919F31680006F6675 /* QCKSpecRunner.m in Sources */, - DA8940F01B35B1FA00161061 /* FailureUsingXCTAssertTests+ObjC.m in Sources */, - 4728253B1A5EECCE008DC74F /* SharedExamplesTests+ObjC.m in Sources */, - DAE714F019FF65D3005905B8 /* Configuration+BeforeEachTests.swift in Sources */, - DA05D61019F73A3800771050 /* AfterEachTests.swift in Sources */, - DAB0136F19FC4315006AFBEE /* SharedExamples+BeforeEachTests.swift in Sources */, - DA8F91A519F3208B006F6675 /* BeforeSuiteTests.swift in Sources */, - DA8C00211A01E4B900CE58A6 /* QuickConfigurationTests.m in Sources */, - DAA63EA319F7637300CD0A3B /* PendingTests.swift in Sources */, - DA8F91AB19F3299E006F6675 /* SharedExamplesTests.swift in Sources */, - DA7AE6F119FC493F000AFDCE /* ItTests.swift in Sources */, - 4748E8941A6AEBB3009EC992 /* SharedExamples+BeforeEachTests+ObjC.m in Sources */, - DA8F91AE19F32CE2006F6675 /* FunctionalTests_SharedExamplesTests_SharedExamples.swift in Sources */, - DAE714FA19FF682A005905B8 /* Configuration+AfterEachTests.swift in Sources */, - AE4E58131C73097A00420A2E /* XCTestObservationCenter+QCKSuspendObservation.m in Sources */, - AED9C8631CC8A7BD00432F62 /* CrossReferencingSpecs.swift in Sources */, - 471590401A488F3F00FBA644 /* PendingTests+ObjC.m in Sources */, - DA8F919D19F31921006F6675 /* FailureTests+ObjC.m in Sources */, - DAE714F319FF65E7005905B8 /* Configuration+BeforeEach.swift in Sources */, - DA8F91A819F32556006F6675 /* AfterSuiteTests.swift in Sources */, - 4772173A1A59C1B00022013E /* AfterSuiteTests+ObjC.m in Sources */, - 479C31E31A36171B00DA8718 /* ItTests+ObjC.m in Sources */, - 34C586011C4ABD3F00D4F057 /* XCTestCaseProvider.swift in Sources */, - 8D010A571C11726F00633E2B /* DescribeTests.swift in Sources */, - 47FAEA361A3F49E6005A1D2F /* BeforeEachTests+ObjC.m in Sources */, - 470D6ECB1A43442400043E50 /* AfterEachTests+ObjC.m in Sources */, - 47876F7D1A49AD63002575C7 /* BeforeSuiteTests+ObjC.m in Sources */, - 7B5358CE1C3D4FBC00A23FAA /* ContextTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 047655521949F4CB00B288BB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAEB6B8D1943873100289F44 /* Quick-OSX */; - targetProxy = 047655511949F4CB00B288BB /* PBXContainerItemProxy */; - }; - 047655541949F4CB00B288BB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAEB6B8D1943873100289F44 /* Quick-OSX */; - targetProxy = 047655531949F4CB00B288BB /* PBXContainerItemProxy */; - }; - 04765556194A327000B288BB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAEB6B8D1943873100289F44 /* Quick-OSX */; - targetProxy = 04765555194A327000B288BB /* PBXContainerItemProxy */; - }; - 04DC97E5194B4A6000CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAEB6B8D1943873100289F44 /* Quick-OSX */; - targetProxy = 04DC97E4194B4A6000CE00B6 /* PBXContainerItemProxy */; - }; - 04DC97E7194B4A6000CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAEB6B8D1943873100289F44 /* Quick-OSX */; - targetProxy = 04DC97E6194B4A6000CE00B6 /* PBXContainerItemProxy */; - }; - 04DC97E9194B4B7E00CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; - targetProxy = 04DC97E8194B4B7E00CE00B6 /* PBXContainerItemProxy */; - }; - 04DC97EB194B4B9B00CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; - targetProxy = 04DC97EA194B4B9B00CE00B6 /* PBXContainerItemProxy */; - }; - 04DC97F1194B82DB00CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAEB6B8D1943873100289F44 /* Quick-OSX */; - targetProxy = 04DC97F0194B82DB00CE00B6 /* PBXContainerItemProxy */; - }; - 04DC97F3194B82DE00CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; - targetProxy = 04DC97F2194B82DE00CE00B6 /* PBXContainerItemProxy */; - }; - 04DC97F7194B831200CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; - targetProxy = 04DC97F6194B831200CE00B6 /* PBXContainerItemProxy */; - }; - 04DC97F9194B834000CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAEB6B8D1943873100289F44 /* Quick-OSX */; - targetProxy = 04DC97F8194B834000CE00B6 /* PBXContainerItemProxy */; - }; - 04DC97FB194B834100CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; - targetProxy = 04DC97FA194B834100CE00B6 /* PBXContainerItemProxy */; - }; - 04DC97FD194B834B00CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAEB6B8D1943873100289F44 /* Quick-OSX */; - targetProxy = 04DC97FC194B834B00CE00B6 /* PBXContainerItemProxy */; - }; - 04DC97FF194B835E00CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; - targetProxy = 04DC97FE194B835E00CE00B6 /* PBXContainerItemProxy */; - }; - 04DC9801194B836100CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAEB6B8D1943873100289F44 /* Quick-OSX */; - targetProxy = 04DC9800194B836100CE00B6 /* PBXContainerItemProxy */; - }; - 04DC9803194B836300CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; - targetProxy = 04DC9802194B836300CE00B6 /* PBXContainerItemProxy */; - }; - 04DC9805194B838400CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAEB6B8D1943873100289F44 /* Quick-OSX */; - targetProxy = 04DC9804194B838400CE00B6 /* PBXContainerItemProxy */; - }; - 04DC9807194B838700CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; - targetProxy = 04DC9806194B838700CE00B6 /* PBXContainerItemProxy */; - }; - 04DC9809194B838B00CE00B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAEB6B8D1943873100289F44 /* Quick-OSX */; - targetProxy = 04DC9808194B838B00CE00B6 /* PBXContainerItemProxy */; - }; - 1F118CE11BDCA4AB005013A2 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F118CD41BDCA4AB005013A2 /* Quick-tvOS */; - targetProxy = 1F118CE01BDCA4AB005013A2 /* PBXContainerItemProxy */; - }; - 1F118CF71BDCA4BB005013A2 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 1F118CD41BDCA4AB005013A2 /* Quick-tvOS */; - targetProxy = 1F118CF61BDCA4BB005013A2 /* PBXContainerItemProxy */; - }; - 5A5D118919473F2100F6D13D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; - targetProxy = 5A5D118819473F2100F6D13D /* PBXContainerItemProxy */; - }; - 5A5D11F0194741B500F6D13D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; - targetProxy = 5A5D11EF194741B500F6D13D /* PBXContainerItemProxy */; - }; - 5A5D11F2194741B500F6D13D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; - targetProxy = 5A5D11F1194741B500F6D13D /* PBXContainerItemProxy */; - }; - 93625F391951DDC8006B1FE1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAEB6B8D1943873100289F44 /* Quick-OSX */; - targetProxy = 93625F381951DDC8006B1FE1 /* PBXContainerItemProxy */; - }; - DA5663F01A4C8D8500193C88 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAEB6B8D1943873100289F44 /* Quick-OSX */; - targetProxy = DA5663EF1A4C8D8500193C88 /* PBXContainerItemProxy */; - }; - DA9876BA1A4C70EB0004AA17 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5A5D117B19473F2100F6D13D /* Quick-iOS */; - targetProxy = DA9876B91A4C70EB0004AA17 /* PBXContainerItemProxy */; - }; - DAEB6B9C1943873100289F44 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = DAEB6B8D1943873100289F44 /* Quick-OSX */; - targetProxy = DAEB6B9B1943873100289F44 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 1F118CE71BDCA4AB005013A2 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = dwarf; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = Sources/Quick/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Quick; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Debug; - }; - 1F118CE81BDCA4AB005013A2 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = Sources/Quick/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Quick; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 1F118CEA1BDCA4AB005013A2 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = dwarf; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = Sources/QuickTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Debug; - }; - 1F118CEB1BDCA4AB005013A2 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = Sources/QuickTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TVOS_DEPLOYMENT_TARGET = 9.0; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 1F118CF91BDCA4BC005013A2 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEBUG_INFORMATION_FORMAT = dwarf; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Debug; - }; - 1F118CFA1BDCA4BC005013A2 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Externals/Nimble/build/Debug-appletvos", - ); - GCC_NO_COMMON_BLOCKS = YES; - INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = appletvos; - SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TVOS_DEPLOYMENT_TARGET = 9.0; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 5A5D118F19473F2100F6D13D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = NO; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = Sources/Quick/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - METAL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Quick; - PRODUCT_NAME = Quick; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - TARGETED_DEVICE_FAMILY = "1,2"; - TVOS_DEPLOYMENT_TARGET = 9.0; - }; - name = Debug; - }; - 5A5D119019473F2100F6D13D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = NO; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - INFOPLIST_FILE = Sources/Quick/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - METAL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Quick; - PRODUCT_NAME = Quick; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SUPPORTED_PLATFORMS = "iphonesimulator iphoneos"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - TVOS_DEPLOYMENT_TARGET = 9.0; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 5A5D119119473F2100F6D13D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = Sources/QuickTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - METAL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 5A5D119219473F2100F6D13D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - INFOPLIST_FILE = Sources/QuickTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - METAL_ENABLE_DEBUG_INFO = NO; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - DA5663F11A4C8D8500193C88 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(DEVELOPER_FRAMEWORKS_DIR)", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - DA5663F21A4C8D8500193C88 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(DEVELOPER_FRAMEWORKS_DIR)", - "$(inherited)", - ); - INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - }; - name = Release; - }; - DA9876BB1A4C70EB0004AA17 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - DA9876BC1A4C70EB0004AA17 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - INFOPLIST_FILE = Sources/QuickFocusedTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MTL_ENABLE_DEBUG_INFO = NO; - ONLY_ACTIVE_ARCH = NO; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - DAEB6BA21943873200289F44 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - CODE_SIGN_IDENTITY = ""; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; - METAL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 2.3; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - DAEB6BA31943873200289F44 /* 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_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - CODE_SIGN_IDENTITY = ""; - COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_MISSING_NEWLINE = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; - METAL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - SWIFT_VERSION = 2.3; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - DAEB6BA51943873200289F44 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = NO; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = Sources/Quick/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Quick; - PRODUCT_NAME = Quick; - SKIP_INSTALL = YES; - VALID_ARCHS = x86_64; - }; - name = Debug; - }; - DAEB6BA61943873200289F44 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - APPLICATION_EXTENSION_API_ONLY = NO; - COMBINE_HIDPI_IMAGES = YES; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_SEARCH_PATHS = ( - "$(PLATFORM_DIR)/Developer/Library/Frameworks", - "$(inherited)", - ); - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = Sources/Quick/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_MODULE_NAME = Quick; - PRODUCT_NAME = Quick; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - VALID_ARCHS = x86_64; - }; - name = Release; - }; - DAEB6BA81943873200289F44 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(DEVELOPER_FRAMEWORKS_DIR)", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = Sources/QuickTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - METAL_ENABLE_DEBUG_INFO = YES; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - DAEB6BA91943873200289F44 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(DEVELOPER_FRAMEWORKS_DIR)", - "$(inherited)", - ); - INFOPLIST_FILE = Sources/QuickTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - METAL_ENABLE_DEBUG_INFO = NO; - PRODUCT_BUNDLE_IDENTIFIER = "io.quick.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OBJC_BRIDGING_HEADER = Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1F118CE61BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget "Quick-tvOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F118CE71BDCA4AB005013A2 /* Debug */, - 1F118CE81BDCA4AB005013A2 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1F118CE91BDCA4AB005013A2 /* Build configuration list for PBXNativeTarget "Quick-tvOSTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F118CEA1BDCA4AB005013A2 /* Debug */, - 1F118CEB1BDCA4AB005013A2 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1F118CF81BDCA4BC005013A2 /* Build configuration list for PBXNativeTarget "QuickFocused-tvOSTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F118CF91BDCA4BC005013A2 /* Debug */, - 1F118CFA1BDCA4BC005013A2 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5A5D119319473F2100F6D13D /* Build configuration list for PBXNativeTarget "Quick-iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5A5D118F19473F2100F6D13D /* Debug */, - 5A5D119019473F2100F6D13D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5A5D119419473F2100F6D13D /* Build configuration list for PBXNativeTarget "Quick-iOSTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5A5D119119473F2100F6D13D /* Debug */, - 5A5D119219473F2100F6D13D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DA5663F31A4C8D8500193C88 /* Build configuration list for PBXNativeTarget "QuickFocused-OSXTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DA5663F11A4C8D8500193C88 /* Debug */, - DA5663F21A4C8D8500193C88 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DA9876BD1A4C70EB0004AA17 /* Build configuration list for PBXNativeTarget "QuickFocused-iOSTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DA9876BB1A4C70EB0004AA17 /* Debug */, - DA9876BC1A4C70EB0004AA17 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DAEB6B881943873100289F44 /* Build configuration list for PBXProject "Quick" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DAEB6BA21943873200289F44 /* Debug */, - DAEB6BA31943873200289F44 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DAEB6BA41943873200289F44 /* Build configuration list for PBXNativeTarget "Quick-OSX" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DAEB6BA51943873200289F44 /* Debug */, - DAEB6BA61943873200289F44 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - DAEB6BA71943873200289F44 /* Build configuration list for PBXNativeTarget "Quick-OSXTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DAEB6BA81943873200289F44 /* Debug */, - DAEB6BA91943873200289F44 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = DAEB6B851943873100289F44 /* Project object */; -} diff --git a/Carthage/Checkouts/Quick/Quick.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Carthage/Checkouts/Quick/Quick.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index a459aa8..0000000 --- a/Carthage/Checkouts/Quick/Quick.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-OSX.xcscheme b/Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-OSX.xcscheme deleted file mode 100644 index 560e54c..0000000 --- a/Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-OSX.xcscheme +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-iOS.xcscheme b/Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-iOS.xcscheme deleted file mode 100644 index e2eb4c7..0000000 --- a/Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-iOS.xcscheme +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-tvOS.xcscheme b/Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-tvOS.xcscheme deleted file mode 100644 index 51877d9..0000000 --- a/Carthage/Checkouts/Quick/Quick.xcodeproj/xcshareddata/xcschemes/Quick-tvOS.xcscheme +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Carthage/Checkouts/Quick/Quick.xcworkspace/contents.xcworkspacedata b/Carthage/Checkouts/Quick/Quick.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 48af53a..0000000 --- a/Carthage/Checkouts/Quick/Quick.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/Carthage/Checkouts/Quick/README.md b/Carthage/Checkouts/Quick/README.md deleted file mode 100644 index bced23c..0000000 --- a/Carthage/Checkouts/Quick/README.md +++ /dev/null @@ -1,61 +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). - -![](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 'Documentation' directory") { - it("has everything you need to get started") { - let sections = Directory("Documentation").sections - expect(sections).to(contain("Organized Tests with Quick Examples and Example Groups")) - expect(sections).to(contain("Installing 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()) - } - } - } - } -} -``` -#### Nimble -Quick comes together with [Nimble](https://github.com/Quick/Nimble) — a matcher framework for your tests. You can learn why `XCTAssert()` statements make your expectations unclear and how to fix that using Nimble assertions [here](./Documentation/en-us/NimbleAssertions.md). - -## Documentation - -All documentation can be found in the [Documentation folder](./Documentation), including [detailed installation instructions](./Documentation/en-us/InstallingQuick.md) for CocoaPods, Carthage, Git submodules, and more. For example, you can install Quick and [Nimble](https://github.com/Quick/Nimble) using CocoaPods by adding the following to your Podfile: - -```rb -# Podfile - -use_frameworks! - -def testing_pods - pod 'Quick' - pod 'Nimble' -end - -target 'MyTests' do - testing_pods -end - -target 'MyUITests' do - testing_pods -end -``` - -## License - -Apache 2.0 license. See the `LICENSE` file for details. diff --git a/Carthage/Checkouts/Quick/Rakefile b/Carthage/Checkouts/Quick/Rakefile deleted file mode 100644 index 71a5866..0000000 --- a/Carthage/Checkouts/Quick/Rakefile +++ /dev/null @@ -1,68 +0,0 @@ -def run(command) - system(command) or raise "RAKE TASK FAILED: #{command}" -end - -def has_xcodebuild - system "which xcodebuild >/dev/null" -end - -def xcode_action - ENV["XCODE_ACTION"] || "build test" -end - -namespace "podspec" do - desc "Run lint for podspec" - task :lint do - run "bundle exec pod lib lint" - end -end - -namespace "test" do - desc "Run unit tests for all iOS targets" - task :ios do |t| - run "xcodebuild -workspace Quick.xcworkspace -scheme Quick-iOS -destination 'platform=iOS Simulator,name=iPhone 6' clean #{xcode_action}" - end - - desc "Run unit tests for all tvOS targets" - task :tvos do |t| - run "xcodebuild -workspace Quick.xcworkspace -scheme Quick-tvOS -destination 'platform=tvOS Simulator,name=Apple TV 1080p' clean #{xcode_action}" - end - - desc "Run unit tests for all OS X targets" - task :osx do |t| - run "xcodebuild -workspace Quick.xcworkspace -scheme Quick-OSX clean #{xcode_action}" - end - - desc "Run unit tests for the current platform built by the Swift Package Manager" - task :swiftpm do |t| - run "swift build --clean && swift build" - run ".build/debug/QuickTests" - run ".build/debug/QuickFocusedTests" - end -end - -namespace "templates" do - install_dir = File.expand_path("~/Library/Developer/Xcode/Templates/File Templates/Quick") - src_dir = File.expand_path("../Quick Templates", __FILE__) - - desc "Install Quick templates" - task :install do - if File.exists? install_dir - raise "RAKE TASK FAILED: Quick templates are already installed at #{install_dir}" - else - mkdir_p install_dir - cp_r src_dir, install_dir - end - end - - desc "Uninstall Quick templates" - task :uninstall do - rm_rf install_dir - end -end - -if has_xcodebuild then - task default: ["test:ios", "test:tvos", "test:osx"] -else - task default: ["test:swiftpm"] -end diff --git a/Carthage/Checkouts/Quick/Sources/Quick/Callsite.swift b/Carthage/Checkouts/Quick/Sources/Quick/Callsite.swift deleted file mode 100644 index 53496cd..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/Callsite.swift +++ /dev/null @@ -1,30 +0,0 @@ -import Foundation - -/** - An object encapsulating the file and line number at which - a particular example is defined. -*/ -final public class Callsite: NSObject { - /** - 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: UInt - - internal init(file: String, line: UInt) { - 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/Carthage/Checkouts/Quick/Sources/Quick/Configuration/Configuration.swift b/Carthage/Checkouts/Quick/Sources/Quick/Configuration/Configuration.swift deleted file mode 100644 index 7b8c2db..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/Configuration/Configuration.swift +++ /dev/null @@ -1,161 +0,0 @@ -import Foundation - -/** - 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. -*/ -final public class Configuration: NSObject { - internal let exampleHooks = ExampleHooks() - internal let suiteHooks = SuiteHooks() - internal var exclusionFilters: [ExampleFilter] = [{ example in - if let pending = example.filterFlags[Filter.pending] { - return pending - } else { - return false - } - }] - internal var inclusionFilters: [ExampleFilter] = [{ example in - if let focused = example.filterFlags[Filter.focused] { - return focused - } else { - return false - } - }] - - /** - 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. - - - parameter 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. - - - parameter 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. - */ -#if _runtime(_ObjC) - @objc(beforeEachWithMetadata:) - public func beforeEach(closure: BeforeExampleWithMetadataClosure) { - exampleHooks.appendBefore(closure) - } -#else - public func beforeEach(closure: BeforeExampleWithMetadataClosure) { - exampleHooks.appendBefore(closure) - } -#endif - - /** - Like Quick.DSL.beforeEach, this configures Quick to execute the - 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. - - - parameter 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. - */ -#if _runtime(_ObjC) - @objc(afterEachWithMetadata:) - public func afterEach(closure: AfterExampleWithMetadataClosure) { - exampleHooks.appendAfter(closure) - } -#else - public func afterEach(closure: AfterExampleWithMetadataClosure) { - exampleHooks.appendAfter(closure) - } -#endif - - /** - Like Quick.DSL.afterEach, this configures Quick to execute the - 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. - - - parameter 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/Carthage/Checkouts/Quick/Sources/Quick/Configuration/QuickConfiguration.h b/Carthage/Checkouts/Quick/Sources/Quick/Configuration/QuickConfiguration.h deleted file mode 100644 index 5646199..0000000 --- a/Carthage/Checkouts/Quick/Sources/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/Carthage/Checkouts/Quick/Sources/Quick/Configuration/QuickConfiguration.m b/Carthage/Checkouts/Quick/Sources/Quick/Configuration/QuickConfiguration.m deleted file mode 100644 index 937b818..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/Configuration/QuickConfiguration.m +++ /dev/null @@ -1,83 +0,0 @@ -#import "QuickConfiguration.h" -#import "World.h" -#import - -typedef void (^QCKClassEnumerationBlock)(Class klass); - -/** - Finds all direct subclasses of the given class and passes them to the block provided. - The classes are iterated over in the order that objc_getClassList returns them. - - @param klass The base class to find subclasses of. - @param block A block that takes a Class. This block will be executed once for each subclass of klass. - */ -void qck_enumerateSubclasses(Class klass, QCKClassEnumerationBlock block) { - Class *classes = NULL; - int classesCount = objc_getClassList(NULL, 0); - - if (classesCount > 0) { - classes = (Class *)calloc(sizeof(Class), classesCount); - classesCount = objc_getClassList(classes, classesCount); - - Class subclass, superclass; - for(int i = 0; i < classesCount; i++) { - subclass = classes[i]; - superclass = class_getSuperclass(subclass); - if (superclass == klass && block) { - block(subclass); - } - } - - free(classes); - } -} - -@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/Carthage/Checkouts/Quick/Sources/Quick/Configuration/QuickConfiguration.swift b/Carthage/Checkouts/Quick/Sources/Quick/Configuration/QuickConfiguration.swift deleted file mode 100644 index 8b79b00..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/Configuration/QuickConfiguration.swift +++ /dev/null @@ -1,8 +0,0 @@ -import XCTest - -// NOTE: This file is not intended to be included in the Xcode project or CocoaPods. -// It is picked up by the Swift Package Manager during its build process. - -public class QuickConfiguration { - public class func configure(configuration: Configuration) {} -} diff --git a/Carthage/Checkouts/Quick/Sources/Quick/DSL/DSL.swift b/Carthage/Checkouts/Quick/Sources/Quick/DSL/DSL.swift deleted file mode 100644 index bc0e0b4..0000000 --- a/Carthage/Checkouts/Quick/Sources/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. - - - parameter 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. - - - parameter closure: The closure to be run after all of the examples in the test suite. -*/ -public func afterSuite(closure: AfterSuiteClosure) { - World.sharedWorld.afterSuite(closure) -} - -/** - Defines a group of shared examples. These examples can be re-used in several locations - by using the `itBehavesLike` function. - - - parameter name: The name of the shared example group. This must be unique across all shared example - groups defined in a test suite. - - parameter 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. - - - parameter name: The name of the shared example group. This must be unique across all shared example - groups defined in a test suite. - - parameter 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. - - - parameter description: An arbitrary string describing the example group. - - parameter closure: A closure that can contain other examples. - - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups. -*/ -public func describe(description: String, flags: FilterFlags = [:], closure: () -> ()) { - World.sharedWorld.describe(description, flags: flags, closure: closure) -} - -/** - Defines an example group. Equivalent to `describe`. -*/ -public func context(description: String, flags: FilterFlags = [:], closure: () -> ()) { - World.sharedWorld.context(description, flags: flags, closure: 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. - - - parameter 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. - - - parameter 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. - - - parameter description: An arbitrary string describing what the example is meant to specify. - - parameter closure: A closure that can contain assertions. - - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups. - Empty by default. - - parameter file: The absolute path to the file containing the example. A sensible default is provided. - - parameter line: The line containing the example. A sensible default is provided. -*/ -public func it(description: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, closure: () -> ()) { - World.sharedWorld.it(description, flags: flags, file: file, line: line, closure: closure) -} - -/** - 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. - - - parameter 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. - - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups. - Empty by default. - - parameter file: The absolute path to the file containing the current example group. A sensible default is provided. - - parameter line: The line containing the current example group. A sensible default is provided. -*/ -public func itBehavesLike(name: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line) { - itBehavesLike(name, flags: flags, file: file, line: line, sharedExampleContext: { return [:] }) -} - -/** - 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. - - - parameter 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. - - parameter sharedExampleContext: A closure that, when evaluated, returns key-value pairs that provide the - shared examples with extra information on the subject of the example. - - parameter flags: A mapping of string keys to booleans that can be used to filter examples or example groups. - Empty by default. - - parameter file: The absolute path to the file containing the current example group. A sensible default is provided. - - parameter line: The line containing the current example group. A sensible default is provided. -*/ -public func itBehavesLike(name: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, sharedExampleContext: SharedExampleContext) { - World.sharedWorld.itBehavesLike(name, sharedExampleContext: sharedExampleContext, flags: flags, file: file, line: line) -} - -/** - 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. - - - parameter description: An arbitrary string describing the example or example group. - - parameter 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, flags: FilterFlags, closure: () -> ()) { - World.sharedWorld.xdescribe(description, flags: flags, closure: closure) -} - -/** - Use this to quickly mark a `context` closure as pending. - This disables all examples within the closure. -*/ -public func xcontext(description: String, flags: FilterFlags, closure: () -> ()) { - xdescribe(description, flags: flags, closure: closure) -} - -/** - Use this to quickly mark an `it` closure as pending. - This disables the example and ensures the code within the closure is never run. -*/ -public func xit(description: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, closure: () -> ()) { - World.sharedWorld.xit(description, flags: flags, file: file, line: line, closure: closure) -} - -/** - 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, flags: FilterFlags = [:], closure: () -> ()) { - World.sharedWorld.fdescribe(description, flags: flags, closure: closure) -} - -/** - Use this to quickly focus a `context` closure. Equivalent to `fdescribe`. -*/ -public func fcontext(description: String, flags: FilterFlags = [:], closure: () -> ()) { - fdescribe(description, flags: flags, closure: closure) -} - -/** - Use this to quickly focus an `it` closure, focusing the example. - If any examples in the test suite are focused, only those examples are executed. -*/ -public func fit(description: String, flags: FilterFlags = [:], file: String = #file, line: UInt = #line, closure: () -> ()) { - World.sharedWorld.fit(description, flags: flags, file: file, line: line, closure: closure) -} diff --git a/Carthage/Checkouts/Quick/Sources/Quick/DSL/QCKDSL.h b/Carthage/Checkouts/Quick/Sources/Quick/DSL/QCKDSL.h deleted file mode 100644 index c5f3152..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/DSL/QCKDSL.h +++ /dev/null @@ -1,234 +0,0 @@ -#import - -@class ExampleMetadata; - -/** - 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); -typedef void (^QCKDSLExampleMetadataBlock)(ExampleMetadata *exampleMetadata); - -#define QUICK_EXPORT FOUNDATION_EXPORT - -QUICK_EXPORT void qck_beforeSuite(QCKDSLEmptyBlock closure); -QUICK_EXPORT void qck_afterSuite(QCKDSLEmptyBlock closure); -QUICK_EXPORT void qck_sharedExamples(NSString *name, QCKDSLSharedExampleBlock closure); -QUICK_EXPORT void qck_describe(NSString *description, QCKDSLEmptyBlock closure); -QUICK_EXPORT void qck_context(NSString *description, QCKDSLEmptyBlock closure); -QUICK_EXPORT void qck_beforeEach(QCKDSLEmptyBlock closure); -QUICK_EXPORT void qck_beforeEachWithMetadata(QCKDSLExampleMetadataBlock closure); -QUICK_EXPORT void qck_afterEach(QCKDSLEmptyBlock closure); -QUICK_EXPORT void qck_afterEachWithMetadata(QCKDSLExampleMetadataBlock closure); -QUICK_EXPORT void qck_pending(NSString *description, QCKDSLEmptyBlock closure); -QUICK_EXPORT void qck_xdescribe(NSString *description, QCKDSLEmptyBlock closure); -QUICK_EXPORT void qck_xcontext(NSString *description, QCKDSLEmptyBlock closure); -QUICK_EXPORT void qck_fdescribe(NSString *description, QCKDSLEmptyBlock closure); -QUICK_EXPORT 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); -} - -/** - Identical to QCKDSL.beforeEach, except the closure is provided with - metadata on the example that the closure is being run prior to. - */ -static inline void beforeEachWithMetadata(QCKDSLExampleMetadataBlock closure) { - qck_beforeEachWithMetadata(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); -} - -/** - Identical to QCKDSL.afterEach, except the closure is provided with - metadata on the example that the closure is being run after. - */ -static inline void afterEachWithMetadata(QCKDSLExampleMetadataBlock closure) { - qck_afterEachWithMetadata(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); - -QUICK_EXPORT QCKItBlock qck_it_builder(NSDictionary *flags, NSString *file, NSUInteger line); -QUICK_EXPORT QCKItBehavesLikeBlock qck_itBehavesLike_builder(NSDictionary *flags, NSString *file, NSUInteger line); diff --git a/Carthage/Checkouts/Quick/Sources/Quick/DSL/QCKDSL.m b/Carthage/Checkouts/Quick/Sources/Quick/DSL/QCKDSL.m deleted file mode 100644 index 10e8a3d..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/DSL/QCKDSL.m +++ /dev/null @@ -1,79 +0,0 @@ -#import "QCKDSL.h" -#import "World.h" -#import "World+DSL.h" - -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 flags:@{} closure:closure]; -} - -void qck_context(NSString *description, QCKDSLEmptyBlock closure) { - qck_describe(description, closure); -} - -void qck_beforeEach(QCKDSLEmptyBlock closure) { - [[World sharedWorld] beforeEach:closure]; -} - -void qck_beforeEachWithMetadata(QCKDSLExampleMetadataBlock closure) { - [[World sharedWorld] beforeEachWithMetadata:closure]; -} - -void qck_afterEach(QCKDSLEmptyBlock closure) { - [[World sharedWorld] afterEach:closure]; -} - -void qck_afterEachWithMetadata(QCKDSLExampleMetadataBlock closure) { - [[World sharedWorld] afterEachWithMetadata: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 flags:@{} closure:closure]; -} - -void qck_xcontext(NSString *description, QCKDSLEmptyBlock closure) { - qck_xdescribe(description, closure); -} - -void qck_fdescribe(NSString *description, QCKDSLEmptyBlock closure) { - [[World sharedWorld] fdescribe:description flags:@{} closure:closure]; -} - -void qck_fcontext(NSString *description, QCKDSLEmptyBlock closure) { - qck_fdescribe(description, closure); -} diff --git a/Carthage/Checkouts/Quick/Sources/Quick/DSL/World+DSL.h b/Carthage/Checkouts/Quick/Sources/Quick/DSL/World+DSL.h deleted file mode 100644 index a3b8524..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/DSL/World+DSL.h +++ /dev/null @@ -1,20 +0,0 @@ -#import - -@interface World (SWIFT_EXTENSION(Quick)) -- (void)beforeSuite:(void (^ __nonnull)(void))closure; -- (void)afterSuite:(void (^ __nonnull)(void))closure; -- (void)sharedExamples:(NSString * __nonnull)name closure:(void (^ __nonnull)(NSDictionary * __nonnull (^ __nonnull)(void)))closure; -- (void)describe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; -- (void)context:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; -- (void)fdescribe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; -- (void)xdescribe:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags closure:(void (^ __nonnull)(void))closure; -- (void)beforeEach:(void (^ __nonnull)(void))closure; -- (void)beforeEachWithMetadata:(void (^ __nonnull)(ExampleMetadata * __nonnull))closure; -- (void)afterEach:(void (^ __nonnull)(void))closure; -- (void)afterEachWithMetadata:(void (^ __nonnull)(ExampleMetadata * __nonnull))closure; -- (void)itWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure; -- (void)fitWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure; -- (void)xitWithDescription:(NSString * __nonnull)description flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line closure:(void (^ __nonnull)(void))closure; -- (void)itBehavesLikeSharedExampleNamed:(NSString * __nonnull)name sharedExampleContext:(NSDictionary * __nonnull (^ __nonnull)(void))sharedExampleContext flags:(NSDictionary * __nonnull)flags file:(NSString * __nonnull)file line:(NSUInteger)line; -- (void)pending:(NSString * __nonnull)description closure:(void (^ __nonnull)(void))closure; -@end diff --git a/Carthage/Checkouts/Quick/Sources/Quick/DSL/World+DSL.swift b/Carthage/Checkouts/Quick/Sources/Quick/DSL/World+DSL.swift deleted file mode 100644 index 3b9a9be..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/DSL/World+DSL.swift +++ /dev/null @@ -1,169 +0,0 @@ -import Foundation - -/** - Adds methods to World to support top-level DSL functions (Swift) and - macros (Objective-C). These functions map directly to the DSL that test - writers use in their specs. -*/ -extension World { - internal func beforeSuite(closure: BeforeSuiteClosure) { - suiteHooks.appendBefore(closure) - } - - internal func afterSuite(closure: AfterSuiteClosure) { - suiteHooks.appendAfter(closure) - } - - internal func sharedExamples(name: String, closure: SharedExampleClosure) { - registerSharedExample(name, closure: closure) - } - - internal func describe(description: String, flags: FilterFlags, closure: () -> ()) { - guard currentExampleMetadata == nil else { - raiseError("'describe' cannot be used inside '\(currentPhase)', 'describe' may only be used inside 'context' or 'describe'. ") - } - guard currentExampleGroup != nil else { - raiseError("Error: example group was not created by its parent QuickSpec spec. Check that describe() or context() was used in QuickSpec.spec() and not a more general context (i.e. an XCTestCase test)") - } - let group = ExampleGroup(description: description, flags: flags) - currentExampleGroup.appendExampleGroup(group) - performWithCurrentExampleGroup(group, closure: closure) - } - - internal func context(description: String, flags: FilterFlags, closure: () -> ()) { - guard currentExampleMetadata == nil else { - raiseError("'context' cannot be used inside '\(currentPhase)', 'context' may only be used inside 'context' or 'describe'. ") - } - self.describe(description, flags: flags, closure: closure) - } - - internal func fdescribe(description: String, flags: FilterFlags, closure: () -> ()) { - var focusedFlags = flags - focusedFlags[Filter.focused] = true - self.describe(description, flags: focusedFlags, closure: closure) - } - - internal func xdescribe(description: String, flags: FilterFlags, closure: () -> ()) { - var pendingFlags = flags - pendingFlags[Filter.pending] = true - self.describe(description, flags: pendingFlags, closure: closure) - } - - internal func beforeEach(closure: BeforeExampleClosure) { - guard currentExampleMetadata == nil else { - raiseError("'beforeEach' cannot be used inside '\(currentPhase)', 'beforeEach' may only be used inside 'context' or 'describe'. ") - } - currentExampleGroup.hooks.appendBefore(closure) - } - -#if _runtime(_ObjC) - @objc(beforeEachWithMetadata:) - internal func beforeEach(closure closure: BeforeExampleWithMetadataClosure) { - currentExampleGroup.hooks.appendBefore(closure) - } -#else - internal func beforeEach(closure closure: BeforeExampleWithMetadataClosure) { - currentExampleGroup.hooks.appendBefore(closure) - } -#endif - - internal func afterEach(closure: AfterExampleClosure) { - guard currentExampleMetadata == nil else { - raiseError("'afterEach' cannot be used inside '\(currentPhase)', 'afterEach' may only be used inside 'context' or 'describe'. ") - } - currentExampleGroup.hooks.appendAfter(closure) - } - -#if _runtime(_ObjC) - @objc(afterEachWithMetadata:) - internal func afterEach(closure closure: AfterExampleWithMetadataClosure) { - currentExampleGroup.hooks.appendAfter(closure) - } -#else - internal func afterEach(closure closure: AfterExampleWithMetadataClosure) { - currentExampleGroup.hooks.appendAfter(closure) - } -#endif - - internal func it(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { - if beforesCurrentlyExecuting { - raiseError("'it' cannot be used inside 'beforeEach', 'it' may only be used inside 'context' or 'describe'. ") - } - if aftersCurrentlyExecuting { - raiseError("'it' cannot be used inside 'afterEach', 'it' may only be used inside 'context' or 'describe'. ") - } - guard currentExampleMetadata == nil else { - raiseError("'it' cannot be used inside 'it', 'it' may only be used inside 'context' or 'describe'. ") - } - let callsite = Callsite(file: file, line: line) - let example = Example(description: description, callsite: callsite, flags: flags, closure: closure) - currentExampleGroup.appendExample(example) - } - - internal func fit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { - var focusedFlags = flags - focusedFlags[Filter.focused] = true - self.it(description, flags: focusedFlags, file: file, line: line, closure: closure) - } - - internal func xit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { - var pendingFlags = flags - pendingFlags[Filter.pending] = true - self.it(description, flags: pendingFlags, file: file, line: line, closure: closure) - } - - internal func itBehavesLike(name: String, sharedExampleContext: SharedExampleContext, flags: FilterFlags, file: String, line: UInt) { - guard currentExampleMetadata == nil else { - raiseError("'itBehavesLike' cannot be used inside '\(currentPhase)', 'itBehavesLike' may only be used inside 'context' or 'describe'. ") - } - let callsite = Callsite(file: file, line: line) - let closure = World.sharedWorld.sharedExample(name) - - let group = ExampleGroup(description: name, flags: flags) - currentExampleGroup.appendExampleGroup(group) - performWithCurrentExampleGroup(group) { - closure(sharedExampleContext) - } - - group.walkDownExamples { (example: Example) in - example.isSharedExample = true - example.callsite = callsite - } - } - -#if _runtime(_ObjC) - @objc(itWithDescription:flags:file:line:closure:) - private func objc_it(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { - it(description, flags: flags, file: file, line: line, closure: closure) - } - - @objc(fitWithDescription:flags:file:line:closure:) - private func objc_fit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { - fit(description, flags: flags, file: file, line: line, closure: closure) - } - - @objc(xitWithDescription:flags:file:line:closure:) - private func objc_xit(description: String, flags: FilterFlags, file: String, line: UInt, closure: () -> ()) { - xit(description, flags: flags, file: file, line: line, closure: closure) - } - - @objc(itBehavesLikeSharedExampleNamed:sharedExampleContext:flags:file:line:) - private func objc_itBehavesLike(name: String, sharedExampleContext: SharedExampleContext, flags: FilterFlags, file: String, line: UInt) { - itBehavesLike(name, sharedExampleContext: sharedExampleContext, flags: flags, file: file, line: line) - } -#endif - - internal func pending(description: String, closure: () -> ()) { - print("Pending: \(description)") - } - - private var currentPhase: String { - if beforesCurrentlyExecuting { - return "beforeEach" - } else if aftersCurrentlyExecuting { - return "afterEach" - } - - return "it" - } -} diff --git a/Carthage/Checkouts/Quick/Sources/Quick/ErrorUtility.swift b/Carthage/Checkouts/Quick/Sources/Quick/ErrorUtility.swift deleted file mode 100644 index 3c4035a..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/ErrorUtility.swift +++ /dev/null @@ -1,10 +0,0 @@ -import Foundation - -@noreturn internal func raiseError(message: String) { -#if _runtime(_ObjC) - NSException(name: NSInternalInconsistencyException, reason: message, userInfo: nil).raise() -#endif - - // This won't be reached when ObjC is available and the exception above is raisd - fatalError(message) -} diff --git a/Carthage/Checkouts/Quick/Sources/Quick/Example.swift b/Carthage/Checkouts/Quick/Sources/Quick/Example.swift deleted file mode 100644 index 8929525..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/Example.swift +++ /dev/null @@ -1,113 +0,0 @@ -import Foundation - -private var numberOfExamplesRun = 0 - -/** - Examples, defined with the `it` function, use assertions to - demonstrate how code should behave. These are like "tests" in XCTest. -*/ -final public class Example: NSObject { - /** - 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 internalDescription: String - private let closure: () -> () - private let flags: FilterFlags - - internal init(description: String, callsite: Callsite, flags: FilterFlags, closure: () -> ()) { - self.internalDescription = description - self.closure = closure - self.callsite = callsite - self.flags = flags - } - - public override var description: String { - return internalDescription - } - - /** - 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) - group!.phase = .BeforesExecuting - for before in group!.befores { - before(exampleMetadata: exampleMetadata) - } - group!.phase = .BeforesFinished - - closure() - - group!.phase = .AftersExecuting - for after in group!.afters { - after(exampleMetadata: exampleMetadata) - } - group!.phase = .AftersFinished - world.exampleHooks.executeAfters(exampleMetadata) - - numberOfExamplesRun += 1 - - if !world.isRunningAdditionalSuites && numberOfExamplesRun >= world.includedExampleCount { - 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/Carthage/Checkouts/Quick/Sources/Quick/ExampleGroup.swift b/Carthage/Checkouts/Quick/Sources/Quick/ExampleGroup.swift deleted file mode 100644 index cf2b983..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/ExampleGroup.swift +++ /dev/null @@ -1,105 +0,0 @@ -import Foundation - -/** - Example groups are logical groupings of examples, defined with - the `describe` and `context` functions. Example groups can share - setup and teardown code. -*/ -final public class ExampleGroup: NSObject { - weak internal var parent: ExampleGroup? - internal let hooks = ExampleHooks() - - internal var phase: HooksPhase = .NothingExecuted - - private let internalDescription: String - private let flags: FilterFlags - private let isInternalRootExampleGroup: Bool - private var childGroups = [ExampleGroup]() - private var childExamples = [Example]() - - internal init(description: String, flags: FilterFlags, isInternalRootExampleGroup: Bool = false) { - self.internalDescription = description - self.flags = flags - self.isInternalRootExampleGroup = isInternalRootExampleGroup - } - - public override var description: String { - return internalDescription - } - - /** - 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.appendContentsOf(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 = Array(hooks.befores.reverse()) - walkUp() { (group: ExampleGroup) -> () in - closures.appendContentsOf(Array(group.hooks.befores.reverse())) - } - return Array(closures.reverse()) - } - - internal var afters: [AfterExampleWithMetadataClosure] { - var closures = hooks.afters - walkUp() { (group: ExampleGroup) -> () in - closures.appendContentsOf(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/Carthage/Checkouts/Quick/Sources/Quick/ExampleMetadata.swift b/Carthage/Checkouts/Quick/Sources/Quick/ExampleMetadata.swift deleted file mode 100644 index e7510f7..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/ExampleMetadata.swift +++ /dev/null @@ -1,24 +0,0 @@ -import Foundation - -/** - A class that encapsulates information about an example, - including the index at which the example was executed, as - well as the example itself. -*/ -final public class ExampleMetadata: NSObject { - /** - 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/Carthage/Checkouts/Quick/Sources/Quick/Filter.swift b/Carthage/Checkouts/Quick/Sources/Quick/Filter.swift deleted file mode 100644 index d452efe..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/Filter.swift +++ /dev/null @@ -1,31 +0,0 @@ -import Foundation - -/** - 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. -*/ -final public class Filter: NSObject { - /** - 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/Carthage/Checkouts/Quick/Sources/Quick/Hooks/Closures.swift b/Carthage/Checkouts/Quick/Sources/Quick/Hooks/Closures.swift deleted file mode 100644 index 3252bbf..0000000 --- a/Carthage/Checkouts/Quick/Sources/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/Carthage/Checkouts/Quick/Sources/Quick/Hooks/ExampleHooks.swift b/Carthage/Checkouts/Quick/Sources/Quick/Hooks/ExampleHooks.swift deleted file mode 100644 index 1d5fa91..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/Hooks/ExampleHooks.swift +++ /dev/null @@ -1,42 +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 var phase: HooksPhase = .NothingExecuted - - 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) { - phase = .BeforesExecuting - for before in befores { - before(exampleMetadata: exampleMetadata) - } - - phase = .BeforesFinished - } - - internal func executeAfters(exampleMetadata: ExampleMetadata) { - phase = .AftersExecuting - for after in afters { - after(exampleMetadata: exampleMetadata) - } - - phase = .AftersFinished - } -} diff --git a/Carthage/Checkouts/Quick/Sources/Quick/Hooks/HooksPhase.swift b/Carthage/Checkouts/Quick/Sources/Quick/Hooks/HooksPhase.swift deleted file mode 100644 index 8dc3784..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/Hooks/HooksPhase.swift +++ /dev/null @@ -1,11 +0,0 @@ -/** - A description of the execution cycle of the current example with - respect to the hooks of that example. - */ -internal enum HooksPhase: Int { - case NothingExecuted = 0 - case BeforesExecuting - case BeforesFinished - case AftersExecuting - case AftersFinished -} diff --git a/Carthage/Checkouts/Quick/Sources/Quick/Hooks/SuiteHooks.swift b/Carthage/Checkouts/Quick/Sources/Quick/Hooks/SuiteHooks.swift deleted file mode 100644 index 59bdcf2..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/Hooks/SuiteHooks.swift +++ /dev/null @@ -1,32 +0,0 @@ -/** - A container for closures to be executed before and after all examples. -*/ -final internal class SuiteHooks { - internal var befores: [BeforeSuiteClosure] = [] - internal var afters: [AfterSuiteClosure] = [] - internal var phase: HooksPhase = .NothingExecuted - - internal func appendBefore(closure: BeforeSuiteClosure) { - befores.append(closure) - } - - internal func appendAfter(closure: AfterSuiteClosure) { - afters.append(closure) - } - - internal func executeBefores() { - phase = .BeforesExecuting - for before in befores { - before() - } - phase = .BeforesFinished - } - - internal func executeAfters() { - phase = .AftersExecuting - for after in afters { - after() - } - phase = .AftersFinished - } -} diff --git a/Carthage/Checkouts/Quick/Sources/Quick/Info.plist b/Carthage/Checkouts/Quick/Sources/Quick/Info.plist deleted file mode 100644 index 9667430..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/Info.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSHumanReadableCopyright - Copyright © 2014 - present, Quick Team. All rights reserved. - NSPrincipalClass - - - diff --git a/Carthage/Checkouts/Quick/Sources/Quick/NSBundle+CurrentTestBundle.swift b/Carthage/Checkouts/Quick/Sources/Quick/NSBundle+CurrentTestBundle.swift deleted file mode 100644 index e8709e0..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/NSBundle+CurrentTestBundle.swift +++ /dev/null @@ -1,20 +0,0 @@ -#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) - -import Foundation - -extension NSBundle { - - /** - Locates the first bundle with a '.xctest' file extension. - */ - internal static var currentTestBundle: NSBundle? { - return allBundles().lazy - .filter { - $0.bundlePath.hasSuffix(".xctest") - } - .first - } - -} - -#endif diff --git a/Carthage/Checkouts/Quick/Sources/Quick/NSString+QCKSelectorName.h b/Carthage/Checkouts/Quick/Sources/Quick/NSString+QCKSelectorName.h deleted file mode 100644 index 2da524e..0000000 --- a/Carthage/Checkouts/Quick/Sources/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/Carthage/Checkouts/Quick/Sources/Quick/NSString+QCKSelectorName.m b/Carthage/Checkouts/Quick/Sources/Quick/NSString+QCKSelectorName.m deleted file mode 100644 index d374be6..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/NSString+QCKSelectorName.m +++ /dev/null @@ -1,37 +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]; - - NSString *result = [validComponents componentsJoinedByString:@"_"]; - - return ([result length] == 0 - ? @"_" - : result); -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/Quick/Quick.h b/Carthage/Checkouts/Quick/Sources/Quick/Quick.h deleted file mode 100644 index 87dad10..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/Quick.h +++ /dev/null @@ -1,11 +0,0 @@ -#import - -//! Project version number for Quick. -FOUNDATION_EXPORT double QuickVersionNumber; - -//! Project version string for Quick. -FOUNDATION_EXPORT const unsigned char QuickVersionString[]; - -#import "QuickSpec.h" -#import "QCKDSL.h" -#import "QuickConfiguration.h" diff --git a/Carthage/Checkouts/Quick/Sources/Quick/QuickMain.swift b/Carthage/Checkouts/Quick/Sources/Quick/QuickMain.swift deleted file mode 100644 index 10ade80..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/QuickMain.swift +++ /dev/null @@ -1,28 +0,0 @@ -import XCTest - -// NOTE: This file is not intended to be included in the Xcode project or CocoaPods. -// It is picked up by the Swift Package Manager during its build process. - -/// When using Quick with swift-corelibs-xctest, automatic discovery of specs and -/// configurations is not available. Instead, you should create a standalone -/// executable and call this function from its main.swift file. This will execute -/// the specs and then terminate the process with an exit code of 0 if the tests -/// passed, or 1 if there were any failures. -/// -/// Quick is known to work with the DEVELOPMENT-SNAPSHOT-2016-02-08-a Swift toolchain. -@noreturn public func QCKMain(specs: [XCTestCase], configurations: [QuickConfiguration.Type] = []) { - // Perform all configuration (ensures that shared examples have been discovered) - World.sharedWorld.configure { configuration in - for configurationClass in configurations { - configurationClass.configure(configuration) - } - } - World.sharedWorld.finalizeConfiguration() - - // Gather all examples (ensures suite hooks have been discovered) - for case let spec as QuickSpec in specs { - spec.gatherExamplesIfNeeded() - } - - XCTMain(specs) -} diff --git a/Carthage/Checkouts/Quick/Sources/Quick/QuickSelectedTestSuiteBuilder.swift b/Carthage/Checkouts/Quick/Sources/Quick/QuickSelectedTestSuiteBuilder.swift deleted file mode 100644 index 5163a4e..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/QuickSelectedTestSuiteBuilder.swift +++ /dev/null @@ -1,73 +0,0 @@ -#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) - -/** - Responsible for building a "Selected tests" suite. This corresponds to a single - spec, and all its examples. - */ -internal class QuickSelectedTestSuiteBuilder: QuickTestSuiteBuilder { - - /** - The test spec class to run. - */ - let testCaseClass: AnyClass! - - /** - For Objective-C classes, returns the class name. For Swift classes without, - an explicit Objective-C name, returns a module-namespaced class name - (e.g., "FooTests.FooSpec"). - */ - var testSuiteClassName: String { - return NSStringFromClass(testCaseClass) - } - - /** - Given a test case name: - - FooSpec/testFoo - - Optionally constructs a test suite builder for the named test case class - in the running test bundle. - - If no test bundle can be found, or the test case class can't be found, - initialization fails and returns `nil`. - */ - init?(forTestCaseWithName name: String) { - guard let testCaseClass = testCaseClassForTestCaseWithName(name) else { - self.testCaseClass = nil - return nil - } - - self.testCaseClass = testCaseClass - } - - /** - Returns a `QuickTestSuite` that runs the associated test case class. - */ - func buildTestSuite() -> QuickTestSuite { - return QuickTestSuite(forTestCaseClass: testCaseClass) - } - -} - -/** - Searches `NSBundle.allBundles()` for an xctest bundle, then looks up the named - test case class in that bundle. - - Returns `nil` if a bundle or test case class cannot be found. - */ -private func testCaseClassForTestCaseWithName(name: String) -> AnyClass? { - func extractClassName(name: String) -> String? { - return name.characters.split("/").first.map(String.init) - } - - guard let className = extractClassName(name) else { return nil } - guard let bundle = NSBundle.currentTestBundle else { return nil } - - if let testCaseClass = bundle.classNamed(className) { return testCaseClass } - - guard let moduleName = bundle.bundlePath.fileName else { return nil } - - return NSClassFromString("\(moduleName).\(className)") -} - -#endif diff --git a/Carthage/Checkouts/Quick/Sources/Quick/QuickSpec.h b/Carthage/Checkouts/Quick/Sources/Quick/QuickSpec.h deleted file mode 100644 index 105a97e..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/QuickSpec.h +++ /dev/null @@ -1,50 +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. - - @code - override func spec() { - describe("winter") { - it("is coming") { - // ... - } - } - } - @endcode - - See DSL.swift for more information on what syntax is available. - */ -- (void)spec; - -@end diff --git a/Carthage/Checkouts/Quick/Sources/Quick/QuickSpec.m b/Carthage/Checkouts/Quick/Sources/Quick/QuickSpec.m deleted file mode 100644 index ea64934..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/QuickSpec.m +++ /dev/null @@ -1,170 +0,0 @@ -#import "QuickSpec.h" -#import "QuickConfiguration.h" -#import "NSString+QCKSelectorName.h" -#import "World.h" -#import - -static QuickSpec *currentSpec = nil; - -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 performWithCurrentExampleGroup:[world rootExampleGroupForSpecClass:self] closure:^{ - QuickSpec *spec = [self new]; - - @try { - [spec spec]; - } - @catch (NSException *exception) { - [NSException raise:NSInternalInconsistencyException - format:@"An exception occurred when building Quick's example groups.\n" - @"Some possible reasons this might happen include:\n\n" - @"- An 'expect(...).to' expectation was evaluated outside of " - @"an 'it', 'context', or 'describe' block\n" - @"- 'sharedExamples' was called twice with the same name\n" - @"- 'itBehavesLike' was called with a name that is not registered as a shared example\n\n" - @"Here's the original exception: '%@', reason: '%@', userInfo: '%@'", - exception.name, exception.reason, exception.userInfo]; - } - [self testInvocations]; - }]; -} - -/** - Invocations for each test method in the test case. QuickSpec overrides this method to define a - new method for each example defined in +[QuickSpec spec]. - - @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]]; - - NSMutableSet *selectorNames = [NSMutableSet set]; - - for (Example *example in examples) { - SEL selector = [self addInstanceMethodForExample:example classSelectorNames:selectorNames]; - 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 classSelectorNames:(NSMutableSet *)selectorNames { - IMP implementation = imp_implementationWithBlock(^(QuickSpec *self){ - currentSpec = self; - [example run]; - }); - NSCharacterSet *characterSet = [NSCharacterSet alphanumericCharacterSet]; - NSMutableString *sanitizedFileName = [NSMutableString string]; - for (NSUInteger i = 0; i < example.callsite.file.length; i++) { - unichar ch = [example.callsite.file characterAtIndex:i]; - if ([characterSet characterIsMember:ch]) { - [sanitizedFileName appendFormat:@"%c", ch]; - } - } - - const char *types = [[NSString stringWithFormat:@"%s%s%s", @encode(id), @encode(id), @encode(SEL)] UTF8String]; - - NSString *originalName = example.name.qck_selectorName; - NSString *selectorName = originalName; - NSUInteger i = 2; - - while ([selectorNames containsObject:selectorName]) { - selectorName = [NSString stringWithFormat:@"%@_%tu", originalName, i++]; - } - - [selectorNames addObject:selectorName]; - - SEL selector = NSSelectorFromString(selectorName); - class_addMethod(self, selector, implementation, types); - - 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; - } - [currentSpec.testRun recordFailureWithDescription:description - inFile:filePath - atLine:lineNumber - expected:expected]; -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/Quick/QuickSpec.swift b/Carthage/Checkouts/Quick/Sources/Quick/QuickSpec.swift deleted file mode 100644 index 1acfb76..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/QuickSpec.swift +++ /dev/null @@ -1,29 +0,0 @@ -import XCTest - -// NOTE: This file is not intended to be included in the Xcode project or CocoaPods. -// It is picked up by the Swift Package Manager during its build process. - -public class QuickSpec: XCTestCase, XCTestCaseProvider { - public func spec() {} - - public required init() {} - - public var allTests : [(String, () throws -> Void)] { - gatherExamplesIfNeeded() - - let examples = World.sharedWorld.examples(self.dynamicType) - return examples.map({ example -> (String, () -> Void) in - return (example.name, { example.run() }) - }) - } - - internal func gatherExamplesIfNeeded() { - let world = World.sharedWorld - let rootExampleGroup = world.rootExampleGroupForSpecClass(self.dynamicType) - if rootExampleGroup.examples.isEmpty { - world.currentExampleGroup = rootExampleGroup - spec() - world.currentExampleGroup = nil - } - } -} diff --git a/Carthage/Checkouts/Quick/Sources/Quick/QuickTestSuite.swift b/Carthage/Checkouts/Quick/Sources/Quick/QuickTestSuite.swift deleted file mode 100644 index 0cb5187..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/QuickTestSuite.swift +++ /dev/null @@ -1,52 +0,0 @@ -#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) - -import XCTest - -/** - This protocol defines the role of an object that builds test suites. - */ -internal protocol QuickTestSuiteBuilder { - - /** - Construct a `QuickTestSuite` instance with the appropriate test cases added as tests. - - Subsequent calls to this method should return equivalent test suites. - */ - func buildTestSuite() -> QuickTestSuite - -} - -/** - A base class for a class cluster of Quick test suites, that should correctly - build dynamic test suites for XCTest to execute. - */ -public class QuickTestSuite: XCTestSuite { - - private static var builtTestSuites: Set = Set() - - /** - Construct a test suite for a specific, selected subset of test cases (rather - than the default, which as all test cases). - - If this method is called multiple times for the same test case class, e.g.. - - FooSpec/testFoo - FooSpec/testBar - - It is expected that the first call should return a valid test suite, and - all subsequent calls should return `nil`. - */ - public static func selectedTestSuite(forTestCaseWithName name: String) -> QuickTestSuite? { - guard let builder = QuickSelectedTestSuiteBuilder(forTestCaseWithName: name) else { return nil } - - if builtTestSuites.contains(builder.testSuiteClassName) { - return nil - } else { - builtTestSuites.insert(builder.testSuiteClassName) - return builder.buildTestSuite() - } - } - -} - -#endif diff --git a/Carthage/Checkouts/Quick/Sources/Quick/String+FileName.swift b/Carthage/Checkouts/Quick/Sources/Quick/String+FileName.swift deleted file mode 100644 index 87cea7a..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/String+FileName.swift +++ /dev/null @@ -1,12 +0,0 @@ -import Foundation - -extension String { - - /** - If the receiver represents a path, returns its file name with a file extension. - */ - var fileName: String? { - return NSURL(string: self)?.URLByDeletingPathExtension?.lastPathComponent - } - -} diff --git a/Carthage/Checkouts/Quick/Sources/Quick/World.h b/Carthage/Checkouts/Quick/Sources/Quick/World.h deleted file mode 100644 index e638cf6..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/World.h +++ /dev/null @@ -1,18 +0,0 @@ -#import - -@class ExampleGroup; -@class ExampleMetadata; - -SWIFT_CLASS("_TtC5Quick5World") -@interface World - -@property (nonatomic) ExampleGroup * __nullable currentExampleGroup; -@property (nonatomic) ExampleMetadata * __nullable currentExampleMetadata; -@property (nonatomic) BOOL isRunningAdditionalSuites; -+ (World * __nonnull)sharedWorld; -- (void)configure:(void (^ __nonnull)(Configuration * __nonnull))closure; -- (void)finalizeConfiguration; -- (ExampleGroup * __nonnull)rootExampleGroupForSpecClass:(Class __nonnull)cls; -- (NSArray * __nonnull)examplesForSpecClass:(Class __nonnull)specClass; -- (void)performWithCurrentExampleGroup:(ExampleGroup * __nonnull)group closure:(void (^ __nonnull)(void))closure; -@end diff --git a/Carthage/Checkouts/Quick/Sources/Quick/World.swift b/Carthage/Checkouts/Quick/Sources/Quick/World.swift deleted file mode 100644 index b2b58c8..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/World.swift +++ /dev/null @@ -1,230 +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. -*/ -final internal class World: NSObject { - /** - 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. - */ - internal 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. - */ - - internal 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. - */ - internal 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 override init() {} - static let sharedWorld = World() - - // 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. - - - parameter closure: A closure that takes a Configuration object that can - be mutated to change Quick's behavior. - */ - internal func configure(closure: QuickConfigurer) { - assert(!isConfigurationFinalized, - "Quick cannot be configured outside of a +[QuickConfiguration configure:] method. You should not call -[World configure:] directly. Instead, subclass QuickConfiguration and override the +[QuickConfiguration configure:] method.") - closure(configuration: configuration) - } - - /** - Finalizes the World's configuration. - Any subsequent calls to World.configure() will raise. - */ - internal 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") {} - } - - - parameter cls: The QuickSpec class for which to retrieve the root example group. - - returns: The root example group for the class. - */ - internal func rootExampleGroupForSpecClass(cls: AnyClass) -> ExampleGroup { - #if _runtime(_ObjC) - let name = NSStringFromClass(cls) - #else - let name = String(cls) - #endif - - 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. - - - parameter specClass: The QuickSpec subclass for which examples are to be returned. - - returns: A list of examples to be run as test invocations. - */ - internal func examples(specClass: AnyClass) -> [Example] { - // 1. Grab all included examples. - let included = includedExamples - // 2. Grab the intersection of (a) examples for this spec, and (b) included examples. - let spec = rootExampleGroupForSpecClass(specClass).examples.filter { included.contains($0) } - // 3. Remove all excluded examples. - return spec.filter { example in - !self.configuration.exclusionFilters.reduce(false) { $0 || $1(example: example) } - } - } - -#if _runtime(_ObjC) - @objc(examplesForSpecClass:) - private func objc_examples(specClass: AnyClass) -> [Example] { - return examples(specClass) - } -#endif - - // MARK: Internal - - internal func registerSharedExample(name: String, closure: SharedExampleClosure) { - raiseIfSharedExampleAlreadyRegistered(name) - sharedExamples[name] = closure - } - - internal func sharedExample(name: String) -> SharedExampleClosure { - raiseIfSharedExampleNotRegistered(name) - return sharedExamples[name]! - } - - internal var includedExampleCount: Int { - return includedExamples.count - } - - internal var beforesCurrentlyExecuting: Bool { - let suiteBeforesExecuting = suiteHooks.phase == .BeforesExecuting - let exampleBeforesExecuting = exampleHooks.phase == .BeforesExecuting - var groupBeforesExecuting = false - if let runningExampleGroup = currentExampleMetadata?.example.group { - groupBeforesExecuting = runningExampleGroup.phase == .BeforesExecuting - } - - return suiteBeforesExecuting || exampleBeforesExecuting || groupBeforesExecuting - } - - internal var aftersCurrentlyExecuting: Bool { - let suiteAftersExecuting = suiteHooks.phase == .AftersExecuting - let exampleAftersExecuting = exampleHooks.phase == .AftersExecuting - var groupAftersExecuting = false - if let runningExampleGroup = currentExampleMetadata?.example.group { - groupAftersExecuting = runningExampleGroup.phase == .AftersExecuting - } - - return suiteAftersExecuting || exampleAftersExecuting || groupAftersExecuting - } - - internal func performWithCurrentExampleGroup(group: ExampleGroup, closure: () -> Void) { - let previousExampleGroup = currentExampleGroup - currentExampleGroup = group - - closure() - - currentExampleGroup = previousExampleGroup - } - - 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 { - raiseError("A shared example named '\(name)' has already been registered.") - } - } - - private func raiseIfSharedExampleNotRegistered(name: String) { - if sharedExamples[name] == nil { - raiseError("No shared example named '\(name)' has been registered. Registered shared examples: '\(Array(sharedExamples.keys))'") - } - } -} diff --git a/Carthage/Checkouts/Quick/Sources/Quick/XCTestSuite+QuickTestSuiteBuilder.m b/Carthage/Checkouts/Quick/Sources/Quick/XCTestSuite+QuickTestSuiteBuilder.m deleted file mode 100644 index e49939e..0000000 --- a/Carthage/Checkouts/Quick/Sources/Quick/XCTestSuite+QuickTestSuiteBuilder.m +++ /dev/null @@ -1,40 +0,0 @@ -#import -#import -#import - -@interface XCTestSuite (QuickTestSuiteBuilder) -@end - -@implementation XCTestSuite (QuickTestSuiteBuilder) - -/** - In order to ensure we can correctly build dynamic test suites, we need to - replace some of the default test suite constructors. - */ -+ (void)load { - Method testCaseWithName = class_getClassMethod(self, @selector(testSuiteForTestCaseWithName:)); - Method hooked_testCaseWithName = class_getClassMethod(self, @selector(qck_hooked_testSuiteForTestCaseWithName:)); - method_exchangeImplementations(testCaseWithName, hooked_testCaseWithName); -} - -/** - The `+testSuiteForTestCaseWithName:` method is called when a specific test case - class is run from the Xcode test navigator. If the built test suite is `nil`, - Xcode will not run any tests for that test case. - - Given if the following test case class is run from the Xcode test navigator: - - FooSpec - testFoo - testBar - - XCTest will invoke this once per test case, with test case names following this format: - - FooSpec/testFoo - FooSpec/testBar - */ -+ (nullable instancetype)qck_hooked_testSuiteForTestCaseWithName:(nonnull NSString *)name { - return [QuickTestSuite selectedTestSuiteForTestCaseWithName:name]; -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/FocusedTests+ObjC.m b/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/FocusedTests+ObjC.m deleted file mode 100644 index 5069f2b..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/FocusedTests+ObjC.m +++ /dev/null @@ -1,56 +0,0 @@ -@import Quick; -@import Nimble; -@import XCTest; - -#import "QCKSpecRunner.h" - -QuickConfigurationBegin(FunctionalTests_SharedExamplesConfiguration_ObjC) - -+ (void)configure:(Configuration *)configuration { - sharedExamples(@"two passing shared examples (Objective-C)", ^(QCKDSLSharedExampleContext exampleContext) { - it(@"has an example that passes (4)", ^{}); - it(@"has another example that passes (5)", ^{}); - }); -} - -QuickConfigurationEnd - -QuickSpecBegin(FunctionalTests_FocusedSpec_Focused_ObjC) - -it(@"has an unfocused example that fails, but is never run", ^{ XCTFail(); }); -fit(@"has a focused example that passes (1)", ^{}); - -fdescribe(@"a focused example group", ^{ - it(@"has an example that is not focused, but will be run, and passes (2)", ^{}); - fit(@"has a focused example that passes (3)", ^{}); -}); - -fitBehavesLike(@"two passing shared examples (Objective-C)", ^NSDictionary *{ return @{}; }); - -QuickSpecEnd - -QuickSpecBegin(FunctionalTests_FocusedSpec_Unfocused_ObjC) - -it(@"has an unfocused example thay fails, but is never run", ^{ XCTFail(); }); - -describe(@"an unfocused example group that is never run", ^{ - beforeEach(^{ [NSException raise:NSInternalInconsistencyException format:@""]; }); - it(@"has an example that fails, but is never run", ^{ XCTFail(); }); -}); - -QuickSpecEnd - -@interface FocusedTests_ObjC: XCTestCase -@end - -@implementation FocusedTests_ObjC - -- (void)testOnlyFocusedExamplesAreExecuted { - XCTestRun *result = qck_runSpecs(@[ - [FunctionalTests_FocusedSpec_Focused_ObjC class], - [FunctionalTests_FocusedSpec_Unfocused_ObjC class] - ]); - XCTAssertEqual(result.executionCount, 5); -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/FocusedTests.swift b/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/FocusedTests.swift deleted file mode 100644 index f84b643..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/FocusedTests.swift +++ /dev/null @@ -1,57 +0,0 @@ -import Quick -import Nimble -import XCTest -#if SWIFT_PACKAGE -import QuickTestHelpers -#endif - -class FunctionalTests_FocusedSpec_SharedExamplesConfiguration: QuickConfiguration { - override class func configure(configuration: Configuration) { - sharedExamples("two passing shared examples") { - it("has an example that passes (4)") {} - it("has another example that passes (5)") {} - } - } -} - -class FunctionalTests_FocusedSpec_Focused: QuickSpec { - override func spec() { - it("has an unfocused example that fails, but is never run") { fail() } - fit("has a focused example that passes (1)") {} - - fdescribe("a focused example group") { - it("has an example that is not focused, but will be run, and passes (2)") {} - fit("has a focused example that passes (3)") {} - } - - // TODO: Port fitBehavesLike to Swift. - itBehavesLike("two passing shared examples", flags: [Filter.focused: true]) - } -} - -class FunctionalTests_FocusedSpec_Unfocused: QuickSpec { - override func spec() { - it("has an unfocused example that fails, but is never run") { fail() } - - describe("an unfocused example group that is never run") { - beforeEach { assert(false) } - it("has an example that fails, but is never run") { fail() } - } - } -} - -class FocusedTests: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testOnlyFocusedExamplesAreExecuted", testOnlyFocusedExamplesAreExecuted), - ] - } - - func testOnlyFocusedExamplesAreExecuted() { - let result = qck_runSpecs([ - FunctionalTests_FocusedSpec_Focused.self, - FunctionalTests_FocusedSpec_Unfocused.self - ]) - XCTAssertEqual(result.executionCount, 5 as UInt) - } -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/Info.plist b/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/Info.plist deleted file mode 100644 index ba72822..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/main.swift b/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/main.swift deleted file mode 100644 index 33fafcc..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickFocusedTests/main.swift +++ /dev/null @@ -1,9 +0,0 @@ -import Quick - -QCKMain([ - FunctionalTests_FocusedSpec_Focused(), - FunctionalTests_FocusedSpec_Unfocused(), - FocusedTests(), -], -configurations: [FunctionalTests_FocusedSpec_SharedExamplesConfiguration.self] -) diff --git a/Carthage/Checkouts/Quick/Sources/QuickTestHelpers/SpecRunner.swift b/Carthage/Checkouts/Quick/Sources/QuickTestHelpers/SpecRunner.swift deleted file mode 100644 index 9543f18..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTestHelpers/SpecRunner.swift +++ /dev/null @@ -1,29 +0,0 @@ -@testable import Quick -import Nimble - -public func qck_runSpec(specClass: QuickSpec.Type) -> TestRun { - return qck_runSpecs([specClass]) -} - -public func qck_runSpecs(specClasses: [QuickSpec.Type]) -> TestRun { - World.sharedWorld.isRunningAdditionalSuites = true - - var executionCount: UInt = 0 - var hadUnexpectedFailure = false - - let fails = gatherFailingExpectations(silently: true) { - for specClass in specClasses { - let spec = specClass.init() - for (_, test) in spec.allTests { - do { - try test() - } catch { - hadUnexpectedFailure = true - } - executionCount += 1 - } - } - } - - return TestRun(executionCount: executionCount, hasSucceeded: fails.isEmpty && !hadUnexpectedFailure) -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTestHelpers/TestRun.swift b/Carthage/Checkouts/Quick/Sources/QuickTestHelpers/TestRun.swift deleted file mode 100644 index cfa160e..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTestHelpers/TestRun.swift +++ /dev/null @@ -1,10 +0,0 @@ - -public struct TestRun { - public var executionCount: UInt - public var hasSucceeded: Bool - - public init(executionCount: UInt, hasSucceeded: Bool) { - self.executionCount = executionCount - self.hasSucceeded = hasSucceeded - } -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/Fixtures/FunctionalTests_SharedExamplesTests_SharedExamples.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/Fixtures/FunctionalTests_SharedExamplesTests_SharedExamples.swift deleted file mode 100644 index dc424ee..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/Fixtures/FunctionalTests_SharedExamplesTests_SharedExamples.swift +++ /dev/null @@ -1,20 +0,0 @@ -import Foundation -import Quick -import Nimble - -class FunctionalTests_SharedExamplesTests_SharedExamples: QuickConfiguration { - override class func configure(configuration: Configuration) { - sharedExamples("a group of three shared examples") { - it("passes once") { expect(true).to(beTruthy()) } - it("passes twice") { expect(true).to(beTruthy()) } - it("passes three times") { expect(true).to(beTruthy()) } - } - - sharedExamples("shared examples that take a context") { (sharedExampleContext: SharedExampleContext) in - it("is passed the correct parameters via the context") { - let callsite = sharedExampleContext()[NSString(string: "callsite")] as! NSString - expect(callsite).to(equal("SharedExamplesSpec")) - } - } - } -} \ No newline at end of file diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterEachTests+ObjC.m b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterEachTests+ObjC.m deleted file mode 100644 index 4216a86..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterEachTests+ObjC.m +++ /dev/null @@ -1,81 +0,0 @@ -@import XCTest; -@import Quick; -@import Nimble; - -#import "QCKSpecRunner.h" - -typedef NS_ENUM(NSUInteger, AfterEachType) { - OuterOne, - OuterTwo, - OuterThree, - InnerOne, - InnerTwo, - NoExamples, -}; - -static NSMutableArray *afterEachOrder; - -QuickSpecBegin(FunctionalTests_AfterEachSpec_ObjC) - -afterEach(^{ [afterEachOrder addObject:@(OuterOne)]; }); -afterEach(^{ [afterEachOrder addObject:@(OuterTwo)]; }); -afterEach(^{ [afterEachOrder addObject:@(OuterThree)]; }); - -it(@"executes the outer afterEach closures once, but not before this closure [1]", ^{ - expect(afterEachOrder).to(equal(@[])); -}); - -it(@"executes the outer afterEach closures a second time, but not before this closure [2]", ^{ - expect(afterEachOrder).to(equal(@[@(OuterOne), @(OuterTwo), @(OuterThree)])); -}); - -context(@"when there are nested afterEach", ^{ - afterEach(^{ [afterEachOrder addObject:@(InnerOne)]; }); - afterEach(^{ [afterEachOrder addObject:@(InnerTwo)]; }); - - it(@"executes the outer and inner afterEach closures, but not before this closure [3]", ^{ - // The afterEach for the previous two examples should have been run. - // The list should contain the afterEach for those example, executed from top to bottom. - expect(afterEachOrder).to(equal(@[ - @(OuterOne), @(OuterTwo), @(OuterThree), - @(OuterOne), @(OuterTwo), @(OuterThree), - ])); - }); -}); - -context(@"when there are nested afterEach without examples", ^{ - afterEach(^{ [afterEachOrder addObject:@(NoExamples)]; }); -}); - -QuickSpecEnd - -@interface AfterEachTests_ObjC : XCTestCase; @end - -@implementation AfterEachTests_ObjC - -- (void)setUp { - [super setUp]; - afterEachOrder = [NSMutableArray array]; -} - -- (void)tearDown { - afterEachOrder = [NSMutableArray array]; - [super tearDown]; -} - -- (void)testAfterEachIsExecutedInTheCorrectOrder { - qck_runSpec([FunctionalTests_AfterEachSpec_ObjC class]); - NSArray *expectedOrder = @[ - // [1] The outer afterEach closures are executed from top to bottom. - @(OuterOne), @(OuterTwo), @(OuterThree), - // [2] The outer afterEach closures are executed from top to bottom. - @(OuterOne), @(OuterTwo), @(OuterThree), - // [3] The outer afterEach closures are executed from top to bottom, - // then the outer afterEach closures are executed from top to bottom. - @(InnerOne), @(InnerTwo), @(OuterOne), @(OuterTwo), @(OuterThree), - ]; - - XCTAssertEqualObjects(afterEachOrder, expectedOrder); -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterEachTests.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterEachTests.swift deleted file mode 100644 index f8a265d..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterEachTests.swift +++ /dev/null @@ -1,96 +0,0 @@ -import XCTest -import Quick -import Nimble -#if SWIFT_PACKAGE -import QuickTestHelpers -#endif - -private enum AfterEachType { - case OuterOne - case OuterTwo - case OuterThree - case InnerOne - case InnerTwo - case NoExamples -} - -private var afterEachOrder = [AfterEachType]() - -class FunctionalTests_AfterEachSpec: QuickSpec { - override func spec() { - describe("afterEach ordering") { - afterEach { afterEachOrder.append(AfterEachType.OuterOne) } - afterEach { afterEachOrder.append(AfterEachType.OuterTwo) } - afterEach { afterEachOrder.append(AfterEachType.OuterThree) } - - it("executes the outer afterEach closures once, but not before this closure [1]") { - // No examples have been run, so no afterEach will have been run either. - // The list should be empty. - expect(afterEachOrder).to(beEmpty()) - } - - it("executes the outer afterEach closures a second time, but not before this closure [2]") { - // The afterEach for the previous example should have been run. - // The list should contain the afterEach for that example, executed from top to bottom. - expect(afterEachOrder).to(equal([AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree])) - } - - context("when there are nested afterEach") { - afterEach { afterEachOrder.append(AfterEachType.InnerOne) } - afterEach { afterEachOrder.append(AfterEachType.InnerTwo) } - - it("executes the outer and inner afterEach closures, but not before this closure [3]") { - // The afterEach for the previous two examples should have been run. - // The list should contain the afterEach for those example, executed from top to bottom. - expect(afterEachOrder).to(equal([ - AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree, - AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree, - ])) - } - } - - context("when there are nested afterEach without examples") { - afterEach { afterEachOrder.append(AfterEachType.NoExamples) } - } - } -#if _runtime(_ObjC) - describe("error handling when misusing ordering") { - it("should throw an exception when including afterEach in it block") { - expect { - afterEach { } - }.to(raiseException { (exception: NSException) in - expect(exception.name).to(equal(NSInternalInconsistencyException)) - expect(exception.reason).to(equal("'afterEach' cannot be used inside 'it', 'afterEach' may only be used inside 'context' or 'describe'. ")) - }) - } - } -#endif - } -} - -class AfterEachTests: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testAfterEachIsExecutedInTheCorrectOrder", testAfterEachIsExecutedInTheCorrectOrder), - ] - } - - func testAfterEachIsExecutedInTheCorrectOrder() { - afterEachOrder = [] - - qck_runSpec(FunctionalTests_AfterEachSpec.self) - let expectedOrder = [ - // [1] The outer afterEach closures are executed from top to bottom. - AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree, - // [2] The outer afterEach closures are executed from top to bottom. - AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree, - // [3] The inner afterEach closures are executed from top to bottom, - // then the outer afterEach closures are executed from top to bottom. - AfterEachType.InnerOne, AfterEachType.InnerTwo, - AfterEachType.OuterOne, AfterEachType.OuterTwo, AfterEachType.OuterThree, - ] - XCTAssertEqual(afterEachOrder, expectedOrder) - - afterEachOrder = [] - } -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterSuiteTests+ObjC.m b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterSuiteTests+ObjC.m deleted file mode 100644 index fd8f6d2..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterSuiteTests+ObjC.m +++ /dev/null @@ -1,42 +0,0 @@ -@import XCTest; -@import Quick; -@import Nimble; - -#import "QCKSpecRunner.h" - -static BOOL afterSuiteWasExecuted = NO; - -QuickSpecBegin(FunctionalTests_AfterSuite_AfterSuiteSpec_ObjC) - -afterSuite(^{ - afterSuiteWasExecuted = YES; -}); - -QuickSpecEnd - -QuickSpecBegin(FunctionalTests_AfterSuite_Spec_ObjC) - -it(@"is executed before afterSuite", ^{ - expect(@(afterSuiteWasExecuted)).to(beFalsy()); -}); - -QuickSpecEnd - -@interface AfterSuiteTests_ObjC : XCTestCase; @end - -@implementation AfterSuiteTests_ObjC - -- (void)testAfterSuiteIsNotExecutedBeforeAnyExamples { - // Execute the spec with an assertion after the one with an afterSuite. - NSArray *specs = @[ - [FunctionalTests_AfterSuite_AfterSuiteSpec_ObjC class], - [FunctionalTests_AfterSuite_Spec_ObjC class] - ]; - XCTestRun *result = qck_runSpecs(specs); - - // Although this ensures that afterSuite is not called before any - // examples, it doesn't test that it's ever called in the first place. - XCTAssert(result.hasSucceeded); -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterSuiteTests.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterSuiteTests.swift deleted file mode 100644 index 4e4888a..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/AfterSuiteTests.swift +++ /dev/null @@ -1,44 +0,0 @@ -import XCTest -import Quick -import Nimble -#if SWIFT_PACKAGE -import QuickTestHelpers -#endif - -var afterSuiteWasExecuted = false - -class FunctionalTests_AfterSuite_AfterSuiteSpec: QuickSpec { - override func spec() { - afterSuite { - afterSuiteWasExecuted = true - } - } -} - -class FunctionalTests_AfterSuite_Spec: QuickSpec { - override func spec() { - it("is executed before afterSuite") { - expect(afterSuiteWasExecuted).to(beFalsy()) - } - } -} - -class AfterSuiteTests: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testAfterSuiteIsNotExecutedBeforeAnyExamples", testAfterSuiteIsNotExecutedBeforeAnyExamples), - ] - } - - func testAfterSuiteIsNotExecutedBeforeAnyExamples() { - // Execute the spec with an assertion after the one with an afterSuite. - let result = qck_runSpecs([ - FunctionalTests_AfterSuite_AfterSuiteSpec.self, - FunctionalTests_AfterSuite_Spec.self - ]) - - // Although this ensures that afterSuite is not called before any - // examples, it doesn't test that it's ever called in the first place. - XCTAssert(result.hasSucceeded) - } -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeEachTests+ObjC.m b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeEachTests+ObjC.m deleted file mode 100644 index c7a5897..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeEachTests+ObjC.m +++ /dev/null @@ -1,68 +0,0 @@ -@import XCTest; -@import Quick; - -#import "QCKSpecRunner.h" - -typedef NS_ENUM(NSUInteger, BeforeEachType) { - OuterOne, - OuterTwo, - InnerOne, - InnerTwo, - InnerThree, - NoExamples, -}; - -static NSMutableArray *beforeEachOrder; - -QuickSpecBegin(FunctionalTests_BeforeEachSpec_ObjC) - -beforeEach(^{ [beforeEachOrder addObject:@(OuterOne)]; }); -beforeEach(^{ [beforeEachOrder addObject:@(OuterTwo)]; }); - -it(@"executes the outer beforeEach closures once [1]", ^{}); -it(@"executes the outer beforeEach closures a second time [2]", ^{}); - -context(@"when there are nested beforeEach", ^{ - beforeEach(^{ [beforeEachOrder addObject:@(InnerOne)]; }); - beforeEach(^{ [beforeEachOrder addObject:@(InnerTwo)]; }); - beforeEach(^{ [beforeEachOrder addObject:@(InnerThree)]; }); - - it(@"executes the outer and inner beforeEach closures [3]", ^{}); -}); - -context(@"when there are nested beforeEach without examples", ^{ - beforeEach(^{ [beforeEachOrder addObject:@(NoExamples)]; }); -}); - -QuickSpecEnd - -@interface BeforeEachTests_ObjC : XCTestCase; @end - -@implementation BeforeEachTests_ObjC - -- (void)setUp { - beforeEachOrder = [NSMutableArray array]; - [super setUp]; -} - -- (void)tearDown { - beforeEachOrder = [NSMutableArray array]; - [super tearDown]; -} - -- (void)testBeforeEachIsExecutedInTheCorrectOrder { - qck_runSpec([FunctionalTests_BeforeEachSpec_ObjC class]); - NSArray *expectedOrder = @[ - // [1] The outer beforeEach closures are executed from top to bottom. - @(OuterOne), @(OuterTwo), - // [2] The outer beforeEach closures are executed from top to bottom. - @(OuterOne), @(OuterTwo), - // [3] The outer beforeEach closures are executed from top to bottom, - // then the inner beforeEach closures are executed from top to bottom. - @(OuterOne), @(OuterTwo), @(InnerOne), @(InnerTwo), @(InnerThree), - ]; - - XCTAssertEqualObjects(beforeEachOrder, expectedOrder); -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeEachTests.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeEachTests.swift deleted file mode 100644 index 97262d5..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeEachTests.swift +++ /dev/null @@ -1,79 +0,0 @@ -import XCTest -import Quick -import Nimble -#if SWIFT_PACKAGE -import QuickTestHelpers -#endif - -private enum BeforeEachType { - case OuterOne - case OuterTwo - case InnerOne - case InnerTwo - case InnerThree - case NoExamples -} - -private var beforeEachOrder = [BeforeEachType]() - -class FunctionalTests_BeforeEachSpec: QuickSpec { - override func spec() { - - describe("beforeEach ordering") { - beforeEach { beforeEachOrder.append(BeforeEachType.OuterOne) } - beforeEach { beforeEachOrder.append(BeforeEachType.OuterTwo) } - - it("executes the outer beforeEach closures once [1]") {} - it("executes the outer beforeEach closures a second time [2]") {} - - context("when there are nested beforeEach") { - beforeEach { beforeEachOrder.append(BeforeEachType.InnerOne) } - beforeEach { beforeEachOrder.append(BeforeEachType.InnerTwo) } - beforeEach { beforeEachOrder.append(BeforeEachType.InnerThree) } - - it("executes the outer and inner beforeEach closures [3]") {} - } - - context("when there are nested beforeEach without examples") { - beforeEach { beforeEachOrder.append(BeforeEachType.NoExamples) } - } - } -#if _runtime(_ObjC) - describe("error handling when misusing ordering") { - it("should throw an exception when including beforeEach in it block") { - expect { - beforeEach { } - }.to(raiseException { (exception: NSException) in - expect(exception.name).to(equal(NSInternalInconsistencyException)) - expect(exception.reason).to(equal("'beforeEach' cannot be used inside 'it', 'beforeEach' may only be used inside 'context' or 'describe'. ")) - }) - } - } -#endif - } -} - -class BeforeEachTests: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testBeforeEachIsExecutedInTheCorrectOrder", testBeforeEachIsExecutedInTheCorrectOrder), - ] - } - - func testBeforeEachIsExecutedInTheCorrectOrder() { - beforeEachOrder = [] - - qck_runSpec(FunctionalTests_BeforeEachSpec.self) - let expectedOrder = [ - // [1] The outer beforeEach closures are executed from top to bottom. - BeforeEachType.OuterOne, BeforeEachType.OuterTwo, - // [2] The outer beforeEach closures are executed from top to bottom. - BeforeEachType.OuterOne, BeforeEachType.OuterTwo, - // [3] The outer beforeEach closures are executed from top to bottom, - // then the inner beforeEach closures are executed from top to bottom. - BeforeEachType.OuterOne, BeforeEachType.OuterTwo, - BeforeEachType.InnerOne, BeforeEachType.InnerTwo, BeforeEachType.InnerThree, - ] - XCTAssertEqual(beforeEachOrder, expectedOrder) - } -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeSuiteTests+ObjC.m b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeSuiteTests+ObjC.m deleted file mode 100644 index ce7efc9..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeSuiteTests+ObjC.m +++ /dev/null @@ -1,39 +0,0 @@ -@import XCTest; -@import Quick; -@import Nimble; - -#import "QCKSpecRunner.h" - -static BOOL beforeSuiteWasExecuted = NO; - -QuickSpecBegin(FunctionalTests_BeforeSuite_BeforeSuiteSpec_ObjC) - -beforeSuite(^{ - beforeSuiteWasExecuted = YES; -}); - -QuickSpecEnd - -QuickSpecBegin(FunctionalTests_BeforeSuite_Spec_ObjC) - -it(@"is executed after beforeSuite", ^{ - expect(@(beforeSuiteWasExecuted)).to(beTruthy()); -}); - -QuickSpecEnd - -@interface BeforeSuiteTests_ObjC : XCTestCase; @end - -@implementation BeforeSuiteTests_ObjC - -- (void)testBeforeSuiteIsExecutedBeforeAnyExamples { - // Execute the spec with an assertion before the one with a beforeSuite - NSArray *specs = @[ - [FunctionalTests_BeforeSuite_Spec_ObjC class], - [FunctionalTests_BeforeSuite_BeforeSuiteSpec_ObjC class] - ]; - XCTestRun *result = qck_runSpecs(specs); - XCTAssert(result.hasSucceeded); -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeSuiteTests.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeSuiteTests.swift deleted file mode 100644 index bb6e97e..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/BeforeSuiteTests.swift +++ /dev/null @@ -1,42 +0,0 @@ -import XCTest -import Quick -import Nimble -#if SWIFT_PACKAGE -import QuickTestHelpers -#endif - -var beforeSuiteWasExecuted = false - -class FunctionalTests_BeforeSuite_BeforeSuiteSpec: QuickSpec { - override func spec() { - beforeSuite { - beforeSuiteWasExecuted = true - } - } -} - -class FunctionalTests_BeforeSuite_Spec: QuickSpec { - override func spec() { - it("is executed after beforeSuite") { - expect(beforeSuiteWasExecuted).to(beTruthy()) - } - } -} - -class BeforeSuiteTests: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testBeforeSuiteIsExecutedBeforeAnyExamples", testBeforeSuiteIsExecutedBeforeAnyExamples), - ] - } - - func testBeforeSuiteIsExecutedBeforeAnyExamples() { - // Execute the spec with an assertion before the one with a beforeSuite - let result = qck_runSpecs([ - FunctionalTests_BeforeSuite_Spec.self, - FunctionalTests_BeforeSuite_BeforeSuiteSpec.self - ]) - - XCTAssert(result.hasSucceeded) - } -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/AfterEach/Configuration+AfterEach.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/AfterEach/Configuration+AfterEach.swift deleted file mode 100644 index fd95f1e..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/AfterEach/Configuration+AfterEach.swift +++ /dev/null @@ -1,11 +0,0 @@ -import Quick - -public var FunctionalTests_Configuration_AfterEachWasExecuted = false - -class FunctionalTests_Configuration_AfterEach: QuickConfiguration { - override class func configure(configuration: Configuration) { - configuration.afterEach { - FunctionalTests_Configuration_AfterEachWasExecuted = true - } - } -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/AfterEach/Configuration+AfterEachTests.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/AfterEach/Configuration+AfterEachTests.swift deleted file mode 100644 index e15bcd7..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/AfterEach/Configuration+AfterEachTests.swift +++ /dev/null @@ -1,34 +0,0 @@ -import XCTest -import Quick -import Nimble -#if SWIFT_PACKAGE -import QuickTestHelpers -#endif - -class Configuration_AfterEachSpec: QuickSpec { - override func spec() { - beforeEach { - FunctionalTests_Configuration_AfterEachWasExecuted = false - } - it("is executed before the configuration afterEach") { - expect(FunctionalTests_Configuration_AfterEachWasExecuted).to(beFalsy()) - } - } -} - -class Configuration_AfterEachTests: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted", testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted), - ] - } - - func testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted() { - FunctionalTests_Configuration_AfterEachWasExecuted = false - - qck_runSpec(Configuration_BeforeEachSpec.self) - XCTAssert(FunctionalTests_Configuration_AfterEachWasExecuted) - - FunctionalTests_Configuration_AfterEachWasExecuted = false - } -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/BeforeEach/Configuration+BeforeEach.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/BeforeEach/Configuration+BeforeEach.swift deleted file mode 100644 index 6c0f6ce..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/BeforeEach/Configuration+BeforeEach.swift +++ /dev/null @@ -1,11 +0,0 @@ -import Quick - -public var FunctionalTests_Configuration_BeforeEachWasExecuted = false - -class FunctionalTests_Configuration_BeforeEach: QuickConfiguration { - override class func configure(configuration: Configuration) { - configuration.beforeEach { - FunctionalTests_Configuration_BeforeEachWasExecuted = true - } - } -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/BeforeEach/Configuration+BeforeEachTests.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/BeforeEach/Configuration+BeforeEachTests.swift deleted file mode 100644 index 1cae5a2..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/Configuration/BeforeEach/Configuration+BeforeEachTests.swift +++ /dev/null @@ -1,31 +0,0 @@ -import XCTest -import Quick -import Nimble -#if SWIFT_PACKAGE -import QuickTestHelpers -#endif - -class Configuration_BeforeEachSpec: QuickSpec { - override func spec() { - it("is executed after the configuration beforeEach") { - expect(FunctionalTests_Configuration_BeforeEachWasExecuted).to(beTruthy()) - } - } -} - -class Configuration_BeforeEachTests: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted", testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted), - ] - } - - func testExampleIsRunAfterTheConfigurationBeforeEachIsExecuted() { - FunctionalTests_Configuration_BeforeEachWasExecuted = false - - qck_runSpec(Configuration_BeforeEachSpec.self) - XCTAssert(FunctionalTests_Configuration_BeforeEachWasExecuted) - - FunctionalTests_Configuration_BeforeEachWasExecuted = false - } -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/ContextTests.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/ContextTests.swift deleted file mode 100644 index fa93e2b..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/ContextTests.swift +++ /dev/null @@ -1,23 +0,0 @@ -import XCTest -import Quick -import Nimble -#if SWIFT_PACKAGE -import QuickTestHelpers -#endif - -#if _runtime(_ObjC) -class QuickContextTests: QuickSpec { - override func spec() { - describe("Context") { - it("should throw an exception if used in an it block") { - expect { - context("A nested context that should throw") { } - }.to(raiseException { (exception: NSException) in - expect(exception.name).to(equal(NSInternalInconsistencyException)) - expect(exception.reason).to(equal("'context' cannot be used inside 'it', 'context' may only be used inside 'context' or 'describe'. ")) - }) - } - } - } -} -#endif diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/CrossReferencingSpecs.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/CrossReferencingSpecs.swift deleted file mode 100644 index 56d1eb4..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/CrossReferencingSpecs.swift +++ /dev/null @@ -1,19 +0,0 @@ -import Quick -import Nimble - -// This is a functional test ensuring that no crash occurs when a spec class -// references another spec class during its spec setup. - -class FunctionalTests_CrossReferencingSpecA: QuickSpec { - override func spec() { - let _ = FunctionalTests_CrossReferencingSpecB() - it("does not crash") {} - } -} - -class FunctionalTests_CrossReferencingSpecB: QuickSpec { - override func spec() { - let _ = FunctionalTests_CrossReferencingSpecA() - it("does not crash") {} - } -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/DescribeTests.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/DescribeTests.swift deleted file mode 100644 index 562de0d..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/DescribeTests.swift +++ /dev/null @@ -1,34 +0,0 @@ -import XCTest -import Nimble -import Quick - -#if _runtime(_ObjC) - -class DescribeTests: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testDescribeThrowsIfUsedOutsideOfQuickSpec", testDescribeThrowsIfUsedOutsideOfQuickSpec), - ] - } - - func testDescribeThrowsIfUsedOutsideOfQuickSpec() { - expect { describe("this should throw an exception", {}) }.to(raiseException()) - } -} - -class QuickDescribeTests: QuickSpec { - override func spec() { - describe("Describe") { - it("should throw an exception if used in an it block") { - expect { - describe("A nested describe that should throw") { } - }.to(raiseException { (exception: NSException) in - expect(exception.name).to(equal(NSInternalInconsistencyException)) - expect(exception.reason).to(equal("'describe' cannot be used inside 'it', 'describe' may only be used inside 'context' or 'describe'. ")) - }) - } - } - } -} - -#endif diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/FailureTests+ObjC.m b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/FailureTests+ObjC.m deleted file mode 100644 index dc786e8..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/FailureTests+ObjC.m +++ /dev/null @@ -1,61 +0,0 @@ -@import XCTest; - -@import Quick; -@import Nimble; - -#import "QCKSpecRunner.h" - -static BOOL isRunningFunctionalTests = NO; - -#pragma mark - Spec - -QuickSpecBegin(FunctionalTests_FailureSpec_ObjC) - -describe(@"a group of failing examples", ^{ - it(@"passes", ^{ - expect(@YES).to(beTruthy()); - }); - - it(@"fails (but only when running the functional tests)", ^{ - expect(@(isRunningFunctionalTests)).to(beFalsy()); - }); - - it(@"fails again (but only when running the functional tests)", ^{ - expect(@(isRunningFunctionalTests)).to(beFalsy()); - }); -}); - -QuickSpecEnd - -#pragma mark - Tests - -@interface FailureTests_ObjC : XCTestCase; @end - -@implementation FailureTests_ObjC - -- (void)setUp { - [super setUp]; - isRunningFunctionalTests = YES; -} - -- (void)tearDown { - isRunningFunctionalTests = NO; - [super tearDown]; -} - -- (void)testFailureSpecHasSucceededIsFalse { - XCTestRun *result = qck_runSpec([FunctionalTests_FailureSpec_ObjC class]); - XCTAssertFalse(result.hasSucceeded); -} - -- (void)testFailureSpecExecutedAllExamples { - XCTestRun *result = qck_runSpec([FunctionalTests_FailureSpec_ObjC class]); - XCTAssertEqual(result.executionCount, 3); -} - -- (void)testFailureSpecFailureCountIsEqualToTheNumberOfFailingExamples { - XCTestRun *result = qck_runSpec([FunctionalTests_FailureSpec_ObjC class]); - XCTAssertEqual(result.failureCount, 2); -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/FailureUsingXCTAssertTests+ObjC.m b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/FailureUsingXCTAssertTests+ObjC.m deleted file mode 100644 index 1f05853..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/FailureUsingXCTAssertTests+ObjC.m +++ /dev/null @@ -1,55 +0,0 @@ -@import XCTest; -@import Quick; - -#import "QCKSpecRunner.h" - -static BOOL isRunningFunctionalTests = NO; - -QuickSpecBegin(FunctionalTests_FailureUsingXCTAssertSpec_ObjC) - -it(@"fails using an XCTAssert (but only when running the functional tests)", ^{ - XCTAssertFalse(isRunningFunctionalTests); -}); - -it(@"fails again using an XCTAssert (but only when running the functional tests)", ^{ - XCTAssertFalse(isRunningFunctionalTests); -}); - -it(@"succeeds using an XCTAssert", ^{ - XCTAssertTrue(YES); -}); - -QuickSpecEnd - -#pragma mark - Tests - -@interface FailureUsingXCTAssertTests_ObjC : XCTestCase; @end - -@implementation FailureUsingXCTAssertTests_ObjC - -- (void)setUp { - [super setUp]; - isRunningFunctionalTests = YES; -} - -- (void)tearDown { - isRunningFunctionalTests = NO; - [super tearDown]; -} - -- (void)testFailureUsingXCTAssertSpecHasSucceededIsFalse { - XCTestRun *result = qck_runSpec([FunctionalTests_FailureUsingXCTAssertSpec_ObjC class]); - XCTAssertFalse(result.hasSucceeded); -} - -- (void)testFailureUsingXCTAssertSpecExecutedAllExamples { - XCTestRun *result = qck_runSpec([FunctionalTests_FailureUsingXCTAssertSpec_ObjC class]); - XCTAssertEqual(result.executionCount, 3); -} - -- (void)testFailureUsingXCTAssertSpecFailureCountIsEqualToTheNumberOfFailingExamples { - XCTestRun *result = qck_runSpec([FunctionalTests_FailureUsingXCTAssertSpec_ObjC class]); - XCTAssertEqual(result.failureCount, 2); -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/ItTests+ObjC.m b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/ItTests+ObjC.m deleted file mode 100644 index 39e0b7d..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/ItTests+ObjC.m +++ /dev/null @@ -1,42 +0,0 @@ -@import XCTest; -@import Quick; -@import Nimble; - -#import "QCKSpecRunner.h" -#import "QuickSpec+QuickSpec_MethodList.h" - -QuickSpecBegin(FunctionalTests_ItSpec_ObjC) - -__block ExampleMetadata *exampleMetadata = nil; -beforeEachWithMetadata(^(ExampleMetadata *metadata) { - exampleMetadata = metadata; -}); - -it(@" ", ^{ - expect(exampleMetadata.example.name).to(equal(@" ")); -}); - -it(@"has a description with セレクター名に使えない文字が入っている 👊💥", ^{ - NSString *name = @"has a description with セレクター名に使えない文字が入っている 👊💥"; - expect(exampleMetadata.example.name).to(equal(name)); -}); - -it(@"is a test with a unique name", ^{ - NSSet *allSelectors = [FunctionalTests_ItSpec_ObjC allSelectors]; - - expect(allSelectors).to(contain(@"is_a_test_with_a_unique_name")); - expect(allSelectors).toNot(contain(@"is_a_test_with_a_unique_name_2")); -}); - -QuickSpecEnd - -@interface ItTests_ObjC : XCTestCase; @end - -@implementation ItTests_ObjC - -- (void)testAllExamplesAreExecuted { - XCTestRun *result = qck_runSpec([FunctionalTests_ItSpec_ObjC class]); - XCTAssertEqual(result.executionCount, 3); -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/ItTests.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/ItTests.swift deleted file mode 100644 index 71d076e..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/ItTests.swift +++ /dev/null @@ -1,132 +0,0 @@ -import XCTest -import Quick -import Nimble -#if SWIFT_PACKAGE -import QuickTestHelpers -#endif - -class FunctionalTests_ItSpec: QuickSpec { - override func spec() { - var exampleMetadata: ExampleMetadata? - beforeEach { metadata in exampleMetadata = metadata } - - it("") { - expect(exampleMetadata!.example.name).to(equal("")) - } - - it("has a description with セレクター名に使えない文字が入っている 👊💥") { - let name = "has a description with セレクター名に使えない文字が入っている 👊💥" - expect(exampleMetadata!.example.name).to(equal(name)) - } - -#if _runtime(_ObjC) - - describe("when an example has a unique name"){ - it("has a unique name") {} - - it("doesn't add multiple selectors for it") { - let allSelectors = [String]( - FunctionalTests_ItSpec.allSelectors() - .filter { $0.hasPrefix("when_an_example_has_a_unique_name__") } - ) - .sort(<) - - expect(allSelectors) == [ - "when_an_example_has_a_unique_name__doesn_t_add_multiple_selectors_for_it", - "when_an_example_has_a_unique_name__has_a_unique_name" - ] - } - } - - describe("when two examples have the exact name") { - it("has exactly the same name") {} - it("has exactly the same name") {} - - it("makes a unique name for each of the above") { - let allSelectors = [String]( - FunctionalTests_ItSpec.allSelectors() - .filter { $0.hasPrefix("when_two_examples_have_the_exact_name__") } - ) - .sort(<) - - expect(allSelectors) == [ - "when_two_examples_have_the_exact_name__has_exactly_the_same_name", - "when_two_examples_have_the_exact_name__has_exactly_the_same_name_2", - "when_two_examples_have_the_exact_name__makes_a_unique_name_for_each_of_the_above" - ] - } - - } - - describe("error handling when misusing ordering") { - it("an it") { - expect { - it("will throw an error when it is nested in another it") { } - }.to(raiseException { (exception: NSException) in - expect(exception.name).to(equal(NSInternalInconsistencyException)) - expect(exception.reason).to(equal("'it' cannot be used inside 'it', 'it' may only be used inside 'context' or 'describe'. ")) - }) - } - - describe("behavior with an 'it' inside a 'beforeEach'") { - var exception: NSException? - - beforeEach { - let capture = NMBExceptionCapture(handler: ({ e in - exception = e - }), finally: nil) - - capture.tryBlock { - it("a rogue 'it' inside a 'beforeEach'") { } - return - } - } - - it("should have thrown an exception with the correct error message") { - expect(exception).toNot(beNil()) - expect(exception!.reason).to(equal("'it' cannot be used inside 'beforeEach', 'it' may only be used inside 'context' or 'describe'. ")) - } - } - - describe("behavior with an 'it' inside an 'afterEach'") { - var exception: NSException? - - afterEach { - let capture = NMBExceptionCapture(handler: ({ e in - exception = e - expect(exception).toNot(beNil()) - expect(exception!.reason).to(equal("'it' cannot be used inside 'afterEach', 'it' may only be used inside 'context' or 'describe'. ")) - }), finally: nil) - - capture.tryBlock { - it("a rogue 'it' inside an 'afterEach'") { } - return - } - } - - it("should throw an exception with the correct message after this 'it' block executes") { } - } - } -#endif - } -} - -class ItTests: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testAllExamplesAreExecuted", testAllExamplesAreExecuted), - ] - } - -#if _runtime(_ObjC) - func testAllExamplesAreExecuted() { - let result = qck_runSpec(FunctionalTests_ItSpec.self) - XCTAssertEqual(result.executionCount, 10 as UInt) - } -#else - func testAllExamplesAreExecuted() { - let result = qck_runSpec(FunctionalTests_ItSpec.self) - XCTAssertEqual(result.executionCount, 2 as UInt) - } -#endif -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/PendingTests+ObjC.m b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/PendingTests+ObjC.m deleted file mode 100644 index 970175f..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/PendingTests+ObjC.m +++ /dev/null @@ -1,60 +0,0 @@ -@import XCTest; -@import Quick; -@import Nimble; - -#import "QCKSpecRunner.h" - -static NSUInteger oneExampleBeforeEachExecutedCount = 0; -static NSUInteger onlyPendingExamplesBeforeEachExecutedCount = 0; - -QuickSpecBegin(FunctionalTests_PendingSpec_ObjC) - -pending(@"an example that will not run", ^{ - expect(@YES).to(beFalsy()); -}); - -describe(@"a describe block containing only one enabled example", ^{ - beforeEach(^{ oneExampleBeforeEachExecutedCount += 1; }); - it(@"an example that will run", ^{}); - pending(@"an example that will not run", ^{}); -}); - -describe(@"a describe block containing only pending examples", ^{ - beforeEach(^{ onlyPendingExamplesBeforeEachExecutedCount += 1; }); - pending(@"an example that will not run", ^{}); -}); - -QuickSpecEnd - -@interface PendingTests_ObjC : XCTestCase; @end - -@implementation PendingTests_ObjC - -- (void)setUp { - [super setUp]; - oneExampleBeforeEachExecutedCount = 0; - onlyPendingExamplesBeforeEachExecutedCount = 0; -} - -- (void)tearDown { - oneExampleBeforeEachExecutedCount = 0; - onlyPendingExamplesBeforeEachExecutedCount = 0; - [super tearDown]; -} - -- (void)testAnOtherwiseFailingExampleWhenMarkedPendingDoesNotCauseTheSuiteToFail { - XCTestRun *result = qck_runSpec([FunctionalTests_PendingSpec_ObjC class]); - XCTAssert(result.hasSucceeded); -} - -- (void)testBeforeEachOnlyRunForEnabledExamples { - qck_runSpec([FunctionalTests_PendingSpec_ObjC class]); - XCTAssertEqual(oneExampleBeforeEachExecutedCount, 1); -} - -- (void)testBeforeEachDoesNotRunForContextsWithOnlyPendingExamples { - qck_runSpec([FunctionalTests_PendingSpec_ObjC class]); - XCTAssertEqual(onlyPendingExamplesBeforeEachExecutedCount, 0); -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/PendingTests.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/PendingTests.swift deleted file mode 100644 index ad0ef4a..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/PendingTests.swift +++ /dev/null @@ -1,57 +0,0 @@ -import XCTest -import Quick -import Nimble -#if SWIFT_PACKAGE -import QuickTestHelpers -#endif - -var oneExampleBeforeEachExecutedCount = 0 -var onlyPendingExamplesBeforeEachExecutedCount = 0 - -class FunctionalTests_PendingSpec: QuickSpec { - override func spec() { - xit("an example that will not run") { - expect(true).to(beFalsy()) - } - - describe("a describe block containing only one enabled example") { - beforeEach { oneExampleBeforeEachExecutedCount += 1 } - it("an example that will run") {} - pending("an example that will not run") {} - } - - describe("a describe block containing only pending examples") { - beforeEach { onlyPendingExamplesBeforeEachExecutedCount += 1 } - pending("an example that will not run") {} - } - } -} - -class PendingTests: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testAnOtherwiseFailingExampleWhenMarkedPendingDoesNotCauseTheSuiteToFail", testAnOtherwiseFailingExampleWhenMarkedPendingDoesNotCauseTheSuiteToFail), - ("testBeforeEachOnlyRunForEnabledExamples", testBeforeEachOnlyRunForEnabledExamples), - ("testBeforeEachDoesNotRunForContextsWithOnlyPendingExamples", testBeforeEachDoesNotRunForContextsWithOnlyPendingExamples), - ] - } - - func testAnOtherwiseFailingExampleWhenMarkedPendingDoesNotCauseTheSuiteToFail() { - let result = qck_runSpec(FunctionalTests_PendingSpec.self) - XCTAssert(result.hasSucceeded) - } - - func testBeforeEachOnlyRunForEnabledExamples() { - oneExampleBeforeEachExecutedCount = 0 - - qck_runSpec(FunctionalTests_PendingSpec.self) - XCTAssertEqual(oneExampleBeforeEachExecutedCount, 1) - } - - func testBeforeEachDoesNotRunForContextsWithOnlyPendingExamples() { - onlyPendingExamplesBeforeEachExecutedCount = 0 - - qck_runSpec(FunctionalTests_PendingSpec.self) - XCTAssertEqual(onlyPendingExamplesBeforeEachExecutedCount, 0) - } -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamples+BeforeEachTests+ObjC.m b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamples+BeforeEachTests+ObjC.m deleted file mode 100644 index cdbf259..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamples+BeforeEachTests+ObjC.m +++ /dev/null @@ -1,59 +0,0 @@ -@import XCTest; -@import Quick; -@import Nimble; - -#import "QCKSpecRunner.h" - -static NSUInteger specBeforeEachExecutedCount = 0; -static NSUInteger sharedExamplesBeforeEachExecutedCount = 0; - -QuickConfigurationBegin(FunctionalTests_SharedExamples_BeforeEachTests_SharedExamples_ObjC) - -+ (void)configure:(Configuration *)configuration { - sharedExamples(@"a group of three shared examples with a beforeEach in Obj-C", - ^(QCKDSLSharedExampleContext context) { - beforeEach(^{ sharedExamplesBeforeEachExecutedCount += 1; }); - it(@"passes once", ^{}); - it(@"passes twice", ^{}); - it(@"passes three times", ^{}); - }); -} - -QuickConfigurationEnd - -QuickSpecBegin(FunctionalTests_SharedExamples_BeforeEachSpec_ObjC) - -beforeEach(^{ specBeforeEachExecutedCount += 1; }); -it(@"executes the spec beforeEach once", ^{}); -itBehavesLike(@"a group of three shared examples with a beforeEach in Obj-C", - ^NSDictionary*{ return @{}; }); - -QuickSpecEnd - -@interface SharedExamples_BeforeEachTests_ObjC : XCTestCase; @end - -@implementation SharedExamples_BeforeEachTests_ObjC - -- (void)setUp { - [super setUp]; - specBeforeEachExecutedCount = 0; - sharedExamplesBeforeEachExecutedCount = 0; -} - -- (void)tearDown { - specBeforeEachExecutedCount = 0; - sharedExamplesBeforeEachExecutedCount = 0; - [super tearDown]; -} - -- (void)testBeforeEachOutsideOfSharedExamplesExecutedOnceBeforeEachExample { - qck_runSpec([FunctionalTests_SharedExamples_BeforeEachSpec_ObjC class]); - XCTAssertEqual(specBeforeEachExecutedCount, 4); -} - -- (void)testBeforeEachInSharedExamplesExecutedOnceBeforeEachSharedExample { - qck_runSpec([FunctionalTests_SharedExamples_BeforeEachSpec_ObjC class]); - XCTAssertEqual(sharedExamplesBeforeEachExecutedCount, 3); -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamples+BeforeEachTests.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamples+BeforeEachTests.swift deleted file mode 100644 index cb0c003..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamples+BeforeEachTests.swift +++ /dev/null @@ -1,51 +0,0 @@ -import XCTest -import Quick -import Nimble -#if SWIFT_PACKAGE -import QuickTestHelpers -#endif - -var specBeforeEachExecutedCount = 0 -var sharedExamplesBeforeEachExecutedCount = 0 - -class FunctionalTests_SharedExamples_BeforeEachTests_SharedExamples: QuickConfiguration { - override class func configure(configuration: Configuration) { - sharedExamples("a group of three shared examples with a beforeEach") { - beforeEach { sharedExamplesBeforeEachExecutedCount += 1 } - it("passes once") {} - it("passes twice") {} - it("passes three times") {} - } - } -} - -class FunctionalTests_SharedExamples_BeforeEachSpec: QuickSpec { - override func spec() { - beforeEach { specBeforeEachExecutedCount += 1 } - it("executes the spec beforeEach once") {} - itBehavesLike("a group of three shared examples with a beforeEach") - } -} - -class SharedExamples_BeforeEachTests: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testBeforeEachOutsideOfSharedExamplesExecutedOnceBeforeEachExample", testBeforeEachOutsideOfSharedExamplesExecutedOnceBeforeEachExample), - ("testBeforeEachInSharedExamplesExecutedOnceBeforeEachSharedExample", testBeforeEachInSharedExamplesExecutedOnceBeforeEachSharedExample), - ] - } - - func testBeforeEachOutsideOfSharedExamplesExecutedOnceBeforeEachExample() { - specBeforeEachExecutedCount = 0 - - qck_runSpec(FunctionalTests_SharedExamples_BeforeEachSpec.self) - XCTAssertEqual(specBeforeEachExecutedCount, 4) - } - - func testBeforeEachInSharedExamplesExecutedOnceBeforeEachSharedExample() { - sharedExamplesBeforeEachExecutedCount = 0 - - qck_runSpec(FunctionalTests_SharedExamples_BeforeEachSpec.self) - XCTAssertEqual(sharedExamplesBeforeEachExecutedCount, 3) - } -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamplesTests+ObjC.m b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamplesTests+ObjC.m deleted file mode 100644 index 7fcb8b1..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamplesTests+ObjC.m +++ /dev/null @@ -1,65 +0,0 @@ -@import XCTest; -@import Quick; -@import Nimble; - -#import "QCKSpecRunner.h" - -QuickSpecBegin(FunctionalTests_SharedExamples_Spec_ObjC) - -itBehavesLike(@"a group of three shared examples", ^NSDictionary*{ return @{}; }); - -QuickSpecEnd - -QuickSpecBegin(FunctionalTests_SharedExamples_ContextSpec_ObjC) - -itBehavesLike(@"shared examples that take a context", ^NSDictionary *{ - return @{ @"callsite": @"SharedExamplesSpec" }; -}); - -QuickSpecEnd - -QuickSpecBegin(FunctionalTests_SharedExamples_SameContextSpec_ObjC) - -__block NSInteger counter = 0; - -afterEach(^{ - counter++; -}); - -sharedExamples(@"gets called with a different context from within the same spec file", ^(QCKDSLSharedExampleContext exampleContext) { - - it(@"tracks correctly", ^{ - NSString *payload = exampleContext()[@"payload"]; - BOOL expected = [payload isEqualToString:[NSString stringWithFormat:@"%ld", (long)counter]]; - expect(@(expected)).to(beTrue()); - }); - -}); - -itBehavesLike(@"gets called with a different context from within the same spec file", ^{ - return @{ @"payload" : @"0" }; -}); - -itBehavesLike(@"gets called with a different context from within the same spec file", ^{ - return @{ @"payload" : @"1" }; -}); - -QuickSpecEnd - - -@interface SharedExamplesTests_ObjC : XCTestCase; @end - -@implementation SharedExamplesTests_ObjC - -- (void)testAGroupOfThreeSharedExamplesExecutesThreeExamples { - XCTestRun *result = qck_runSpec([FunctionalTests_SharedExamples_Spec_ObjC class]); - XCTAssert(result.hasSucceeded); - XCTAssertEqual(result.executionCount, 3); -} - -- (void)testSharedExamplesWithContextPassContextToExamples { - XCTestRun *result = qck_runSpec([FunctionalTests_SharedExamples_ContextSpec_ObjC class]); - XCTAssert(result.hasSucceeded); -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamplesTests.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamplesTests.swift deleted file mode 100644 index 36a7b29..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/FunctionalTests/SharedExamplesTests.swift +++ /dev/null @@ -1,57 +0,0 @@ -import Foundation -import XCTest -import Quick -import Nimble -#if SWIFT_PACKAGE -import QuickTestHelpers -#endif - -class FunctionalTests_SharedExamples_Spec: QuickSpec { - override func spec() { - itBehavesLike("a group of three shared examples") - } -} - -class FunctionalTests_SharedExamples_ContextSpec: QuickSpec { - override func spec() { - itBehavesLike("shared examples that take a context") { [NSString(string: "callsite"): NSString(string: "SharedExamplesSpec")] } - } -} - -#if _runtime(_ObjC) -class FunctionalTests_SharedExamples_ErrorSpec: QuickSpec { - override func spec() { - describe("error handling when misusing ordering") { - it("should throw an exception when including itBehavesLike in it block") { - expect { - itBehavesLike("a group of three shared examples") - }.to(raiseException { (exception: NSException) in - expect(exception.name).to(equal(NSInternalInconsistencyException)) - expect(exception.reason).to(equal("'itBehavesLike' cannot be used inside 'it', 'itBehavesLike' may only be used inside 'context' or 'describe'. ")) - }) - } - } - } -} -#endif - -// Shared examples are defined in QuickTests/Fixtures -class SharedExamplesTests: XCTestCase, XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { - return [ - ("testAGroupOfThreeSharedExamplesExecutesThreeExamples", testAGroupOfThreeSharedExamplesExecutesThreeExamples), - ("testSharedExamplesWithContextPassContextToExamples", testSharedExamplesWithContextPassContextToExamples), - ] - } - - func testAGroupOfThreeSharedExamplesExecutesThreeExamples() { - let result = qck_runSpec(FunctionalTests_SharedExamples_Spec.self) - XCTAssert(result.hasSucceeded) - XCTAssertEqual(result.executionCount, 3 as UInt) - } - - func testSharedExamplesWithContextPassContextToExamples() { - let result = qck_runSpec(FunctionalTests_SharedExamples_ContextSpec.self) - XCTAssert(result.hasSucceeded) - } -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QCKSpecRunner.h b/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QCKSpecRunner.h deleted file mode 100644 index 1ade1e0..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QCKSpecRunner.h +++ /dev/null @@ -1,22 +0,0 @@ -@import XCTest; - -/** - Runs an XCTestSuite instance containing only the given XCTestCase subclass. - Use this to run QuickSpec subclasses from within a set of unit tests. - - Due to implicit dependencies in _XCTFailureHandler, this function raises an - exception when used in Swift to run a failing test case. - - @param specClass The class of the spec to be run. - @return An XCTestRun instance that contains information such as the number of failures, etc. - */ -extern XCTestRun *qck_runSpec(Class specClass); - -/** - Runs an XCTestSuite instance containing the given XCTestCase subclasses, in the order provided. - See the documentation for `qck_runSpec` for more details. - - @param specClasses An array of QuickSpec classes, in the order they should be run. - @return An XCTestRun instance that contains information such as the number of failures, etc. - */ -extern XCTestRun *qck_runSpecs(NSArray *specClasses); diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QCKSpecRunner.m b/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QCKSpecRunner.m deleted file mode 100644 index 7508ca8..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QCKSpecRunner.m +++ /dev/null @@ -1,40 +0,0 @@ -@import Quick; - -#import "QCKSpecRunner.h" -#import "XCTestObservationCenter+QCKSuspendObservation.h" -#import "World.h" - -@interface XCTest (Redeclaration) -- (XCTestRun *)run; -@end - -XCTestRun *qck_runSuite(XCTestSuite *suite) { - [World sharedWorld].isRunningAdditionalSuites = YES; - - __block XCTestRun *result = nil; - [[XCTestObservationCenter sharedTestObservationCenter] qck_suspendObservationForBlock:^{ - if ([suite respondsToSelector:@selector(runTest)]) { - [suite runTest]; - result = suite.testRun; - } else { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - result = [suite run]; -#pragma clang diagnostic pop - } - }]; - return result; -} - -XCTestRun *qck_runSpec(Class specClass) { - return qck_runSuite([XCTestSuite testSuiteForTestCaseClass:specClass]); -} - -XCTestRun *qck_runSpecs(NSArray *specClasses) { - XCTestSuite *suite = [XCTestSuite testSuiteWithName:@"MySpecs"]; - for (Class specClass in specClasses) { - [suite addTest:[XCTestSuite testSuiteForTestCaseClass:specClass]]; - } - - return qck_runSuite(suite); -} diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QuickSpec+QuickSpec_MethodList.h b/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QuickSpec+QuickSpec_MethodList.h deleted file mode 100644 index 99e20f8..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QuickSpec+QuickSpec_MethodList.h +++ /dev/null @@ -1,11 +0,0 @@ -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface QuickSpec (QuickSpec_MethodList) - -+ (NSSet *)allSelectors; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QuickSpec+QuickSpec_MethodList.m b/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QuickSpec+QuickSpec_MethodList.m deleted file mode 100644 index c648bd1..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QuickSpec+QuickSpec_MethodList.m +++ /dev/null @@ -1,31 +0,0 @@ -#import "QuickSpec+QuickSpec_MethodList.h" -#import - - -@implementation QuickSpec (QuickSpec_MethodList) - -/** - * This method will instantiate an instance of the class on which it is called, - * returning a list of selector names for it. - * - * @warning Only intended to be used in test assertions! - * - * @return a set of NSStrings representing the list of selectors it contains - */ -+ (NSSet *)allSelectors { - QuickSpec *specInstance = [[[self class] alloc] init]; - NSMutableSet *allSelectors = [NSMutableSet set]; - - unsigned int methodCount = 0; - Method *mlist = class_copyMethodList(object_getClass(specInstance), &methodCount); - - for(unsigned int i = 0; i < methodCount; i++) { - SEL selector = method_getName(mlist[i]); - [allSelectors addObject:NSStringFromSelector(selector)]; - } - - free(mlist); - return [allSelectors copy]; -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h b/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h deleted file mode 100644 index f93b1cb..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/QuickTestsBridgingHeader.h +++ /dev/null @@ -1,2 +0,0 @@ -#import "QCKSpecRunner.h" -#import "QuickSpec+QuickSpec_MethodList.h" \ No newline at end of file diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/XCTestCaseProvider.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/XCTestCaseProvider.swift deleted file mode 100644 index c1465f6..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/XCTestCaseProvider.swift +++ /dev/null @@ -1,35 +0,0 @@ -import Foundation -import XCTest - -// XCTestCaseProvider is defined in swift-corelibs-xctest, but is not available -// in the XCTest that ships with Xcode. By defining this protocol on Apple platforms, -// we ensure that the tests fail in Xcode if they haven't been configured properly to -// be run with the open-source tools. - -#if os(OSX) || os(iOS) || os(watchOS) || os(tvOS) - -public protocol XCTestCaseProvider { - var allTests: [(String, () throws -> Void)] { get } -} - -extension XCTestCase { - override public func tearDown() { - if let provider = self as? XCTestCaseProvider { - provider.assertContainsTest(invocation!.selector.description) - } - - super.tearDown() - } -} - -extension XCTestCaseProvider { - private func assertContainsTest(name: String) { - let contains = self.allTests.contains({ test in - return test.0 == name - }) - - XCTAssert(contains, "Test '\(name)' is missing from the allTests array") - } -} - -#endif diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/XCTestObservationCenter+QCKSuspendObservation.h b/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/XCTestObservationCenter+QCKSuspendObservation.h deleted file mode 100644 index d69f808..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/XCTestObservationCenter+QCKSuspendObservation.h +++ /dev/null @@ -1,20 +0,0 @@ -#import - -/** - Add the ability to temporarily disable internal XCTest execution observation in - order to run isolated XCTestSuite instances while the QuickTests test suite is running. - */ -@interface XCTestObservationCenter (QCKSuspendObservation) - -/** - Suspends test suite observation for XCTest-provided observers for the duration that - the block is executing. Any test suites that are executed within the block do not - generate any log output. Failures are still reported. - - Use this method to run XCTestSuite objects while another XCTestSuite is running. - Without this method, tests fail with the message: "Timed out waiting for IDE - barrier message to complete" or "Unexpected TestSuiteDidStart". - */ -- (void)qck_suspendObservationForBlock:(void (^)(void))block; - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/XCTestObservationCenter+QCKSuspendObservation.m b/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/XCTestObservationCenter+QCKSuspendObservation.m deleted file mode 100644 index 1a32e10..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/Helpers/XCTestObservationCenter+QCKSuspendObservation.m +++ /dev/null @@ -1,54 +0,0 @@ -@import XCTest; -#import - -@interface XCTestObservationCenter (Redeclaration) -- (id)observers; -- (void)removeTestObserver:(id)testObserver; -@end - -@implementation XCTestObservationCenter (QCKSuspendObservation) - -/// This allows us to only suspend observation for observers by provided by Apple -/// as a part of the XCTest framework. In particular it is important that we not -/// suspend the observer added by Nimble, otherwise it is unable to properly -/// report assertion failures. -static BOOL (^isFromApple)(id) = ^BOOL(id observer){ - return [[NSBundle bundleForClass:[observer class]].bundleIdentifier containsString:@"com.apple.dt.XCTest"]; -}; - -- (void)qck_suspendObservationForBlock:(void (^)(void))block { - id originalObservers = [[self observers] copy]; - NSMutableArray *suspendedObservers = [NSMutableArray new]; - - for (id observer in originalObservers) { - if (isFromApple(observer)) { - [suspendedObservers addObject:observer]; - - if ([self respondsToSelector:@selector(removeTestObserver:)]) { - [self removeTestObserver:observer]; - } - else if ([[self observers] respondsToSelector:@selector(removeObject:)]) { - [[self observers] removeObject:observer]; - } - else { - NSAssert(NO, @"unexpected type: unable to remove observers: %@", originalObservers); - } - } - } - - @try { - block(); - } - @finally { - for (id observer in suspendedObservers) { - if ([[self observers] respondsToSelector:@selector(addObject:)]) { - [[self observers] addObject:observer]; - } - else if ([self respondsToSelector:@selector(addTestObserver:)]) { - [self addTestObserver:observer]; - } - } - } -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/Info.plist b/Carthage/Checkouts/Quick/Sources/QuickTests/Info.plist deleted file mode 100644 index 6d32c15..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/QuickConfigurationTests.m b/Carthage/Checkouts/Quick/Sources/QuickTests/QuickConfigurationTests.m deleted file mode 100644 index ace4577..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/QuickConfigurationTests.m +++ /dev/null @@ -1,12 +0,0 @@ -#import -#import - -@interface QuickConfigurationTests : XCTestCase; @end - -@implementation QuickConfigurationTests - -- (void)testInitThrows { - XCTAssertThrowsSpecificNamed([QuickConfiguration new], NSException, NSInternalInconsistencyException); -} - -@end diff --git a/Carthage/Checkouts/Quick/Sources/QuickTests/main.swift b/Carthage/Checkouts/Quick/Sources/QuickTests/main.swift deleted file mode 100644 index b3fd7f0..0000000 --- a/Carthage/Checkouts/Quick/Sources/QuickTests/main.swift +++ /dev/null @@ -1,37 +0,0 @@ -import Quick - -QCKMain([ - FunctionalTests_AfterEachSpec(), - AfterEachTests(), - FunctionalTests_AfterSuite_AfterSuiteSpec(), - FunctionalTests_AfterSuite_Spec(), - AfterSuiteTests(), - FunctionalTests_BeforeEachSpec(), - BeforeEachTests(), - FunctionalTests_BeforeSuite_BeforeSuiteSpec(), - FunctionalTests_BeforeSuite_Spec(), - BeforeSuiteTests(), - // DescribeTests(), - FunctionalTests_ItSpec(), - ItTests(), - FunctionalTests_PendingSpec(), - PendingTests(), - FunctionalTests_SharedExamples_BeforeEachSpec(), - SharedExamples_BeforeEachTests(), - FunctionalTests_SharedExamples_Spec(), - FunctionalTests_SharedExamples_ContextSpec(), - SharedExamplesTests(), - Configuration_AfterEachSpec(), - Configuration_AfterEachTests(), - Configuration_BeforeEachSpec(), - Configuration_BeforeEachTests(), - FunctionalTests_CrossReferencingSpecA(), - FunctionalTests_CrossReferencingSpecB(), -], -configurations: [ - FunctionalTests_SharedExamples_BeforeEachTests_SharedExamples.self, - FunctionalTests_SharedExamplesTests_SharedExamples.self, - FunctionalTests_Configuration_AfterEach.self, - FunctionalTests_Configuration_BeforeEach.self, -] -) diff --git a/Carthage/Checkouts/Quick/circle.yml b/Carthage/Checkouts/Quick/circle.yml deleted file mode 100644 index 397da17..0000000 --- a/Carthage/Checkouts/Quick/circle.yml +++ /dev/null @@ -1,16 +0,0 @@ -machine: - xcode: - version: "7.3" - -checkout: - post: - - git submodule update --init --recursive - -dependencies: - pre: - - brew update - -test: - override: - - rake test:ios - - rake test:osx diff --git a/Carthage/Checkouts/Quick/script/release b/Carthage/Checkouts/Quick/script/release deleted file mode 100755 index 26409c4..0000000 --- a/Carthage/Checkouts/Quick/script/release +++ /dev/null @@ -1,182 +0,0 @@ -#!/usr/bin/env sh -REMOTE_BRANCH=master -POD_NAME=Quick -PODSPEC=Quick.podspec - -POD=${COCOAPODS:-pod} - -function help { - echo "Usage: release VERSION RELEASE_NOTES [-f]" - echo - echo "VERSION should be the version to release, should not include the 'v' prefix" - echo "RELEASE_NOTES should be a file that lists all the release notes for this version" - echo " if file does not exist, creates a git-style commit with a diff as a comment" - echo - echo "FLAGS" - echo " -f Forces override of tag" - echo - echo " Example: ./release 1.0.0-rc.2 ./release-notes.txt" - echo - echo "HINT: use 'git diff ...HEAD' to build the release notes" - echo - exit 2 -} - -function die { - echo "[ERROR] $@" - echo - exit 1 -} - -if [ $# -lt 2 ]; then - help -fi - -VERSION=$1 -RELEASE_NOTES=$2 -FORCE_TAG=$3 - -VERSION_TAG="v$VERSION" - -echo "-> Verifying Local Directory for Release" - -if [ -z "`which $POD`" ]; then - die "Cocoapods is required to produce a release. Aborting." -fi -echo " > Cocoapods is installed" - -echo " > Is this a reasonable tag?" - -echo $VERSION_TAG | grep -q "^vv" -if [ $? -eq 0 ]; then - die "This tag ($VERSION) is an incorrect format. You should remove the 'v' prefix." -fi - -echo $VERSION_TAG | grep -q -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" -if [ $? -ne 0 ]; then - die "This tag ($VERSION) is an incorrect format. It should be in 'v{MAJOR}.{MINOR}.{PATCH}(-{PRERELEASE_NAME}.{PRERELEASE_VERSION})' form." -fi - -echo " > Is this version ($VERSION) unique?" -git describe --exact-match "$VERSION_TAG" > /dev/null 2>&1 -if [ $? -eq 0 ]; then - if [ -z "$FORCE_TAG" ]; then - die "This tag ($VERSION) already exists. Aborting. Append '-f' to override" - else - echo " > NO, but force was specified." - fi -else - echo " > Yes, tag is unique" -fi - -if [ ! -f "$RELEASE_NOTES" ]; then - echo " > Failed to find $RELEASE_NOTES. Prompting editor" - RELEASE_NOTES=.release-changes - LATEST_TAG=`git for-each-ref refs/tags --sort=-refname --format="%(refname:short)" | grep -E "^v\d+\.\d+\.\d+(-\w+(\.\d)?)?\$" | ruby -e 'puts STDIN.read.split("\n").sort { |a,b| Gem::Version.new(a.gsub(/^v/, "")) <=> Gem::Version.new(b.gsub(/^v/, "")) }.last'` - echo " > Latest tag ${LATEST_TAG}" - echo "${POD_NAME} v$VERSION" > $RELEASE_NOTES - echo "================" >> $RELEASE_NOTES - echo >> $RELEASE_NOTES - echo "# Changelog from ${LATEST_TAG}..HEAD" >> $RELEASE_NOTES - git log ${LATEST_TAG}..HEAD | sed -e 's/^/# /' >> $RELEASE_NOTES - $EDITOR $RELEASE_NOTES - diff -q $RELEASE_NOTES ${RELEASE_NOTES}.backup > /dev/null 2>&1 - STATUS=$? - rm ${RELEASE_NOTES}.backup - if [ $STATUS -eq 0 ]; then - rm $RELEASE_NOTES - die "No changes in release notes file. Aborting." - fi -fi -echo " > Release notes: $RELEASE_NOTES" - -if [ ! -f "$PODSPEC" ]; then - die "Cannot find podspec: $PODSPEC. Aborting." -fi -echo " > Podspec exists" - -git config --get user.signingkey > /dev/null || { - echo "[ERROR] No PGP found to sign tag. Aborting." - echo - echo " Creating a release requires signing the tag for security purposes. This allows users to verify the git cloned tree is from a trusted source." - echo " From a security perspective, it is not considered safe to trust the commits (including Author & Signed-off fields). It is easy for any" - echo " intermediate between you and the end-users to modify the git repository." - echo - echo " While not all users may choose to verify the PGP key for tagged releases. It is a good measure to ensure 'this is an official release'" - echo " from the official maintainers." - echo - echo " If you're creating your PGP key for the first time, use RSA with at least 4096 bits." - echo - echo "Related resources:" - echo " - Configuring your system for PGP: https://git-scm.com/book/tr/v2/Git-Tools-Signing-Your-Work" - echo " - Why: http://programmers.stackexchange.com/questions/212192/what-are-the-advantages-and-disadvantages-of-cryptographically-signing-commits-a" - echo - exit 2 -} -echo " > Found PGP key for git" - -# Verify cocoapods trunk ownership -pod trunk me | grep -q "$POD_NAME" || die "You do not have access to pod repository $POD_NAME. Aborting." -echo " > Verified ownership to $POD_NAME pod" - - -echo "--- Releasing version $VERSION (tag: $VERSION_TAG)..." - -function restore_podspec { - if [ -f "${PODSPEC}.backup" ]; then - mv -f ${PODSPEC}{.backup,} - fi -} - -echo "-> Ensuring no differences to origin/$REMOTE_BRANCH" -git fetch origin || die "Failed to fetch origin" -git diff --quiet HEAD "origin/$REMOTE_BRANCH" || die "HEAD is not aligned to origin/$REMOTE_BRANCH. Cannot update version safely" - -echo "-> Setting podspec version" -cat "$PODSPEC" | grep 's.version' | grep -q "\"$VERSION\"" -SET_PODSPEC_VERSION=$? -if [ $SET_PODSPEC_VERSION -eq 0 ]; then - echo " > Podspec already set to $VERSION. Skipping." -else - sed -i.backup "s/s.version *= *\".*\"/s.version = \"$VERSION\"/g" "$PODSPEC" || { - restore_podspec - die "Failed to update version in podspec" - } - - git add ${PODSPEC} || { restore_podspec; die "Failed to add ${PODSPEC} to INDEX"; } - git commit -m "Bumping version to $VERSION" || { restore_podspec; die "Failed to push updated version: $VERSION"; } -fi - -if [ -z "$FORCE_TAG" ]; then - echo "-> Tagging version" - git tag -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" - echo "-> Pushing tag to origin" - git push origin "$VERSION_TAG" || die "Failed to push tag '$VERSION_TAG' to origin" -else - echo "-> Tagging version (force)" - git tag -f -s "$VERSION_TAG" -F "$RELEASE_NOTES" || die "Failed to tag version" - echo "-> Pushing tag to origin (force)" - git push origin "$VERSION_TAG" -f || die "Failed to push tag '$VERSION_TAG' to origin" -fi - -if [ $SET_PODSPEC_VERSION -ne 0 ]; then - rm $RELEASE_NOTES - git push origin "$REMOTE_BRANCH" || die "Failed to push to origin" - echo " > Pushed version to origin" -fi - -echo -echo "Pushing to pod trunk..." - -$POD trunk push "$PODSPEC" - -echo -echo "================ Finalizing the Release ================" -echo -echo " - Opening GitHub to mark this as a release..." -echo " - Paste the contents of $RELEASE_NOTES into the release notes. Tweak for Github styling." -echo " - Announce!" - -open "https://github.com/Quick/Quick/releases/new?tag=$VERSION_TAG" - -rm ${PODSPEC}.backup diff --git a/Carthage/Checkouts/Quick/script/travis-install-linux b/Carthage/Checkouts/Quick/script/travis-install-linux deleted file mode 100755 index 279cd88..0000000 --- a/Carthage/Checkouts/Quick/script/travis-install-linux +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -set -e - -# See: https://github.com/kylef/swiftenv/wiki/Travis-CI -curl -sL https://gist.github.com/kylef/5c0475ff02b7c7671d2a/raw/621ef9b29bbb852fdfd2e10ed147b321d792c1e4/swiftenv-install.sh | bash diff --git a/Carthage/Checkouts/Quick/script/travis-install-osx b/Carthage/Checkouts/Quick/script/travis-install-osx deleted file mode 100755 index 64edf92..0000000 --- a/Carthage/Checkouts/Quick/script/travis-install-osx +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env sh -set -e - -git submodule update --init --recursive diff --git a/Carthage/Checkouts/Quick/script/travis-script-linux b/Carthage/Checkouts/Quick/script/travis-script-linux deleted file mode 100755 index 7a6558d..0000000 --- a/Carthage/Checkouts/Quick/script/travis-script-linux +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env sh - -. ~/.swiftenv/init -rake test:swiftpm diff --git a/Carthage/Checkouts/Quick/script/travis-script-osx b/Carthage/Checkouts/Quick/script/travis-script-osx deleted file mode 100755 index ac60f1c..0000000 --- a/Carthage/Checkouts/Quick/script/travis-script-osx +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env sh - -if [ "$PODSPEC" ]; then - TASK="podspec:lint" -else - TASK="test:$PLATFORM" -fi - -echo "Executing rake task: $TASK" -rake "$TASK" diff --git a/CreditCardRow.podspec b/CreditCardRow.podspec index 7e368ea..cf27f0c 100644 --- a/CreditCardRow.podspec +++ b/CreditCardRow.podspec @@ -2,19 +2,17 @@ Pod::Spec.new do |s| s.name = "CreditCardRow" s.version = "1.0.0" s.summary = "An Eureka row that allows the user to input a credit card number with optional CVC and expiration date." - s.homepage = "https://github.com/xmartlabs/CreditCardRow" + s.homepage = "https://github.com/EurekaCommunity/CreditCardRow" s.license = { type: 'MIT', file: 'LICENSE' } s.author = { "Xmartlabs SRL" => "swift@xmartlabs.com" } - s.source = { git: "https://github.com/xmartlabs/CreditCardRow.git", tag: s.version.to_s } + s.source = { git: "https://github.com/EurekaCommunity/CreditCardRow.git", tag: s.version.to_s } s.social_media_url = 'https://twitter.com/xmartlabs' s.ios.deployment_target = '8.0' s.requires_arc = true s.ios.source_files = 'Sources/**/*.swift' s.resource_bundles = { - 'CreditCardRow' => [ - 'Sources/**/*.xib' - ] - } + 'CreditCardRow' => ['Sources/CreditCardCell.xib'] + } s.ios.frameworks = 'UIKit', 'Foundation' s.dependency 'Eureka', '~> 1.0' end diff --git a/CreditCardRow.xcodeproj/project.pbxproj b/CreditCardRow.xcodeproj/project.pbxproj index a365dad..afd65c7 100644 --- a/CreditCardRow.xcodeproj/project.pbxproj +++ b/CreditCardRow.xcodeproj/project.pbxproj @@ -11,13 +11,11 @@ 28F828811C494B2C00330CF4 /* CreditCardRow.h in Headers */ = {isa = PBXBuildFile; fileRef = 28F828801C494B2C00330CF4 /* CreditCardRow.h */; settings = {ATTRIBUTES = (Public, ); }; }; 28F828881C494B2C00330CF4 /* CreditCardRow.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28F8287D1C494B2C00330CF4 /* CreditCardRow.framework */; }; 28F8289A1C494B4200330CF4 /* CreditCardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28F828991C494B4200330CF4 /* CreditCardCell.swift */; }; - 8F7E92261D78AD93002BEFC3 /* CreditCardCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8F7E92251D78AD93002BEFC3 /* CreditCardCell.xib */; }; 8F7E922B1D78B0D1002BEFC3 /* Eureka.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F7E92291D78B0D1002BEFC3 /* Eureka.framework */; }; - 8F7E922C1D78B0D1002BEFC3 /* SwiftLuhn.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F7E922A1D78B0D1002BEFC3 /* SwiftLuhn.framework */; }; 8F7E922E1D78B335002BEFC3 /* PaddedTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F7E922D1D78B335002BEFC3 /* PaddedTextField.swift */; }; 8F7E92311D78BA29002BEFC3 /* CreditCardRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F7E92301D78BA29002BEFC3 /* CreditCardRow.swift */; }; - 8FDE77701D78D09500A94698 /* View.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8FDE776F1D78D09500A94698 /* View.xib */; }; - 8FFF446B1D78D24F00EA3AC8 /* CreditCardRow.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8FFF446A1D78D24F00EA3AC8 /* CreditCardRow.bundle */; }; + 8F9B3A0A1D7DBA12005F8273 /* String+CreditCardRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F9B3A091D7DBA12005F8273 /* String+CreditCardRow.swift */; }; + 8FD114E61D79F8B6006976C8 /* CreditCardCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8FD114E51D79F8B6006976C8 /* CreditCardCell.xib */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -38,14 +36,11 @@ 28F828871C494B2C00330CF4 /* CreditCardRowTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CreditCardRowTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 28F8288E1C494B2C00330CF4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = Tests/Info.plist; sourceTree = ""; }; 28F828991C494B4200330CF4 /* CreditCardCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreditCardCell.swift; sourceTree = ""; }; - 28F8289B1C494BF100330CF4 /* Playground.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = Playground.playground; sourceTree = ""; }; - 8F7E92251D78AD93002BEFC3 /* CreditCardCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CreditCardCell.xib; sourceTree = ""; }; - 8F7E92291D78B0D1002BEFC3 /* Eureka.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Eureka.framework; path = Frameworks/Eureka.framework; sourceTree = ""; }; - 8F7E922A1D78B0D1002BEFC3 /* SwiftLuhn.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftLuhn.framework; path = Frameworks/SwiftLuhn.framework; sourceTree = ""; }; + 8F7E92291D78B0D1002BEFC3 /* Eureka.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Eureka.framework; path = Carthage/Build/iOS/Eureka.framework; sourceTree = ""; }; 8F7E922D1D78B335002BEFC3 /* PaddedTextField.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PaddedTextField.swift; sourceTree = ""; }; 8F7E92301D78BA29002BEFC3 /* CreditCardRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreditCardRow.swift; sourceTree = ""; }; - 8FDE776F1D78D09500A94698 /* View.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = View.xib; sourceTree = ""; }; - 8FFF446A1D78D24F00EA3AC8 /* CreditCardRow.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = CreditCardRow.bundle; path = CreditCardRow/CreditCardRow.bundle; sourceTree = SOURCE_ROOT; }; + 8F9B3A091D7DBA12005F8273 /* String+CreditCardRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+CreditCardRow.swift"; sourceTree = ""; }; + 8FD114E51D79F8B6006976C8 /* CreditCardCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CreditCardCell.xib; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -54,7 +49,6 @@ buildActionMask = 2147483647; files = ( 8F7E922B1D78B0D1002BEFC3 /* Eureka.framework in Frameworks */, - 8F7E922C1D78B0D1002BEFC3 /* SwiftLuhn.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -72,7 +66,6 @@ 28F828731C494B2C00330CF4 = { isa = PBXGroup; children = ( - 28F8289B1C494BF100330CF4 /* Playground.playground */, 28F828971C494B4200330CF4 /* Sources */, 28F8287F1C494B2C00330CF4 /* CreditCardRow */, 28F8288B1C494B2C00330CF4 /* Tests */, @@ -112,21 +105,19 @@ 28F828971C494B4200330CF4 /* Sources */ = { isa = PBXGroup; children = ( - 8FFF446A1D78D24F00EA3AC8 /* CreditCardRow.bundle */, 8F7E92301D78BA29002BEFC3 /* CreditCardRow.swift */, 28F828991C494B4200330CF4 /* CreditCardCell.swift */, - 8F7E92251D78AD93002BEFC3 /* CreditCardCell.xib */, + 8FD114E51D79F8B6006976C8 /* CreditCardCell.xib */, 8F7E922D1D78B335002BEFC3 /* PaddedTextField.swift */, - 8FDE776F1D78D09500A94698 /* View.xib */, + 8F9B3A091D7DBA12005F8273 /* String+CreditCardRow.swift */, ); path = Sources; - sourceTree = ""; + sourceTree = SOURCE_ROOT; }; 8F7E92281D78B0B7002BEFC3 /* Frameworks */ = { isa = PBXGroup; children = ( 8F7E92291D78B0D1002BEFC3 /* Eureka.framework */, - 8F7E922A1D78B0D1002BEFC3 /* SwiftLuhn.framework */, ); name = Frameworks; sourceTree = ""; @@ -222,9 +213,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8FFF446B1D78D24F00EA3AC8 /* CreditCardRow.bundle in Resources */, - 8FDE77701D78D09500A94698 /* View.xib in Resources */, - 8F7E92261D78AD93002BEFC3 /* CreditCardCell.xib in Resources */, + 8FD114E61D79F8B6006976C8 /* CreditCardCell.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -244,7 +233,6 @@ files = ( ); inputPaths = ( - "$(SRCROOT)/Carthage/Build/iOS/SwiftLuhn.framework", "$(SRCROOT)/Carthage/Build/iOS/Eureka.framework", ); name = "Copy Frameworks"; @@ -261,6 +249,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 8F9B3A0A1D7DBA12005F8273 /* String+CreditCardRow.swift in Sources */, 8F7E92311D78BA29002BEFC3 /* CreditCardRow.swift in Sources */, 28F8289A1C494B4200330CF4 /* CreditCardCell.swift in Sources */, 8F7E922E1D78B335002BEFC3 /* PaddedTextField.swift in Sources */, @@ -323,7 +312,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -365,7 +354,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.2; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -384,10 +373,11 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Frameworks", + "$(PROJECT_DIR)/Carthage/Build/iOS", ); INFOPLIST_FILE = CreditCardRow/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.xmartlabs.CreditCardRow; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -404,10 +394,11 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Frameworks", + "$(PROJECT_DIR)/Carthage/Build/iOS", ); INFOPLIST_FILE = CreditCardRow/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.xmartlabs.CreditCardRow; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/CreditCardRow/CreditCardRow.bundle/CreditCardCell.xib b/CreditCardRow/CreditCardRow.bundle/CreditCardCell.xib deleted file mode 100644 index 48e1c4d..0000000 --- a/CreditCardRow/CreditCardRow.bundle/CreditCardCell.xib +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example.xcodeproj/project.pbxproj b/Example.xcodeproj/project.pbxproj index 60e5ec1..5384e77 100644 --- a/Example.xcodeproj/project.pbxproj +++ b/Example.xcodeproj/project.pbxproj @@ -8,17 +8,19 @@ /* Begin PBXBuildFile section */ 287D0A721C4B7877004566D6 /* ExampleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287D0A711C4B7877004566D6 /* ExampleUITests.swift */; }; - 287D0A7D1C4B7B55004566D6 /* CreditCardRow.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 287D0A7A1C4B7B26004566D6 /* CreditCardRow.framework */; }; - 287D0A7E1C4B7B55004566D6 /* CreditCardRow.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 287D0A7A1C4B7B26004566D6 /* CreditCardRow.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 28F828D01C4B714D00330CF4 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28F828CF1C4B714D00330CF4 /* AppDelegate.swift */; }; 28F828D21C4B714D00330CF4 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28F828D11C4B714D00330CF4 /* ViewController.swift */; }; 28F828D51C4B714D00330CF4 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 28F828D31C4B714D00330CF4 /* Main.storyboard */; }; 28F828D71C4B714D00330CF4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 28F828D61C4B714D00330CF4 /* Assets.xcassets */; }; 28F828DA1C4B714D00330CF4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 28F828D81C4B714D00330CF4 /* LaunchScreen.storyboard */; }; - 8FDE77501D78BE4B00A94698 /* Eureka.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8FDE774F1D78BE4B00A94698 /* Eureka.framework */; }; - 8FDE77511D78BE4B00A94698 /* Eureka.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8FDE774F1D78BE4B00A94698 /* Eureka.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - 8FDE77541D78BEBF00A94698 /* SwiftLuhn.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8FDE77531D78BEBF00A94698 /* SwiftLuhn.framework */; }; - 8FDE77551D78BEBF00A94698 /* SwiftLuhn.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8FDE77531D78BEBF00A94698 /* SwiftLuhn.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 8F9B3A061D7DB064005F8273 /* CustomCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8F9B3A051D7DB064005F8273 /* CustomCell.xib */; }; + 8F9B3A081D7DB2C2005F8273 /* MyCreditCardRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F9B3A071D7DB2C2005F8273 /* MyCreditCardRow.swift */; }; + 8FD114E01D79F685006976C8 /* CreditCardRow.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 287D0A7A1C4B7B26004566D6 /* CreditCardRow.framework */; }; + 8FD114E11D79F685006976C8 /* CreditCardRow.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 287D0A7A1C4B7B26004566D6 /* CreditCardRow.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 8FDE775F1D78C9B200A94698 /* Eureka.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8FDE775E1D78C9B200A94698 /* Eureka.framework */; }; + 8FDE77601D78C9B200A94698 /* Eureka.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8FDE775E1D78C9B200A94698 /* Eureka.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 8FDE77621D78C9B700A94698 /* SwiftLuhn.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8FDE77611D78C9B700A94698 /* SwiftLuhn.framework */; }; + 8FDE77631D78C9B700A94698 /* SwiftLuhn.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8FDE77611D78C9B700A94698 /* SwiftLuhn.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -36,13 +38,6 @@ remoteGlobalIDString = 28F828871C494B2C00330CF4; remoteInfo = CreditCardRowTests; }; - 287D0A7F1C4B7B55004566D6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 287D0A741C4B7B26004566D6 /* CreditCardRow.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 28F8287C1C494B2C00330CF4; - remoteInfo = CreditCardRow; - }; 28F828E11C4B714D00330CF4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 28F828C41C4B714D00330CF4 /* Project object */; @@ -50,6 +45,13 @@ remoteGlobalIDString = 28F828CB1C4B714D00330CF4; remoteInfo = Example; }; + 8FD114E21D79F685006976C8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 287D0A741C4B7B26004566D6 /* CreditCardRow.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = 28F8287C1C494B2C00330CF4; + remoteInfo = CreditCardRow; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -59,9 +61,9 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 8FDE77551D78BEBF00A94698 /* SwiftLuhn.framework in Embed Frameworks */, - 287D0A7E1C4B7B55004566D6 /* CreditCardRow.framework in Embed Frameworks */, - 8FDE77511D78BE4B00A94698 /* Eureka.framework in Embed Frameworks */, + 8FDE77631D78C9B700A94698 /* SwiftLuhn.framework in Embed Frameworks */, + 8FDE77601D78C9B200A94698 /* Eureka.framework in Embed Frameworks */, + 8FD114E11D79F685006976C8 /* CreditCardRow.framework in Embed Frameworks */, ); name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; @@ -80,9 +82,10 @@ 28F828DB1C4B714D00330CF4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Example/Info.plist; sourceTree = ""; }; 28F828E01C4B714D00330CF4 /* ExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 28F828E61C4B714D00330CF4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = Example/ExampleUITests/Info.plist; sourceTree = ""; }; - 8FDE774F1D78BE4B00A94698 /* Eureka.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Eureka.framework; path = Frameworks/Eureka.framework; sourceTree = ""; }; - 8FDE77531D78BEBF00A94698 /* SwiftLuhn.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftLuhn.framework; path = Frameworks/SwiftLuhn.framework; sourceTree = ""; }; - 8FDE77571D78C42F00A94698 /* CreditCardCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CreditCardCell.xib; path = Sources/CreditCardCell.xib; sourceTree = ""; }; + 8F9B3A051D7DB064005F8273 /* CustomCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = CustomCell.xib; path = Example/CustomCell.xib; sourceTree = ""; }; + 8F9B3A071D7DB2C2005F8273 /* MyCreditCardRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MyCreditCardRow.swift; sourceTree = ""; }; + 8FDE775E1D78C9B200A94698 /* Eureka.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Eureka.framework; path = Frameworks/Eureka.framework; sourceTree = ""; }; + 8FDE77611D78C9B700A94698 /* SwiftLuhn.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftLuhn.framework; path = Frameworks/SwiftLuhn.framework; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -90,9 +93,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8FDE77541D78BEBF00A94698 /* SwiftLuhn.framework in Frameworks */, - 287D0A7D1C4B7B55004566D6 /* CreditCardRow.framework in Frameworks */, - 8FDE77501D78BE4B00A94698 /* Eureka.framework in Frameworks */, + 8FDE77621D78C9B700A94698 /* SwiftLuhn.framework in Frameworks */, + 8FDE775F1D78C9B200A94698 /* Eureka.framework in Frameworks */, + 8FD114E01D79F685006976C8 /* CreditCardRow.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -118,12 +121,10 @@ 28F828C31C4B714D00330CF4 = { isa = PBXGroup; children = ( - 8FDE77571D78C42F00A94698 /* CreditCardCell.xib */, - 8FDE77531D78BEBF00A94698 /* SwiftLuhn.framework */, + 8FD114B61D79EB6E006976C8 /* Frameworks */, 28F828CE1C4B714D00330CF4 /* Example */, 28F828E31C4B714D00330CF4 /* ExampleUITests */, 28F828CD1C4B714D00330CF4 /* Products */, - 8FDE774F1D78BE4B00A94698 /* Eureka.framework */, 287D0A741C4B7B26004566D6 /* CreditCardRow.xcodeproj */, ); sourceTree = ""; @@ -140,12 +141,10 @@ 28F828CE1C4B714D00330CF4 /* Example */ = { isa = PBXGroup; children = ( - 28F828CF1C4B714D00330CF4 /* AppDelegate.swift */, 28F828D11C4B714D00330CF4 /* ViewController.swift */, - 28F828D31C4B714D00330CF4 /* Main.storyboard */, - 28F828D61C4B714D00330CF4 /* Assets.xcassets */, - 28F828D81C4B714D00330CF4 /* LaunchScreen.storyboard */, - 28F828DB1C4B714D00330CF4 /* Info.plist */, + 8F9B3A051D7DB064005F8273 /* CustomCell.xib */, + 8F9B3A071D7DB2C2005F8273 /* MyCreditCardRow.swift */, + 8F9B3A031D7DB02A005F8273 /* Supporting Files */, ); path = Example; sourceTree = ""; @@ -159,6 +158,27 @@ path = ExampleUITests; sourceTree = ""; }; + 8F9B3A031D7DB02A005F8273 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 28F828D31C4B714D00330CF4 /* Main.storyboard */, + 28F828D61C4B714D00330CF4 /* Assets.xcassets */, + 28F828D81C4B714D00330CF4 /* LaunchScreen.storyboard */, + 28F828DB1C4B714D00330CF4 /* Info.plist */, + 28F828CF1C4B714D00330CF4 /* AppDelegate.swift */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 8FD114B61D79EB6E006976C8 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 8FDE77611D78C9B700A94698 /* SwiftLuhn.framework */, + 8FDE775E1D78C9B200A94698 /* Eureka.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -175,7 +195,7 @@ buildRules = ( ); dependencies = ( - 287D0A801C4B7B55004566D6 /* PBXTargetDependency */, + 8FD114E31D79F685006976C8 /* PBXTargetDependency */, ); name = Example; productName = Example; @@ -267,6 +287,7 @@ files = ( 28F828DA1C4B714D00330CF4 /* LaunchScreen.storyboard in Resources */, 28F828D71C4B714D00330CF4 /* Assets.xcassets in Resources */, + 8F9B3A061D7DB064005F8273 /* CustomCell.xib in Resources */, 28F828D51C4B714D00330CF4 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -287,8 +308,6 @@ files = ( ); inputPaths = ( - "$(SRCROOT)/Carthage/Build/iOS/SwiftLuhn.framework", - "$(SRCROOT)/Carthage/Build/iOS/Eureka.framework", "$(SRCROOT)/Carthage/Build/iOS/CreditCardRow.framework", ); name = "Copy Frameworks"; @@ -296,7 +315,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/usr/local/bin/carthage copy-frameworks"; + shellScript = "#/usr/local/bin/carthage copy-frameworks"; }; /* End PBXShellScriptBuildPhase section */ @@ -307,6 +326,7 @@ files = ( 28F828D21C4B714D00330CF4 /* ViewController.swift in Sources */, 28F828D01C4B714D00330CF4 /* AppDelegate.swift in Sources */, + 8F9B3A081D7DB2C2005F8273 /* MyCreditCardRow.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -321,16 +341,16 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 287D0A801C4B7B55004566D6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = CreditCardRow; - targetProxy = 287D0A7F1C4B7B55004566D6 /* PBXContainerItemProxy */; - }; 28F828E21C4B714D00330CF4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 28F828CB1C4B714D00330CF4 /* Example */; targetProxy = 28F828E11C4B714D00330CF4 /* PBXContainerItemProxy */; }; + 8FD114E31D79F685006976C8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = CreditCardRow; + targetProxy = 8FD114E21D79F685006976C8 /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -446,6 +466,7 @@ "$(PROJECT_DIR)/Frameworks", ); INFOPLIST_FILE = "$(SRCROOT)/Example/Example/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.xmartlabs.Example; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -462,6 +483,7 @@ "$(PROJECT_DIR)/Frameworks", ); INFOPLIST_FILE = "$(SRCROOT)/Example/Example/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.xmartlabs.Example; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/Example/Example/AppDelegate.swift b/Example/Example/AppDelegate.swift index 576b659..8513026 100644 --- a/Example/Example/AppDelegate.swift +++ b/Example/Example/AppDelegate.swift @@ -39,7 +39,5 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func applicationWillTerminate(application: UIApplication) { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } - - } diff --git a/Example/Example/Base.lproj/Main.storyboard b/Example/Example/Base.lproj/Main.storyboard index d12cc95..12189ad 100644 --- a/Example/Example/Base.lproj/Main.storyboard +++ b/Example/Example/Base.lproj/Main.storyboard @@ -1,8 +1,8 @@ - + - + diff --git a/Example/Example/CustomCell.xib b/Example/Example/CustomCell.xib new file mode 100644 index 0000000..3e37a43 --- /dev/null +++ b/Example/Example/CustomCell.xib @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Example/Info.plist b/Example/Example/Info.plist index 6905cc6..0dfbbe4 100644 --- a/Example/Example/Info.plist +++ b/Example/Example/Info.plist @@ -11,7 +11,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - $(PRODUCT_NAME) + CreditCardRow CFBundlePackageType APPL CFBundleShortVersionString diff --git a/Example/Example/ViewController.swift b/Example/Example/ViewController.swift index 591f26c..eae96e4 100644 --- a/Example/Example/ViewController.swift +++ b/Example/Example/ViewController.swift @@ -14,15 +14,31 @@ class ViewController: FormViewController { override func viewDidLoad() { super.viewDidLoad() +// CreditCardRow.defaultRowInitializer = { +// $0.cellProvider = CellProvider(nibName: "CustomCell", bundle: nil) +// } + + // Append the default CreditCardRow and my custom MyCreditCardRow form +++ Section() - <<< CreditCardRow() - } + <<< CreditCardRow() { + $0.numberSeparator = "-" + $0.expirationSeparator = "-" + $0.maxCreditCardNumberLength = 16 + $0.maxCVVLength = 3 + } + + +++ Section() + <<< MyCreditCardRow() { + $0.numberSeparator = " - " + } + .cellSetup({ (cell, row) in + cell.height = { 50 } + cell.numberField.padding = 8 + cell.numberField.textAlignment = .Center + cell.numberField.textColor = .blueColor() + cell.backgroundColor = UIColor(red: 0.83, green: 0.96, blue: 0.83, alpha: 1) + }) - override func didReceiveMemoryWarning() { - super.didReceiveMemoryWarning() - // Dispose of any resources that can be recreated. } - - } diff --git a/Example/MyCreditCardRow.swift b/Example/MyCreditCardRow.swift new file mode 100644 index 0000000..3985006 --- /dev/null +++ b/Example/MyCreditCardRow.swift @@ -0,0 +1,18 @@ +// +// CustomRow.swift +// Example +// +// Created by Mathias Claassen on 9/5/16. +// +// + +import Foundation +import CreditCardRow +import Eureka + +final class MyCreditCardRow: _CreditCardRow, RowType { + required init(tag: String?) { + super.init(tag: tag) + cellProvider = CellProvider(nibName: "CustomCell", bundle: nil) + } +} diff --git a/Media/CreditCardRow.gif b/Media/CreditCardRow.gif new file mode 100644 index 0000000..f58c2c9 Binary files /dev/null and b/Media/CreditCardRow.gif differ diff --git a/Media/CreditCardRowCustom.gif b/Media/CreditCardRowCustom.gif new file mode 100644 index 0000000..4c9b78d Binary files /dev/null and b/Media/CreditCardRowCustom.gif differ diff --git a/Media/row-parameters.png b/Media/row-parameters.png new file mode 100644 index 0000000..507825f Binary files /dev/null and b/Media/row-parameters.png differ diff --git a/Playground.playground/Contents.swift b/Playground.playground/Contents.swift deleted file mode 100644 index 8bea875..0000000 --- a/Playground.playground/Contents.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// Playground.playground -// CreditCardRow -// -// Copyright © 2016 Xmartlabs SRL. All rights reserved. -// - -//: Playground - noun: a place where people can play - -import UIKit -import CreditCardRow - -var str = "Hello, playground" diff --git a/Playground.playground/contents.xcplayground b/Playground.playground/contents.xcplayground deleted file mode 100644 index 5da2641..0000000 --- a/Playground.playground/contents.xcplayground +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/README.md b/README.md index 4c04fd9..6be90e9 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,58 @@ # CreditCardRow

-Build status +Build status Platform iOS Swift 2 compatible Carthage compatible -CocoaPods compatible +CocoaPods compatible License: MIT

By [Xmartlabs SRL](http://xmartlabs.com). -## Inroduction +## Contents + * [Introduction](#introduction) + * [Usage](#usage) + * [Requirements](#requirements) + * [Getting involved](#getting-involved) + * [Examples](#examples) + * [Installation](#installation) + * [Customization](#customization) + * [CreditCardRow parameters](#creditcardrow-parameters) + * [Creating custom nib file](#custom-nib) + * [Extending or overriding CreditCardCell functionality](#overriding) + * [Roadmap](#roadmap) -CreditCardRow is a library to ....... +## Introduction - +`CreditCardRow` is a custom row for Eureka in which the user will be able to input a credit card, its expiration date and the CVV/CVC value. It has a default UI design but that [can be easily changed](#customization) to fit (almost) any other design. + + + ## Usage ```swift import CreditCardRow -.. -. + +class ViewController: FormViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + + // Append the default CreditCardRow and my custom MyCreditCardRow + form +++ Section() + <<< CreditCardRow() + } +} ``` ## Requirements * iOS 8.0+ -* Xcode 7.2+ +* Xcode 7.3+ ## Getting involved @@ -42,9 +66,11 @@ If you use **CreditCardRow** in your app We would love to hear about it! Drop us ## Examples -Follow these 3 steps to run Example project: Clone CreditCardRow repository, open CreditCardRow workspace and run the *Example* project. - -You can also experiment and learn with the *CreditCardRow Playground* which is contained in *CreditCardRow.workspace*. +Follow these steps to run Example project: + * Clone CreditCardRow repository + * Open terminal in the downloaded folder and run carthage update + * Open CreditCardRow workspace + * Run the *Example* project. ## Installation @@ -65,18 +91,112 @@ pod 'CreditCardRow', '~> 1.0' To install CreditCardRow, simply add the following line to your Cartfile: ```ogdl -github "xmartlabs/CreditCardRow" ~> 1.0 +github "EurekaCommunity/CreditCardRow" ~> 1.0 +``` + + +## Customization + +A custom row is not worth much if it is not customisable. Therefore this row aims to be pretty customisable. Ideally you should be able to use all the logic implemented here with a completely different design. You should also be able to easily switch some basic behaviour. + +For basic styling like fonts, colors, margins, separators you should use `cellSetup` and `cellUpdate`. For more complex stuff there are other ways to create what you want. + +> CreditCardRow includes row navigation so that the user can navigate from one field to the next by tapping a button in the accessoryView of the cell. If you change the order of the text fields then you should also [override the row navigation functionality](#overriding). + +### CreditCardRow parameters + +`CreditCardRow` has the following variables that can be used/changed: + +* `var numberSeparator: String = " "`: Separator for the credit card number. Supports multi-character strings like " - " for example. +* `var expirationSeparator: Character = "/"`: Separator used between month and year numbers in expiration field. +* `var maxCVVLength: Int = 4`: Maximum length for CVV/CVC field +* `var maxCreditCardNumberLength = 19`: Maximum length for Credit Card number. Credit Card length can be up to 19 after ISO 7812-1. 6 digits IIN, 12 account digits and a check digit. + +For example you can do this: + +```swift +<<< CreditCardRow() { + $0.numberSeparator = "-" + $0.expirationSeparator = "-" + $0.maxCreditCardNumberLength = 16 + $0.maxCVVLength = 3 + } ``` + + + +### CreditCardCell parameters: + +The `CreditCardCell` has the following variables (all of them are outlets and can be connected from a nib file): + +* `var horizontalSeparator: UIView?`: Horizontal separator between number field and expiration and CVV fields in original cell +* `var verticalSeparator: UIView?`: Vertical separator between expiration and CVV fields in original cell +* `var numberField: PaddedTextField!`: Text field for the credit card number +* `var expirationField: PaddedTextField?`: Text field for the expiration date of the credit card. This is an optional variable. You could implement a cell without the `expirationField` +* `var cvvField: PaddedTextField?`: Text field for the CVV value. This text field is also optional. + +> PaddedTextField is a UITextField subclass that implements a padding around the text rect of the UITextField. + +`horizontalSeparator` and `verticalSeparator` depend on the default design. You will probably not use them if you create your own design. Also, as `expirationField` and `cvvField` are optional you could create a cell that just contains the credit card number like the following (you can find it in the example project): + + + +### Creating custom nib file + +You might want to follow your own design. To accomplish this you should follow these steps: + +* Create a user interface xib file and edit it with Xcode's Interface Builder. You should add a simple `UITableViewCell` and say that its class is a `CreditCardCell`. Make sure that the module of that class appears as `CreditCardRow`. +* Add an UITextField for the credit card's number. If you also want then you can add text fields for the expiration date and CVV/CVC value of the credit card. +* Connect these UITextField's to the corresponding outlets in the CreditCardCell.swift file +* Customise how the internal navigation works for these text fields (if you have changed the order of the fields.) +* Specify that you want to use the newly created nib file. You can do this in two ways: + * Using RowDefaults: use this if you want to use only this custom CreditCardRow in your app. + + ```swift + CreditCardRow.defaultRowInitializer = { + $0.cellProvider = CellProvider(nibName: "CustomCell", bundle: nil) + } + ``` + + * Or create a custom row subclassing `_CreditCardRow`: + + ```swift + final class MyCreditCardRow: _CreditCardRow, RowType { + required init(tag: String?) { + super.init(tag: tag) + cellProvider = CellProvider(nibName: "CustomCell", bundle: nil) + } + } + ``` + +### Extending or overriding CreditCardCell functionality + +Sometimes it is not enough to create a custom nib file; you also need to subclass and change some functionality. An example of this is if you change the order in which the text fields appear to the user or you remove the `expirationField` or the `cvvField` and you want to change the row navigation. In that case you should start by creating a class that subclasses `CreditCardCell` and that overrides `inputAccessoryView`: + +```swift +class MyCreditCardCell: CreditCardCell { + override var inputAccessoryView: UIView? { + // customize the accessoryView. Have a look at its superclass's implementation + return super.inputAccessoryView + } +} +``` + +You should be able to change any behaviour by overriding some method or variable. + +To use this `MyCreditCardCell`, you will have to specify in your nib file that you are using this class and you must change the `cellProvider` of `CreditCardRow` to use your custom nib file (as you should have already done if you read the previous section). + ## Author -* [Xmartlabs SRL](https://github.com/xmartlabs) ([@xmartlabs](https://twitter.com/xmartlabs)) +* [Mathias Claassen](https://github.com/mats-claassen) ([@mClaassen26](https://twitter.com/mClaassen26)) -## FAQ +## What is on the roadmap? -#### How to ..... +What could be added to CreditCardRow: -You can do it by conforming to ..... +* Implement some Eureka Validation + * Add SwiftLuhn validation # Change Log diff --git a/Sources/CreditCardCell.swift b/Sources/CreditCardCell.swift index 80c0492..e41b411 100644 --- a/Sources/CreditCardCell.swift +++ b/Sources/CreditCardCell.swift @@ -7,26 +7,40 @@ import Foundation import Eureka -//import SwiftLuhn +/** + * Struct holding the value for a CreditCardRow + */ public struct CreditCardInfo : Equatable { var creditCardNumber : String? var expiration : String? - var cvc : String? + var cvv : String? } public func ==(lhs: CreditCardInfo, rhs: CreditCardInfo) -> Bool { - return (lhs.creditCardNumber == rhs.creditCardNumber && lhs.expiration == rhs.expiration && lhs.cvc == rhs.cvc) + return (lhs.creditCardNumber == rhs.creditCardNumber && lhs.expiration == rhs.expiration && lhs.cvv == rhs.cvv) } public class CreditCardCell: Cell, UITextFieldDelegate, CellType { - @IBOutlet weak var horizontalSeparator: UIView! - @IBOutlet weak var verticalSeparator: UIView! + /// Horizontal separator between number field and expiration and CVV fields in original cell + @IBOutlet public weak var horizontalSeparator: UIView? - @IBOutlet weak var numberField: PaddedTextField! - @IBOutlet weak var expirationField: PaddedTextField! - @IBOutlet weak var cvcField: PaddedTextField! + /// Vertical separator between expiration and CVV fields in original cell + @IBOutlet public weak var verticalSeparator: UIView? + + /// Text field for the credit card number. + @IBOutlet public weak var numberField: PaddedTextField! + + /// Text field for the expiration date of the credit card + @IBOutlet public weak var expirationField: PaddedTextField? + + /// Text field for the CVV value + @IBOutlet public weak var cvvField: PaddedTextField? + + // Variables used to save temporary information about number text field + private var previousTextFieldContent: String? + private var previousSelection: UITextRange? required public init(style: UITableViewCellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) @@ -37,23 +51,23 @@ public class CreditCardCell: Cell, UITextFieldDelegate, CellType height = { 56 * 2 } selectionStyle = .None numberField.padding = 16.0 - expirationField.padding = 16.0 - cvcField.padding = 18.0 + expirationField?.padding = 16.0 + cvvField?.padding = 18.0 - horizontalSeparator.backgroundColor = .grayColor() - verticalSeparator.backgroundColor = .grayColor() + horizontalSeparator?.backgroundColor = .grayColor() + verticalSeparator?.backgroundColor = .grayColor() - for field in [numberField, expirationField, cvcField] { - field.autocorrectionType = .No - field.autocapitalizationType = .None - field.keyboardType = .NumberPad - field.font = .systemFontOfSize(24) - field.minimumFontSize = 14.0 - field.addTarget(self, action: #selector(CreditCardCell.textFieldEditingChanged(_:)), forControlEvents: .EditingChanged) - field.delegate = self + for field in [numberField, expirationField, cvvField] { + field?.autocorrectionType = .No + field?.autocapitalizationType = .None + field?.keyboardType = .NumberPad + field?.font = .systemFontOfSize(24) + field?.minimumFontSize = 14.0 + field?.addTarget(self, action: #selector(CreditCardCell.textFieldEditingChanged(_:)), forControlEvents: .EditingChanged) + field?.delegate = self } - cvcField.secureTextEntry = true + cvvField?.secureTextEntry = true } public override func update() { @@ -64,30 +78,43 @@ public class CreditCardCell: Cell, UITextFieldDelegate, CellType contentView.layer.borderColor = UIColor.grayColor().CGColor numberField.text = row.value?.creditCardNumber + reformatAsCardNumber(numberField) numberField.placeholder = NSLocalizedString("Card Number", comment: "Card Number placeholder") - cvcField.text = row.value?.cvc - cvcField.placeholder = NSLocalizedString("Card CVC", comment: "Card CVC placeholder") + if let cvvField = cvvField { + cvvField.text = row.value?.cvv + reformatAsCVV(cvvField) + cvvField.placeholder = NSLocalizedString("Card CVV", comment: "Card CVV placeholder") + } - expirationField.text = row.value?.expiration - expirationField.placeholder = NSLocalizedString("MM/YY", comment: "Card Expiration placeholder") + if let expirationField = expirationField { + expirationField.text = row.value?.expiration + reformatAsExpiration(expirationField) + expirationField.placeholder = NSLocalizedString("MM\(ccrow.expirationSeparator)YY", comment: "Card Expiration placeholder") + } } + /** + Update row.value for a certain textfield. + + - parameter textField: The textfield from which to obtain a value + */ func updateValuesForTextField(textField: UITextField) { switch(textField){ case numberField: - row.value?.creditCardNumber = textField.text - case expirationField: + row.value?.creditCardNumber = textField.text?.stringByReplacingOccurrencesOfString(ccrow.numberSeparator, withString: "", options: .LiteralSearch, range: nil) + case expirationField!: row.value?.expiration = textField.text - case cvcField: - row.value?.cvc = textField.text + case cvvField!: + row.value?.cvv = textField.text default: break } } - public lazy var naview: NavigationAccessoryView = { [unowned self] in - return NavigationAccessoryView(frame: CGRectMake(0, 0, self.frame.width, 44.0)) - }() + /// Strong-typed row + private var ccrow: _CreditCardRow { + return row as! _CreditCardRow + } override public func cellCanBecomeFirstResponder() -> Bool { return !row.isDisabled @@ -96,60 +123,192 @@ public class CreditCardCell: Cell, UITextFieldDelegate, CellType public override func cellBecomeFirstResponder(direction: Direction) -> Bool { switch direction { case .Up: - return cvcField.becomeFirstResponder() + return cvvField?.becomeFirstResponder() ?? expirationField?.becomeFirstResponder() ?? numberField.becomeFirstResponder() case .Down: return numberField.becomeFirstResponder() } } //MARK: Navigation + + override public var inputAccessoryView: UIView? { + // get the default accessory view and override some methods for internal navigation if let v = formViewController()?.inputAccessoryViewForRow(row) as? NavigationAccessoryView{ - if numberField.isFirstResponder() { v.nextButton.enabled = true v.nextButton.target = self v.nextButton.action = #selector(CreditCardCell.internalNavigationAction(_:)) return v } - else if expirationField.isFirstResponder() { + else if expirationField?.isFirstResponder() == true { v.previousButton.target = self v.previousButton.action = #selector(CreditCardCell.internalNavigationAction(_:)) v.nextButton.target = self v.nextButton.action = #selector(CreditCardCell.internalNavigationAction(_:)) v.previousButton.enabled = true v.nextButton.enabled = true - return naview + return v } - else if cvcField.isFirstResponder() { + else if cvvField?.isFirstResponder() == true { v.previousButton.enabled = true v.previousButton.target = self v.previousButton.action = #selector(CreditCardCell.internalNavigationAction(_:)) - return naview + return v } return v } return super.inputAccessoryView } + /// Internal function that handles the tap of the row navigation buttons func internalNavigationAction(sender: UIBarButtonItem) { + guard let inputAccessoryView = inputAccessoryView as? NavigationAccessoryView else { return } + if numberField.isFirstResponder() { - expirationField.becomeFirstResponder() + expirationField?.becomeFirstResponder() } - else if expirationField.isFirstResponder() { - sender == naview.previousButton ? numberField.becomeFirstResponder() : cvcField.becomeFirstResponder() + else if expirationField?.isFirstResponder() == true { + sender == inputAccessoryView.previousButton ? numberField.becomeFirstResponder() : cvvField?.becomeFirstResponder() } - else if cvcField.isFirstResponder() { - expirationField.becomeFirstResponder() + else if cvvField?.isFirstResponder() == true { + expirationField?.becomeFirstResponder() } } //MARK: UITextFieldDelegate public func textFieldEditingChanged(textField: UITextField) { updateValuesForTextField(textField) + switch textField { + case numberField: + reformatAsCardNumber(textField) + case expirationField!: + reformatAsExpiration(textField) + case cvvField!: + reformatAsCVV(textField) + default: break + } } @objc public func textFieldDidEndEditing(textField: UITextField) { updateValuesForTextField(textField) } + + public func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { + // Save textField's current state before performing the change, in case + // reformatAsCardNumber wants to revert it + switch textField { + case numberField: + previousTextFieldContent = textField.text + previousSelection = textField.selectedTextRange + default: + break + } + return true + } + + //MARK: Card number formatting + + public func reformatAsCardNumber(textField: UITextField) { + // In order to make the cursor end up positioned correctly, we need to + // explicitly reposition it after we inject spaces into the text. + // targetCursorPosition keeps track of where the cursor needs to end up as + // we modify the string, and at the end we set the cursor position to it. + guard let selectedRange = textField.selectedTextRange, textString = textField.text else { return } + var targetCursorPosition = textField.offsetFromPosition(textField.beginningOfDocument, toPosition: selectedRange.start) + + let cardNumberWithoutSpaces = removeNonDigits(textString, cursorPosition: &targetCursorPosition) + + if cardNumberWithoutSpaces.characters.count > ccrow.maxCreditCardNumberLength { + // If the user is trying to enter more than maxCreditCardNumberLength digits, we prevent + // their change, leaving the text field in its previous state. + textField.text = previousTextFieldContent + textField.selectedTextRange = previousSelection + return + } + + let cardNumberWithSpaces = insertSpacesEveryFourDigits(cardNumberWithoutSpaces, cursorPosition: &targetCursorPosition) + + // update text and cursor appropiately + textField.text = cardNumberWithSpaces + if let targetPosition = textField.positionFromPosition(textField.beginningOfDocument, offset: targetCursorPosition) { + textField.selectedTextRange = textField.textRangeFromPosition(targetPosition, toPosition: targetPosition) + } + } + + /** + Removes non-digits from the string, decrementing `cursorPosition` as + appropriate so that, for instance, if we pass in `@"1111 1123 1111"` + and a cursor position of `8`, the cursor position will be changed to + `7` (keeping it between the '2' and the '3' after the spaces are removed). + */ + + public func removeNonDigits(string: String, inout cursorPosition: Int) -> String { + let originalCursorPosition = cursorPosition + var digitsOnlyString = "" + for i in 0.. String { + var stringWithAddedSpaces = "" + let cursorPositionInSpacelessString = cursorPosition + for i in 0..0) && ((i % 4) == 0)) { + stringWithAddedSpaces += ccrow.numberSeparator + if (i < cursorPositionInSpacelessString) { + cursorPosition += ccrow.numberSeparator.characters.count + } + } + stringWithAddedSpaces.append(string[string.startIndex.advancedBy(i)]) + } + + return stringWithAddedSpaces + } + + //MARK: Expiration date formatting + public func reformatAsExpiration(textField: UITextField) { + guard let string = textField.text else { return } + let expirationString = String(ccrow.expirationSeparator) + let cleanString = string.stringByReplacingOccurrencesOfString(expirationString, withString: "", options: .LiteralSearch, range: nil) + if cleanString.length >= 3 { + let monthString = cleanString[0...1] + var yearString: String + if cleanString.length == 3 { + yearString = cleanString[2] + } else { + yearString = cleanString[2...3] + } + textField.text = monthString + expirationString + yearString + } else { + textField.text = cleanString + } + } + + //MARK: CVV formatting + public func reformatAsCVV(textField: UITextField) { + guard let string = textField.text else { return } + if string.characters.count > ccrow.maxCVVLength { + textField.text = string[0.. - + @@ -19,7 +19,7 @@ - + @@ -34,7 +34,7 @@ - + @@ -60,7 +60,7 @@ - + @@ -121,8 +121,8 @@ - - + + diff --git a/Sources/CreditCardRow.swift b/Sources/CreditCardRow.swift index 69e3440..afca68c 100644 --- a/Sources/CreditCardRow.swift +++ b/Sources/CreditCardRow.swift @@ -10,6 +10,19 @@ import Eureka /// Credit card row for Eureka. If you want to change the nib file for this cell then you should subclass _CreditCardRow public class _CreditCardRow : Row { + + /// Separator for the credit card number. Defaults to a whitespace. Emojis currently not supported. + public var numberSeparator: String = " " + + /// Separator used between month and year numbers in expiration field + public var expirationSeparator: Character = "/" + + /// Maximum length for CVV number + public var maxCVVLength: Int = 4 + + /// Maximum length for Credit Card number. Credit Card length can be up to 19 after ISO 7812-1. 6 digits IIN, 12 account digits and a check digit. + public var maxCreditCardNumberLength = 19 + required public init(tag: String?) { super.init(tag: tag) displayValueFor = nil @@ -19,8 +32,23 @@ public class _CreditCardRow : Row { /// Credit card row for Eureka. public final class CreditCardRow : _CreditCardRow, RowType { + required public init(tag: String?) { super.init(tag: tag) - cellProvider = CellProvider(nibName: "CreditCardCell", bundle: NSBundle(forClass: CreditCardRow.self)) + + // load correct bundle for cell nib file + var bundle: NSBundle + if let bundleWithIdentifier = NSBundle(identifier: "com.xmartlabs.CreditCardRow") { + // Example or Carthage + bundle = bundleWithIdentifier + } else { + // Cocoapods + let podBundle = NSBundle(forClass: CreditCardRow.self) + let bundleURL = podBundle.URLForResource("Frameworks/CreditCardRow.framework/CreditCardRow", withExtension: "bundle") + bundle = NSBundle(URL: bundleURL!)! + } + cellProvider = CellProvider(nibName: "CreditCardCell", bundle: bundle) } + + } diff --git a/Sources/PaddedTextField.swift b/Sources/PaddedTextField.swift index e419677..3194503 100644 --- a/Sources/PaddedTextField.swift +++ b/Sources/PaddedTextField.swift @@ -8,8 +8,24 @@ import UIKit +/// UITextField subclass that inserts a padding around the text rect. public class PaddedTextField : UITextField { - public var padding : CGFloat = 18.0 + + /// Padding value to apply around text rect. Used to apply the same padding vertically and horizontally. Getter returns horizontalPadding. + public var padding: CGFloat { + set { + horizontalPadding = newValue + verticalPadding = newValue + } + get { return horizontalPadding } + } + + /// Horizontal padding for text field + public var horizontalPadding : CGFloat = 18.0 + + /// Vertical padding for text field + public var verticalPadding : CGFloat = 18.0 + override public func textRectForBounds(bounds: CGRect) -> CGRect { return myRectForBounds(bounds) } @@ -23,6 +39,7 @@ public class PaddedTextField : UITextField { } func myRectForBounds(bounds: CGRect) -> CGRect { - return CGRectMake(bounds.origin.x + padding, bounds.origin.y + padding, bounds.width - padding*2, bounds.height - padding*2) + return CGRectMake(bounds.origin.x + horizontalPadding, bounds.origin.y + verticalPadding, + bounds.width - horizontalPadding * 2, bounds.height - verticalPadding * 2) } -} \ No newline at end of file +} diff --git a/Sources/String+CreditCardRow.swift b/Sources/String+CreditCardRow.swift new file mode 100644 index 0000000..3b70d32 --- /dev/null +++ b/Sources/String+CreditCardRow.swift @@ -0,0 +1,34 @@ +// +// String+CreditCardRow.swift +// CreditCardRow +// +// Created by Mathias Claassen on 9/5/16. +// +// + +import Foundation + +public extension String { + + subscript (i: Int) -> Character { + return self[self.startIndex.advancedBy(i)] + } + + subscript (i: Int) -> String { + return String(self[i] as Character) + } + + subscript (r: Range) -> String { + let start = startIndex.advancedBy(r.startIndex) + let end = start.advancedBy(r.endIndex - r.startIndex) + return self[Range(start ..< end)] + } + + var length: Int { + return characters.count + } +} + +//"abcde"[0] == "a" +//"abcde"[0...2] == "abc" +//"abcde"[2..<4] == "cd" diff --git a/Sources/View.xib b/Sources/View.xib deleted file mode 100644 index b573c8d..0000000 --- a/Sources/View.xib +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - -