From 468e2431945d3f360c7ee41ad7b1146a7318c12a Mon Sep 17 00:00:00 2001 From: Rachel Brindle Date: Sat, 30 Mar 2024 15:01:10 -0700 Subject: [PATCH] Use docc for documentation, instead of having it all in a single, giant README. (#1135) * Migrate Nimble's documentation to a DocumentCatalog * Remove autogenerated docs * Build docs as part of github --- .github/workflows/documentation.yml | 30 + Nimble.xcodeproj/project.pbxproj | 4 + Package.resolved | 18 + Package.swift | 1 + Package@swift-5.9.swift | 1 + README.md | 2101 +--- .../Nimble/Nimble.docc/Guides/Background.md | 29 + .../Nimble/Nimble.docc/Guides/Concurrency.md | 64 + .../Nimble/Nimble.docc/Guides/Expectations.md | 196 + .../Nimble/Nimble.docc/Guides/ObjectiveC.md | 81 + .../Nimble.docc/Guides/PollingExpectations.md | 290 + Sources/Nimble/Nimble.docc/Guides/Require.md | 82 + .../Guides/WritingCustomMatchers.md | 363 + .../Nimble.docc/Matchers/CollectionCount.md | 31 + .../Matchers/CollectionElements.md | 47 + .../Matchers/CollectionMembership.md | 138 + .../Nimble.docc/Matchers/Comparisons.md | 94 + .../Nimble.docc/Matchers/CustomValidation.md | 27 + .../Nimble.docc/Matchers/Equivalence.md | 26 + .../Nimble/Nimble.docc/Matchers/Exceptions.md | 45 + .../Nimble.docc/Matchers/GroupsOfMatchers.md | 33 + .../Nimble/Nimble.docc/Matchers/Identity.md | 34 + Sources/Nimble/Nimble.docc/Matchers/Map.md | 34 + .../Nimble.docc/Matchers/Notifications.md | 32 + Sources/Nimble/Nimble.docc/Matchers/Result.md | 42 + .../Nimble/Nimble.docc/Matchers/Strings.md | 39 + .../Nimble.docc/Matchers/SwiftAssertions.md | 33 + .../Nimble.docc/Matchers/SwiftErrors.md | 49 + .../Nimble/Nimble.docc/Matchers/Truthiness.md | 37 + .../Nimble.docc/Matchers/TypeChecking.md | 61 + Sources/Nimble/Nimble.docc/Nimble.md | 49 + docs/Classes.html | 1712 --- docs/Classes/AssertionDispatcher.html | 1295 -- docs/Classes/AssertionRecorder.html | 1321 -- docs/Classes/CurrentTestCaseTracker.html | 1320 -- docs/Classes/FailureMessage.html | 1511 --- docs/Classes/NMBExpectation.html | 1881 --- docs/Classes/NMBExpectationMessage.html | 1507 --- docs/Classes/NMBMatcher.html | 2004 --- docs/Classes/NMBMatcherResult.html | 1372 --- docs/Classes/NMBMatcherStatus.html | 1453 --- docs/Classes/NMBObjCBeCloseToMatcher.html | 1265 -- .../Classes/NMBObjCRaiseExceptionMatcher.html | 1349 -- docs/Classes/NMBStringer.html | 1266 -- docs/Classes/NMBWait.html | 1382 --- docs/Classes/NimbleShortXCTestHandler.html | 1265 -- docs/Classes/NimbleXCTestHandler.html | 1265 -- docs/Classes/SourceLocation.html | 1318 -- docs/Enums.html | 1401 --- docs/Enums/ExpectationMessage.html | 1647 --- docs/Enums/ExpectationStatus.html | 1345 -- docs/Enums/ExpectationStyle.html | 1291 -- docs/Enums/MatcherStatus.html | 1383 --- docs/Enums/NimbleTimeInterval.html | 1479 --- docs/Enums/ToSucceedResult.html | 1293 -- docs/Extensions.html | 1966 --- docs/Extensions/AnySequence.html | 1263 -- docs/Extensions/Array.html | 1263 -- docs/Extensions/Data.html | 1263 -- docs/Extensions/Date.html | 1319 -- docs/Extensions/Double.html | 1290 -- docs/Extensions/Float.html | 1290 -- docs/Extensions/Int.html | 1262 -- docs/Extensions/Int16.html | 1262 -- docs/Extensions/Int32.html | 1262 -- docs/Extensions/Int64.html | 1262 -- docs/Extensions/Int8.html | 1262 -- docs/Extensions/NSArray.html | 1265 -- docs/Extensions/NSDate.html | 1291 -- docs/Extensions/NSIndexSet.html | 1264 -- docs/Extensions/NSNumber.html | 1292 -- docs/Extensions/NSString.html | 1263 -- docs/Extensions/String.html | 1263 -- docs/Extensions/TimeInterval.html | 1263 -- docs/Extensions/UInt.html | 1262 -- docs/Extensions/UInt16.html | 1262 -- docs/Extensions/UInt32.html | 1262 -- docs/Extensions/UInt64.html | 1262 -- docs/Extensions/UInt8.html | 1262 -- docs/Functions.html | 10197 ---------------- docs/Global Variables.html | 1290 -- docs/Protocols.html | 1495 --- docs/Protocols/AssertionHandler.html | 1264 -- docs/Protocols/AsyncableMatcher.html | 1294 -- docs/Protocols/Expectation.html | 1399 --- docs/Protocols/NMBCollection.html | 1264 -- docs/Protocols/NMBComparable.html | 1268 -- docs/Protocols/NMBContainer.html | 1264 -- docs/Protocols/NMBDoubleConvertible.html | 1264 -- docs/Protocols/NMBOrderedCollection.html | 1264 -- .../TestOutputStringConvertible.html | 1273 -- docs/Structs.html | 1665 --- docs/Structs/AssertionRecord.html | 1348 -- docs/Structs/AsyncExpectation.html | 2129 ---- docs/Structs/AsyncExpression.html | 1662 --- docs/Structs/AsyncMatcher.html | 1485 --- docs/Structs/AsyncRequirement.html | 2062 ---- docs/Structs/ExpectationNil.html | 1263 -- docs/Structs/Expression.html | 1629 --- docs/Structs/Matcher.html | 1512 --- docs/Structs/MatcherResult.html | 1400 --- docs/Structs/PollingDefaults.html | 1297 -- docs/Structs/RequireError.html | 1263 -- docs/Structs/SyncExpectation.html | 2398 ---- docs/Structs/SyncRequirement.html | 2337 ---- docs/Typealiases.html | 1525 --- docs/badge.svg | 28 - docs/css/highlight.css | 202 - docs/css/jazzy.css | 439 - .../docsets/Nimble.docset/Contents/Info.plist | 20 - .../Contents/Resources/Documents/Classes.html | 1712 --- .../Classes/AssertionDispatcher.html | 1295 -- .../Documents/Classes/AssertionRecorder.html | 1321 -- .../Classes/CurrentTestCaseTracker.html | 1320 -- .../Documents/Classes/FailureMessage.html | 1511 --- .../Documents/Classes/NMBExpectation.html | 1881 --- .../Classes/NMBExpectationMessage.html | 1507 --- .../Documents/Classes/NMBMatcher.html | 2004 --- .../Documents/Classes/NMBMatcherResult.html | 1372 --- .../Documents/Classes/NMBMatcherStatus.html | 1453 --- .../Classes/NMBObjCBeCloseToMatcher.html | 1265 -- .../Classes/NMBObjCRaiseExceptionMatcher.html | 1349 -- .../Documents/Classes/NMBStringer.html | 1266 -- .../Resources/Documents/Classes/NMBWait.html | 1382 --- .../Classes/NimbleShortXCTestHandler.html | 1265 -- .../Classes/NimbleXCTestHandler.html | 1265 -- .../Documents/Classes/SourceLocation.html | 1318 -- .../Contents/Resources/Documents/Enums.html | 1401 --- .../Documents/Enums/ExpectationMessage.html | 1647 --- .../Documents/Enums/ExpectationStatus.html | 1345 -- .../Documents/Enums/ExpectationStyle.html | 1291 -- .../Documents/Enums/MatcherStatus.html | 1383 --- .../Documents/Enums/NimbleTimeInterval.html | 1479 --- .../Documents/Enums/ToSucceedResult.html | 1293 -- .../Resources/Documents/Extensions.html | 1966 --- .../Documents/Extensions/AnySequence.html | 1263 -- .../Resources/Documents/Extensions/Array.html | 1263 -- .../Resources/Documents/Extensions/Data.html | 1263 -- .../Resources/Documents/Extensions/Date.html | 1319 -- .../Documents/Extensions/Double.html | 1290 -- .../Resources/Documents/Extensions/Float.html | 1290 -- .../Resources/Documents/Extensions/Int.html | 1262 -- .../Resources/Documents/Extensions/Int16.html | 1262 -- .../Resources/Documents/Extensions/Int32.html | 1262 -- .../Resources/Documents/Extensions/Int64.html | 1262 -- .../Resources/Documents/Extensions/Int8.html | 1262 -- .../Documents/Extensions/NSArray.html | 1265 -- .../Documents/Extensions/NSDate.html | 1291 -- .../Documents/Extensions/NSIndexSet.html | 1264 -- .../Documents/Extensions/NSNumber.html | 1292 -- .../Documents/Extensions/NSString.html | 1263 -- .../Documents/Extensions/String.html | 1263 -- .../Documents/Extensions/TimeInterval.html | 1263 -- .../Resources/Documents/Extensions/UInt.html | 1262 -- .../Documents/Extensions/UInt16.html | 1262 -- .../Documents/Extensions/UInt32.html | 1262 -- .../Documents/Extensions/UInt64.html | 1262 -- .../Resources/Documents/Extensions/UInt8.html | 1262 -- .../Resources/Documents/Functions.html | 10197 ---------------- .../Resources/Documents/Global Variables.html | 1290 -- .../Resources/Documents/Protocols.html | 1495 --- .../Documents/Protocols/AssertionHandler.html | 1264 -- .../Documents/Protocols/AsyncableMatcher.html | 1294 -- .../Documents/Protocols/Expectation.html | 1399 --- .../Documents/Protocols/NMBCollection.html | 1264 -- .../Documents/Protocols/NMBComparable.html | 1268 -- .../Documents/Protocols/NMBContainer.html | 1264 -- .../Protocols/NMBDoubleConvertible.html | 1264 -- .../Protocols/NMBOrderedCollection.html | 1264 -- .../TestOutputStringConvertible.html | 1273 -- .../Contents/Resources/Documents/Structs.html | 1665 --- .../Documents/Structs/AssertionRecord.html | 1348 -- .../Documents/Structs/AsyncExpectation.html | 2129 ---- .../Documents/Structs/AsyncExpression.html | 1662 --- .../Documents/Structs/AsyncMatcher.html | 1485 --- .../Documents/Structs/AsyncRequirement.html | 2062 ---- .../Documents/Structs/ExpectationNil.html | 1263 -- .../Documents/Structs/Expression.html | 1629 --- .../Resources/Documents/Structs/Matcher.html | 1512 --- .../Documents/Structs/MatcherResult.html | 1400 --- .../Documents/Structs/PollingDefaults.html | 1297 -- .../Documents/Structs/RequireError.html | 1263 -- .../Documents/Structs/SyncExpectation.html | 2398 ---- .../Documents/Structs/SyncRequirement.html | 2337 ---- .../Resources/Documents/Typealiases.html | 1525 --- .../Resources/Documents/css/highlight.css | 202 - .../Resources/Documents/css/jazzy.css | 439 - .../Resources/Documents/img/carat.png | Bin 274 -> 0 bytes .../Contents/Resources/Documents/img/dash.png | Bin 1338 -> 0 bytes .../Contents/Resources/Documents/img/gh.png | Bin 1571 -> 0 bytes .../Resources/Documents/img/spinner.gif | Bin 1849 -> 0 bytes .../Contents/Resources/Documents/index.html | 3146 ----- .../Contents/Resources/Documents/js/jazzy.js | 74 - .../Resources/Documents/js/jazzy.search.js | 74 - .../Resources/Documents/js/jquery.min.js | 2 - .../Resources/Documents/js/lunr.min.js | 6 - .../Documents/js/typeahead.jquery.js | 1694 --- .../Contents/Resources/Documents/search.json | 1 - .../Contents/Resources/docSet.dsidx | Bin 204800 -> 0 bytes docs/docsets/Nimble.tgz | Bin 617128 -> 0 bytes docs/img/carat.png | Bin 274 -> 0 bytes docs/img/dash.png | Bin 1338 -> 0 bytes docs/img/gh.png | Bin 1571 -> 0 bytes docs/img/spinner.gif | Bin 1849 -> 0 bytes docs/index.html | 3146 ----- docs/js/jazzy.js | 74 - docs/js/jazzy.search.js | 74 - docs/js/jquery.min.js | 2 - docs/js/lunr.min.js | 6 - docs/js/typeahead.jquery.js | 1694 --- docs/search.json | 1 - docs/undocumented.json | 2553 ---- script/build_docs | 12 + script/build_docs.zsh | 20 - script/release | 6 +- 215 files changed, 2071 insertions(+), 245977 deletions(-) create mode 100644 .github/workflows/documentation.yml create mode 100644 Sources/Nimble/Nimble.docc/Guides/Background.md create mode 100644 Sources/Nimble/Nimble.docc/Guides/Concurrency.md create mode 100644 Sources/Nimble/Nimble.docc/Guides/Expectations.md create mode 100644 Sources/Nimble/Nimble.docc/Guides/ObjectiveC.md create mode 100644 Sources/Nimble/Nimble.docc/Guides/PollingExpectations.md create mode 100644 Sources/Nimble/Nimble.docc/Guides/Require.md create mode 100644 Sources/Nimble/Nimble.docc/Guides/WritingCustomMatchers.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/CollectionCount.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/CollectionElements.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/CollectionMembership.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/Comparisons.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/CustomValidation.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/Equivalence.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/Exceptions.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/GroupsOfMatchers.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/Identity.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/Map.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/Notifications.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/Result.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/Strings.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/SwiftAssertions.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/SwiftErrors.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/Truthiness.md create mode 100644 Sources/Nimble/Nimble.docc/Matchers/TypeChecking.md create mode 100644 Sources/Nimble/Nimble.docc/Nimble.md delete mode 100644 docs/Classes.html delete mode 100644 docs/Classes/AssertionDispatcher.html delete mode 100644 docs/Classes/AssertionRecorder.html delete mode 100644 docs/Classes/CurrentTestCaseTracker.html delete mode 100644 docs/Classes/FailureMessage.html delete mode 100644 docs/Classes/NMBExpectation.html delete mode 100644 docs/Classes/NMBExpectationMessage.html delete mode 100644 docs/Classes/NMBMatcher.html delete mode 100644 docs/Classes/NMBMatcherResult.html delete mode 100644 docs/Classes/NMBMatcherStatus.html delete mode 100644 docs/Classes/NMBObjCBeCloseToMatcher.html delete mode 100644 docs/Classes/NMBObjCRaiseExceptionMatcher.html delete mode 100644 docs/Classes/NMBStringer.html delete mode 100644 docs/Classes/NMBWait.html delete mode 100644 docs/Classes/NimbleShortXCTestHandler.html delete mode 100644 docs/Classes/NimbleXCTestHandler.html delete mode 100644 docs/Classes/SourceLocation.html delete mode 100644 docs/Enums.html delete mode 100644 docs/Enums/ExpectationMessage.html delete mode 100644 docs/Enums/ExpectationStatus.html delete mode 100644 docs/Enums/ExpectationStyle.html delete mode 100644 docs/Enums/MatcherStatus.html delete mode 100644 docs/Enums/NimbleTimeInterval.html delete mode 100644 docs/Enums/ToSucceedResult.html delete mode 100644 docs/Extensions.html delete mode 100644 docs/Extensions/AnySequence.html delete mode 100644 docs/Extensions/Array.html delete mode 100644 docs/Extensions/Data.html delete mode 100644 docs/Extensions/Date.html delete mode 100644 docs/Extensions/Double.html delete mode 100644 docs/Extensions/Float.html delete mode 100644 docs/Extensions/Int.html delete mode 100644 docs/Extensions/Int16.html delete mode 100644 docs/Extensions/Int32.html delete mode 100644 docs/Extensions/Int64.html delete mode 100644 docs/Extensions/Int8.html delete mode 100644 docs/Extensions/NSArray.html delete mode 100644 docs/Extensions/NSDate.html delete mode 100644 docs/Extensions/NSIndexSet.html delete mode 100644 docs/Extensions/NSNumber.html delete mode 100644 docs/Extensions/NSString.html delete mode 100644 docs/Extensions/String.html delete mode 100644 docs/Extensions/TimeInterval.html delete mode 100644 docs/Extensions/UInt.html delete mode 100644 docs/Extensions/UInt16.html delete mode 100644 docs/Extensions/UInt32.html delete mode 100644 docs/Extensions/UInt64.html delete mode 100644 docs/Extensions/UInt8.html delete mode 100644 docs/Functions.html delete mode 100644 docs/Global Variables.html delete mode 100644 docs/Protocols.html delete mode 100644 docs/Protocols/AssertionHandler.html delete mode 100644 docs/Protocols/AsyncableMatcher.html delete mode 100644 docs/Protocols/Expectation.html delete mode 100644 docs/Protocols/NMBCollection.html delete mode 100644 docs/Protocols/NMBComparable.html delete mode 100644 docs/Protocols/NMBContainer.html delete mode 100644 docs/Protocols/NMBDoubleConvertible.html delete mode 100644 docs/Protocols/NMBOrderedCollection.html delete mode 100644 docs/Protocols/TestOutputStringConvertible.html delete mode 100644 docs/Structs.html delete mode 100644 docs/Structs/AssertionRecord.html delete mode 100644 docs/Structs/AsyncExpectation.html delete mode 100644 docs/Structs/AsyncExpression.html delete mode 100644 docs/Structs/AsyncMatcher.html delete mode 100644 docs/Structs/AsyncRequirement.html delete mode 100644 docs/Structs/ExpectationNil.html delete mode 100644 docs/Structs/Expression.html delete mode 100644 docs/Structs/Matcher.html delete mode 100644 docs/Structs/MatcherResult.html delete mode 100644 docs/Structs/PollingDefaults.html delete mode 100644 docs/Structs/RequireError.html delete mode 100644 docs/Structs/SyncExpectation.html delete mode 100644 docs/Structs/SyncRequirement.html delete mode 100644 docs/Typealiases.html delete mode 100644 docs/badge.svg delete mode 100644 docs/css/highlight.css delete mode 100644 docs/css/jazzy.css delete mode 100644 docs/docsets/Nimble.docset/Contents/Info.plist delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/AssertionDispatcher.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/AssertionRecorder.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/CurrentTestCaseTracker.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/FailureMessage.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBExpectation.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBExpectationMessage.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBMatcher.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBMatcherResult.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBMatcherStatus.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBObjCBeCloseToMatcher.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBObjCRaiseExceptionMatcher.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBStringer.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBWait.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NimbleShortXCTestHandler.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NimbleXCTestHandler.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/SourceLocation.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ExpectationMessage.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ExpectationStatus.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ExpectationStyle.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/MatcherStatus.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/NimbleTimeInterval.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ToSucceedResult.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/AnySequence.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Array.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Data.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Date.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Double.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Float.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int16.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int32.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int64.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int8.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSArray.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSDate.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSIndexSet.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSNumber.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSString.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/String.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/TimeInterval.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt16.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt32.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt64.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt8.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Functions.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Global Variables.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/AssertionHandler.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/AsyncableMatcher.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/Expectation.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBCollection.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBComparable.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBContainer.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBDoubleConvertible.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBOrderedCollection.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/TestOutputStringConvertible.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AssertionRecord.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncExpectation.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncExpression.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncMatcher.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncRequirement.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/ExpectationNil.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/Expression.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/Matcher.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/MatcherResult.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/PollingDefaults.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/RequireError.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/SyncExpectation.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/SyncRequirement.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/Typealiases.html delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/css/highlight.css delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/css/jazzy.css delete mode 100755 docs/docsets/Nimble.docset/Contents/Resources/Documents/img/carat.png delete mode 100755 docs/docsets/Nimble.docset/Contents/Resources/Documents/img/dash.png delete mode 100755 docs/docsets/Nimble.docset/Contents/Resources/Documents/img/gh.png delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/img/spinner.gif delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/index.html delete mode 100755 docs/docsets/Nimble.docset/Contents/Resources/Documents/js/jazzy.js delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/js/jazzy.search.js delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/js/jquery.min.js delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/js/lunr.min.js delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/js/typeahead.jquery.js delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/Documents/search.json delete mode 100644 docs/docsets/Nimble.docset/Contents/Resources/docSet.dsidx delete mode 100644 docs/docsets/Nimble.tgz delete mode 100755 docs/img/carat.png delete mode 100755 docs/img/dash.png delete mode 100755 docs/img/gh.png delete mode 100644 docs/img/spinner.gif delete mode 100644 docs/index.html delete mode 100755 docs/js/jazzy.js delete mode 100644 docs/js/jazzy.search.js delete mode 100644 docs/js/jquery.min.js delete mode 100644 docs/js/lunr.min.js delete mode 100644 docs/js/typeahead.jquery.js delete mode 100644 docs/search.json delete mode 100644 docs/undocumented.json create mode 100755 script/build_docs delete mode 100755 script/build_docs.zsh diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml new file mode 100644 index 000000000..af8eaf1fc --- /dev/null +++ b/.github/workflows/documentation.yml @@ -0,0 +1,30 @@ +name: Build Documentation +on: + push: + branches: + - main + tags: + - "*" + pull_request: + branches: + - "*" + +permissions: + contents: write + +jobs: + build-documentation: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Build Docs + run: | + ./script/build_docs + + - name: Deploy Docs + if: github.ref == 'refs/heads/main' + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: docs diff --git a/Nimble.xcodeproj/project.pbxproj b/Nimble.xcodeproj/project.pbxproj index c2022f81a..87e21013e 100644 --- a/Nimble.xcodeproj/project.pbxproj +++ b/Nimble.xcodeproj/project.pbxproj @@ -125,6 +125,7 @@ 857D1849253610A900D8693A /* BeWithin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 857D1848253610A900D8693A /* BeWithin.swift */; }; 857D184F2536124400D8693A /* BeWithinTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 857D184D2536123F00D8693A /* BeWithinTest.swift */; }; 8913649429E6925F00AD535E /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F14FB63194180C5009F2A08 /* utils.swift */; }; + 8914E31C2BB866BF00C888DE /* Nimble.docc in Sources */ = {isa = PBXBuildFile; fileRef = 8914E31B2BB866BF00C888DE /* Nimble.docc */; }; 891729D52B1842D6005CC866 /* DSL+Require.swift in Sources */ = {isa = PBXBuildFile; fileRef = 891729D42B1842D6005CC866 /* DSL+Require.swift */; }; 891729D72B18431D005CC866 /* Requirement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 891729D62B18431D005CC866 /* Requirement.swift */; }; 891A04712AB0164500B46613 /* AsyncTimerSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 891A04702AB0164500B46613 /* AsyncTimerSequence.swift */; }; @@ -312,6 +313,7 @@ 7B5358C11C39155600A23FAA /* ObjCSatisfyAnyOfTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjCSatisfyAnyOfTest.m; sourceTree = ""; }; 857D1848253610A900D8693A /* BeWithin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BeWithin.swift; sourceTree = ""; }; 857D184D2536123F00D8693A /* BeWithinTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BeWithinTest.swift; sourceTree = ""; }; + 8914E31B2BB866BF00C888DE /* Nimble.docc */ = {isa = PBXFileReference; lastKnownFileType = folder.documentationcatalog; path = Nimble.docc; sourceTree = ""; }; 891729D42B1842D6005CC866 /* DSL+Require.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DSL+Require.swift"; sourceTree = ""; }; 891729D62B18431D005CC866 /* Requirement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Requirement.swift; sourceTree = ""; }; 891A04702AB0164500B46613 /* AsyncTimerSequence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncTimerSequence.swift; sourceTree = ""; }; @@ -467,6 +469,7 @@ 1F1A742E1940169200FFFC47 /* Nimble.h */, 8952ADDC2B4F159400D9305F /* PrivacyInfo.xcprivacy */, 1FD8CD241968AB07008ED995 /* Utils */, + 8914E31B2BB866BF00C888DE /* Nimble.docc */, ); name = Nimble; path = Sources/Nimble; @@ -845,6 +848,7 @@ 1F43728C1A1B343C00EB80F8 /* SourceLocation.swift in Sources */, 1FD8CD4F1968AB07008ED995 /* BeLessThanOrEqual.swift in Sources */, 1F1871E71CA8A18400A34BF2 /* Polling.swift in Sources */, + 8914E31C2BB866BF00C888DE /* Nimble.docc in Sources */, 1FDBD8681AF8A4FF0089F27B /* AssertionDispatcher.swift in Sources */, AE4BA9AE1C88DDB500B73906 /* Errors.swift in Sources */, 892FDF1329D3EA7700523A80 /* AsyncExpression.swift in Sources */, diff --git a/Package.resolved b/Package.resolved index 989bd3792..4a6747690 100644 --- a/Package.resolved +++ b/Package.resolved @@ -17,6 +17,24 @@ "revision" : "dc9af4781f2afdd1e68e90f80b8603be73ea7abc", "version" : "2.2.0" } + }, + { + "identity" : "swift-docc-plugin", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-docc-plugin", + "state" : { + "revision" : "26ac5758409154cc448d7ab82389c520fa8a8247", + "version" : "1.3.0" + } + }, + { + "identity" : "swift-docc-symbolkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-docc-symbolkit", + "state" : { + "revision" : "b45d1f2ed151d057b54504d653e0da5552844e34", + "version" : "1.0.0" + } } ], "version" : 2 diff --git a/Package.swift b/Package.swift index 0c6ae39f0..566f9540f 100644 --- a/Package.swift +++ b/Package.swift @@ -20,6 +20,7 @@ let package = Package( ], dependencies: [ .package(url: "https://github.com/mattgallagher/CwlPreconditionTesting.git", .upToNextMajor(from: "2.1.0")), + .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"), ], targets: { var testHelperDependencies: [PackageDescription.Target.Dependency] = ["Nimble"] diff --git a/Package@swift-5.9.swift b/Package@swift-5.9.swift index 3a52f3140..d7ed190e7 100644 --- a/Package@swift-5.9.swift +++ b/Package@swift-5.9.swift @@ -20,6 +20,7 @@ let package = Package( ], dependencies: [ .package(url: "https://github.com/mattgallagher/CwlPreconditionTesting.git", .upToNextMajor(from: "2.2.0")), + .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"), ], targets: { var testHelperDependencies: [PackageDescription.Target.Dependency] = ["Nimble"] diff --git a/README.md b/README.md index 4372f086b..f3b7ded3a 100644 --- a/README.md +++ b/README.md @@ -19,1990 +19,10 @@ expect(["Atlantic", "Pacific"]).toNot(contain("Mississippi")) expect(ocean.isClean).toEventually(beTruthy()) ``` -# How to Use Nimble +# Documentation - - -**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 Safety](#type-safety) - - [Operator Overloads](#operator-overloads) - - [Lazily Computed Values](#lazily-computed-values) - - [C Primitives](#c-primitives) - - [Async/Await Support](#asyncawait-support) - - [Async Matchers](#async-matchers) - - [Polling Expectations](#polling-expectations) - - [Using Polling Expectations in Async Tests](#using-polling-expectations-in-async-tests) - - [Verifying a Matcher will Never or Always Match](#verifying-a-matcher-will-never-or-always-match) - - [Waiting for a Callback to be Called](#waiting-for-a-callback-to-be-called) - - [Changing the Timeout and Polling Intervals](#changing-the-timeout-and-polling-intervals) - - [Changing default Timeout and Poll Intervals](#changing-default-timeout-and-poll-intervals) - - [Quick](#quick) - - [XCTest](#xctest) - - [Objective-C Support](#objective-c-support) - - [Disabling Objective-C Shorthand](#disabling-objective-c-shorthand) -- [Using `require` to demand that a matcher pass before continuing](#using-require-to-demand-that-a-matcher-pass-before-continuing) - - [Polling with `require`.](#polling-with-require) - - [Using `require` with Async expressions and Async matchers](#using-require-with-async-expressions-and-async-matchers) - - [Using `unwrap` to replace `require(...).toNot(beNil())`](#using-unwrap-to-replace-requiretonotbenil) - - [Throwing a Custom Error from Require](#throwing-a-custom-error-from-require) -- [Built-in Matcher Functions](#built-in-matcher-functions) - - [Type Checking](#type-checking) - - [Equivalence](#equivalence) - - [Identity](#identity) - - [Comparisons](#comparisons) - - [Types/Classes](#typesclasses) - - [Truthiness](#truthiness) - - [Swift Assertions](#swift-assertions) - - [Swift Error Handling](#swift-error-handling) - - [Exceptions](#exceptions) - - [Collection Membership](#collection-membership) - - [Strings](#strings) - - [Collection Elements](#collection-elements) - - [Swift](#swift) - - [Objective-C](#objective-c) - - [Collection Count](#collection-count) - - [Notifications](#notifications) - - [Result](#result) - - [Matching a value to any of a group of matchers](#matching-a-value-to-any-of-a-group-of-matchers) - - [Custom Validation](#custom-validation) - - [Mapping a Value to Another Value](#mapping-a-value-to-another-value) -- [Writing Your Own Matchers](#writing-your-own-matchers) - - [MatcherResult](#matcherresult) - - [Lazy Evaluation](#lazy-evaluation) - - [Type Checking via Swift Generics](#type-checking-via-swift-generics) - - [Customizing Failure Messages](#customizing-failure-messages) - - [Basic Customization](#basic-customization) - - [Full Customization](#full-customization) - - [Asynchronous Matchers](#asynchronous-matchers) - - [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) - - [Installing Nimble via Swift Package Manager](#installing-nimble-via-swift-package-manager) - - [Xcode](#xcode) - - [Package.Swift](#packageswift) - - [Using Nimble without XCTest](#using-nimble-without-xctest) - - [Privacy Statement](#privacy-statement) - - - -# 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 Safety - -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)); -``` - -## Async/Await Support - -Nimble makes it easy to await for an async function to complete. Simply pass -the async function in to `expect`: - -```swift -// Swift -await expect { await aFunctionReturning1() }.to(equal(1)) -``` - -The async function is awaited on first, before passing it to the matcher. This -enables the matcher to run synchronous code like before, without caring about -whether the value it's processing was abtained async or not. - -Async support is Swift-only, and it requires that you execute the test in an -async context. For XCTest, this is as simple as marking your test function with -`async`. If you use Quick, all tests in Quick 6 are executed in an async context. -In Quick 7 and later, only tests that are in an `AsyncSpec` subclass will be -executed in an async context. - -To avoid a compiler errors when using synchronous `expect` in asynchronous contexts, -`expect` with async expressions does not support autoclosures. However, the `expecta` -(expect async) function is provided as an alternative, which does support autoclosures. - -```swift -// Swift -await expecta(await aFunctionReturning1()).to(equal(1))) -``` - -Similarly, if you're ever in a situation where you want to force the compiler to -produce a `SyncExpectation`, you can use the `expects` (expect sync) function to -produce a `SyncExpectation`. Like so: - -```swift -// Swift -expects(someNonAsyncFunction()).to(equal(1))) - -expects(await someAsyncFunction()).to(equal(1)) // Compiler error: 'async' call in an autoclosure that does not support concurrency -``` - -### Async Matchers - -In addition to asserting on async functions prior to passing them to a -synchronous matcher, you can also write matchers that directly take in an -async value. These are called `AsyncMatcher`s. This is most obviously useful -when directly asserting against an actor. In addition to writing your own -async matchers, Nimble currently ships with async versions of the following -matchers: - -- `allPass` -- `containElementSatisfying` -- `satisfyAllOf` and the `&&` operator overload accept both `AsyncMatcher` and - synchronous `Matcher`s. -- `satisfyAnyOf` and the `||` operator overload accept both `AsyncMatcher` and - synchronous `Matcher`s. - -Note: Async/Await support is different than the `toEventually`/`toEventuallyNot` -feature described below. - -## Polling Expectations - -In Nimble, it's easy to make expectations on values that are updated -asynchronously. Just use `toEventually` or `toEventuallyNot`: - -```swift -// Swift -DispatchQueue.main.async { - 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. - -### Using Polling Expectations in Async Tests - -You can easily use `toEventually` or `toEventuallyNot` in async contexts as -well. You only need to add an `await` statement to the beginning of the line: - -```swift -// Swift -DispatchQueue.main.async { - ocean.add("dolphins") - ocean.add("whales") -} -await expect(ocean).toEventually(contain("dolphens", "whiles")) -``` - -Starting in Nimble 12, `toEventually` et. al. now also supports async -expectations. For example, the following test is now supported: - -```swift -actor MyActor { - private var counter = 0 - - func access() -> Int { - counter += 1 - return counter - } -} - -let subject = MyActor() -await expect { await subject.access() }.toEventually(equal(2)) -``` - -### Verifying a Matcher will Never or Always Match - -You can also test that a value always or never matches throughout the length of the timeout. Use `toNever` and `toAlways` for this: - -```swift -// Swift -ocean.add("dolphins") -expect(ocean).toAlways(contain("dolphins")) -expect(ocean).toNever(contain("hares")) -``` - -```objc -// Objective-C -[ocean add:@"dolphins"] -expect(ocean).toAlways(contain(@"dolphins")) -expect(ocean).toNever(contain(@"hares")) -``` - -### Waiting for a Callback to be Called - -You can also provide a callback by using the `waitUntil` function: - -```swift -// Swift - -waitUntil { done in - ocean.goFish { success in - expect(success).to(beTrue()) - done() - } -} -``` - -```objc -// Objective-C - -waitUntil(^(void (^done)(void)){ - [ocean goFishWithHandler:^(BOOL success){ - expect(success).to(beTrue()); - done(); - }]; -}); -``` - -`waitUntil` also optionally takes a timeout parameter: - -```swift -// Swift - -waitUntil(timeout: .seconds(10)) { done in - ocean.goFish { success in - expect(success).to(beTrue()) - done() - } -} -``` - -```objc -// Objective-C - -waitUntilTimeout(10, ^(void (^done)(void)){ - [ocean goFishWithHandler:^(BOOL success){ - expect(success).to(beTrue()); - 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. - -### Changing the Timeout and Polling Intervals - -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: .seconds(3)) - -// Evaluate someValue every 0.2 seconds repeatedly until it equals 100, or fails if it timeouts after 5.5 seconds. -expect(someValue).toEventually(equal(100), timeout: .milliseconds(5500), pollInterval: .milliseconds(200)) -``` - -```objc -// Objective-C - -// Waits three seconds for ocean to contain "starfish": -expect(ocean).withTimeout(3).toEventually(contain(@"starfish")); -``` - -### Changing default Timeout and Poll Intervals - -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.PollingDefaults.timeout = .seconds(5) - -// Slow the polling interval to 0.1 seconds: -Nimble.PollingDefaults.pollInterval = .milliseconds(100) -``` - -You can set these globally at test startup in two ways: - -#### Quick - -If you use [Quick](https://github.com/Quick/Quick), add a [`QuickConfiguration` subclass](https://github.com/Quick/Quick/blob/main/Documentation/en-us/ConfiguringQuick.md) which sets your desired `PollingDefaults`. - -```swift -import Quick -import Nimble - -class PollingConfiguration: QuickConfiguration { - override class func configure(_ configuration: QCKConfiguration) { - Nimble.PollingDefaults.timeout = .seconds(5) - Nimble.PollingDefaults.pollInterval = .milliseconds(100) - } -} -``` - -#### XCTest - -If you use [XCTest](https://developer.apple.com/documentation/xctest), add an object that conforms to [`XCTestObservation`](https://developer.apple.com/documentation/xctest/xctestobservation) and implement [`testBundleWillStart(_:)`](https://developer.apple.com/documentation/xctest/xctestobservation/1500772-testbundlewillstart). - -Additionally, you will need to register this observer with the [`XCTestObservationCenter`](https://developer.apple.com/documentation/xctest/xctestobservationcenter) at test startup. To do this, set the `NSPrincipalClass` key in your test bundle's Info.plist and implement a class with that same name. - -For example - -```xml - - - - - - - NSPrincipalClass - MyTests.TestSetup - - -``` - -```swift -// TestSetup.swift -import XCTest -import Nimble - -@objc -class TestSetup: NSObject { - override init() { - XCTestObservationCenter.shared.register(PollingConfigurationTestObserver()) - } -} - -class PollingConfigurationTestObserver: NSObject, XCTestObserver { - func testBundleWillStart(_ testBundle: Bundle) { - Nimble.PollingDefaults.timeout = .seconds(5) - Nimble.PollingDefaults.pollInterval = .milliseconds(100) - } -} -``` - -In Linux, you can implement `LinuxMain` to set the PollingDefaults before calling `XCTMain`. - -## 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 or can be converted into - an `NSObject` equivalent: - - ```objc - // Objective-C - - @import Nimble; - - expect(@(1 + 1)).to(equal(@2)); - expect(@"Hello world").to(contain(@"world")); - - // Boxed as NSNumber * - expect(2).to(equal(2)); - expect(1.2).to(beLessThan(2.0)); - expect(true).to(beTruthy()); - - // Boxed as NSString * - expect("Hello world").to(equal("Hello world")); - - // Boxed as NSRange - expect(NSMakeRange(1, 10)).to(equal(NSMakeRange(1, 10))); - ``` - -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()); - ``` - -The following types are currently converted to an `NSObject` type: - - - **C Numeric types** are converted to `NSNumber *` - - `NSRange` is converted to `NSValue *` - - `char *` is converted to `NSString *` - -For the following matchers: - -- `equal` -- `beGreaterThan` -- `beGreaterThanOrEqual` -- `beLessThan` -- `beLessThanOrEqual` -- `beCloseTo` -- `beTrue` -- `beFalse` -- `beTruthy` -- `beFalsy` -- `haveCount` - - -If you would like to see more, [file an issue](https://github.com/Quick/Nimble/issues). - -## 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. - -# Using `require` to demand that a matcher pass before continuing - -Nimble 13.1 added the `require` dsl to complement `expect`. `require` -looks similar to `expect` and works with matchers just like `expect` does. The -difference is that `require` requires that the matcher passes - if the matcher -doesn't pass, then `require` will throw an error. Additionally, if `require` -does pass, then it'll return the result of running the expression. - -For example, in testing a function that returns an array, you might need to -first guarantee that there are exactly 3 items in the array before continuing -to assert on it. Instead of writing code that needlessly duplicates an assertion -and a conditional like so: - -```swift -let collection = myFunction() -expect(collection).to(haveCount(3)) -guard collection.count == 3 else { return } -// ... -``` - -You can replace that with: - -```swift -let collection = try require(myFunction()).to(haveCount(3)) -// ... -``` - -## Polling with `require`. - -Because `require` does everything you can do with `expect`, you can also use -`require` to [poll matchers](#polling-expectations) using `toEventually`, -`eventuallyTo`, `toEventuallyNot`, `toNotEventually`, `toNever`, `neverTo`, -`toAlways`, and `alwaysTo`. These work exactly the same as they do when using -`expect`, except that they throw if they fail, and they return the value of the -expression when they pass. - -## Using `require` with Async expressions and Async matchers - -`require` also works with both async expressions -(`require { await someExpression() }.to(...)`), and async matchers -(`require().to(someAsyncMatcher())`). - -Note that to prevent compiler confusion, -you cannot use `require` with async autoclosures. That is, -`require(await someExpression())` will not compile. You can instead either -make the closure explicit (`require { await someExpression() }`), or use the -`requirea` function, which does accept autoclosures. -Similarly, if you ever wish to use the sync version of `require` when the -compiler is trying to force you to use the async version, you can use the -`requires` function, which only allows synchronous expressions. - -## Using `unwrap` to replace `require(...).toNot(beNil())` - -It's very common to require that a value not be nil. Instead of writing -`try require(...).toNot(beNil())`, Nimble provides the `unwrap` function. This -expression throws an error if the expression evaluates to nil, or returns the -non-nil result when it passes. For example: - -```swift -let value = try unwrap(nil as Int?) // throws -let value = try unwrap(1 as Int?) // returns 1 -``` - -Additionally, there is also the `pollUnwrap` function, which aliases to -`require(...).toEventuallyNot(beNil())`. This is extremely useful for verifying -that a value that is updated on a background thread was eventually set to a -non-nil value. - -Note: As with `require`, there are `unwraps`, `unwrapa`, `pollUnwraps`, and -`pollUnwrapa` variants for allowing you to use autoclosures specifically with -synchronous or asynchronous code. - -## Throwing a Custom Error from Require - -By default, if the matcher fails in a `require`, then a `RequireError` will be -thrown. You can override this behavior and throw a custom error by passing a -non-nil `Error` value to the `customError` parameter: - -```swift -try require(1).to(equal(2)) // throws a `RequireError` -try require(customError: MyCustomError(), 1).to(equal(2)) // throws a `MyCustomError` -``` - -# Built-in Matcher Functions - -Nimble includes a wide variety of matcher functions. - -## Type Checking - -Nimble supports checking the type membership of any kind of object, whether -Objective-C conformant or not: - -```swift -// Swift - -protocol SomeProtocol{} -class SomeClassConformingToProtocol: SomeProtocol{} -struct SomeStructConformingToProtocol: SomeProtocol{} - -// The following tests pass -expect(1).to(beAKindOf(Int.self)) -expect("turtle").to(beAKindOf(String.self)) - -let classObject = SomeClassConformingToProtocol() -expect(classObject).to(beAKindOf(SomeProtocol.self)) -expect(classObject).to(beAKindOf(SomeClassConformingToProtocol.self)) -expect(classObject).toNot(beAKindOf(SomeStructConformingToProtocol.self)) - -let structObject = SomeStructConformingToProtocol() -expect(structObject).to(beAKindOf(SomeProtocol.self)) -expect(structObject).to(beAKindOf(SomeStructConformingToProtocol.self)) -expect(structObject).toNot(beAKindOf(SomeClassConformingToProtocol.self)) -``` - -```objc -// Objective-C - -// The following tests pass -NSMutableArray *array = [NSMutableArray array]; -expect(array).to(beAKindOf([NSArray class])); -expect(@1).toNot(beAKindOf([NSNull class])); -``` - -Objects can be tested for their exact types using the `beAnInstanceOf` matcher: - -```swift -// Swift - -protocol SomeProtocol{} -class SomeClassConformingToProtocol: SomeProtocol{} -struct SomeStructConformingToProtocol: SomeProtocol{} - -// Unlike the 'beKindOf' matcher, the 'beAnInstanceOf' matcher only -// passes if the object is the EXACT type requested. The following -// tests pass -- note its behavior when working in an inheritance hierarchy. -expect(1).to(beAnInstanceOf(Int.self)) -expect("turtle").to(beAnInstanceOf(String.self)) - -let classObject = SomeClassConformingToProtocol() -expect(classObject).toNot(beAnInstanceOf(SomeProtocol.self)) -expect(classObject).to(beAnInstanceOf(SomeClassConformingToProtocol.self)) -expect(classObject).toNot(beAnInstanceOf(SomeStructConformingToProtocol.self)) - -let structObject = SomeStructConformingToProtocol() -expect(structObject).toNot(beAnInstanceOf(SomeProtocol.self)) -expect(structObject).to(beAnInstanceOf(SomeStructConformingToProtocol.self)) -expect(structObject).toNot(beAnInstanceOf(SomeClassConformingToProtocol.self)) -``` - -## 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 -``` - -It is important to remember that `beIdenticalTo` only makes sense when comparing -types with reference semantics, which have a notion of identity. In Swift, -that means types that are defined as a `class`. - -This matcher will not work when comparing types with value semantics such as -those defined as a `struct` or `enum`. If you need to compare two value types, -consider what it means for instances of your type to be identical. This may mean -comparing individual properties or, if it makes sense to do so, conforming your type -to `Equatable` and using 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 conform to `FloatingPoint`. - -## 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 Boolean 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 Boolean 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 Boolean 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 Boolean false): -expect(actual).to(beFalse()); - -// Passes if 'actual' is nil: -expect(actual).to(beNil()); -``` - -## Swift Assertions - -If you're using Swift, you can use the `throwAssertion` matcher to check if an assertion is thrown (e.g. `fatalError()`). This is made possible by [@mattgallagher](https://github.com/mattgallagher)'s [CwlPreconditionTesting](https://github.com/mattgallagher/CwlPreconditionTesting) library. - -```swift -// Swift - -// Passes if 'somethingThatThrows()' throws an assertion, -// such as by calling 'fatalError()' or if a precondition fails: -expect { try somethingThatThrows() }.to(throwAssertion()) -expect { () -> Void in fatalError() }.to(throwAssertion()) -expect { precondition(false) }.to(throwAssertion()) - -// Passes if throwing an NSError is not equal to throwing an assertion: -expect { throw NSError(domain: "test", code: 0, userInfo: nil) }.toNot(throwAssertion()) - -// Passes if the code after the precondition check is not run: -var reachedPoint1 = false -var reachedPoint2 = false -expect { - reachedPoint1 = true - precondition(false, "condition message") - reachedPoint2 = true -}.to(throwAssertion()) - -expect(reachedPoint1) == true -expect(reachedPoint2) == false -``` - -Notes: - -* This feature is only available in Swift. -* The tvOS simulator is supported, but using a different mechanism, requiring you to turn off the `Debug executable` scheme setting for your tvOS scheme's Test configuration. - -## Swift Error Handling - -You can use the `throwError` matcher to check if an error is thrown. - -```swift -// Swift - -// Passes if 'somethingThatThrows()' throws an 'Error': -expect { try somethingThatThrows() }.to(throwError()) - -// Passes if 'somethingThatThrows()' throws an error within a particular domain: -expect { try somethingThatThrows() }.to(throwError { (error: Error) in - expect(error._domain).to(equal(NSCocoaErrorDomain)) -}) - -// Passes if 'somethingThatThrows()' throws a particular error enum case: -expect { try somethingThatThrows() }.to(throwError(NSCocoaError.PropertyListReadCorruptError)) - -// Passes if 'somethingThatThrows()' throws an error of a particular type: -expect { try somethingThatThrows() }.to(throwError(errorType: NimbleError.self)) -``` - -When working directly with `Error` values, using the `matchError` matcher -allows you to perform certain checks on the error itself without having to -explicitly cast the error. - -The `matchError` matcher allows you to check whether or not the error: - -- is the same _type_ of error you are expecting. -- represents a particular error value that you are expecting. - -This can be useful when using `Result` or `Promise` types, for example. - -```swift -// Swift - -let actual: Error = ... - -// Passes if 'actual' represents any error value from the NimbleErrorEnum type: -expect(actual).to(matchError(NimbleErrorEnum.self)) - -// Passes if 'actual' represents the case 'timeout' from the NimbleErrorEnum type: -expect(actual).to(matchError(NimbleErrorEnum.timeout)) - -// Passes if 'actual' contains an NSError equal to the one provided: -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 which passes expectations defined in the given closure: -// (in this case, if the exception's 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 defined in the given 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 empty (i.e. 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 empty (i.e. 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). - -For code that returns collections of complex objects without a strict -ordering, there is the `containElementSatisfying` matcher: - -```swift -// Swift - -struct Turtle { - let color: String -} - -let turtles: [Turtle] = functionThatReturnsSomeTurtlesInAnyOrder() - -// This set of matchers passes regardless of whether the array is -// [{color: "blue"}, {color: "green"}] or [{color: "green"}, {color: "blue"}]: - -expect(turtles).to(containElementSatisfying({ turtle in - return turtle.color == "green" -})) -expect(turtles).to(containElementSatisfying({ turtle in - return turtle.color == "blue" -}, "that is a turtle with color 'blue'")) - -// The second matcher will incorporate the provided string in the error message -// should it fail -``` - -Note: in Swift, `containElementSatisfying` also has a variant that takes in an -async function. - -```objc -// Objective-C - -@interface Turtle : NSObject -@property (nonatomic, readonly, nonnull) NSString *color; -@end - -@implementation Turtle -@end - -NSArray * __nonnull turtles = functionThatReturnsSomeTurtlesInAnyOrder(); - -// This set of matchers passes regardless of whether the array is -// [{color: "blue"}, {color: "green"}] or [{color: "green"}, {color: "blue"}]: - -expect(turtles).to(containElementSatisfying(^BOOL(id __nonnull object) { - return [[turtle color] isEqualToString:@"green"]; -})); -expect(turtles).to(containElementSatisfying(^BOOL(id __nonnull object) { - return [[turtle color] isEqualToString:@"blue"]; -})); -``` - -For asserting on if the given `Comparable` value is inside of a `Range`, use the `beWithin` matcher. - -```swift -// Swift - -// Passes if 5 is within the range 1 through 10, inclusive -expect(5).to(beWithin(1...10)) - -// Passes if 5 is not within the range 2 through 4. -expect(5).toNot(beWithin(2..<5)) -``` - -## Strings - -```swift -// Swift - -// Passes if 'actual' contains 'substring': -expect(actual).to(contain(substring)) - -// Passes if 'actual' begins with 'prefix': -expect(actual).to(beginWith(prefix)) - -// Passes if 'actual' ends with 'suffix': -expect(actual).to(endWith(suffix)) - -// Passes if 'actual' represents the 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': -expect(actual).to(contain(expected)); - -// Passes if 'actual' begins with 'prefix': -expect(actual).to(beginWith(prefix)); - -// Passes if 'actual' ends with 'suffix': -expect(actual).to(endWith(suffix)); - -// Passes if 'actual' represents the empty string, "": -expect(actual).to(beEmpty()); - -// Passes if 'actual' matches the regular expression defined in 'expected': -expect(actual).to(match(expected)) -``` - -## Collection Elements - -Nimble provides a means to check that all elements of a collection pass a given expectation. - -### Swift - -In Swift, the collection must be an instance of a type conforming to -`Sequence`. - -```swift -// Swift - -// Providing a custom function: -expect([1, 2, 3, 4]).to(allPass { $0 < 5 }) - -// Composing the expectation with another matcher: -expect([1, 2, 3, 4]).to(allPass(beLessThan(5))) -``` - -There are also variants of `allPass` that check against async matchers, and -that take in async functions: - -```swift -// Swift - -// Providing a custom function: -expect([1, 2, 3, 4]).to(allPass { await asyncFunctionReturningBool($0) }) - -// Composing the expectation with another matcher: -expect([1, 2, 3, 4]).to(allPass(someAsyncMatcher())) -``` - -### Objective-C - -In Objective-C, the collection must be an instance of a type which implements -the `NSFastEnumeration` protocol, and whose elements are instances of a type -which subclasses `NSObject`. - -Additionally, unlike in Swift, there is no override to specify a custom -matcher function. - -```objc -// Objective-C - -expect(@[@1, @2, @3, @4]).to(allPass(beLessThan(@5))); -``` - -## Collection Count - -```swift -// Swift - -// Passes if 'actual' contains the 'expected' number of elements: -expect(actual).to(haveCount(expected)) - -// Passes if 'actual' does _not_ contain the 'expected' number of elements: -expect(actual).notTo(haveCount(expected)) -``` - -```objc -// Objective-C - -// Passes if 'actual' contains the 'expected' number of elements: -expect(actual).to(haveCount(expected)) - -// Passes if 'actual' does _not_ contain the 'expected' number of elements: -expect(actual).notTo(haveCount(expected)) -``` - -For Swift, the actual value must be an instance of a type conforming to `Collection`. -For example, instances of `Array`, `Dictionary`, or `Set`. - -For Objective-C, the actual value must be one of the following classes, or their subclasses: - - - `NSArray`, - - `NSDictionary`, - - `NSSet`, or - - `NSHashTable`. - -## Notifications - -```swift -// Swift -let testNotification = Notification(name: Notification.Name("Foo"), object: nil) - -// Passes if the closure in expect { ... } posts a notification to the default -// notification center. -expect { - NotificationCenter.default.post(testNotification) -}.to(postNotifications(equal([testNotification]))) - -// Passes if the closure in expect { ... } posts a notification to a given -// notification center -let notificationCenter = NotificationCenter() -expect { - notificationCenter.post(testNotification) -}.to(postNotifications(equal([testNotification]), from: notificationCenter)) - -// Passes if the closure in expect { ... } posts a notification with the provided names to a given -// notification center. Make sure to use this when running tests on Catalina, -// using DistributedNotificationCenter as there is currently no way -// of observing notifications without providing specific names. -let distributedNotificationCenter = DistributedNotificationCenter() -expect { - distributedNotificationCenter.post(testNotification) -}.toEventually(postDistributedNotifications(equal([testNotification]), - from: distributedNotificationCenter, - names: [testNotification.name])) -``` - -> This matcher is only available in Swift. - -## Result - -```swift -// Swift -let aResult: Result = .success("Hooray") - -// passes if result is .success -expect(aResult).to(beSuccess()) - -// passes if result value is .success and validates Success value -expect(aResult).to(beSuccess { value in - expect(value).to(equal("Hooray")) -}) - -// passes if the result value is .success and if the Success value matches -// the passed-in matcher (in this case, `equal`) -expect(aResult).to(beSuccess(equal("Hooray"))) - -// passes if the result value is .success and if the Success value equals -// the passed-in value (only available when the Success value is Equatable) -expect(aResult).to(beSuccess("Hooray")) - - -enum AnError: Error { - case somethingHappened -} -let otherResult: Result = .failure(.somethingHappened) - -// passes if result is .failure -expect(otherResult).to(beFailure()) - -// passes if result value is .failure and validates error -expect(otherResult).to(beFailure { error in - expect(error).to(matchError(AnError.somethingHappened)) -}) - -// passes if the result value is .failure and if the Failure value matches -// the passed-in matcher (in this case, `matchError`) -expect(otherResult).to(beFailure(matchError(AnError.somethingHappened))) -``` - -> This matcher is only available in Swift. - -## Matching a value to any of a group of matchers - -```swift -// 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)) -``` - -Note: In swift, you can mix and match synchronous and asynchronous matchers -using by `satisfyAnyOf`/`||`. - -```objc -// Objective-C - -// 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. - -## Custom Validation - -```swift -// Swift - -// passes if .succeeded is returned from the closure -expect { - guard case .enumCaseWithAssociatedValueThatIDontCareAbout = actual else { - return .failed(reason: "wrong enum case") - } - - return .succeeded -}.to(succeed()) - -// passes if .failed is returned from the closure -expect { - guard case .enumCaseWithAssociatedValueThatIDontCareAbout = actual else { - return .failed(reason: "wrong enum case") - } - - return .succeeded -}.notTo(succeed()) -``` - -The `String` provided with `.failed()` is shown when the test fails. - -When using `toEventually()` be careful not to make state changes or run process intensive code since this closure will be ran many times. - -## Mapping a Value to Another Value - -Sometimes, you only want to match against a property or group of properties. -For example, if you wanted to check that only one or a few properties of a value -are equal to something else. For this, use the `map` matcher to convert a value -to another value and check it with a matcher. - -```swift -// Swift - -expect(someValue).to(map(\.someProperty, equal(expectedProperty))) - -// or, for checking multiple different properties: - -expect(someValue).to(satisfyAllOf( - map(\.firstProperty, equal(expectedFirstProperty)), - map({ $0.secondProperty }, equal(expectedSecondProperty)) -)) -``` - -The `map` matcher takes in either a closure or a keypath literal, and a matcher -to compose with. It also works with async closures and async matchers. - -In most cases, it is simpler and easier to not use map (that is, prefer -`expect(someValue.property).to(equal(1))` to -`expect(someValue).to(map(\.property, equal(1)))`). But `map` is incredibly -useful when combined with `satisfyAllOf`/`satisfyAnyOf`, especially for checking -a value that cannot conform to `Equatable` (or you don't want to make it -conform to `Equatable`). However, if you find yourself reusing `map` many times -to do a fuzzy-equals of a given type, you will find writing a custom matcher to -be much easier to use and maintain. - -# Writing Your Own Matchers - -In Nimble, matchers are Swift functions that take an expected -value and return a `Matcher` closure. Take `equal`, for example: - -```swift -// Swift - -public func equal(expectedValue: T?) -> Matcher { - // Can be shortened to: - // Matcher { actual in ... } - // - // But shown with types here for clarity. - return Matcher { (actualExpression: Expression) throws -> MatcherResult in - let msg = ExpectationMessage.expectedActualValueTo("equal <\(expectedValue)>") - if let actualValue = try actualExpression.evaluate() { - return MatcherResult( - bool: actualValue == expectedValue!, - message: msg - ) - } else { - return MatcherResult( - status: .fail, - message: msg.appendedBeNilHint() - ) - } - } -} -``` - -The return value of a `Matcher` closure is a `MatcherResult` that indicates -whether the actual value matches the expectation and what error message to -display on failure. - -> The actual `equal` matcher function does not match when - `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/main/Sources/Nimble/Matchers) -to see how Nimble's built-in set of matchers are implemented. You can -also check out the tips below. - -## MatcherResult - -`MatcherResult` is the return struct that `Matcher` return to indicate -success and failure. A `MatcherResult` is made up of two values: -`MatcherStatus` and `ExpectationMessage`. - -Instead of a boolean, `MatcherStatus` captures a trinary set of values: - -```swift -// Swift - -public enum MatcherStatus { -// The matcher "passes" with the given expression -// eg - expect(1).to(equal(1)) -case matches - -// The matcher "fails" with the given expression -// eg - expect(1).toNot(equal(1)) -case doesNotMatch - -// The matcher never "passes" with the given expression, even if negated -// eg - expect(nil as Int?).toNot(equal(1)) -case fail - -// ... -} -``` - -Meanwhile, `ExpectationMessage` provides messaging semantics for error reporting. - -```swift -// Swift - -public indirect enum ExpectationMessage { -// Emits standard error message: -// eg - "expected to , got " -case expectedActualValueTo(/* message: */ String) - -// Allows any free-form message -// eg - "" -case fail(/* message: */ String) - -// ... -} -``` - -Matchers should usually depend on either `.expectedActualValueTo(..)` or -`.fail(..)` when reporting errors. Special cases can be used for the other enum -cases. - -Finally, if your Matcher utilizes other Matchers, you can utilize -`.appended(details:)` and `.appended(message:)` methods to annotate an existing -error with more details. - -A common message to append is failing on nils. For that, `.appendedBeNilHint()` -can be used. - -## 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() -> Matcher { - // Matcher.simpleNilable(..) automatically generates ExpectationMessage for - // us based on the string we provide to it. Also, the 'Nilable' postfix indicates - // that this Matcher supports matching against nil actualExpressions, instead of - // always resulting in a MatcherStatus.fail result -- which is true for - // Matcher.simple(..) - return Matcher.simpleNilable("be nil") { actualExpression in - let actualValue = try actualExpression.evaluate() - return MatcherStatus(bool: actualValue == 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. - -## 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) -> Matcher { - return Matcher.simple("have description") { actual in - return MatcherStatus(bool: actual.evaluate().description == description) - } -} -``` - -## Customizing Failure Messages - -When using `Matcher.simple(..)` or `Matcher.simpleNilable(..)`, Nimble -outputs the following failure message when an expectation fails: - -```swift -// where `message` is the first string argument and -// `actual` is the actual value received in `expect(..)` -"expected to \(message), got <\(actual)>" -``` - -You can customize this message by modifying the way you create a `Matcher`. - -### Basic Customization - -For slightly more complex error messaging, receive the created failure message -with `Matcher.define(..)`: - -```swift -// Swift - -public func equal(_ expectedValue: T?) -> Matcher { - return Matcher.define("equal <\(stringify(expectedValue))>") { actualExpression, msg in - let actualValue = try actualExpression.evaluate() - let matches = actualValue == expectedValue && expectedValue != nil - if expectedValue == nil || actualValue == nil { - if expectedValue == nil && actualValue != nil { - return MatcherResult( - status: .fail, - message: msg.appendedBeNilHint() - ) - } - return MatcherResult(status: .fail, message: msg) - } - return MatcherResult(bool: matches, message: msg) - } -} -``` - -In the example above, `msg` is defined based on the string given to -`Matcher.define`. The code looks akin to: - -```swift -// Swift - -let msg = ExpectationMessage.expectedActualValueTo("equal <\(stringify(expectedValue))>") -``` - -### Full Customization - -To fully customize the behavior of the Matcher, use the overload that expects -a `MatcherResult` to be returned. - -Along with `MatcherResult`, there are other `ExpectationMessage` enum values you can use: - -```swift -public indirect enum ExpectationMessage { -// Emits standard error message: -// eg - "expected to , got " -case expectedActualValueTo(/* message: */ String) - -// Allows any free-form message -// eg - "" -case fail(/* message: */ String) - -// Emits standard error message with a custom actual value instead of the default. -// eg - "expected to , got " -case expectedCustomValueTo(/* message: */ String, /* actual: */ String) - -// Emits standard error message without mentioning the actual value -// eg - "expected to " -case expectedTo(/* message: */ String) - -// ... -} -``` - -For matchers that compose other matchers, there are a handful of helper -functions to annotate messages. - -`appended(message: String)` is used to append to the original failure message: - -```swift -// produces "expected to be true, got (use beFalse() for inverse)" -// appended message do show up inline in Xcode. -.expectedActualValueTo("be true").appended(message: " (use beFalse() for inverse)") -``` - -For a more comprehensive message that spans multiple lines, use -`appended(details: String)` instead: - -```swift -// produces "expected to be true, got \n\nuse beFalse() for inverse\nor use beNil()" -// details do not show inline in Xcode, but do show up in test logs. -.expectedActualValueTo("be true").appended(details: "use beFalse() for inverse\nor use beNil()") -``` - -## Asynchronous Matchers - -To write matchers against async expressions, return an instance of -`AsyncMatcher`. The closure passed to `AsyncMatcher` is async, and the -expression you evaluate is also asynchronous and needs to be awaited on. - -```swift -// Swift - -actor CallRecorder { - private(set) var calls: [Arguments] = [] - - func record(call: Arguments) { - calls.append(call) - } -} - -func beCalled(with arguments: Argument) -> AsyncMatcher> { - AsyncMatcher { (expression: AsyncExpression>) in - let message = ExpectationMessage.expectedActualValueTo("be called with \(arguments)") - guard let calls = try await expression.evaluate()?.calls else { - return MatcherResult(status: .fail, message: message.appendedBeNilHint()) - } - - return MatcherResult(bool: calls.contains(args), message: message.appended(details: "called with \(calls)")) - } -} -``` - -In this example, we created an actor to act as an object to record calls to an -async function. Then, we created the `beCalled(with:)` matcher to check if the -actor has received a call with the given arguments. - -## Supporting Objective-C - -To use a custom matcher written in Swift from Objective-C, you'll have -to extend the `NMBMatcher` class, adding a new class method for your -custom matcher. The example below defines the class method -`+[NMBMatcher beNilMatcher]`: - -```swift -// Swift - -extension NMBMatcher { - @objc public class func beNilMatcher() -> NMBMatcher { - return NMBMatcher { actualExpression in - return try beNil().satisfies(actualExpression).toObjectiveC() - } - } -} -``` - -The above allows you to use the matcher from Objective-C: - -```objc -// Objective-C - -expect(actual).to([NMBMatcher beNilMatcher]()); -``` - -To make the syntax easier to use, define a C function that calls the -class method: - -```objc -// Objective-C - -FOUNDATION_EXPORT NMBMatcher *beNil() { - return [NMBMatcher 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 `Matcher.define` or `Matcher.simple`. -Using those factory methods will automatically generate expected value failure messages when they're nil. - -```swift -public func beginWith(_ startingElement: S.Element) -> Matcher where S.Element: Equatable { - return Matcher.simple("begin with <\(startingElement)>") { actualExpression in - guard let actualValue = try actualExpression.evaluate() else { return .fail } - - var actualGenerator = actualValue.makeIterator() - return MatcherStatus(bool: actualGenerator.next() == startingElement) - } -} - -extension NMBMatcher { - @objc public class func beginWithMatcher(_ expected: Any) -> NMBMatcher { - return NMBMatcher { actualExpression in - let actual = try actualExpression.evaluate() - let expr = actualExpression.cast { $0 as? NMBOrderedCollection } - return try beginWith(expected).satisfies(expr).toObjectiveC() - } - } -} -``` +Nimble's documentation is now lives in [Sources/Nimble/Nimble.docc](Sources/Nimble/Nimble.docc) +as a Documentation Catalog. You can easily browse it [quick.github.io/Nimble](https://quick.github.io/Nimble/documentation/nimble). # Installing Nimble @@ -2011,46 +31,10 @@ extension NMBMatcher { Quick and Nimble, follow [the installation instructions in the Quick Documentation](https://github.com/Quick/Quick/blob/main/Documentation/en-us/InstallingQuick.md). -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 macOS, iOS or tvOS 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 macOS, iOS, tvOS or watchOS 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' -end -``` - -Finally run `pod install`. +Nimble can currently be installed in one of four ways: Swift Package Manager, +CocoaPods, Carthage or with git submodules. -## Installing Nimble via Swift Package Manager +## Swift Package Manager ### Xcode @@ -2067,7 +51,7 @@ To use Nimble with Swift Package Manager to test your applications, add Nimble to your `Package.Swift` and link it with your test target: ```swift -// swift-tools-version:5.5 +// swift-tools-version:5.7 import PackageDescription @@ -2078,7 +62,7 @@ let package = Package( ], dependencies: [ // ... - .package(url: "https://github.com/Quick/Nimble.git", from: "12.0.0"), + .package(url: "https://github.com/Quick/Nimble.git", from: "13.0.0"), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. @@ -2095,44 +79,55 @@ let package = Package( Please note that if you install Nimble using Swift Package Manager, then `raiseException` is not available. -## Using Nimble without XCTest +## CocoaPods + +To use Nimble in CocoaPods to test your macOS, iOS, tvOS or watchOS applications, add +Nimble to your podfile and add the ```use_frameworks!``` line to enable Swift +support for CocoaPods. -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. +```ruby +platform :ios, '13.0' -1. Create a custom assertion handler and assign an instance of it to the - global `NimbleAssertionHandler` variable. For example: +source 'https://github.com/CocoaPods/Specs.git' -```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() +# Whatever pods you need for your app go here + +target 'YOUR_APP_NAME_HERE_Tests', :exclusive => true do + use_frameworks! + pod 'Nimble' +end ``` -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: +Finally run `pod install`. + +## Carthage + +To use Nimble in Carthage to test your macOS, iOS, tvOS or watchOS applications, +add Nimble to your `Cartfile.private`: + ``` -rm "${SWIFT_STDLIB_TOOL_DESTINATION_DIR}/libswiftXCTest.dylib" +github "Quick/Nimble" ~> 13.2 ``` -You can now use Nimble assertions in your code and handle failures as you see -fit. +Then follow the rest of the [Carthage Quick Start](https://github.com/carthage/carthage/?tab=readme-ov-file#quick-start) +and link Nimble with your unit tests. + +## Git Submodules + +To use Nimble as a submodule to test your macOS, iOS or tvOS 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. -## Privacy Statement +# Privacy Statement Nimble is a library that is only used for testing and should never be included in the binary submitted to App Store Connect. diff --git a/Sources/Nimble/Nimble.docc/Guides/Background.md b/Sources/Nimble/Nimble.docc/Guides/Background.md new file mode 100644 index 000000000..bd66320a6 --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Guides/Background.md @@ -0,0 +1,29 @@ +# 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 check expressions that change over time.** XCTest forces you to write + a lot of boilerplate code. + +Nimble addresses these concerns. diff --git a/Sources/Nimble/Nimble.docc/Guides/Concurrency.md b/Sources/Nimble/Nimble.docc/Guides/Concurrency.md new file mode 100644 index 000000000..6f241b287 --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Guides/Concurrency.md @@ -0,0 +1,64 @@ +# Swift Concurrency (Async/Await) Support + +Nimble makes it easy to await for an async function to complete. + +Simply pass the async function in to `expect`: + +```swift +// Swift +await expect { await aFunctionReturning1() }.to(equal(1)) +``` + +The async function is awaited on first, before passing it to the matcher. This +enables the matcher to run synchronous code like before, without caring about +whether the value it's processing was abtained async or not. + +Async support is Swift-only, and it requires that you execute the test in an +async context. For XCTest, this is as simple as marking your test function with +`async`. If you use Quick, all tests in Quick 6 are executed in an async context. +In Quick 7 and later, only tests that are in an `AsyncSpec` subclass will be +executed in an async context. + +To avoid a compiler errors when using synchronous `expect` in asynchronous contexts, +`expect` with async expressions does not support autoclosures. However, the `expecta` +(expect async) function is provided as an alternative, which does support autoclosures. + +```swift +// Swift +await expecta(await aFunctionReturning1()).to(equal(1))) +``` + +Similarly, if you're ever in a situation where you want to force the compiler to +produce a `SyncExpectation`, you can use the `expects` (expect sync) function to +produce a `SyncExpectation`. Like so: + +```swift +// Swift +expects(someNonAsyncFunction()).to(equal(1))) + +expects(await someAsyncFunction()).to(equal(1)) // Compiler error: 'async' call in an autoclosure that does not support concurrency +``` + +### Async Matchers + +In addition to asserting on async functions prior to passing them to a +synchronous matcher, you can also write matchers that directly take in an +async value. These are called `AsyncMatcher`s. This is most obviously useful +when directly asserting against an actor. In addition to writing your own +async matchers, Nimble currently ships with async versions of the following +matchers: + +- ``allPass`` +- ``containElementSatisfying`` +- ``satisfyAllOf`` and the ``&&`` operator overload accept both `AsyncMatcher` and + synchronous ``Matcher``s. +- ``satisfyAnyOf`` and the ``||`` operator overload accept both ``AsyncMatcher`` and + synchronous ``Matcher``s. + +Note: Swift Concurrency support is different than the `toEventually`/`toEventuallyNot` feature described in . +Polling Expectations works by continuously polling +the `Expectation` until it passes. As described here, Nimble's Swift +Concurrency support is about waiting for an expression to finish. + +It is certainly possible to use Polling Expectations with async/await, as the +result of a concurrent Expectation can certainly change with time. diff --git a/Sources/Nimble/Nimble.docc/Guides/Expectations.md b/Sources/Nimble/Nimble.docc/Guides/Expectations.md new file mode 100644 index 000000000..ad26d60fe --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Guides/Expectations.md @@ -0,0 +1,196 @@ +# 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 Safety + +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)); +``` diff --git a/Sources/Nimble/Nimble.docc/Guides/ObjectiveC.md b/Sources/Nimble/Nimble.docc/Guides/ObjectiveC.md new file mode 100644 index 000000000..db3042cdc --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Guides/ObjectiveC.md @@ -0,0 +1,81 @@ +# 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 or can be converted into + an `NSObject` equivalent: + + ```objc + // Objective-C + + @import Nimble; + + expect(@(1 + 1)).to(equal(@2)); + expect(@"Hello world").to(contain(@"world")); + + // Boxed as NSNumber * + expect(2).to(equal(2)); + expect(1.2).to(beLessThan(2.0)); + expect(true).to(beTruthy()); + + // Boxed as NSString * + expect("Hello world").to(equal("Hello world")); + + // Boxed as NSRange + expect(NSMakeRange(1, 10)).to(equal(NSMakeRange(1, 10))); + ``` + +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()); + ``` + +The following types are currently converted to an `NSObject` type: + + - **C Numeric types** are converted to `NSNumber *` + - `NSRange` is converted to `NSValue *` + - `char *` is converted to `NSString *` + +For the following matchers: + +- ``equal`` +- ``beGreaterThan`` +- ``beGreaterThanOrEqual`` +- ``beLessThan`` +- ``beLessThanOrEqual`` +- ``beCloseTo`` +- ``beTrue`` +- ``beFalse`` +- ``beTruthy`` +- ``beFalsy`` +- ``haveCount`` + + +If you would like to see more, [file an issue](https://github.com/Quick/Nimble/issues). + +## 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. diff --git a/Sources/Nimble/Nimble.docc/Guides/PollingExpectations.md b/Sources/Nimble/Nimble.docc/Guides/PollingExpectations.md new file mode 100644 index 000000000..53cb624a9 --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Guides/PollingExpectations.md @@ -0,0 +1,290 @@ +# Polling Expectations + +In Nimble, it's easy to make expectations on values that are updated +asynchronously. These are called Polling Expectations, because they work by +continuously polling the Expectation. + +## Forms of Polling Expectations + +There are 4 forms of polling expectations: `toEventually`, +`toEventuallyNot`/`toNotEventually`, `toAlways`/`alwaysTo`, and `toNever`/`neverTo`. +These each have different behaviors for what they expect the matcher to return +until they stop polling. + +For example, `toEventually` will run until the Matcher matches, while `toNever` +will run so long as the Matcher doesn't match. This makes them opposites. + +> Warning: It is a very common mistake to assume that `toEventuallyNot` is the +opposite of `toEventually`. For example, if you're using a [Swift Fakes Spy](https://github.com/Quick/swift-fakes/blob/main/Sources/Fakes/Spy.swift), +you might be used to checking that it is called on a background thread by using +`expect(spy).toEventually(beCalled())`. If you want to check that a spy is not +called during some background behavior, you might be tempted to use `expect(spy).toEventuallyNot(beCalled())`. +All this will do is verify that, by the time the Expectation first runs, the spy +has not been called. At which point, that background behavior might not even have +run. The correct thing is to use `toNever`, as in `expect(spy).toNever(beCalled())`. + +Polling form | Pass Duration | Expected Matcher Result +------------------------------------|---------------|------------------------ +`toEventually` | Until pass | to match +`toEventuallyNot`/`toNotEventually` | Until pass | to not match +`toAlways`/`alwaysTo` | Until fail | to match +`toNever`/`neverTo` | Until fail | to not match + +### Verifying a Matcher will Eventually Match or stop Matching + +To verify that a value eventually matches or stops matching through the length +of the timeout, use `toEventually` or `toEventuallyNot`/`toNotEventually`: + +```swift +// Swift +DispatchQueue.main.async { + 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")); +``` + +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. + +### Verifying a Matcher will Never or Always Match + +You can also test that a value always or never matches throughout the length of the timeout. Use `toNever` and `toAlways` for this: + +```swift +// Swift +ocean.add("dolphins") +expect(ocean).toAlways(contain("dolphins")) +expect(ocean).toNever(contain("hares")) +``` + +```objc +// Objective-C +[ocean add:@"dolphins"] +expect(ocean).toAlways(contain(@"dolphins")) +expect(ocean).toNever(contain(@"hares")) +``` + +### Behaviors of different forms of Polling + +Fundamentally, the behaviors of the different types of polling (`toEventually`, +`toEventuallyNot`, `toAlways`, `toNever`) are about the duration of the polling, +and what they're looking for with regard to the Expectation. + +For example, `toEventually` will run until the Expectation matches, while `toNever` +will run so long as the Expectation dosen't match. This effectively makes them +opposites. + +> Warning: It is a very common mistake to assume that `toEventuallyNot` is the +opposite of `toEventually`. For example, if you're using a [Swift Fakes Spy](https://github.com/Quick/swift-fakes/blob/main/Sources/Fakes/Spy.swift), +you might be used to checking that it is called on a background thread by using +`expect(spy).toEventually(beCalled())`. If you want to check that a spy is not +called during some background behavior, you might be tempted to use `expect(spy).toEventuallyNot(beCalled())`. +All this will do is verify that, by the time the Expectation first runs, the spy +has not been called. At which point, that background behavior might not even have +run. The correct thing is to use `toNever`, as in `expect(spy).toNever(beCalled())`. + +Polling form | Pass Duration | Expected Matcher Result +------------------------------------|---------------|------------------------ +`toEventually` | Until pass | to match +`toEventuallyNot`/`toNotEventually` | Until pass | to not match +`toAlways`/`alwaysTo` | Until fail | to match +`toNever`/`neverTo` | Until fail | to not match + + +### Waiting for a Callback to be Called + +You can also provide a callback by using the `waitUntil` function: + +```swift +// Swift + +waitUntil { done in + ocean.goFish { success in + expect(success).to(beTrue()) + done() + } +} +``` + +```objc +// Objective-C + +waitUntil(^(void (^done)(void)){ + [ocean goFishWithHandler:^(BOOL success){ + expect(success).to(beTrue()); + done(); + }]; +}); +``` + +`waitUntil` also optionally takes a timeout parameter: + +```swift +// Swift + +waitUntil(timeout: .seconds(10)) { done in + ocean.goFish { success in + expect(success).to(beTrue()) + done() + } +} +``` + +```objc +// Objective-C + +waitUntilTimeout(10, ^(void (^done)(void)){ + [ocean goFishWithHandler:^(BOOL success){ + expect(success).to(beTrue()); + 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. + +### Changing the Timeout and Polling Intervals + +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: .seconds(3)) + +// Evaluate someValue every 0.2 seconds repeatedly until it equals 100, or fails if it timeouts after 5.5 seconds. +expect(someValue).toEventually(equal(100), timeout: .milliseconds(5500), pollInterval: .milliseconds(200)) +``` + +```objc +// Objective-C + +// Waits three seconds for ocean to contain "starfish": +expect(ocean).withTimeout(3).toEventually(contain(@"starfish")); +``` + +### Changing default Timeout and Poll Intervals + +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.PollingDefaults.timeout = .seconds(5) + +// Slow the polling interval to 0.1 seconds: +Nimble.PollingDefaults.pollInterval = .milliseconds(100) +``` + +You can set these globally at test startup in two ways: + +#### Quick + +If you use [Quick](https://github.com/Quick/Quick), add a [`QuickConfiguration` subclass](https://github.com/Quick/Quick/blob/main/Documentation/en-us/ConfiguringQuick.md) which sets your desired `PollingDefaults`. + +```swift +import Quick +import Nimble + +class PollingConfiguration: QuickConfiguration { + override class func configure(_ configuration: QCKConfiguration) { + Nimble.PollingDefaults.timeout = .seconds(5) + Nimble.PollingDefaults.pollInterval = .milliseconds(100) + } +} +``` + +#### XCTest + +If you use [XCTest](https://developer.apple.com/documentation/xctest), add an object that conforms to [`XCTestObservation`](https://developer.apple.com/documentation/xctest/xctestobservation) and implement [`testBundleWillStart(_:)`](https://developer.apple.com/documentation/xctest/xctestobservation/1500772-testbundlewillstart). + +Additionally, you will need to register this observer with the [`XCTestObservationCenter`](https://developer.apple.com/documentation/xctest/xctestobservationcenter) at test startup. To do this, set the `NSPrincipalClass` key in your test bundle's Info.plist and implement a class with that same name. + +For example + +```xml + + + + + + + NSPrincipalClass + MyTests.TestSetup + + +``` + +```swift +// TestSetup.swift +import XCTest +import Nimble + +@objc +class TestSetup: NSObject { + override init() { + XCTestObservationCenter.shared.register(PollingConfigurationTestObserver()) + } +} + +class PollingConfigurationTestObserver: NSObject, XCTestObserver { + func testBundleWillStart(_ testBundle: Bundle) { + Nimble.PollingDefaults.timeout = .seconds(5) + Nimble.PollingDefaults.pollInterval = .milliseconds(100) + } +} +``` + +In Linux, you can implement `LinuxMain` to set the PollingDefaults before calling `XCTMain`. + +## Using Polling Expectations in Async Tests + +You can easily use `toEventually` or `toEventuallyNot` in async contexts as +well. You only need to add an `await` statement to the beginning of the line: + +```swift +// Swift +DispatchQueue.main.async { + ocean.add("dolphins") + ocean.add("whales") +} +await expect(ocean).toEventually(contain("dolphens", "whiles")) +``` + +Starting in Nimble 12, `toEventually` et. al. now also supports async +expectations. For example, the following test is now supported: + +```swift +actor MyActor { + private var counter = 0 + + func access() -> Int { + counter += 1 + return counter + } +} + +let subject = MyActor() +await expect { await subject.access() }.toEventually(equal(2)) +``` diff --git a/Sources/Nimble/Nimble.docc/Guides/Require.md b/Sources/Nimble/Nimble.docc/Guides/Require.md new file mode 100644 index 000000000..99f0f3214 --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Guides/Require.md @@ -0,0 +1,82 @@ +# Using `require` to demand that a matcher pass before continuing + +Nimble 13.1 added the ``require`` dsl to complement ``expect``. `require` +looks similar to `expect` and works with matchers just like `expect` does. The +difference is that `require` requires that the matcher passes - if the matcher +doesn't pass, then `require` will throw an error. Additionally, if `require` +does pass, then it'll return the result of running the expression. + +For example, in testing a function that returns an array, you might need to +first guarantee that there are exactly 3 items in the array before continuing +to assert on it. Instead of writing code that needlessly duplicates an assertion +and a conditional like so: + +```swift +let collection = myFunction() +expect(collection).to(haveCount(3)) +guard collection.count == 3 else { return } +// ... +``` + +You can replace that with: + +```swift +let collection = try require(myFunction()).to(haveCount(3)) +// ... +``` + +## Polling with `require`. + +Because `require` does everything you can do with `expect`, you can also use +`require` to using `toEventually`, +`eventuallyTo`, `toEventuallyNot`, `toNotEventually`, `toNever`, `neverTo`, +`toAlways`, and `alwaysTo`. These work exactly the same as they do when using +`expect`, except that they throw if they fail, and they return the value of the +expression when they pass. + +## Using `require` with Async expressions and Async matchers + +`require` also works with both async expressions +(`require { await someExpression() }.to(...)`), and async matchers +(`require().to(someAsyncMatcher())`). + +Note that to prevent compiler confusion, +you cannot use `require` with async autoclosures. That is, +`require(await someExpression())` will not compile. You can instead either +make the closure explicit (`require { await someExpression() }`), or use the +`requirea` function, which does accept autoclosures. +Similarly, if you ever wish to use the sync version of `require` when the +compiler is trying to force you to use the async version, you can use the +`requires` function, which only allows synchronous expressions. + +## Using `unwrap` to replace `require(...).toNot(beNil())` + +It's very common to require that a value not be nil. Instead of writing +`try require(...).toNot(beNil())`, Nimble provides the `unwrap` function. This +expression throws an error if the expression evaluates to nil, or returns the +non-nil result when it passes. For example: + +```swift +let value = try unwrap(nil as Int?) // throws +let value = try unwrap(1 as Int?) // returns 1 +``` + +Additionally, there is also the `pollUnwrap` function, which aliases to +`require(...).toEventuallyNot(beNil())`. This is extremely useful for verifying +that a value that is updated on a background thread was eventually set to a +non-nil value. + +Note: As with `require`, there are `unwraps`, `unwrapa`, `pollUnwraps`, and +`pollUnwrapa` variants for allowing you to use autoclosures specifically with +synchronous or asynchronous code. + +## Throwing a Custom Error from Require + +By default, if the matcher fails in a `require`, then a ``RequireError`` will be +thrown. You can override this behavior and throw a custom error by passing a +non-nil `Error` value to the `customError` parameter: + +```swift +try require(1).to(equal(2)) // throws a `RequireError` +try require(customError: MyCustomError(), 1).to(equal(2)) // throws a `MyCustomError` +``` diff --git a/Sources/Nimble/Nimble.docc/Guides/WritingCustomMatchers.md b/Sources/Nimble/Nimble.docc/Guides/WritingCustomMatchers.md new file mode 100644 index 000000000..b42f3ee4e --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Guides/WritingCustomMatchers.md @@ -0,0 +1,363 @@ +# Writing Your Own Matchers + +In Nimble, matchers are Swift functions that take an expected +value and return a `Matcher` closure. Take `equal`, for example: + +```swift +// Swift + +public func equal(expectedValue: T?) -> Matcher { + // Can be shortened to: + // Matcher { actual in ... } + // + // But shown with types here for clarity. + return Matcher { (actualExpression: Expression) throws -> MatcherResult in + let msg = ExpectationMessage.expectedActualValueTo("equal <\(expectedValue)>") + if let actualValue = try actualExpression.evaluate() { + return MatcherResult( + bool: actualValue == expectedValue!, + message: msg + ) + } else { + return MatcherResult( + status: .fail, + message: msg.appendedBeNilHint() + ) + } + } +} +``` + +The return value of a `Matcher` closure is a `MatcherResult` that indicates +whether the actual value matches the expectation and what error message to +display on failure. + +> The actual `equal` matcher function does not match when + `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/main/Sources/Nimble/Matchers) +to see how Nimble's built-in set of matchers are implemented. You can +also check out the tips below. + +## MatcherResult + +``MatcherResult`` is the return struct that ``Matcher`` returns to indicate +success and failure. A `MatcherResult` is made up of two values: +``MatcherStatus`` and ``ExpectationMessage``. + +Instead of a boolean, `MatcherStatus` captures a trinary set of values: + +```swift +// Swift + +public enum MatcherStatus { +// The matcher "passes" with the given expression +// eg - expect(1).to(equal(1)) +case matches + +// The matcher "fails" with the given expression +// eg - expect(1).toNot(equal(1)) +case doesNotMatch + +// The matcher never "passes" with the given expression, even if negated +// eg - expect(nil as Int?).toNot(equal(1)) +case fail + +// ... +} +``` + +Meanwhile, `ExpectationMessage` provides messaging semantics for error reporting. + +```swift +// Swift + +public indirect enum ExpectationMessage { +// Emits standard error message: +// eg - "expected to , got " +case expectedActualValueTo(/* message: */ String) + +// Allows any free-form message +// eg - "" +case fail(/* message: */ String) + +// ... +} +``` + +Matchers should usually depend on either ``.expectedActualValueTo(_:)`` or +``.fail(_:)`` when reporting errors. Special cases can be used for the other enum +cases. + +Finally, if your Matcher utilizes other Matchers, you can utilize +``.appended(details:)`` and ``.appended(message:)`` methods to annotate an existing +error with more details. + +A common message to append is failing on nils. For that, ``.appendedBeNilHint()`` +can be used. + +## 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() -> Matcher { + // Matcher.simpleNilable(..) automatically generates ExpectationMessage for + // us based on the string we provide to it. Also, the 'Nilable' postfix indicates + // that this Matcher supports matching against nil actualExpressions, instead of + // always resulting in a MatcherStatus.fail result -- which is true for + // Matcher.simple(..) + return Matcher.simpleNilable("be nil") { actualExpression in + let actualValue = try actualExpression.evaluate() + return MatcherStatus(bool: actualValue == 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. + +## 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 `CustomStringConvertible` 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) -> Matcher { + return Matcher.simple("have description") { actual in + return MatcherStatus(bool: actual.evaluate().description == description) + } +} +``` + +## Customizing Failure Messages + +When using `Matcher.simple(..)` or `Matcher.simpleNilable(..)`, Nimble +outputs the following failure message when an expectation fails: + +```swift +// where `message` is the first string argument and +// `actual` is the actual value received in `expect(..)` +"expected to \(message), got <\(actual)>" +``` + +You can customize this message by modifying the way you create a `Matcher`. + +### Basic Customization + +For slightly more complex error messaging, receive the created failure message +with `Matcher.define(..)`: + +```swift +// Swift + +public func equal(_ expectedValue: T?) -> Matcher { + return Matcher.define("equal <\(stringify(expectedValue))>") { actualExpression, msg in + let actualValue = try actualExpression.evaluate() + let matches = actualValue == expectedValue && expectedValue != nil + if expectedValue == nil || actualValue == nil { + if expectedValue == nil && actualValue != nil { + return MatcherResult( + status: .fail, + message: msg.appendedBeNilHint() + ) + } + return MatcherResult(status: .fail, message: msg) + } + return MatcherResult(bool: matches, message: msg) + } +} +``` + +In the example above, `msg` is defined based on the string given to +`Matcher.define`. The code looks akin to: + +```swift +// Swift + +let msg = ExpectationMessage.expectedActualValueTo("equal <\(stringify(expectedValue))>") +``` + +### Full Customization + +To fully customize the behavior of the Matcher, use the overload that expects +a `MatcherResult` to be returned. + +Along with `MatcherResult`, there are other `ExpectationMessage` enum values you can use: + +```swift +public indirect enum ExpectationMessage { +// Emits standard error message: +// eg - "expected to , got " +case expectedActualValueTo(/* message: */ String) + +// Allows any free-form message +// eg - "" +case fail(/* message: */ String) + +// Emits standard error message with a custom actual value instead of the default. +// eg - "expected to , got " +case expectedCustomValueTo(/* message: */ String, /* actual: */ String) + +// Emits standard error message without mentioning the actual value +// eg - "expected to " +case expectedTo(/* message: */ String) + +// ... +} +``` + +For matchers that compose other matchers, there are a handful of helper +functions to annotate messages. + +`appended(message: String)` is used to append to the original failure message: + +```swift +// produces "expected to be true, got (use beFalse() for inverse)" +// appended message do show up inline in Xcode. +.expectedActualValueTo("be true").appended(message: " (use beFalse() for inverse)") +``` + +For a more comprehensive message that spans multiple lines, use +`appended(details: String)` instead: + +```swift +// produces "expected to be true, got \n\nuse beFalse() for inverse\nor use beNil()" +// details do not show inline in Xcode, but do show up in test logs. +.expectedActualValueTo("be true").appended(details: "use beFalse() for inverse\nor use beNil()") +``` + +## Asynchronous Matchers + +To write matchers against async expressions, return an instance of +`AsyncMatcher`. The closure passed to `AsyncMatcher` is async, and the +expression you evaluate is also asynchronous and needs to be awaited on. + +```swift +// Swift + +actor CallRecorder { + private(set) var calls: [Arguments] = [] + + func record(call: Arguments) { + calls.append(call) + } +} + +func beCalled(with arguments: Argument) -> AsyncMatcher> { + AsyncMatcher { (expression: AsyncExpression>) in + let message = ExpectationMessage.expectedActualValueTo("be called with \(arguments)") + guard let calls = try await expression.evaluate()?.calls else { + return MatcherResult(status: .fail, message: message.appendedBeNilHint()) + } + + return MatcherResult(bool: calls.contains(args), message: message.appended(details: "called with \(calls)")) + } +} +``` + +In this example, we created an actor to act as an object to record calls to an +async function. Then, we created the `beCalled(with:)` matcher to check if the +actor has received a call with the given arguments. + +## Supporting Objective-C + +To use a custom matcher written in Swift from Objective-C, you'll have +to extend the `NMBMatcher` class, adding a new class method for your +custom matcher. The example below defines the class method +`+[NMBMatcher beNilMatcher]`: + +```swift +// Swift + +extension NMBMatcher { + @objc public class func beNilMatcher() -> NMBMatcher { + return NMBMatcher { actualExpression in + return try beNil().satisfies(actualExpression).toObjectiveC() + } + } +} +``` + +The above allows you to use the matcher from Objective-C: + +```objc +// Objective-C + +expect(actual).to([NMBMatcher beNilMatcher]()); +``` + +To make the syntax easier to use, define a C function that calls the +class method: + +```objc +// Objective-C + +FOUNDATION_EXPORT NMBMatcher *beNil() { + return [NMBMatcher 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 `Matcher.define` or `Matcher.simple`. +Using those factory methods will automatically generate expected value failure messages when they're nil. + +```swift +public func beginWith(_ startingElement: S.Element) -> Matcher where S.Element: Equatable { + return Matcher.simple("begin with <\(startingElement)>") { actualExpression in + guard let actualValue = try actualExpression.evaluate() else { return .fail } + + var actualGenerator = actualValue.makeIterator() + return MatcherStatus(bool: actualGenerator.next() == startingElement) + } +} + +extension NMBMatcher { + @objc public class func beginWithMatcher(_ expected: Any) -> NMBMatcher { + return NMBMatcher { actualExpression in + let actual = try actualExpression.evaluate() + let expr = actualExpression.cast { $0 as? NMBOrderedCollection } + return try beginWith(expected).satisfies(expr).toObjectiveC() + } + } +} +``` diff --git a/Sources/Nimble/Nimble.docc/Matchers/CollectionCount.md b/Sources/Nimble/Nimble.docc/Matchers/CollectionCount.md new file mode 100644 index 000000000..e611c8328 --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/CollectionCount.md @@ -0,0 +1,31 @@ +# Collection Count + +```swift +// Swift + +// Passes if 'actual' contains the 'expected' number of elements: +expect(actual).to(haveCount(expected)) + +// Passes if 'actual' does _not_ contain the 'expected' number of elements: +expect(actual).notTo(haveCount(expected)) +``` + +```objc +// Objective-C + +// Passes if 'actual' contains the 'expected' number of elements: +expect(actual).to(haveCount(expected)) + +// Passes if 'actual' does _not_ contain the 'expected' number of elements: +expect(actual).notTo(haveCount(expected)) +``` + +For Swift, the actual value must be an instance of a type conforming to `Collection`. +For example, instances of `Array`, `Dictionary`, or `Set`. + +For Objective-C, the actual value must be one of the following classes, or their subclasses: + + - `NSArray`, + - `NSDictionary`, + - `NSSet`, or + - `NSHashTable`. diff --git a/Sources/Nimble/Nimble.docc/Matchers/CollectionElements.md b/Sources/Nimble/Nimble.docc/Matchers/CollectionElements.md new file mode 100644 index 000000000..df113a440 --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/CollectionElements.md @@ -0,0 +1,47 @@ +# Collection Elements + +Nimble provides a means to check that all elements of a collection pass a given expectation. + +## Swift + +In Swift, the collection must be an instance of a type conforming to +`Sequence`. + +```swift +// Swift + +// Providing a custom function: +expect([1, 2, 3, 4]).to(allPass { $0 < 5 }) + +// Composing the expectation with another matcher: +expect([1, 2, 3, 4]).to(allPass(beLessThan(5))) +``` + +There are also variants of `allPass` that check against async matchers, and +that take in async functions: + +```swift +// Swift + +// Providing a custom function: +expect([1, 2, 3, 4]).to(allPass { await asyncFunctionReturningBool($0) }) + +// Composing the expectation with another matcher: +expect([1, 2, 3, 4]).to(allPass(someAsyncMatcher())) +``` + +## Objective-C + +In Objective-C, the collection must be an instance of a type which implements +the `NSFastEnumeration` protocol, and whose elements are instances of a type +which subclasses `NSObject`. + +Additionally, unlike in Swift, there is no override to specify a custom +matcher function. + +```objc +// Objective-C + +expect(@[@1, @2, @3, @4]).to(allPass(beLessThan(@5))); +``` + diff --git a/Sources/Nimble/Nimble.docc/Matchers/CollectionMembership.md b/Sources/Nimble/Nimble.docc/Matchers/CollectionMembership.md new file mode 100644 index 000000000..739a3667a --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/CollectionMembership.md @@ -0,0 +1,138 @@ +# Collection Membership + +```swift +// Swift + +// Passes if all of the expected values are members of 'actual': +expect(actual).to(contain(expected...)) + +// Passes if 'actual' is empty (i.e. 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 empty (i.e. 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). + +For code that returns collections of complex objects without a strict +ordering, there is the `containElementSatisfying` matcher: + +```swift +// Swift + +struct Turtle { + let color: String +} + +let turtles: [Turtle] = functionThatReturnsSomeTurtlesInAnyOrder() + +// This set of matchers passes regardless of whether the array is +// [{color: "blue"}, {color: "green"}] or [{color: "green"}, {color: "blue"}]: + +expect(turtles).to(containElementSatisfying({ turtle in + return turtle.color == "green" +})) +expect(turtles).to(containElementSatisfying({ turtle in + return turtle.color == "blue" +}, "that is a turtle with color 'blue'")) + +// The second matcher will incorporate the provided string in the error message +// should it fail +``` + +> Note: in Swift, `containElementSatisfying` also has a variant that takes in an +async function. + +```objc +// Objective-C + +@interface Turtle : NSObject +@property (nonatomic, readonly, nonnull) NSString *color; +@end + +@implementation Turtle +@end + +NSArray * __nonnull turtles = functionThatReturnsSomeTurtlesInAnyOrder(); + +// This set of matchers passes regardless of whether the array is +// [{color: "blue"}, {color: "green"}] or [{color: "green"}, {color: "blue"}]: + +expect(turtles).to(containElementSatisfying(^BOOL(id __nonnull object) { + return [[turtle color] isEqualToString:@"green"]; +})); +expect(turtles).to(containElementSatisfying(^BOOL(id __nonnull object) { + return [[turtle color] isEqualToString:@"blue"]; +})); +``` + +For asserting on if the given `Comparable` value is inside of a `Range`, use the `beWithin` matcher. + +```swift +// Swift + +// Passes if 5 is within the range 1 through 10, inclusive +expect(5).to(beWithin(1...10)) + +// Passes if 5 is not within the range 2 through 4. +expect(5).toNot(beWithin(2..<5)) +``` diff --git a/Sources/Nimble/Nimble.docc/Matchers/Comparisons.md b/Sources/Nimble/Nimble.docc/Matchers/Comparisons.md new file mode 100644 index 000000000..9c26a7004 --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/Comparisons.md @@ -0,0 +1,94 @@ +# 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 conform to `FloatingPoint`. diff --git a/Sources/Nimble/Nimble.docc/Matchers/CustomValidation.md b/Sources/Nimble/Nimble.docc/Matchers/CustomValidation.md new file mode 100644 index 000000000..828c2f670 --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/CustomValidation.md @@ -0,0 +1,27 @@ +# Custom Validation + +```swift +// Swift + +// passes if .succeeded is returned from the closure +expect { + guard case .enumCaseWithAssociatedValueThatIDontCareAbout = actual else { + return .failed(reason: "wrong enum case") + } + + return .succeeded +}.to(succeed()) + +// passes if .failed is returned from the closure +expect { + guard case .enumCaseWithAssociatedValueThatIDontCareAbout = actual else { + return .failed(reason: "wrong enum case") + } + + return .succeeded +}.notTo(succeed()) +``` + +The `String` provided with `.failed()` is shown when the test fails. + +> Warning: When using Polling Expectations be careful not to make state changes or run process intensive code since this closure will be ran many times. diff --git a/Sources/Nimble/Nimble.docc/Matchers/Equivalence.md b/Sources/Nimble/Nimble.docc/Matchers/Equivalence.md new file mode 100644 index 000000000..f45493258 --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/Equivalence.md @@ -0,0 +1,26 @@ +# 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. diff --git a/Sources/Nimble/Nimble.docc/Matchers/Exceptions.md b/Sources/Nimble/Nimble.docc/Matchers/Exceptions.md new file mode 100644 index 000000000..a29ec73eb --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/Exceptions.md @@ -0,0 +1,45 @@ +# 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 which passes expectations defined in the given closure: +// (in this case, if the exception's 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 defined in the given 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. + +> Note: ``raiseException()`` is currentl unavailable when Nimble is installed +through Swift Package Manager. diff --git a/Sources/Nimble/Nimble.docc/Matchers/GroupsOfMatchers.md b/Sources/Nimble/Nimble.docc/Matchers/GroupsOfMatchers.md new file mode 100644 index 000000000..4a0b429ee --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/GroupsOfMatchers.md @@ -0,0 +1,33 @@ +# Matching a value to any of a group of matchers + +```swift +// 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)) +``` + +> Note: In swift, you can mix and match synchronous and asynchronous matchers using by `satisfyAnyOf`/`||`. + +```objc +// Objective-C + +// 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. diff --git a/Sources/Nimble/Nimble.docc/Matchers/Identity.md b/Sources/Nimble/Nimble.docc/Matchers/Identity.md new file mode 100644 index 000000000..b822a672f --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/Identity.md @@ -0,0 +1,34 @@ +# 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 +``` + +It is important to remember that `beIdenticalTo` only makes sense when comparing +types with reference semantics, which have a notion of identity. In Swift, +that means types that are defined as a `class`. + +This matcher will not work when comparing types with value semantics such as +those defined as a `struct` or `enum`. If you need to compare two value types, +consider what it means for instances of your type to be identical. This may mean +comparing individual properties or, if it makes sense to do so, conforming your type +to `Equatable` and using 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)); +``` diff --git a/Sources/Nimble/Nimble.docc/Matchers/Map.md b/Sources/Nimble/Nimble.docc/Matchers/Map.md new file mode 100644 index 000000000..4790df6ea --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/Map.md @@ -0,0 +1,34 @@ +# Mapping a Value to Another Value + +Sometimes, you only want to match against a property or group of properties. +For example, if you wanted to check that only one or a few properties of a value +are equal to something else. For this, use the ``map`` matcher to convert a value +to another value and check it with a matcher. + +```swift +// Swift + +expect(someValue).to(map(\.someProperty, equal(expectedProperty))) + +// or, for checking multiple different properties: + +expect(someValue).to(satisfyAllOf( + map(\.firstProperty, equal(expectedFirstProperty)), + map({ $0.secondProperty }, equal(expectedSecondProperty)) +)) +``` + +The ``map`` matcher takes in either a closure or a keypath literal, and a matcher +to compose with. It also works with async closures and async matchers. + +In most cases, it is simpler and easier to not use map (that is, prefer +`expect(someValue.property).to(equal(1))` to +`expect(someValue).to(map(\.property, equal(1)))`). But `map` is incredibly +useful when combined with `satisfyAllOf`/`satisfyAnyOf`, especially for checking +a value that cannot conform to `Equatable` (or you don't want to make it +conform to `Equatable`). However, if you find yourself reusing `map` many times +to do a fuzzy-equals of a given type, you will find writing a custom matcher to +be much easier to use and maintain. + +> Warning: When using Polling Expectations be careful not run process intensive +code since the map closure will be ran many times. diff --git a/Sources/Nimble/Nimble.docc/Matchers/Notifications.md b/Sources/Nimble/Nimble.docc/Matchers/Notifications.md new file mode 100644 index 000000000..5cc93aa40 --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/Notifications.md @@ -0,0 +1,32 @@ +# Notifications + +```swift +// Swift +let testNotification = Notification(name: Notification.Name("Foo"), object: nil) + +// Passes if the closure in expect { ... } posts a notification to the default +// notification center. +expect { + NotificationCenter.default.post(testNotification) +}.to(postNotifications(equal([testNotification]))) + +// Passes if the closure in expect { ... } posts a notification to a given +// notification center +let notificationCenter = NotificationCenter() +expect { + notificationCenter.post(testNotification) +}.to(postNotifications(equal([testNotification]), from: notificationCenter)) + +// Passes if the closure in expect { ... } posts a notification with the provided names to a given +// notification center. Make sure to use this when running tests on Catalina, +// using DistributedNotificationCenter as there is currently no way +// of observing notifications without providing specific names. +let distributedNotificationCenter = DistributedNotificationCenter() +expect { + distributedNotificationCenter.post(testNotification) +}.to(postDistributedNotifications(equal([testNotification]), + from: distributedNotificationCenter, + names: [testNotification.name])) +``` + +> This matcher is only available in Swift. diff --git a/Sources/Nimble/Nimble.docc/Matchers/Result.md b/Sources/Nimble/Nimble.docc/Matchers/Result.md new file mode 100644 index 000000000..071765690 --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/Result.md @@ -0,0 +1,42 @@ +# Result + +```swift +// Swift +let aResult: Result = .success("Hooray") + +// passes if result is .success +expect(aResult).to(beSuccess()) + +// passes if result value is .success and validates Success value +expect(aResult).to(beSuccess { value in + expect(value).to(equal("Hooray")) +}) + +// passes if the result value is .success and if the Success value matches +// the passed-in matcher (in this case, `equal`) +expect(aResult).to(beSuccess(equal("Hooray"))) + +// passes if the result value is .success and if the Success value equals +// the passed-in value (only available when the Success value is Equatable) +expect(aResult).to(beSuccess("Hooray")) + + +enum AnError: Error { + case somethingHappened +} +let otherResult: Result = .failure(.somethingHappened) + +// passes if result is .failure +expect(otherResult).to(beFailure()) + +// passes if result value is .failure and validates error +expect(otherResult).to(beFailure { error in + expect(error).to(matchError(AnError.somethingHappened)) +}) + +// passes if the result value is .failure and if the Failure value matches +// the passed-in matcher (in this case, `matchError`) +expect(otherResult).to(beFailure(matchError(AnError.somethingHappened))) +``` + +> This matcher is only available in Swift. diff --git a/Sources/Nimble/Nimble.docc/Matchers/Strings.md b/Sources/Nimble/Nimble.docc/Matchers/Strings.md new file mode 100644 index 000000000..3360941f6 --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/Strings.md @@ -0,0 +1,39 @@ +# Strings + +```swift +// Swift + +// Passes if 'actual' contains 'substring': +expect(actual).to(contain(substring)) + +// Passes if 'actual' begins with 'prefix': +expect(actual).to(beginWith(prefix)) + +// Passes if 'actual' ends with 'suffix': +expect(actual).to(endWith(suffix)) + +// Passes if 'actual' represents the 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': +expect(actual).to(contain(expected)); + +// Passes if 'actual' begins with 'prefix': +expect(actual).to(beginWith(prefix)); + +// Passes if 'actual' ends with 'suffix': +expect(actual).to(endWith(suffix)); + +// Passes if 'actual' represents the empty string, "": +expect(actual).to(beEmpty()); + +// Passes if 'actual' matches the regular expression defined in 'expected': +expect(actual).to(match(expected)) +``` diff --git a/Sources/Nimble/Nimble.docc/Matchers/SwiftAssertions.md b/Sources/Nimble/Nimble.docc/Matchers/SwiftAssertions.md new file mode 100644 index 000000000..676f39b70 --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/SwiftAssertions.md @@ -0,0 +1,33 @@ +# Swift Assertions + +If you're using Swift, you can use the `throwAssertion` matcher to check if an assertion is thrown (e.g. `fatalError()`). This is made possible by [@mattgallagher](https://github.com/mattgallagher)'s [CwlPreconditionTesting](https://github.com/mattgallagher/CwlPreconditionTesting) library. + +```swift +// Swift + +// Passes if 'somethingThatThrows()' throws an assertion, +// such as by calling 'fatalError()' or if a precondition fails: +expect { try somethingThatThrows() }.to(throwAssertion()) +expect { () -> Void in fatalError() }.to(throwAssertion()) +expect { precondition(false) }.to(throwAssertion()) + +// Passes if throwing an NSError is not equal to throwing an assertion: +expect { throw NSError(domain: "test", code: 0, userInfo: nil) }.toNot(throwAssertion()) + +// Passes if the code after the precondition check is not run: +var reachedPoint1 = false +var reachedPoint2 = false +expect { + reachedPoint1 = true + precondition(false, "condition message") + reachedPoint2 = true +}.to(throwAssertion()) + +expect(reachedPoint1) == true +expect(reachedPoint2) == false +``` + +Notes: + +* This feature is only available in Swift. +* The tvOS simulator is supported, but using a different mechanism, requiring you to turn off the `Debug executable` scheme setting for your tvOS scheme's Test configuration. diff --git a/Sources/Nimble/Nimble.docc/Matchers/SwiftErrors.md b/Sources/Nimble/Nimble.docc/Matchers/SwiftErrors.md new file mode 100644 index 000000000..019e0562b --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/SwiftErrors.md @@ -0,0 +1,49 @@ +# Swift Error Handling + +You can use the `throwError` matcher to check if an error is thrown. + +```swift +// Swift + +// Passes if 'somethingThatThrows()' throws an 'Error': +expect { try somethingThatThrows() }.to(throwError()) + +// Passes if 'somethingThatThrows()' throws an error within a particular domain: +expect { try somethingThatThrows() }.to(throwError { (error: Error) in + expect(error._domain).to(equal(NSCocoaErrorDomain)) +}) + +// Passes if 'somethingThatThrows()' throws a particular error enum case: +expect { try somethingThatThrows() }.to(throwError(NSCocoaError.PropertyListReadCorruptError)) + +// Passes if 'somethingThatThrows()' throws an error of a particular type: +expect { try somethingThatThrows() }.to(throwError(errorType: NimbleError.self)) +``` + +When working directly with `Error` values, using the `matchError` matcher +allows you to perform certain checks on the error itself without having to +explicitly cast the error. + +The `matchError` matcher allows you to check whether or not the error: + +- is the same _type_ of error you are expecting. +- represents a particular error value that you are expecting. + +This can be useful when using `Result` or `Promise` types, for example. + +```swift +// Swift + +let actual: Error = ... + +// Passes if 'actual' represents any error value from the NimbleErrorEnum type: +expect(actual).to(matchError(NimbleErrorEnum.self)) + +// Passes if 'actual' represents the case 'timeout' from the NimbleErrorEnum type: +expect(actual).to(matchError(NimbleErrorEnum.timeout)) + +// Passes if 'actual' contains an NSError equal to the one provided: +expect(actual).to(matchError(NSError(domain: "err", code: 123, userInfo: nil))) +``` + +> Note: This feature is only available in Swift. diff --git a/Sources/Nimble/Nimble.docc/Matchers/Truthiness.md b/Sources/Nimble/Nimble.docc/Matchers/Truthiness.md new file mode 100644 index 000000000..57ef26ed0 --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/Truthiness.md @@ -0,0 +1,37 @@ +# 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 Boolean 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 Boolean 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 Boolean 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 Boolean false): +expect(actual).to(beFalse()); + +// Passes if 'actual' is nil: +expect(actual).to(beNil()); +``` diff --git a/Sources/Nimble/Nimble.docc/Matchers/TypeChecking.md b/Sources/Nimble/Nimble.docc/Matchers/TypeChecking.md new file mode 100644 index 000000000..a3bb7f87c --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Matchers/TypeChecking.md @@ -0,0 +1,61 @@ +# Type Checking + +Nimble supports checking the type membership of any kind of object, whether +Objective-C conformant or not. + +```swift +// Swift + +protocol SomeProtocol{} +class SomeClassConformingToProtocol: SomeProtocol{} +struct SomeStructConformingToProtocol: SomeProtocol{} + +// The following tests pass +expect(1).to(beAKindOf(Int.self)) +expect("turtle").to(beAKindOf(String.self)) + +let classObject = SomeClassConformingToProtocol() +expect(classObject).to(beAKindOf(SomeProtocol.self)) +expect(classObject).to(beAKindOf(SomeClassConformingToProtocol.self)) +expect(classObject).toNot(beAKindOf(SomeStructConformingToProtocol.self)) + +let structObject = SomeStructConformingToProtocol() +expect(structObject).to(beAKindOf(SomeProtocol.self)) +expect(structObject).to(beAKindOf(SomeStructConformingToProtocol.self)) +expect(structObject).toNot(beAKindOf(SomeClassConformingToProtocol.self)) +``` + +```objc +// Objective-C + +// The following tests pass +NSMutableArray *array = [NSMutableArray array]; +expect(array).to(beAKindOf([NSArray class])); +expect(@1).toNot(beAKindOf([NSNull class])); +``` + +Objects can be tested for their exact types using the `beAnInstanceOf` matcher: + +```swift +// Swift + +protocol SomeProtocol{} +class SomeClassConformingToProtocol: SomeProtocol{} +struct SomeStructConformingToProtocol: SomeProtocol{} + +// Unlike the 'beKindOf' matcher, the 'beAnInstanceOf' matcher only +// passes if the object is the EXACT type requested. The following +// tests pass -- note its behavior when working in an inheritance hierarchy. +expect(1).to(beAnInstanceOf(Int.self)) +expect("turtle").to(beAnInstanceOf(String.self)) + +let classObject = SomeClassConformingToProtocol() +expect(classObject).toNot(beAnInstanceOf(SomeProtocol.self)) +expect(classObject).to(beAnInstanceOf(SomeClassConformingToProtocol.self)) +expect(classObject).toNot(beAnInstanceOf(SomeStructConformingToProtocol.self)) + +let structObject = SomeStructConformingToProtocol() +expect(structObject).toNot(beAnInstanceOf(SomeProtocol.self)) +expect(structObject).to(beAnInstanceOf(SomeStructConformingToProtocol.self)) +expect(structObject).toNot(beAnInstanceOf(SomeClassConformingToProtocol.self)) +``` diff --git a/Sources/Nimble/Nimble.docc/Nimble.md b/Sources/Nimble/Nimble.docc/Nimble.md new file mode 100644 index 000000000..fdde2480f --- /dev/null +++ b/Sources/Nimble/Nimble.docc/Nimble.md @@ -0,0 +1,49 @@ +# ``Nimble`` + +**Nimble** is a testing framework for verifying the outcomes and Swift or Objective-C expressions. + +## Overview + +Nimbel provides 3 things: + +- A way to verify expressions using a natural, easily understood language. +- **Matchers**, or functions to check the outcome of an expression. +- Means of requiring an **Expectation** - an expression-matcher combination to pass before continuing. +- A way to check expressions that change over time. + +## Topics + +### Guides + +- +- +- +- +- +- +- + +### Matchers + +Nimble includes a wide variety of matcher functions. + +- +- +- +- +- +- +- +- +- +- +- +- +- +- + +#### Collections + +- +- +- diff --git a/docs/Classes.html b/docs/Classes.html deleted file mode 100644 index 3ab36d709..000000000 --- a/docs/Classes.html +++ /dev/null @@ -1,1712 +0,0 @@ - - - - Classes Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Classes

-

The following classes are available globally.

- -
-
-
-
    -
  • -
    - - - - AssertionDispatcher - -
    -
    -
    -
    -
    -
    -

    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.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class AssertionDispatcher : AssertionHandler
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - AssertionRecorder - -
    -
    -
    -
    -
    -
    -

    An AssertionHandler that silently records assertions that Nimble makes. -This is useful for testing failure messages for matchers.

    - -

    @see AssertionHandler

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class AssertionRecorder : AssertionHandler
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBExpectation - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NMBExpectation : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NimbleXCTestHandler - -
    -
    -
    -
    -
    -
    -

    Default handler for Nimble. This assertion handler passes failures along to -XCTest.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NimbleXCTestHandler : AssertionHandler
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Alternative handler for Nimble. This assertion handler passes failures along -to XCTest by attempting to reduce the failure message size.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NimbleShortXCTestHandler : AssertionHandler
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Helper class providing access to the currently executing XCTestCase instance, if any

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -final public class CurrentTestCaseTracker : NSObject, XCTestObservation
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBWait - -
    -
    -
    -
    -
    -
    -

    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.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NMBWait : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBExpectationMessage - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NMBExpectationMessage : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - FailureMessage - -
    -
    -
    -
    -
    -
    -

    Encapsulates the failure message that matchers can report to the end user.

    - -

    This is shared state between Nimble and matchers that mutate this value.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class FailureMessage : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBMatcher - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NMBMatcher : NSObject
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NMBObjCBeCloseToMatcher : NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBMatcherResult - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    final public class NMBMatcherResult : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBMatcherStatus - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    final public class NMBMatcherStatus : NSObject
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NMBObjCRaiseExceptionMatcher : NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Without Mach exceptions or the Objective-C runtime, there’s nothing to put in the exception object. It’s really just a boolean – either a SIGILL was caught or not.

    - -
    -
    -
    -
  • -
  • -
    - - - - SourceLocation - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public final class SourceLocation : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBStringer - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class NMBStringer : NSObject
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Classes/AssertionDispatcher.html b/docs/Classes/AssertionDispatcher.html deleted file mode 100644 index 1497511fc..000000000 --- a/docs/Classes/AssertionDispatcher.html +++ /dev/null @@ -1,1295 +0,0 @@ - - - - AssertionDispatcher Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AssertionDispatcher

-
-
- -
public class AssertionDispatcher : AssertionHandler
- -
-
-

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.

- -
-
-
- -
-
-
- -
-
- - diff --git a/docs/Classes/AssertionRecorder.html b/docs/Classes/AssertionRecorder.html deleted file mode 100644 index c6b84b7a4..000000000 --- a/docs/Classes/AssertionRecorder.html +++ /dev/null @@ -1,1321 +0,0 @@ - - - - AssertionRecorder Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AssertionRecorder

-
-
- -
public class AssertionRecorder : AssertionHandler
- -
-
-

An AssertionHandler that silently records assertions that Nimble makes. -This is useful for testing failure messages for matchers.

- -

@see AssertionHandler

- -
-
-
-
    -
  • -
    - - - - assertions - -
    -
    -
    -
    -
    -
    -

    All the assertions that were captured by this recorder

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var assertions: [AssertionRecord]
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init()
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func assert(_ assertion: Bool, message: FailureMessage, location: SourceLocation)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Classes/CurrentTestCaseTracker.html b/docs/Classes/CurrentTestCaseTracker.html deleted file mode 100644 index 54ae113d6..000000000 --- a/docs/Classes/CurrentTestCaseTracker.html +++ /dev/null @@ -1,1320 +0,0 @@ - - - - CurrentTestCaseTracker Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

CurrentTestCaseTracker

-
-
- -
@objc
-final public class CurrentTestCaseTracker : NSObject, XCTestObservation
- -
-
-

Helper class providing access to the currently executing XCTestCase instance, if any

- -
-
-
-
    -
  • -
    - - - - sharedInstance - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public static let sharedInstance: CurrentTestCaseTracker
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - testCaseWillStart(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func testCaseWillStart(_ testCase: XCTestCase)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - testCaseDidFinish(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func testCaseDidFinish(_ testCase: XCTestCase)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Classes/FailureMessage.html b/docs/Classes/FailureMessage.html deleted file mode 100644 index 6c855c36f..000000000 --- a/docs/Classes/FailureMessage.html +++ /dev/null @@ -1,1511 +0,0 @@ - - - - FailureMessage Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

FailureMessage

-
-
- -
public class FailureMessage : NSObject
- -
-
-

Encapsulates the failure message that matchers can report to the end user.

- -

This is shared state between Nimble and matchers that mutate this value.

- -
-
-
-
    -
  • -
    - - - - expected - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var expected: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - actualValue - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var actualValue: String?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - to - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var to: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - postfixMessage - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var postfixMessage: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - postfixActual - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var postfixActual: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - extendedMessage - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var extendedMessage: String?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - userDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var userDescription: String?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - stringValue - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var stringValue: String { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public override init()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(stringValue:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(stringValue: String)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Classes/NMBExpectation.html b/docs/Classes/NMBExpectation.html deleted file mode 100644 index 17fdabd9d..000000000 --- a/docs/Classes/NMBExpectation.html +++ /dev/null @@ -1,1881 +0,0 @@ - - - - NMBExpectation Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBExpectation

-
-
- -
public class NMBExpectation : NSObject
- -
-
-

Undocumented

- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public init(actualBlock: @escaping () -> NSObject?, negative: Bool, file: FileString, line: UInt)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - withTimeout - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var withTimeout: (TimeInterval) -> NMBExpectation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - to - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var to: (NMBMatcher) -> NMBExpectation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toWithDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toWithDescription: (NMBMatcher, String) -> NMBExpectation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toNot: (NMBMatcher) -> NMBExpectation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNotWithDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toNotWithDescription: (NMBMatcher, String) -> NMBExpectation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var notTo: (NMBMatcher) -> NMBExpectation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notToWithDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var notToWithDescription: (NMBMatcher, String) -> NMBExpectation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toEventually - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toEventually: (NMBMatcher) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toEventuallyWithDescription: (NMBMatcher, String) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toEventuallyNot - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toEventuallyNot: (NMBMatcher) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toEventuallyNotWithDescription: (NMBMatcher, String) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNotEventually - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toNotEventually: (NMBMatcher) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toNotEventuallyWithDescription: (NMBMatcher, String) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNever - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toNever: (NMBMatcher) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toNeverWithDescription: (NMBMatcher, String) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - neverTo - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var neverTo: (NMBMatcher) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var neverToWithDescription: (NMBMatcher, String) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toAlways - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toAlways: (NMBMatcher) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toAlwaysWithDescription: (NMBMatcher, String) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - alwaysTo - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var alwaysTo: (NMBMatcher) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var alwaysToWithDescription: (NMBMatcher, String) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func failWithMessage(_ message: String, file: FileString, line: UInt)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Classes/NMBExpectationMessage.html b/docs/Classes/NMBExpectationMessage.html deleted file mode 100644 index 6e3eb381d..000000000 --- a/docs/Classes/NMBExpectationMessage.html +++ /dev/null @@ -1,1507 +0,0 @@ - - - - NMBExpectationMessage Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBExpectationMessage

-
-
- -
public class NMBExpectationMessage : NSObject
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - init(expectedTo:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expectedTo message: String)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expectedActualValueTo message: String)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expectedActualValueTo message: String, customActualValue actual: String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(fail:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(fail message: String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(prepend:child:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(prepend message: String, child: NMBExpectationMessage)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(appendedMessage message: String, child: NMBExpectationMessage)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(prependedMessage message: String, child: NMBExpectationMessage)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(details:child:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(details message: String, child: NMBExpectationMessage)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - appendedBeNilHint() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func appendedBeNilHint() -> NMBExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toSwift() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toSwift() -> ExpectationMessage
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Classes/NMBMatcher.html b/docs/Classes/NMBMatcher.html deleted file mode 100644 index b75d8455a..000000000 --- a/docs/Classes/NMBMatcher.html +++ /dev/null @@ -1,2004 +0,0 @@ - - - - NMBMatcher Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBMatcher

-
-
- -
public class NMBMatcher : NSObject
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - init(matcher:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(matcher: @escaping MatcherBlock)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(predicate:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public convenience init(predicate: @escaping MatcherBlock)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - allPassMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func allPassMatcher(_ matcher: NMBMatcher) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beAKindOfMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beAKindOfMatcher(_ expected: AnyClass) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beAnInstanceOfMatcher(_ expected: AnyClass) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beCloseToMatcher(_ expected: NSNumber, within: CDouble) -> NMBObjCBeCloseToMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmptyMatcher() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beEmptyMatcher() -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beGreaterThanMatcher(_ expected: NMBComparable?) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beGreaterThanOrEqualToMatcher(_ expected: NMBComparable?) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beIdenticalToMatcher(_ expected: NSObject?) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beLessThanMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beLessThanMatcher(_ expected: NMBComparable?) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beLessThanOrEqualToMatcher(_ expected: NMBComparable?) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

beTruthy() / beFalsy() -

-
-
-
    -
  • -
    - - - - beTruthyMatcher() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beTruthyMatcher() -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beFalsyMatcher() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beFalsyMatcher() -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beTrueMatcher() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beTrueMatcher() -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beFalseMatcher() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beFalseMatcher() -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beNilMatcher() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beNilMatcher() -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beginWithMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beginWithMatcher(_ expected: Any) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - containMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func containMatcher(_ expected: [NSObject]) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func containElementSatisfyingMatcher(_ matcher: @escaping ((NSObject) -> Bool)) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - endWithMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func endWithMatcher(_ expected: Any) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equalMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func equalMatcher(_ expected: NSObject) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - haveCountMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func haveCountMatcher(_ expected: NSNumber) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - matchMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func matchMatcher(_ expected: NSString) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func raiseExceptionMatcher() -> NMBObjCRaiseExceptionMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func satisfyAllOfMatcher(_ matchers: [NMBMatcher]) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func satisfyAnyOfMatcher(_ matchers: [NMBMatcher]) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Classes/NMBMatcherResult.html b/docs/Classes/NMBMatcherResult.html deleted file mode 100644 index b096a0269..000000000 --- a/docs/Classes/NMBMatcherResult.html +++ /dev/null @@ -1,1372 +0,0 @@ - - - - NMBMatcherResult Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBMatcherResult

-
-
- -
final public class NMBMatcherResult : NSObject
- -
-
-

Undocumented

- -
-
-
- -
-
-
- -
-
- - diff --git a/docs/Classes/NMBMatcherStatus.html b/docs/Classes/NMBMatcherStatus.html deleted file mode 100644 index 7c23916e1..000000000 --- a/docs/Classes/NMBMatcherStatus.html +++ /dev/null @@ -1,1453 +0,0 @@ - - - - NMBMatcherStatus Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBMatcherStatus

-
-
- -
final public class NMBMatcherStatus : NSObject
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - matches - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static let matches: NMBMatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - doesNotMatch - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static let doesNotMatch: NMBMatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - fail - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static let fail: NMBMatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - hash - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public override var hash: Int { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - isEqual(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public override func isEqual(_ object: Any?) -> Bool
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - from(status:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func from(status: MatcherStatus) -> NMBMatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - from(bool:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func from(bool success: Bool) -> NMBMatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toSwift() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toSwift() -> MatcherStatus
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Classes/NMBObjCBeCloseToMatcher.html b/docs/Classes/NMBObjCBeCloseToMatcher.html deleted file mode 100644 index 26a1dccb9..000000000 --- a/docs/Classes/NMBObjCBeCloseToMatcher.html +++ /dev/null @@ -1,1265 +0,0 @@ - - - - NMBObjCBeCloseToMatcher Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBObjCBeCloseToMatcher

-
-
- -
public class NMBObjCBeCloseToMatcher : NMBMatcher
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - within - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var within: (CDouble) -> NMBObjCBeCloseToMatcher { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Classes/NMBObjCRaiseExceptionMatcher.html b/docs/Classes/NMBObjCRaiseExceptionMatcher.html deleted file mode 100644 index 0eb9a61c1..000000000 --- a/docs/Classes/NMBObjCRaiseExceptionMatcher.html +++ /dev/null @@ -1,1349 +0,0 @@ - - - - NMBObjCRaiseExceptionMatcher Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBObjCRaiseExceptionMatcher

-
-
- -
public class NMBObjCRaiseExceptionMatcher : NMBMatcher
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - named - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var named: (_ name: String) -> NMBObjCRaiseExceptionMatcher { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - reason - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var reason: (_ reason: String?) -> NMBObjCRaiseExceptionMatcher { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - userInfo - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var userInfo: (_ userInfo: NSDictionary?) -> NMBObjCRaiseExceptionMatcher { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyingBlock - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var satisfyingBlock: (_ block: ((NSException) -> Void)?) -> NMBObjCRaiseExceptionMatcher { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Classes/NMBStringer.html b/docs/Classes/NMBStringer.html deleted file mode 100644 index 77a2a33a5..000000000 --- a/docs/Classes/NMBStringer.html +++ /dev/null @@ -1,1266 +0,0 @@ - - - - NMBStringer Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBStringer

-
-
- -
@objc
-public class NMBStringer : NSObject
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - stringify(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func stringify(_ obj: Any?) -> String
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Classes/NMBWait.html b/docs/Classes/NMBWait.html deleted file mode 100644 index 24272fa9b..000000000 --- a/docs/Classes/NMBWait.html +++ /dev/null @@ -1,1382 +0,0 @@ - - - - NMBWait Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBWait

-
-
- -
public class NMBWait : NSObject
- -
-
-

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.

- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func until(
    -    timeout: TimeInterval,
    -    file: FileString = #file,
    -    line: UInt = #line,
    -    action: @escaping (@escaping () -> Void) -> Void)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class func until(
    -    timeout: NimbleTimeInterval,
    -    file: FileString = #file,
    -    line: UInt = #line,
    -    action: @escaping (@escaping () -> Void) -> Void)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class func throwableUntil(
    -    timeout: NimbleTimeInterval,
    -    file: FileString = #file,
    -    line: UInt = #line,
    -    action: @escaping (@escaping () -> Void) throws -> Void)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - until(_:line:action:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc(untilFile:line:action:)
    -public class func until(
    -    _ file: FileString = #file,
    -    line: UInt = #line,
    -    action: @escaping (@escaping () -> Void) -> Void)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - until(_:line:action:) - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Classes/NimbleShortXCTestHandler.html b/docs/Classes/NimbleShortXCTestHandler.html deleted file mode 100644 index d97e25366..000000000 --- a/docs/Classes/NimbleShortXCTestHandler.html +++ /dev/null @@ -1,1265 +0,0 @@ - - - - NimbleShortXCTestHandler Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NimbleShortXCTestHandler

-
-
- -
public class NimbleShortXCTestHandler : AssertionHandler
- -
-
-

Alternative handler for Nimble. This assertion handler passes failures along -to XCTest by attempting to reduce the failure message size.

- -
-
-
- -
-
-
- -
-
- - diff --git a/docs/Classes/NimbleXCTestHandler.html b/docs/Classes/NimbleXCTestHandler.html deleted file mode 100644 index 619174d7d..000000000 --- a/docs/Classes/NimbleXCTestHandler.html +++ /dev/null @@ -1,1265 +0,0 @@ - - - - NimbleXCTestHandler Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NimbleXCTestHandler

-
-
- -
public class NimbleXCTestHandler : AssertionHandler
- -
-
-

Default handler for Nimble. This assertion handler passes failures along to -XCTest.

- -
-
-
- -
-
-
- -
-
- - diff --git a/docs/Classes/SourceLocation.html b/docs/Classes/SourceLocation.html deleted file mode 100644 index 2f76893bc..000000000 --- a/docs/Classes/SourceLocation.html +++ /dev/null @@ -1,1318 +0,0 @@ - - - - SourceLocation Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

SourceLocation

-
-
- -
public final class SourceLocation : NSObject
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - file - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let file: FileString
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - line - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let line: UInt
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - description - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    override public var description: String { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Enums.html b/docs/Enums.html deleted file mode 100644 index 190843125..000000000 --- a/docs/Enums.html +++ /dev/null @@ -1,1401 +0,0 @@ - - - - Enumerations Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Enumerations

-

The following enumerations are available globally.

- -
-
-
-
    -
  • -
    - - - - ExpectationStatus - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public enum ExpectationStatus : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ExpectationMessage - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public indirect enum ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ExpectationStyle - -
    -
    -
    -
    -
    -
    -

    The Expectation style intended for comparison to a MatcherStatus.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public enum ExpectationStyle
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MatcherStatus - -
    -
    -
    -
    -
    -
    -

    MatcherStatus is a trinary that indicates if a Matcher matches a given value or not

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public enum MatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ToSucceedResult - -
    -
    -
    -
    -
    -
    -

    Used by the succeed matcher.

    - -

    This is the return type for the closure.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public enum ToSucceedResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NimbleTimeInterval - -
    -
    -
    -
    -
    -
    -

    A reimplementation of DispatchTimeInterval without the never case, and conforming to Sendable.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public enum NimbleTimeInterval : Sendable, Equatable
    -
    extension NimbleTimeInterval: CustomStringConvertible
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Enums/ExpectationMessage.html b/docs/Enums/ExpectationMessage.html deleted file mode 100644 index 4a92ad5f4..000000000 --- a/docs/Enums/ExpectationMessage.html +++ /dev/null @@ -1,1647 +0,0 @@ - - - - ExpectationMessage Enumeration Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

ExpectationMessage

-
-
- -
public indirect enum ExpectationMessage
- -
-
-

Undocumented

- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    includes actual value in output (“expected to , got ”)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case expectedActualValueTo(String)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    uses a custom actual value string in output (“expected to , got ”)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case expectedCustomValueTo(String, actual: String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expectedTo(_:) - -
    -
    -
    -
    -
    -
    -

    excludes actual value in output (“expected to ”)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case expectedTo(String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - fail(_:) - -
    -
    -
    -
    -
    -
    -

    allows any free-form message (“”)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case fail(String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - prepends(_:_:) - -
    -
    -
    -
    -
    -
    -

    Not Fully Implemented Yet.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case prepends(String, ExpectationMessage)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - appends(_:_:) - -
    -
    -
    -
    -
    -
    -

    appends after an existing message (“ (use beNil() to match nils)”)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case appends(ExpectationMessage, String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - details(_:_:) - -
    -
    -
    -
    -
    -
    -

    provides long-form multi-line explainations (“\n\n”)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case details(ExpectationMessage, String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expectedMessage - -
    -
    -
    -
    -
    -
    -

    Returns the smallest message after the “expected to” string that summarizes the error.

    - -

    Returns the message part from ExpectationMessage, ignoring all .appends and .details.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var expectedMessage: String { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - appended(message:) - -
    -
    -
    -
    -
    -
    -

    Appends a message after the primary expectation message

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func appended(message: String) -> ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - appendedBeNilHint() - -
    -
    -
    -
    -
    -
    -

    Appends a message hinting to use beNil() for when the actual value given was nil.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func appendedBeNilHint() -> ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - appended(details:) - -
    -
    -
    -
    -
    -
    -

    Appends a detailed (aka - multiline) message after the primary expectation message -Detailed messages will be placed after .appended(message:) calls.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func appended(details: String) -> ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Replaces a primary expectation with one returned by f. Preserves all composite expectations -that were built upon it (aka - all appended(message:) and appended(details:).

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func replacedExpectation(_ f: @escaping (ExpectationMessage) -> ExpectationMessage) -> ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Wraps a primary expectation with text before and after it. -Alias to prepended(message: before).appended(message: after)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func wrappedExpectation(before: String, after: String) -> ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Prepends a message by modifying the primary expectation

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func prepended(expectation message: String) -> ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Converts the tree of ExpectationMessages into a final built string.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toString(actual: String, expected: String = "expected", to: String = "to") -> String
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Enums/ExpectationStatus.html b/docs/Enums/ExpectationStatus.html deleted file mode 100644 index 6f9d73b25..000000000 --- a/docs/Enums/ExpectationStatus.html +++ /dev/null @@ -1,1345 +0,0 @@ - - - - ExpectationStatus Enumeration Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

ExpectationStatus

-
-
- -
public enum ExpectationStatus : Equatable
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - pending - -
    -
    -
    -
    -
    -
    -

    No matchers have been performed.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case pending
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - passed - -
    -
    -
    -
    -
    -
    -

    All matchers have passed.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case passed
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - failed - -
    -
    -
    -
    -
    -
    -

    All matchers have failed.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case failed
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - mixed - -
    -
    -
    -
    -
    -
    -

    Multiple matchers have been peformed, with at least one passing and one failing.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case mixed
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Enums/ExpectationStyle.html b/docs/Enums/ExpectationStyle.html deleted file mode 100644 index 3cd7cc87a..000000000 --- a/docs/Enums/ExpectationStyle.html +++ /dev/null @@ -1,1291 +0,0 @@ - - - - ExpectationStyle Enumeration Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

ExpectationStyle

-
-
- -
public enum ExpectationStyle
- -
-
-

The Expectation style intended for comparison to a MatcherStatus.

- -
-
-
-
    -
  • -
    - - - - toMatch - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case toMatch
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNotMatch - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case toNotMatch
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Enums/MatcherStatus.html b/docs/Enums/MatcherStatus.html deleted file mode 100644 index bd9f989cb..000000000 --- a/docs/Enums/MatcherStatus.html +++ /dev/null @@ -1,1383 +0,0 @@ - - - - MatcherStatus Enumeration Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

MatcherStatus

-
-
- -
public enum MatcherStatus
- -
-
-

MatcherStatus is a trinary that indicates if a Matcher matches a given value or not

- -
-
-
-
    -
  • -
    - - - - matches - -
    -
    -
    -
    -
    -
    -

    Matches indicates if the matcher / matcher passes with the given value

    - -

    For example, equals(1) returns .matches for expect(1).to(equal(1)).

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case matches
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - doesNotMatch - -
    -
    -
    -
    -
    -
    -

    DoesNotMatch indicates if the matcher fails with the given value, but would -succeed if the expectation was inverted.

    - -

    For example, equals(2) returns .doesNotMatch for expect(1).toNot(equal(2)).

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case doesNotMatch
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - fail - -
    -
    -
    -
    -
    -
    -

    Fail indicates the matcher will never satisfy with the given value in any case. -A perfect example is that most matchers fail whenever given nil.

    - -

    Using equal(1) fails both expect(nil).to(equal(1)) and expect(nil).toNot(equal(1)). -Note: Matcher’s requireNonNil property will also provide this feature mostly for free. - Your matcher will still need to guard against nils, but error messaging will be - handled for you.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case fail
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(bool:) - -
    -
    -
    -
    -
    -
    -

    Converts a boolean to either .matches (if true) or .doesNotMatch (if false).

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(bool matches: Bool)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toObjectiveC() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toObjectiveC() -> NMBMatcherStatus
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Enums/NimbleTimeInterval.html b/docs/Enums/NimbleTimeInterval.html deleted file mode 100644 index 0d2d80672..000000000 --- a/docs/Enums/NimbleTimeInterval.html +++ /dev/null @@ -1,1479 +0,0 @@ - - - - NimbleTimeInterval Enumeration Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NimbleTimeInterval

-
-
- -
public enum NimbleTimeInterval : Sendable, Equatable
-
extension NimbleTimeInterval: CustomStringConvertible
- -
-
-

A reimplementation of DispatchTimeInterval without the never case, and conforming to Sendable.

- -
-
-
-
    -
  • -
    - - - - seconds(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case seconds(Int)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - milliseconds(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case milliseconds(Int)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - microseconds(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case microseconds(Int)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - nanoseconds(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case nanoseconds(Int)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <(_:_:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func < (lhs: NimbleTimeInterval, rhs: NimbleTimeInterval) -> Bool
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - dispatchTimeInterval - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var dispatchTimeInterval: DispatchTimeInterval { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - nanoseconds - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var nanoseconds: UInt64 { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - description - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var description: String { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - timeInterval - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var timeInterval: TimeInterval { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Enums/ToSucceedResult.html b/docs/Enums/ToSucceedResult.html deleted file mode 100644 index e29140326..000000000 --- a/docs/Enums/ToSucceedResult.html +++ /dev/null @@ -1,1293 +0,0 @@ - - - - ToSucceedResult Enumeration Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

ToSucceedResult

-
-
- -
public enum ToSucceedResult
- -
-
-

Used by the succeed matcher.

- -

This is the return type for the closure.

- -
-
-
-
    -
  • -
    - - - - succeeded - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case succeeded
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - failed(reason:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case failed(reason: String)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Extensions.html b/docs/Extensions.html deleted file mode 100644 index d18e8da7f..000000000 --- a/docs/Extensions.html +++ /dev/null @@ -1,1966 +0,0 @@ - - - - Extensions Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Extensions

-

The following extensions are available globally.

- -
-
-
- -
-
-
- -
-
- - diff --git a/docs/Extensions/AnySequence.html b/docs/Extensions/AnySequence.html deleted file mode 100644 index b97e17705..000000000 --- a/docs/Extensions/AnySequence.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - AnySequence Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/Extensions/Array.html b/docs/Extensions/Array.html deleted file mode 100644 index 50843ebc5..000000000 --- a/docs/Extensions/Array.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - Array Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/Extensions/Data.html b/docs/Extensions/Data.html deleted file mode 100644 index 7cda82ea9..000000000 --- a/docs/Extensions/Data.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - Data Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/Extensions/Date.html b/docs/Extensions/Date.html deleted file mode 100644 index c9372f85b..000000000 --- a/docs/Extensions/Date.html +++ /dev/null @@ -1,1319 +0,0 @@ - - - - Date Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Date

-
-
- -
extension Date: NMBDoubleConvertible
-
extension Date: TestOutputStringConvertible
-
extension Date: @unchecked Sendable
- -
-
- -
-
-
-
    -
  • -
    - - - - doubleValue - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var doubleValue: CDouble { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - testDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var testDescription: String { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - advanced(by:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func advanced(by nimbleTimeInterval: NimbleTimeInterval) -> Date
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Extensions/Double.html b/docs/Extensions/Double.html deleted file mode 100644 index 54eb1fad3..000000000 --- a/docs/Extensions/Double.html +++ /dev/null @@ -1,1290 +0,0 @@ - - - - Double Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Double

-
-
- -
extension Double: ExpressibleByBooleanLiteral
-
extension Double: TestOutputStringConvertible
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - testDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var testDescription: String { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Extensions/Float.html b/docs/Extensions/Float.html deleted file mode 100644 index e8194c3e5..000000000 --- a/docs/Extensions/Float.html +++ /dev/null @@ -1,1290 +0,0 @@ - - - - Float Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Float

-
-
- -
extension Float: ExpressibleByBooleanLiteral
-
extension Float: TestOutputStringConvertible
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - testDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var testDescription: String { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Extensions/Int.html b/docs/Extensions/Int.html deleted file mode 100644 index 6d6c2e2b2..000000000 --- a/docs/Extensions/Int.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - Int Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Int

-
-
- -
extension Int: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Extensions/Int16.html b/docs/Extensions/Int16.html deleted file mode 100644 index e82972cec..000000000 --- a/docs/Extensions/Int16.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - Int16 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Int16

-
-
- -
extension Int16: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Extensions/Int32.html b/docs/Extensions/Int32.html deleted file mode 100644 index cdc017258..000000000 --- a/docs/Extensions/Int32.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - Int32 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Int32

-
-
- -
extension Int32: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Extensions/Int64.html b/docs/Extensions/Int64.html deleted file mode 100644 index a629aaccb..000000000 --- a/docs/Extensions/Int64.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - Int64 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Int64

-
-
- -
extension Int64: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Extensions/Int8.html b/docs/Extensions/Int8.html deleted file mode 100644 index d141678d2..000000000 --- a/docs/Extensions/Int8.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - Int8 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Int8

-
-
- -
extension Int8: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Extensions/NSArray.html b/docs/Extensions/NSArray.html deleted file mode 100644 index 65e172d7e..000000000 --- a/docs/Extensions/NSArray.html +++ /dev/null @@ -1,1265 +0,0 @@ - - - - NSArray Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/Extensions/NSDate.html b/docs/Extensions/NSDate.html deleted file mode 100644 index d0b89c531..000000000 --- a/docs/Extensions/NSDate.html +++ /dev/null @@ -1,1291 +0,0 @@ - - - - NSDate Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NSDate

-
-
- -
extension NSDate: NMBDoubleConvertible
-
extension NSDate: TestOutputStringConvertible
- -
-
- -
-
-
-
    -
  • -
    - - - - doubleValue - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var doubleValue: CDouble { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - testDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var testDescription: String { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Extensions/NSIndexSet.html b/docs/Extensions/NSIndexSet.html deleted file mode 100644 index 75e05d666..000000000 --- a/docs/Extensions/NSIndexSet.html +++ /dev/null @@ -1,1264 +0,0 @@ - - - - NSIndexSet Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/Extensions/NSNumber.html b/docs/Extensions/NSNumber.html deleted file mode 100644 index 8d65bc829..000000000 --- a/docs/Extensions/NSNumber.html +++ /dev/null @@ -1,1292 +0,0 @@ - - - - NSNumber Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NSNumber

-
-
- -
extension NSNumber: NMBDoubleConvertible
-
extension NSNumber: NMBComparable
-
extension NSNumber: TestOutputStringConvertible
- -
-
- -
-
-
-
    -
  • -
    - - - - NMB_compare(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func NMB_compare(_ otherObject: NMBComparable!) -> ComparisonResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - testDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var testDescription: String { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Extensions/NSString.html b/docs/Extensions/NSString.html deleted file mode 100644 index 1a2de679a..000000000 --- a/docs/Extensions/NSString.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - NSString Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/Extensions/String.html b/docs/Extensions/String.html deleted file mode 100644 index 979726b3d..000000000 --- a/docs/Extensions/String.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - String Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/Extensions/TimeInterval.html b/docs/Extensions/TimeInterval.html deleted file mode 100644 index 490ba7209..000000000 --- a/docs/Extensions/TimeInterval.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - TimeInterval Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/Extensions/UInt.html b/docs/Extensions/UInt.html deleted file mode 100644 index 1f5e1215d..000000000 --- a/docs/Extensions/UInt.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - UInt Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

UInt

-
-
- -
extension UInt: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Extensions/UInt16.html b/docs/Extensions/UInt16.html deleted file mode 100644 index 58d82f62f..000000000 --- a/docs/Extensions/UInt16.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - UInt16 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

UInt16

-
-
- -
extension UInt16: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Extensions/UInt32.html b/docs/Extensions/UInt32.html deleted file mode 100644 index 2187727fb..000000000 --- a/docs/Extensions/UInt32.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - UInt32 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

UInt32

-
-
- -
extension UInt32: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Extensions/UInt64.html b/docs/Extensions/UInt64.html deleted file mode 100644 index d5d5b446f..000000000 --- a/docs/Extensions/UInt64.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - UInt64 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

UInt64

-
-
- -
extension UInt64: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Extensions/UInt8.html b/docs/Extensions/UInt8.html deleted file mode 100644 index bebf61837..000000000 --- a/docs/Extensions/UInt8.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - UInt8 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

UInt8

-
-
- -
extension UInt8: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Functions.html b/docs/Functions.html deleted file mode 100644 index b9e37111e..000000000 --- a/docs/Functions.html +++ /dev/null @@ -1,10197 +0,0 @@ - - - - Functions Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Functions

-

The following functions are available globally.

- -
-
-
-
    -
  • -
    - - - - withAssertionHandler(_:file:line:closure:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -Unlike the synchronous version of this call, this does not support catching Objective-C exceptions.

    - -

    @see AssertionHandler

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func withAssertionHandler(_ tempAssertionHandler: AssertionHandler,
    -                                 file: FileString = #file,
    -                                 line: UInt = #line,
    -                                 closure: () async throws -> Void) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - gatherExpectations(silently:closure:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -Unlike the synchronous version of this call, this does not support catching Objective-C exceptions.

    - -

    @param silently expectations are no longer send to the default Nimble - assertion handler when this is true. Defaults to false.

    - -

    @see gatherFailingExpectations

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func gatherExpectations(silently: Bool = false, closure: () async -> Void) async -> [AssertionRecord]
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - gatherFailingExpectations(silently:closure:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -Unlike the synchronous version of this call, this does not support catching Objective-C exceptions.

    - -

    @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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func gatherFailingExpectations(silently: Bool = false, closure: () async -> Void) async -> [AssertionRecord]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Allows you to temporarily replace the current Nimble assertion handler with -the one provided for the scope of the closure.

    - -

    @warning -This form of withAssertionHandler does not work in any kind of -async context. Use the async form of withAssertionHandler -if you are running tests in an async context.

    - -

    Once the closure finishes, then the original Nimble assertion handler is restored.

    - -

    @see AssertionHandler

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func withAssertionHandler(_ tempAssertionHandler: AssertionHandler,
    -                                 file: FileString = #file,
    -                                 line: UInt = #line,
    -                                 closure: () throws -> Void)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -This form of gatherExpectations does not work in any kind of -async context. Use the async form of gatherExpectations -if you are running tests in an async context.

    - -

    @param silently expectations are no longer send to the default Nimble - assertion handler when this is true. Defaults to false.

    - -

    @see gatherFailingExpectations

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func gatherExpectations(silently: Bool = false, closure: () -> Void) -> [AssertionRecord]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -This form of gatherFailingExpectations does not work in any kind of -async context. Use the async form of gatherFailingExpectations -if you are running tests in an async context.

    - -

    @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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func gatherFailingExpectations(silently: Bool = false, closure: () -> Void) -> [AssertionRecord]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func recordFailure(_ message: String, location: SourceLocation)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The value given is lazily evaluated.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect<T>(file: FileString = #file, line: UInt = #line, _ expression: @escaping () async throws -> T?) -> AsyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The closure is lazily invoked.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect<T>(file: FileString = #file, line: UInt = #line, _ expression: () -> (() async throws -> T)) -> AsyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The closure is lazily invoked.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect<T>(file: FileString = #file, line: UInt = #line, _ expression: () -> (() async throws -> T?)) -> AsyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The closure is lazily invoked.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect(file: FileString = #file, line: UInt = #line, _ expression: () -> (() async throws -> Void)) -> AsyncExpectation<Void>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expecta(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The value given is lazily evaluated. -This is provided to avoid confusion between expect -> SyncExpectation and expect -> AsyncExpectation.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expecta<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure @escaping () async throws -> T?) async -> AsyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expecta(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The closure is lazily invoked. -This is provided to avoid confusion between expect -> SyncExpectation and expect -> AsyncExpectation

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expecta<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() async throws -> T)) async -> AsyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expecta(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The closure is lazily invoked. -This is provided to avoid confusion between expect -> SyncExpectation and expect -> AsyncExpectation

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expecta<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() async throws -> T?)) async -> AsyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expecta(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The closure is lazily invoked. -This is provided to avoid confusion between expect -> SyncExpectation and expect -> AsyncExpectation

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expecta(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() async throws -> Void)) async -> AsyncExpectation<Void>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - waitUntil(timeout:file:line:action:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -Unlike the synchronous version of this call, this does not support catching Objective-C exceptions.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func waitUntil(timeout: NimbleTimeInterval = PollingDefaults.timeout, file: FileString = #file, line: UInt = #line, action: @escaping (@escaping () -> Void) async -> Void) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - waitUntil(timeout:file:line:action:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -Unlike the synchronous version of this call, this does not support catching Objective-C exceptions.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func waitUntil(timeout: NimbleTimeInterval = PollingDefaults.timeout, file: FileString = #file, line: UInt = #line, action: @escaping (@escaping () -> Void) -> Void) async
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The value given is lazily evaluated.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func require<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure @escaping () throws -> T?) -> SyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func require<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> T)) -> SyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func require<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> T?)) -> SyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func require(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> Void)) -> SyncRequirement<Void>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The value given is lazily evaluated.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -

    This is provided as an alternative to require, for when you want to be specific about whether you’re using SyncRequirement or AsyncRequirement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func requires<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure @escaping () throws -> T?) -> SyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -

    This is provided as an alternative to require, for when you want to be specific about whether you’re using SyncRequirement or AsyncRequirement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func requires<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> T)) -> SyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -

    This is provided as an alternative to require, for when you want to be specific about whether you’re using SyncRequirement or AsyncRequirement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func requires<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> T?)) -> SyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -

    This is provided as an alternative to require, for when you want to be specific about whether you’re using SyncRequirement or AsyncRequirement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func requires(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> Void)) -> SyncRequirement<Void>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make an AsyncRequirement on a given actual value. The value given is lazily evaluated.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func require<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @escaping () async throws -> T?) -> AsyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make an AsyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func require<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: () -> (() async throws -> T)) -> AsyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make an AsyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func require<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: () -> (() async throws -> T?)) -> AsyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - requirea(file:line:customError:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Make an AsyncRequirement on a given actual value. The value given is lazily evaluated.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -

    This is provided to avoid confusion between require -> SyncRequirement and require -> AsyncRequirement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func requirea<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure @escaping () async throws -> T?) async -> AsyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - requirea(file:line:customError:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Make an AsyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -

    This is provided to avoid confusion between require -> SyncRequirement and require -> AsyncRequirement

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func requirea<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() async throws -> T)) async -> AsyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - requirea(file:line:customError:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Make an AsyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -

    This is provided to avoid confusion between require -> SyncRequirement and require -> AsyncRequirement

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func requirea<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() async throws -> T?)) async -> AsyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Unwrap -

-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toNot(beNil()).

    - -

    unwrap will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwrap<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure @escaping () throws -> T?) throws -> T
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toNot(beNil()).

    - -

    unwrap will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwrap<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> T?)) throws -> T
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toNot(beNil()).

    - -

    unwraps will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwraps<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure @escaping () throws -> T?) throws -> T
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toNot(beNil()).

    - -

    unwraps will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwraps<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> T?)) throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - unwrap(file:line:customError:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toNot(beNil()).

    - -

    unwrap will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwrap<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @escaping () async throws -> T?) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - unwrap(file:line:customError:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toNot(beNil()).

    - -

    unwrap will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwrap<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: () -> (() async throws -> T?)) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - unwrapa(file:line:customError:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toNot(beNil()).

    - -

    unwrapa will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwrapa<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure @escaping () async throws -> T?) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - unwrapa(file:line:customError:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toNot(beNil()).

    - -

    unwrapa will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwrapa<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() async throws -> T?)) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `waitUntil` does not work in async contexts. Use the async variant as a drop-in replacement")
    -public func waitUntil(timeout: NimbleTimeInterval = PollingDefaults.timeout, file: FileString = #file, line: UInt = #line, action: @escaping (@escaping () -> Void) -> Void)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The value given is lazily evaluated.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure @escaping () throws -> T?) -> SyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The closure is lazily invoked.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> T)) -> SyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The closure is lazily invoked.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> T?)) -> SyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The closure is lazily invoked.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> Void)) -> SyncExpectation<Void>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expects(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The value given is lazily evaluated. -This is provided as an alternative to expect which avoids overloading with expect -> AsyncExpectation.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expects<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure @escaping () throws -> T?) -> SyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expects(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The closure is lazily invoked. -This is provided as an alternative to expect which avoids overloading with expect -> AsyncExpectation.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expects<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> T)) -> SyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expects(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The closure is lazily invoked. -This is provided as an alternative to expect which avoids overloading with expect -> AsyncExpectation.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expects<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> T?)) -> SyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expects(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The closure is lazily invoked. -This is provided as an alternative to expect which avoids overloading with expect -> AsyncExpectation.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expects(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> Void)) -> SyncExpectation<Void>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - fail(_:location:) - -
    -
    -
    -
    -
    -
    -

    Always fails the test with a message and a specified location.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func fail(_ message: String, location: SourceLocation)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - fail(_:file:line:) - -
    -
    -
    -
    -
    -
    -

    Always fails the test with a message.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func fail(_ message: String, file: FileString = #file, line: UInt = #line)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - fail(_:line:) - -
    -
    -
    -
    -
    -
    -

    Always fails the test.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func fail(_ file: FileString = #file, line: UInt = #line)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - allPass(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func allPass<S: Sequence>(
    -    _ passFunc: @escaping (S.Element) throws -> Bool
    -) -> Matcher<S>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - allPass(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func allPass<S: Sequence>(
    -    _ passName: String,
    -    _ passFunc: @escaping (S.Element) throws -> Bool
    -) -> Matcher<S>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - allPass(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func allPass<S>(_ elementMatcher: Matcher<S.Element>) -> Matcher<S> where S : Sequence
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - allPass(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func allPass<S: Sequence>(
    -    _ passFunc: @escaping (S.Element) async throws -> Bool
    -) -> AsyncMatcher<S>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - allPass(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func allPass<S: Sequence>(
    -    _ passName: String,
    -    _ passFunc: @escaping (S.Element) async throws -> Bool
    -) -> AsyncMatcher<S>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - allPass(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func allPass<S>(_ elementMatcher: AsyncMatcher<S.Element>) -> AsyncMatcher<S> where S : Sequence
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beAKindOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is an instance of the given class.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beAKindOf<T>(_ expectedType: T.Type) -> Matcher<Any>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beAKindOf(_:) - -
    -
    -
    -
    -
    -
    -

    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

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beAKindOf(_ expectedClass: AnyClass) -> Matcher<NSObject>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beAnInstanceOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is an exact instance of the given class.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beAnInstanceOf<T>(_ expectedType: T.Type) -> Matcher<Any>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beAnInstanceOf(_:) - -
    -
    -
    -
    -
    -
    -

    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

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beAnInstanceOf(_ expectedClass: AnyClass) -> Matcher<NSObject>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - defaultDelta() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func defaultDelta<F>() -> F where F : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beCloseTo(_:within:) - -
    -
    -
    -
    -
    -
    -

    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

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beCloseTo<Value: FloatingPoint>(
    -    _ expectedValue: Value,
    -    within delta: Value = defaultDelta()
    -) -> Matcher<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beCloseTo(_:within:) - -
    -
    -
    -
    -
    -
    -

    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

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beCloseTo<Value: NMBDoubleConvertible>(
    -    _ expectedValue: Value,
    -    within delta: Double = DefaultDelta
    -) -> Matcher<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beCloseTo(_:within:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beCloseTo<Value: FloatingPoint, Values: Collection>(
    -    _ expectedValues: Values,
    -    within delta: Value = defaultDelta()
    -) -> Matcher<Values> where Values.Element == Value
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Operators -

-
-
-
    -
  • -
    - - - - ≈(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: SyncExpectation<Value>, rhs: Value) where Value : Collection, Value.Element : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: AsyncExpectation<Value>, rhs: Value) async where Value : Collection, Value.Element : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: SyncExpectation<Value>, rhs: Value) where Value : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: AsyncExpectation<Value>, rhs: Value) async where Value : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: SyncExpectation<Value>, rhs: (expected: Value, delta: Value)) where Value : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: AsyncExpectation<Value>, rhs: (expected: Value, delta: Value)) async where Value : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <Value>(lhs: SyncExpectation<Value>, rhs: (expected: Value, delta: Value)) where Value : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <Value>(lhs: AsyncExpectation<Value>, rhs: (expected: Value, delta: Value)) async where Value : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: SyncExpectation<Value>, rhs: Value) where Value : NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: AsyncExpectation<Value>, rhs: Value) async where Value : NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: SyncExpectation<Value>, rhs: (expected: Value, delta: Double)) where Value : NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: AsyncExpectation<Value>, rhs: (expected: Value, delta: Double)) async where Value : NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <Value>(lhs: SyncExpectation<Value>, rhs: (expected: Value, delta: Double)) where Value : NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <Value>(lhs: AsyncExpectation<Value>, rhs: (expected: Value, delta: Double)) async where Value : NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ±(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func ± <Value>(lhs: Value, rhs: Value) -> (expected: Value, delta: Value) where Value : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ±(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func ± <Value>(lhs: Value, rhs: Double) -> (expected: Value, delta: Double) where Value : NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty<S>() -> Matcher<S> where S : Sequence
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty<S>() -> Matcher<S> where S : SetAlgebra
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty<S>() -> Matcher<S> where S : Sequence, S : SetAlgebra
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty() -> Matcher<String>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty() -> Matcher<NSString>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty() -> Matcher<NSDictionary>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty() -> Matcher<NSArray>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty() -> Matcher<NMBCollection>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beGreaterThan(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is greater than the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beGreaterThan<T>(_ expectedValue: T?) -> Matcher<T> where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func > <T>(lhs: SyncExpectation<T>, rhs: T) where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func > <T>(lhs: AsyncExpectation<T>, rhs: T) async where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beGreaterThan(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is greater than the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beGreaterThan<T>(_ expectedValue: T?) -> Matcher<T> where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func > <T>(lhs: SyncExpectation<T>, rhs: T?) where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func > <T>(lhs: AsyncExpectation<T>, rhs: T?) async where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is greater than -or equal to the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beGreaterThanOrEqualTo<T>(_ expectedValue: T?) -> Matcher<T> where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func >= <T>(lhs: SyncExpectation<T>, rhs: T) where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func >= <T>(lhs: AsyncExpectation<T>, rhs: T) async where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is greater than -or equal to the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beGreaterThanOrEqualTo<T>(_ expectedValue: T?) -> Matcher<T> where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func >= <T>(lhs: SyncExpectation<T>, rhs: T) where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func >= <T>(lhs: AsyncExpectation<T>, rhs: T) async where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beIdenticalTo(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is the same instance -as the expected instance.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beIdenticalTo(_ expected: AnyObject?) -> Matcher<AnyObject>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ===(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func === (lhs: SyncExpectation<AnyObject>, rhs: AnyObject?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ===(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func === (lhs: AsyncExpectation<AnyObject>, rhs: AnyObject?) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func !== (lhs: SyncExpectation<AnyObject>, rhs: AnyObject?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func !== (lhs: AsyncExpectation<AnyObject>, rhs: AnyObject?) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - be(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is the same instance -as the expected instance.

    - -

    Alias for “beIdenticalTo”.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func be(_ expected: AnyObject?) -> Matcher<AnyObject>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beLessThan(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is less than the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beLessThan<T>(_ expectedValue: T?) -> Matcher<T> where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func < <V>(lhs: SyncExpectation<V>, rhs: V) where V : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func < <V>(lhs: AsyncExpectation<V>, rhs: V) async where V : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beLessThan(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is less than the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beLessThan<T>(_ expectedValue: T?) -> Matcher<T> where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func < <V>(lhs: SyncExpectation<V>, rhs: V?) where V : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func < <V>(lhs: AsyncExpectation<V>, rhs: V?) async where V : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is less than -or equal to the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beLessThanOrEqualTo<T>(_ expectedValue: T?) -> Matcher<T> where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func <= <T>(lhs: SyncExpectation<T>, rhs: T) where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func <= <T>(lhs: AsyncExpectation<T>, rhs: T) async where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is less than -or equal to the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beLessThanOrEqualTo<T>(_ expectedValue: T?) -> Matcher<T> where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func <= <T>(lhs: SyncExpectation<T>, rhs: T) where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func <= <T>(lhs: AsyncExpectation<T>, rhs: T) async where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

beTrue() / beFalse() -

-
-
-
    -
  • -
    - - - - beTrue() - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is exactly true. -This matcher will not match against nils.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beTrue() -> Matcher<Bool>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beFalse() - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is exactly false. -This matcher will not match against nils.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beFalse() -> Matcher<Bool>
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

beTruthy() / beFalsy() -

-
-
-
    -
  • -
    - - - - beTruthy() - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is not logically false.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beTruthy<T>() -> Matcher<T> where T : Equatable, T : ExpressibleByBooleanLiteral
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beFalsy() - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is logically false. -This matcher will match against nils.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beFalsy<T>() -> Matcher<T> where T : Equatable, T : ExpressibleByBooleanLiteral
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beNil() - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is nil.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beNil<T>() -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beSuccess(test:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher for Result that succeeds when the actual value is success.

    - -

    You can pass a closure to do any arbitrary custom matching to the value inside result. -The closure only gets called when the result is success.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beSuccess<Success, Failure>(
    -    test: ((Success) -> Void)? = nil
    -) -> Matcher<Result<Success, Failure>>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beFailure(test:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher for Result that succeeds when the actual value is failure.

    - -

    You can pass a closure to do any arbitrary custom matching to the error inside result. -The closure only gets called when the result is failure.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beFailure<Success, Failure>(
    -    test: ((Failure) -> Void)? = nil
    -) -> Matcher<Result<Success, Failure>>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beVoid() - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is Void.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beVoid() -> Matcher<()>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == (lhs: SyncExpectation<()>, rhs: ())
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == (lhs: AsyncExpectation<()>, rhs: ()) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != (lhs: SyncExpectation<()>, rhs: ())
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != (lhs: AsyncExpectation<()>, rhs: ()) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beWithin(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is within given range.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beWithin<T>(_ range: Range<T>) -> Matcher<T> where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beWithin(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is within given range.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beWithin<T>(_ range: ClosedRange<T>) -> Matcher<T> where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beginWith(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual sequence’s first element -is equal to the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beginWith<S>(_ startingElement: S.Element) -> Matcher<S> where S : Sequence, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beginWith(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual collection’s first element -is equal to the expected object.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beginWith(_ startingElement: Any) -> Matcher<NMBOrderedCollection>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beginWith(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual string contains expected substring -where the expected substring’s location is zero.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beginWith(_ startingSubstring: String) -> Matcher<String>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beginWith(prefix:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the exepected sequence is a prefix of the actual sequence.

    - -

    This is a matcher abstraction for https://developer.apple.com/documentation/swift/sequence/2854218-starts

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beginWith<Seq1: Sequence, Seq2: Sequence>(prefix expectedPrefix: Seq2?)
    -    -> Matcher<Seq1> where Seq1.Element: Equatable, Seq1.Element == Seq2.Element
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beginWith(prefix:by:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the expected sequence is the prefix of the actual sequence, using the given matcher as the equivalence test.

    - -

    This is a matcher abstraction for https://developer.apple.com/documentation/swift/sequence/2996828-starts

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beginWith<Seq1: Sequence, Seq2: Sequence>(
    -    prefix expectedPrefix: Seq2?,
    -    by areEquivalent: @escaping (Seq1.Element, Seq2.Element) -> Bool
    -) -> Matcher<Seq1>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual sequence contains the expected values.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain<S>(_ items: S.Element...) -> Matcher<S> where S : Sequence, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual sequence contains the expected values.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain<S>(_ items: [S.Element]) -> Matcher<S> where S : Sequence, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set contains the expected values.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain<S>(_ items: S.Element...) -> Matcher<S> where S : SetAlgebra, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set contains the expected values.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain<S>(_ items: [S.Element]) -> Matcher<S> where S : SetAlgebra, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set contains the expected values.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain<S>(_ items: S.Element...) -> Matcher<S> where S : Sequence, S : SetAlgebra, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set contains the expected values.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain<S>(_ items: [S.Element]) -> Matcher<S> where S : Sequence, S : SetAlgebra, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual string contains the expected substring.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain(_ substrings: String...) -> Matcher<String>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain(_ substrings: [String]) -> Matcher<String>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual string contains the expected substring.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain(_ substrings: NSString...) -> Matcher<NSString>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain(_ substrings: [NSString]) -> Matcher<NSString>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual collection contains the expected object.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain(_ items: Any?...) -> Matcher<NMBContainer>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain(_ items: [Any?]) -> Matcher<NMBContainer>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func containElementSatisfying<S: Sequence>(
    -    _ matcher: @escaping ((S.Element) -> Bool), _ matcherDescription: String = ""
    -) -> Matcher<S>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func containElementSatisfying<S: Sequence>(
    -    _ matcher: @escaping ((S.Element) async -> Bool), _ matcherDescription: String = ""
    -) -> AsyncMatcher<S>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - elementsEqual(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual sequence and the exepected sequence contain the same elements in -the same order.

    - -

    This is a matcher abstraction for https://developer.apple.com/documentation/swift/sequence/2854213-elementsequal

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func elementsEqual<Seq1: Sequence, Seq2: Sequence>(
    -    _ expectedValue: Seq2?
    -) -> Matcher<Seq1> where Seq1.Element: Equatable, Seq1.Element == Seq2.Element
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - elementsEqual(_:by:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual sequence and the exepected sequence contain equivalent elements in -the same order, using the given matcher as the equivalence test.

    - -

    This is a matcher abstraction for https://developer.apple.com/documentation/swift/sequence/2949668-elementsequal

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func elementsEqual<Seq1: Sequence, Seq2: Sequence>(
    -    _ expectedValue: Seq2?,
    -    by areEquivalent: @escaping (Seq1.Element, Seq2.Element) -> Bool
    -) -> Matcher<Seq1>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - endWith(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual sequence’s last element -is equal to the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func endWith<S>(_ endingElement: S.Element) -> Matcher<S> where S : Sequence, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - endWith(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual collection’s last element -is equal to the expected object.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func endWith(_ endingElement: Any) -> Matcher<NMBOrderedCollection>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - endWith(_:) - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func endWith(_ endingSubstring: String) -> Matcher<String>
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple2 -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual tuple is equal to the expected tuple. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable>(
    -    _ expectedValue: (T1, T2)?
    -) -> Matcher<(T1, T2)>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable>(
    -    lhs: SyncExpectation<(T1, T2)>,
    -    rhs: (T1, T2)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2)>,
    -    rhs: (T1, T2)?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable>(
    -    lhs: SyncExpectation<(T1, T2)>,
    -    rhs: (T1, T2)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2)>,
    -    rhs: (T1, T2)?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple3 -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual tuple is equal to the expected tuple. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable>(
    -    _ expectedValue: (T1, T2, T3)?
    -) -> Matcher<(T1, T2, T3)>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3)>,
    -    rhs: (T1, T2, T3)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3)>,
    -    rhs: (T1, T2, T3)?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3)>,
    -    rhs: (T1, T2, T3)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3)>,
    -    rhs: (T1, T2, T3)?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple4 -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual tuple is equal to the expected tuple. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    _ expectedValue: (T1, T2, T3, T4)?
    -) -> Matcher<(T1, T2, T3, T4)>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3, T4)>,
    -    rhs: (T1, T2, T3, T4)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3, T4)>,
    -    rhs: (T1, T2, T3, T4)?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3, T4)>,
    -    rhs: (T1, T2, T3, T4)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3, T4)>,
    -    rhs: (T1, T2, T3, T4)?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple5 -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual tuple is equal to the expected tuple. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    _ expectedValue: (T1, T2, T3, T4, T5)?
    -) -> Matcher<(T1, T2, T3, T4, T5)>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3, T4, T5)>,
    -    rhs: (T1, T2, T3, T4, T5)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3, T4, T5)>,
    -    rhs: (T1, T2, T3, T4, T5)?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3, T4, T5)>,
    -    rhs: (T1, T2, T3, T4, T5)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3, T4, T5)>,
    -    rhs: (T1, T2, T3, T4, T5)?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple6 -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual tuple is equal to the expected tuple. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    _ expectedValue: (T1, T2, T3, T4, T5, T6)?
    -) -> Matcher<(T1, T2, T3, T4, T5, T6)>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3, T4, T5, T6)>,
    -    rhs: (T1, T2, T3, T4, T5, T6)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3, T4, T5, T6)>,
    -    rhs: (T1, T2, T3, T4, T5, T6)?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3, T4, T5, T6)>,
    -    rhs: (T1, T2, T3, T4, T5, T6)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3, T4, T5, T6)>,
    -    rhs: (T1, T2, T3, T4, T5, T6)?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple2 Array -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable>(
    -    _ expectedValue: [(T1, T2)]?
    -) -> Matcher<[(T1, T2)]>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2)]>,
    -    rhs: [(T1, T2)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2)]>,
    -    rhs: [(T1, T2)]?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2)]>,
    -    rhs: [(T1, T2)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2)]>,
    -    rhs: [(T1, T2)]?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple3 Array -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable>(
    -    _ expectedValue: [(T1, T2, T3)]?
    -) -> Matcher<[(T1, T2, T3)]>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3)]>,
    -    rhs: [(T1, T2, T3)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3)]>,
    -    rhs: [(T1, T2, T3)]?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3)]>,
    -    rhs: [(T1, T2, T3)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3)]>,
    -    rhs: [(T1, T2, T3)]?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple4 Array -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    _ expectedValue: [(T1, T2, T3, T4)]?
    -) -> Matcher<[(T1, T2, T3, T4)]>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3, T4)]>,
    -    rhs: [(T1, T2, T3, T4)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3, T4)]>,
    -    rhs: [(T1, T2, T3, T4)]?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3, T4)]>,
    -    rhs: [(T1, T2, T3, T4)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3, T4)]>,
    -    rhs: [(T1, T2, T3, T4)]?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple5 Array -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    _ expectedValue: [(T1, T2, T3, T4, T5)]?
    -) -> Matcher<[(T1, T2, T3, T4, T5)]>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3, T4, T5)]>,
    -    rhs: [(T1, T2, T3, T4, T5)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3, T4, T5)]>,
    -    rhs: [(T1, T2, T3, T4, T5)]?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3, T4, T5)]>,
    -    rhs: [(T1, T2, T3, T4, T5)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3, T4, T5)]>,
    -    rhs: [(T1, T2, T3, T4, T5)]?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple6 Array -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    _ expectedValue: [(T1, T2, T3, T4, T5, T6)]?
    -) -> Matcher<[(T1, T2, T3, T4, T5, T6)]>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3, T4, T5, T6)]>,
    -    rhs: [(T1, T2, T3, T4, T5, T6)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3, T4, T5, T6)]>,
    -    rhs: [(T1, T2, T3, T4, T5, T6)]?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3, T4, T5, T6)]>,
    -    rhs: [(T1, T2, T3, T4, T5, T6)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3, T4, T5, T6)]>,
    -    rhs: [(T1, T2, T3, T4, T5, T6)]?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    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).

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T>(_ expectedValue: T) -> Matcher<T> where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher allowing comparison of collection with optional type

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T>(_ expectedValue: [T?]) -> Matcher<[T?]> where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    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).

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T>(_ expectedValue: T?) -> Matcher<T> where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set is equal to the expected set.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T>(_ expectedValue: Set<T>) -> Matcher<Set<T>> where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set is equal to the expected set.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T>(_ expectedValue: Set<T>?) -> Matcher<Set<T>> where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set is equal to the expected set.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T>(_ expectedValue: Set<T>) -> Matcher<Set<T>> where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set is equal to the expected set.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T>(_ expectedValue: Set<T>?) -> Matcher<Set<T>> where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual dictionary is equal to the expected dictionary

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<K, V>(_ expectedValue: [K : V?]) -> Matcher<[K : V]> where K : Hashable, V : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: SyncExpectation<T>, rhs: T) where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: SyncExpectation<T>, rhs: T?) where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: SyncExpectation<T>, rhs: T) where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: SyncExpectation<T>, rhs: T?) where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: SyncExpectation<[T]>, rhs: [T]?) where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: SyncExpectation<[T]>, rhs: [T]?) where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>) where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>?) where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>) where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>?) where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>) where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>?) where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>) where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>?) where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T, C>(lhs: SyncExpectation<[T : C]>, rhs: [T : C]?) where T : Hashable, C : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T, C>(lhs: SyncExpectation<[T : C]>, rhs: [T : C]?) where T : Hashable, C : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: AsyncExpectation<T>, rhs: T) async where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: AsyncExpectation<T>, rhs: T?) async where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: AsyncExpectation<T>, rhs: T) async where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: AsyncExpectation<T>, rhs: T?) async where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: AsyncExpectation<[T]>, rhs: [T]?) async where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: AsyncExpectation<[T]>, rhs: [T]?) async where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>) async where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>?) async where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>) async where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>?) async where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>) async where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>?) async where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>) async where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>?) async where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T, C>(lhs: AsyncExpectation<[T : C]>, rhs: [T : C]?) async where T : Hashable, C : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T, C>(lhs: AsyncExpectation<[T : C]>, rhs: [T : C]?) async where T : Hashable, C : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - haveCount(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual Collection’s count equals -the expected value

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func haveCount<T>(_ expectedValue: Int) -> Matcher<T> where T : Collection
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - haveCount(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual collection’s count equals -the expected value

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func haveCount(_ expectedValue: Int) -> Matcher<NMBCollection>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - map(_:_:) - -
    -
    -
    -
    -
    -
    -

    map works by transforming the expression to a value that the given matcher uses.

    - -

    For example, you might only care that a particular property on a method equals some other value. -So, you could write expect(myObject).to(lens(\.someIntValue, equal(3)). -This is also useful in conjunction with satisfyAllOf to do a partial equality of an object.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func map<T, U>(_ transform: @escaping (T) throws -> U, _ matcher: Matcher<U>) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - map(_:_:) - -
    -
    -
    -
    -
    -
    -

    map works by transforming the expression to a value that the given matcher uses.

    - -

    For example, you might only care that a particular property on a method equals some other value. -So, you could write expect(myObject).to(lens(\.someIntValue, equal(3)). -This is also useful in conjunction with satisfyAllOf to do a partial equality of an object.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func map<T, U>(_ transform: @escaping (T) async throws -> U, _ matcher: some AsyncableMatcher<U>) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - match(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual string satisfies the regular expression -described by the expected string.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func match(_ expectedValue: String?) -> Matcher<String>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - matchError(_:) - -
    -
    -
    -
    -
    -
    -

    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 comparison by _domain and _code.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func matchError<T>(_ error: T) -> Matcher<Error> where T : Error
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - matchError(_:) - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func matchError<T>(_ error: T) -> Matcher<Error> where T : Equatable, T : Error
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - matchError(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual expression evaluates to an -error of the specified type

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func matchError<T>(_ errorType: T.Type) -> Matcher<Error> where T : Error
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func postNotifications<Out>(
    -    _ matcher: Matcher<[Notification]>,
    -    from center: NotificationCenter = .default
    -) -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func postDistributedNotifications<Out>(
    -    _ matcher: Matcher<[Notification]>,
    -    from center: DistributedNotificationCenter = .default(),
    -    names: Set<Notification.Name>
    -) -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func raiseException<Out>(
    -    named: NSExceptionName? = nil,
    -    reason: String? = nil,
    -    userInfo: NSDictionary? = nil,
    -    closure: ((NSException) -> Void)? = nil
    -) -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func raiseException<Out>(
    -    named: String?,
    -    reason: String? = nil,
    -    userInfo: NSDictionary? = nil,
    -    closure: ((NSException) -> Void)? = nil
    -) -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAllOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with all of the matchers -provided in the variable list of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func satisfyAllOf<T>(_ matchers: Matcher<T>...) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAllOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with all of the matchers -provided in the array of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func satisfyAllOf<T>(_ matchers: [Matcher<T>]) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - &&(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func && <T>(left: Matcher<T>, right: Matcher<T>) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAllOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with all of the matchers -provided in the variable list of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(macOS 13.0.0, iOS 16.0.0, tvOS 16.0.0, watchOS 9.0.0, *)
    -public func satisfyAllOf<T>(_ matchers: any AsyncableMatcher<T>...) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAllOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with all of the matchers -provided in the array of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(macOS 13.0.0, iOS 16.0.0, tvOS 16.0.0, watchOS 9.0.0, *)
    -public func satisfyAllOf<T>(_ matchers: [any AsyncableMatcher<T>]) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - &&(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func && <T>(left: some AsyncableMatcher<T>, right: some AsyncableMatcher<T>) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAnyOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with any of the matchers -provided in the variable list of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func satisfyAnyOf<T>(_ matchers: Matcher<T>...) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAnyOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with any of the matchers -provided in the array of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func satisfyAnyOf<T>(_ matchers: [Matcher<T>]) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ||(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func || <T>(left: Matcher<T>, right: Matcher<T>) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAnyOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with any of the matchers -provided in the variable list of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(macOS 13.0.0, iOS 16.0.0, tvOS 16.0.0, watchOS 9.0.0, *)
    -public func satisfyAnyOf<T>(_ matchers: any AsyncableMatcher<T>...) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAnyOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with any of the matchers -provided in the array of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(macOS 13.0.0, iOS 16.0.0, tvOS 16.0.0, watchOS 9.0.0, *)
    -public func satisfyAnyOf<T>(_ matchers: [any AsyncableMatcher<T>]) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ||(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func || <T>(left: some AsyncableMatcher<T>, right: some AsyncableMatcher<T>) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Run the provided block. If a POSIX SIGILL is received, handle it and return a BadInstructionException (which is just an empty object in this POSIX signal version). Otherwise return nil. -NOTE: This function is only intended for use in test harnesses – use in a distributed build is almost certainly a bad choice. If a SIGILL is received, the block will be interrupted using a C longjmp. The risks associated with abrupt jumps apply here: most Swift functions are not interrupt-safe. Memory may be leaked and the program will not necessarily be left in a safe state.

    - -
    -
    -
    -
  • -
  • -
    - - - - throwAssertion() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func throwAssertion<Out>() -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - throwError() - -
    -
    -
    -
    -
    -
    -

    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 comparison 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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func throwError<Out>() -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func throwError<T, Out>(_ error: T, closure: ((Error) -> Void)? = nil) -> Matcher<Out> where T : Error
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func throwError<T, Out>(_ error: T, closure: ((T) -> Void)? = nil) -> Matcher<Out> where T : Equatable, T : Error
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func throwError<T: Error, Out>(
    -    errorType: T.Type,
    -    closure: ((T) -> Void)? = nil
    -) -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - throwError(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 Error in the closure.

    - -

    The closure only gets called when an error was thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func throwError<Out>(closure: @escaping ((Error) -> Void)) -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - throwError(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 Error in the closure.

    - -

    The closure only gets called when an error was thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func throwError<T, Out>(closure: @escaping ((T) -> Void)) -> Matcher<Out> where T : Error
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - succeed() - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that takes in a closure for validation.

    - -

    Return .succeeded when the validation succeeds. -Return .failed with a failure reason when the validation fails.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func succeed() -> Matcher<ToSucceedResult>
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

UnwrapEventually -

-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwrap<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure @escaping () throws -> T?) throws -> T
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwrap<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> T?)) throws -> T
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwraps<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure @escaping () throws -> T?) throws -> T
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwraps<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> T?)) throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - pollUnwrap(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwrap<T>(file: FileString = #file, line: UInt = #line, _ expression: @escaping () async throws -> T?) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - pollUnwrap(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwrap<T>(file: FileString = #file, line: UInt = #line, _ expression: () -> (() async throws -> T?)) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - pollUnwrapa(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwrapa<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure @escaping () async throws -> T?) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - pollUnwrapa(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwrapa<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() async throws -> T?)) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - stringify(_:) - -
    -
    -
    -
    -
    -
    -

    Returns a string appropriate for displaying in test output -from the provided value.

    -
    -

    See also

    -

    TestOutputStringConvertible

    - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func stringify<T>(_ value: T?) -> String
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - value - - -
    -

    A value that will show up in a test’s output.

    -
    -
    -
    -
    -

    Return Value

    -

    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.

    -
    -
    -
    -
  • -
-
-
-
- - -
- -

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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func prettyCollectionType<T>(_ value: T) -> String
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - value - - -
    -

    A value that will be used to determine a type name.

    -
    -
    -
    -
    -

    Return Value

    -

    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.

    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Returns the type name for a given collection type. This overload is used by Swift -collection types.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func prettyCollectionType<T>(_ collection: T) -> String where T : Collection
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - collection - - -
    -

    A Swift CollectionType value.

    -
    -
    -
    -
    -

    Return Value

    -

    A string representing the dynamicType of the value.

    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Global Variables.html b/docs/Global Variables.html deleted file mode 100644 index 6ec912252..000000000 --- a/docs/Global Variables.html +++ /dev/null @@ -1,1290 +0,0 @@ - - - - Global Variables Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Global Variables

-

The following global variables are available globally.

- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    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

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var NimbleAssertionHandler: AssertionHandler
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - DefaultDelta - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let DefaultDelta: Double
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Protocols.html b/docs/Protocols.html deleted file mode 100644 index afc040121..000000000 --- a/docs/Protocols.html +++ /dev/null @@ -1,1495 +0,0 @@ - - - - Protocols Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Protocols

-

The following protocols are available globally.

- -
-
-
-
    -
  • -
    - - - - AssertionHandler - -
    -
    -
    -
    -
    -
    -

    Protocol for the assertion handler that Nimble uses for all expectations.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol AssertionHandler
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - Expectation - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol Expectation
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - AsyncableMatcher - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol AsyncableMatcher<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBContainer - -
    -
    -
    -
    -
    -
    -

    Protocol for types that support contain() matcher.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol NMBContainer
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBCollection - -
    -
    -
    -
    -
    -
    -

    Protocol for types that support only beEmpty(), haveCount() matchers

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol NMBCollection
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBOrderedCollection - -
    -
    -
    -
    -
    -
    -

    Protocol for types that support beginWith(), endWith(), beEmpty() matchers

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol NMBOrderedCollection : NMBCollection
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBDoubleConvertible - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBComparable - -
    -
    -
    -
    -
    -
    -

    Protocol for types to support beLessThan(), beLessThanOrEqualTo(), - beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers.

    - -

    Types that conform to Swift’s Comparable protocol will work implicitly too

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public protocol NMBComparable
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    -
    -

    See also

    - CustomDebugStringConvertible - -
    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol TestOutputStringConvertible
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Protocols/AssertionHandler.html b/docs/Protocols/AssertionHandler.html deleted file mode 100644 index 53381f86f..000000000 --- a/docs/Protocols/AssertionHandler.html +++ /dev/null @@ -1,1264 +0,0 @@ - - - - AssertionHandler Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AssertionHandler

-
-
- -
public protocol AssertionHandler
- -
-
-

Protocol for the assertion handler that Nimble uses for all expectations.

- -
-
-
- -
-
-
- -
-
- - diff --git a/docs/Protocols/AsyncableMatcher.html b/docs/Protocols/AsyncableMatcher.html deleted file mode 100644 index fbef97920..000000000 --- a/docs/Protocols/AsyncableMatcher.html +++ /dev/null @@ -1,1294 +0,0 @@ - - - - AsyncableMatcher Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AsyncableMatcher

-
-
- -
public protocol AsyncableMatcher<Value>
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - Value - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    associatedtype Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfies(_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    func satisfies(_ expression: AsyncExpression<Value>) async throws -> MatcherResult
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Protocols/Expectation.html b/docs/Protocols/Expectation.html deleted file mode 100644 index 59fac22e8..000000000 --- a/docs/Protocols/Expectation.html +++ /dev/null @@ -1,1399 +0,0 @@ - - - - Expectation Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Expectation

-
-
- -
public protocol Expectation
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    var location: SourceLocation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - status - -
    -
    -
    -
    -
    -
    -

    The status of the test after matchers have been evaluated.

    - -

    This property can be used for changing test behavior based whether an expectation has -passed.

    - -

    In the below example, we perform additional tests on an array only if it has enough -elements.

    -
    if expect(array).to(haveCount(10)).status == .passed {
    -   expect(array[9]).to(...)
    -}
    -
    -
    -

    Remark

    - Similar functionality can be achieved using the onFailure(throw:) method. - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    var status: ExpectationStatus { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - verify(_:_:) - -
    -
    -
    -
    -
    -
    -

    Takes the result of a test and passes it to the assertion handler.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -func verify(_ pass: Bool, _ message: FailureMessage) -> Self
    - -
    -
    -
    -

    Return Value

    -

    An updated Expression with the result of the test applied to the status - property.

    -
    -
    -
    -
  • -
  • -
    - - - - onFailure(throw:) - - - Extension method - -
    -
    -
    -
    -
    -
    -

    Throws the supplied error if the expectation has previously failed.

    - -

    This provides a mechanism for halting tests when a failure occurs. This can be used in -conjunction with Quick.StopTest to halt a test when a failure would cause subsequent test -code to fail.

    - -

    In the below example, the test will stop in the first line if array.count == 5 rather -than crash on the second line.

    -
    try expect(array).to(haveCount(10)).onFailure(throw: StopTest.silently)
    -expect(array[9]).to(...)
    -
    -
    -

    Warning

    -

    This method MUST be called after a matcher method like to or not. - Otherwise, this expectation will be in an indeterminate state and will - unconditionally log an error.

    - -
    -

    Remark

    -

    Similar functionality can be achieved using the status property.

    - -
    -

    Attention

    -

    This is deprecated in favor of the require dsl (require, unwrap, - pollUnwrap), which integrates the matcher seemlessly, or, in the case of - unwrap and pollUnwrap, acts as a shorthand when you require that an - expression evaluate to some non-nil value. onFailure will be removed in - Nimble 15.

    - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, message: "Use the require dsl")
    -public func onFailure(throw error: Error) throws
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Protocols/NMBCollection.html b/docs/Protocols/NMBCollection.html deleted file mode 100644 index 936884de8..000000000 --- a/docs/Protocols/NMBCollection.html +++ /dev/null @@ -1,1264 +0,0 @@ - - - - NMBCollection Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBCollection

-
-
- -
public protocol NMBCollection
- -
-
-

Protocol for types that support only beEmpty(), haveCount() matchers

- -
-
-
-
    -
  • -
    - - - - count - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    var count: Int { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Protocols/NMBComparable.html b/docs/Protocols/NMBComparable.html deleted file mode 100644 index 84f1a3828..000000000 --- a/docs/Protocols/NMBComparable.html +++ /dev/null @@ -1,1268 +0,0 @@ - - - - NMBComparable Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBComparable

-
-
- -
@objc
-public protocol NMBComparable
- -
-
-

Protocol for types to support beLessThan(), beLessThanOrEqualTo(), - beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers.

- -

Types that conform to Swift’s Comparable protocol will work implicitly too

- -
-
-
-
    -
  • -
    - - - - NMB_compare(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    func NMB_compare(_ otherObject: NMBComparable!) -> ComparisonResult
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Protocols/NMBContainer.html b/docs/Protocols/NMBContainer.html deleted file mode 100644 index 48927aa8d..000000000 --- a/docs/Protocols/NMBContainer.html +++ /dev/null @@ -1,1264 +0,0 @@ - - - - NMBContainer Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBContainer

-
-
- -
public protocol NMBContainer
- -
-
-

Protocol for types that support contain() matcher.

- -
-
-
-
    -
  • -
    - - - - contains(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    func contains(_ anObject: Any) -> Bool
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Protocols/NMBDoubleConvertible.html b/docs/Protocols/NMBDoubleConvertible.html deleted file mode 100644 index f4846ead3..000000000 --- a/docs/Protocols/NMBDoubleConvertible.html +++ /dev/null @@ -1,1264 +0,0 @@ - - - - NMBDoubleConvertible Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBDoubleConvertible

-
-
- -
public protocol NMBDoubleConvertible
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - doubleValue - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    var doubleValue: CDouble { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Protocols/NMBOrderedCollection.html b/docs/Protocols/NMBOrderedCollection.html deleted file mode 100644 index 7a0d06242..000000000 --- a/docs/Protocols/NMBOrderedCollection.html +++ /dev/null @@ -1,1264 +0,0 @@ - - - - NMBOrderedCollection Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBOrderedCollection

-
-
- -
public protocol NMBOrderedCollection : NMBCollection
- -
-
-

Protocol for types that support beginWith(), endWith(), beEmpty() matchers

- -
-
-
-
    -
  • -
    - - - - object(at:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    func object(at index: Int) -> Any
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Protocols/TestOutputStringConvertible.html b/docs/Protocols/TestOutputStringConvertible.html deleted file mode 100644 index 971db493e..000000000 --- a/docs/Protocols/TestOutputStringConvertible.html +++ /dev/null @@ -1,1273 +0,0 @@ - - - - TestOutputStringConvertible Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

TestOutputStringConvertible

-
-
- -
public protocol TestOutputStringConvertible
- -
-
-

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.

-
-

See also

- CustomDebugStringConvertible - -
- -
-
-
-
    -
  • -
    - - - - testDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    var testDescription: String { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Structs.html b/docs/Structs.html deleted file mode 100644 index 7028eac53..000000000 --- a/docs/Structs.html +++ /dev/null @@ -1,1665 +0,0 @@ - - - - Structures Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Structures

-

The following structures are available globally.

- -
-
-
-
    -
  • -
    - - - - AssertionRecord - -
    -
    -
    -
    -
    -
    -

    A data structure that stores information about an assertion when -AssertionRecorder is set as the Nimble assertion handler.

    - -

    @see AssertionRecorder -@see AssertionHandler

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct AssertionRecord : CustomStringConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - AsyncExpression - -
    -
    -
    -
    -
    -
    -

    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, SyncExpression 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.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct AsyncExpression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - SyncExpectation - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct SyncExpectation<Value> : Expectation
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - AsyncExpectation - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct AsyncExpectation<Value> : Expectation
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - Expression - -
    -
    -
    -
    -
    -
    -

    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, SyncExpression 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.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct Expression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - Matcher - -
    -
    -
    -
    -
    -
    -

    A Matcher is part of the new matcher API that provides assertions to expectations.

    - -

    Given a code snippet:

    - -

    expect(1).to(equal(2)) - ^^^^^^^^ - Called a “matcher”

    - -

    A matcher consists of two parts a constructor function and the Matcher.

    - -

    The Matcher provide the heavy lifting on how to assert against a given value. Internally, -matchers are simple wrappers around closures to provide static type information and -allow composition and wrapping of existing behaviors.

    - -

    In the 2023 Apple Platform releases (macOS 14, iOS 17, watchOS 10, tvOS 17, visionOS 1), Apple -renamed NSMatcher to Matcher. In response, we decided to rename Matcher to -Matcher.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct Matcher<T>
    -
    extension Matcher: AsyncableMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - AsyncMatcher - -
    -
    -
    -
    -
    -
    -

    An AsyncMatcher is part of the new matcher API that provides assertions to expectations.

    - -

    Given a code snippet:

    - -

    expect(1).to(equal(2)) - ^^^^^^^^ - Called a “matcher”

    - -

    A matcher consists of two parts a constructor function and the Matcher.

    - -

    The Matcher provide the heavy lifting on how to assert against a given value. Internally, -matchers are simple wrappers around closures to provide static type information and -allow composition and wrapping of existing behaviors.

    - -

    AsyncMatchers serve to allow writing matchers that must be run in async contexts. -These can also be used with either Expectations or AsyncExpectations. -But these can only be used from async contexts, and are unavailable in Objective-C. -You can, however, call regular Matchers from an AsyncMatcher, if you wish to compose one like that.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct AsyncMatcher<T> : AsyncableMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ExpectationNil - -
    -
    -
    -
    -
    -
    -

    Represents nil value to be used with the operator overloads for beNil.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct ExpectationNil : ExpressibleByNilLiteral
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MatcherResult - -
    -
    -
    -
    -
    -
    -

    The value that a Matcher returns to describe if the given (actual) value matches the -matcher.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct MatcherResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - SyncRequirement - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct SyncRequirement<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - AsyncRequirement - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct AsyncRequirement<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - PollingDefaults - -
    -
    -
    -
    -
    -
    -

    If you are running on a slower machine, it could be useful to increase the default timeout value -or slow down poll interval. Default timeout interval is 1, and poll interval is 0.01.

    -
    -

    Note

    - This used to be known as AsyncDefaults. - -
    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct PollingDefaults
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - RequireError - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct RequireError : Error, CustomNSError
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Structs/AssertionRecord.html b/docs/Structs/AssertionRecord.html deleted file mode 100644 index acf45a260..000000000 --- a/docs/Structs/AssertionRecord.html +++ /dev/null @@ -1,1348 +0,0 @@ - - - - AssertionRecord Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AssertionRecord

-
-
- -
public struct AssertionRecord : CustomStringConvertible
- -
-
-

A data structure that stores information about an assertion when -AssertionRecorder is set as the Nimble assertion handler.

- -

@see AssertionRecorder -@see AssertionHandler

- -
-
-
-
    -
  • -
    - - - - success - -
    -
    -
    -
    -
    -
    -

    Whether the assertion succeeded or failed

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let success: Bool
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - message - -
    -
    -
    -
    -
    -
    -

    The failure message the assertion would display on failure.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let message: FailureMessage
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    The source location the expectation occurred on.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let location: SourceLocation
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - description - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var description: String { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Structs/AsyncExpectation.html b/docs/Structs/AsyncExpectation.html deleted file mode 100644 index 754e98889..000000000 --- a/docs/Structs/AsyncExpectation.html +++ /dev/null @@ -1,2129 +0,0 @@ - - - - AsyncExpectation Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AsyncExpectation

-
-
- -
public struct AsyncExpectation<Value> : Expectation
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - expression - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let expression: AsyncExpression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - status - -
    -
    -
    -
    -
    -
    -

    The status of the test after matchers have been evaluated.

    - -

    This property can be used for changing test behavior based whether an expectation has -passed.

    - -

    In the below example, we perform additional tests on an array only if it has enough -elements.

    -
    if expect(array).to(haveCount(10)).status == .passed {
    -   expect(array[9]).to(...)
    -}
    -
    -
    -

    Remark

    - Similar functionality can be achieved using the onFailure(throw:) method. - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let status: ExpectationStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(expression:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expression: AsyncExpression<Value>)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var location: SourceLocation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - verify(_:_:) - -
    -
    -
    -
    -
    -
    -

    Takes the result of a test and passes it to the assertion handler.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func verify(_ pass: Bool, _ message: FailureMessage) -> AsyncExpectation<Value>
    - -
    -
    -
    -

    Return Value

    -

    An updated Expression with the result of the test applied to the status - property.

    -
    -
    -
    -
  • -
  • -
    - - - - to(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: Matcher<Value>, description: String? = nil) async -> AsyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: Matcher<Value>, description: String? = nil) async -> AsyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: Matcher<Value>, description: String? = nil) async -> AsyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - to(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: AsyncMatcher<Value>, description: String? = nil) async -> AsyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: AsyncMatcher<Value>, description: String? = nil) async -> AsyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: AsyncMatcher<Value>, description: String? = nil) async -> AsyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func == (lhs: AsyncExpectation, rhs: ExpectationNil) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func != (lhs: AsyncExpectation, rhs: ExpectationNil) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

With Synchronous Matchers -

-
-
- -
-
-
- - -
- -

With AsyncMatchers -

-
-
- -
-
-
- -
-
- - diff --git a/docs/Structs/AsyncExpression.html b/docs/Structs/AsyncExpression.html deleted file mode 100644 index 7638d6c71..000000000 --- a/docs/Structs/AsyncExpression.html +++ /dev/null @@ -1,1662 +0,0 @@ - - - - AsyncExpression Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AsyncExpression

-
-
- -
public struct AsyncExpression<Value>
- -
-
-

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, SyncExpression 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.

- -
-
-
-
    -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let location: SourceLocation
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - isClosure - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let isClosure: Bool
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Creates a new expression struct. Normally, expect(…) will manage this -creation process. The expression is memoized.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expression: @escaping () async throws -> Value?, location: SourceLocation, isClosure: Bool = true)
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - - - - - -
    - - expression - - -
    -

    The closure that produces a given value.

    -
    -
    - - location - - -
    -

    The source location that this closure originates from.

    -
    -
    - - 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.

    -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Creates a new expression struct. Normally, expect(…) will manage this -creation process.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(memoizedExpression: @escaping (Bool) async throws -> Value?, location: SourceLocation, withoutCaching: Bool, isClosure: Bool = true)
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - -
    - - expression - - -
    -

    The closure that produces a given value.

    -
    -
    - - location - - -
    -

    The source location that this closure originates from.

    -
    -
    - - 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.

    -
    -
    - - 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.

    -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - toSynchronousExpression() - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Creates a new synchronous expression, for use in Matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toSynchronousExpression() async -> Expression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - cast(_:) - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func cast<U>(_ block: @escaping (Value?) throws -> U?) -> AsyncExpression<U>
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - block - - -
    -

    The block that can cast the current Expression value to a - new type.

    -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - cast(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func cast<U>(_ block: @escaping (Value?) async throws -> U?) -> AsyncExpression<U>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - evaluate() - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func evaluate() async throws -> Value?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - withoutCaching() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func withoutCaching() -> AsyncExpression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - withCaching() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func withCaching() -> AsyncExpression<Value>
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Structs/AsyncMatcher.html b/docs/Structs/AsyncMatcher.html deleted file mode 100644 index d78d8375d..000000000 --- a/docs/Structs/AsyncMatcher.html +++ /dev/null @@ -1,1485 +0,0 @@ - - - - AsyncMatcher Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AsyncMatcher

-
-
- -
public struct AsyncMatcher<T> : AsyncableMatcher
- -
-
-

An AsyncMatcher is part of the new matcher API that provides assertions to expectations.

- -

Given a code snippet:

- -

expect(1).to(equal(2)) - ^^^^^^^^ - Called a “matcher”

- -

A matcher consists of two parts a constructor function and the Matcher.

- -

The Matcher provide the heavy lifting on how to assert against a given value. Internally, -matchers are simple wrappers around closures to provide static type information and -allow composition and wrapping of existing behaviors.

- -

AsyncMatchers serve to allow writing matchers that must be run in async contexts. -These can also be used with either Expectations or AsyncExpectations. -But these can only be used from async contexts, and are unavailable in Objective-C. -You can, however, call regular Matchers from an AsyncMatcher, if you wish to compose one like that.

- -
-
-
-
    -
  • -
    - - - - init(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(_ matcher: @escaping (AsyncExpression<T>) async throws -> MatcherResult)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfies(_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Uses a matcher on a given value to see if it passes the matcher.

    - -

    @param expression The value to run the matcher’s logic against -@returns A matcher result indicate passing or failing and an associated error message.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func satisfies(_ expression: AsyncExpression<T>) async throws -> MatcherResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - define(matcher:) - -
    -
    -
    -
    -
    -
    -

    Like Matcher() constructor, but automatically guard against nil (actual) values

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func define(matcher: @escaping (AsyncExpression<T>) async throws -> MatcherResult) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - define(_:matcher:) - -
    -
    -
    -
    -
    -
    -

    Defines a matcher with a default message that can be returned in the closure -Also ensures the matcher’s actual value cannot pass with nil given.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func define(_ message: String = "match", matcher: @escaping (AsyncExpression<T>, ExpectationMessage) async throws -> MatcherResult) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Defines a matcher with a default message that can be returned in the closure -Unlike define, this allows nil values to succeed if the given closure chooses to.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func defineNilable(_ message: String = "match", matcher: @escaping (AsyncExpression<T>, ExpectationMessage) async throws -> MatcherResult) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - simple(_:matcher:) - -
    -
    -
    -
    -
    -
    -

    Provides a simple matcher definition that provides no control over the predefined -error message.

    - -

    Also ensures the matcher’s actual value cannot pass with nil given.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func simple(_ message: String = "match", matcher: @escaping (AsyncExpression<T>) async throws -> MatcherStatus) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Provides a simple matcher definition that provides no control over the predefined -error message.

    - -

    Unlike simple, this allows nil values to succeed if the given closure chooses to.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func simpleNilable(_ message: String = "match", matcher: @escaping (AsyncExpression<T>) async throws -> MatcherStatus) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - requireNonNil - -
    -
    -
    -
    -
    -
    -

    Returns a new Matcher based on the current one that always fails if nil is given as -the actual value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var requireNonNil: AsyncMatcher<T> { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Structs/AsyncRequirement.html b/docs/Structs/AsyncRequirement.html deleted file mode 100644 index dee5f829e..000000000 --- a/docs/Structs/AsyncRequirement.html +++ /dev/null @@ -1,2062 +0,0 @@ - - - - AsyncRequirement Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AsyncRequirement

-
-
- -
public struct AsyncRequirement<Value>
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - expression - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let expression: AsyncExpression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - customError - -
    -
    -
    -
    -
    -
    -

    A custom error to throw. -If nil, then we will throw a RequireError on failure.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let customError: Error?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var location: SourceLocation { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expression: AsyncExpression<Value>, customError: Error?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - verify(_:_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func verify(_ pass: Bool, _ message: FailureMessage, _ value: Value?) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - to(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: Matcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: Matcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: Matcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

AsyncMatchers -

-
-
-
    -
  • -
    - - - - to(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: AsyncMatcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: AsyncMatcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: AsyncMatcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Async Polling With Synchronous Matchers -

-
-
- -
-
-
- - -
- -

Async Polling With AsyncMatchers -

-
-
- -
-
-
- -
-
- - diff --git a/docs/Structs/ExpectationNil.html b/docs/Structs/ExpectationNil.html deleted file mode 100644 index d5076ec7e..000000000 --- a/docs/Structs/ExpectationNil.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - ExpectationNil Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

ExpectationNil

-
-
- -
public struct ExpectationNil : ExpressibleByNilLiteral
- -
-
-

Represents nil value to be used with the operator overloads for beNil.

- -
-
-
-
    -
  • -
    - - - - init(nilLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(nilLiteral: ())
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Structs/Expression.html b/docs/Structs/Expression.html deleted file mode 100644 index 1182058d2..000000000 --- a/docs/Structs/Expression.html +++ /dev/null @@ -1,1629 +0,0 @@ - - - - Expression Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Expression

-
-
- -
public struct Expression<Value>
- -
-
-

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, SyncExpression 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.

- -
-
-
-
    -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let location: SourceLocation
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - isClosure - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let isClosure: Bool
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Creates a new expression struct. Normally, expect(…) will manage this -creation process. The expression is memoized.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expression: @escaping () throws -> Value?, location: SourceLocation, isClosure: Bool = true)
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - - - - - -
    - - expression - - -
    -

    The closure that produces a given value.

    -
    -
    - - location - - -
    -

    The source location that this closure originates from.

    -
    -
    - - 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.

    -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Creates a new expression struct. Normally, expect(…) will manage this -creation process.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(memoizedExpression: @escaping (Bool) throws -> Value?, location: SourceLocation, withoutCaching: Bool, isClosure: Bool = true)
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - -
    - - expression - - -
    -

    The closure that produces a given value.

    -
    -
    - - location - - -
    -

    The source location that this closure originates from.

    -
    -
    - - 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.

    -
    -
    - - 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.

    -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - cast(_:) - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func cast<U>(_ block: @escaping (Value?) throws -> U?) -> Expression<U>
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - block - - -
    -

    The block that can cast the current Expression value to a - new type.

    -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - evaluate() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func evaluate() throws -> Value?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - withoutCaching() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func withoutCaching() -> Expression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - withCaching() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func withCaching() -> Expression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toAsyncExpression() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toAsyncExpression() -> AsyncExpression<Value>
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Structs/Matcher.html b/docs/Structs/Matcher.html deleted file mode 100644 index cb2a010d4..000000000 --- a/docs/Structs/Matcher.html +++ /dev/null @@ -1,1512 +0,0 @@ - - - - Matcher Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Matcher

-
-
- -
public struct Matcher<T>
-
extension Matcher: AsyncableMatcher
- -
-
-

A Matcher is part of the new matcher API that provides assertions to expectations.

- -

Given a code snippet:

- -

expect(1).to(equal(2)) - ^^^^^^^^ - Called a “matcher”

- -

A matcher consists of two parts a constructor function and the Matcher.

- -

The Matcher provide the heavy lifting on how to assert against a given value. Internally, -matchers are simple wrappers around closures to provide static type information and -allow composition and wrapping of existing behaviors.

- -

In the 2023 Apple Platform releases (macOS 14, iOS 17, watchOS 10, tvOS 17, visionOS 1), Apple -renamed NSMatcher to Matcher. In response, we decided to rename Matcher to -Matcher.

- -
-
-
-
    -
  • -
    - - - - init(_:) - -
    -
    -
    -
    -
    -
    -

    Constructs a matcher that knows how take a given value

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(_ matcher: @escaping (Expression<T>) throws -> MatcherResult)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfies(_:) - -
    -
    -
    -
    -
    -
    -

    Uses a matcher on a given value to see if it passes the matcher.

    - -

    @param expression The value to run the matcher’s logic against -@returns A matcher result indicate passing or failing and an associated error message.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func satisfies(_ expression: Expression<T>) throws -> MatcherResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfies(_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func satisfies(_ expression: AsyncExpression<T>) async throws -> MatcherResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - define(matcher:) - -
    -
    -
    -
    -
    -
    -

    Like Matcher() constructor, but automatically guard against nil (actual) values

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func define(matcher: @escaping (Expression<T>) throws -> MatcherResult) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - define(_:matcher:) - -
    -
    -
    -
    -
    -
    -

    Defines a matcher with a default message that can be returned in the closure -Also ensures the matcher’s actual value cannot pass with nil given.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func define(_ message: String = "match", matcher: @escaping (Expression<T>, ExpectationMessage) throws -> MatcherResult) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Defines a matcher with a default message that can be returned in the closure -Unlike define, this allows nil values to succeed if the given closure chooses to.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func defineNilable(_ message: String = "match", matcher: @escaping (Expression<T>, ExpectationMessage) throws -> MatcherResult) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - simple(_:matcher:) - -
    -
    -
    -
    -
    -
    -

    Provides a simple matcher definition that provides no control over the predefined -error message.

    - -

    Also ensures the matcher’s actual value cannot pass with nil given.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func simple(_ message: String = "match", matcher: @escaping (Expression<T>) throws -> MatcherStatus) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Provides a simple matcher definition that provides no control over the predefined -error message.

    - -

    Unlike simple, this allows nil values to succeed if the given closure chooses to.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func simpleNilable(_ message: String = "match", matcher: @escaping (Expression<T>) throws -> MatcherStatus) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - requireNonNil - -
    -
    -
    -
    -
    -
    -

    Returns a new Matcher based on the current one that always fails if nil is given as -the actual value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var requireNonNil: Matcher<T> { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Structs/MatcherResult.html b/docs/Structs/MatcherResult.html deleted file mode 100644 index 390edd516..000000000 --- a/docs/Structs/MatcherResult.html +++ /dev/null @@ -1,1400 +0,0 @@ - - - - MatcherResult Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

MatcherResult

-
-
- -
public struct MatcherResult
- -
-
-

The value that a Matcher returns to describe if the given (actual) value matches the -matcher.

- -
-
-
-
    -
  • -
    - - - - status - -
    -
    -
    -
    -
    -
    -

    Status indicates if the matcher matches, does not match, or fails.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var status: MatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - message - -
    -
    -
    -
    -
    -
    -

    The error message that can be displayed if it does not match

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var message: ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(status:message:) - -
    -
    -
    -
    -
    -
    -

    Constructs a new MatcherResult with a given status and error message

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(status: MatcherStatus, message: ExpectationMessage)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(bool:message:) - -
    -
    -
    -
    -
    -
    -

    Shorthand to MatcherResult(status: MatcherStatus(bool: bool), message: message)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(bool: Bool, message: ExpectationMessage)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Converts the result to a boolean based on what the expectation intended

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toBoolean(expectation style: ExpectationStyle) -> Bool
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toObjectiveC() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toObjectiveC() -> NMBMatcherResult
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Structs/PollingDefaults.html b/docs/Structs/PollingDefaults.html deleted file mode 100644 index 4d59dac12..000000000 --- a/docs/Structs/PollingDefaults.html +++ /dev/null @@ -1,1297 +0,0 @@ - - - - PollingDefaults Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

PollingDefaults

-
-
- -
public struct PollingDefaults
- -
-
-

If you are running on a slower machine, it could be useful to increase the default timeout value -or slow down poll interval. Default timeout interval is 1, and poll interval is 0.01.

-
-

Note

- This used to be known as AsyncDefaults. - -
- -
-
-
-
    -
  • -
    - - - - timeout - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static var timeout: NimbleTimeInterval
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - pollInterval - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static var pollInterval: NimbleTimeInterval
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Structs/RequireError.html b/docs/Structs/RequireError.html deleted file mode 100644 index fb80c799e..000000000 --- a/docs/Structs/RequireError.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - RequireError Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

RequireError

-
-
- -
public struct RequireError : Error, CustomNSError
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - errorUserInfo - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var errorUserInfo: [String : Any] { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Structs/SyncExpectation.html b/docs/Structs/SyncExpectation.html deleted file mode 100644 index 0a66b5fa0..000000000 --- a/docs/Structs/SyncExpectation.html +++ /dev/null @@ -1,2398 +0,0 @@ - - - - SyncExpectation Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

SyncExpectation

-
-
- -
public struct SyncExpectation<Value> : Expectation
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - expression - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let expression: Expression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - status - -
    -
    -
    -
    -
    -
    -

    The status of the test after matchers have been evaluated.

    - -

    This property can be used for changing test behavior based whether an expectation has -passed.

    - -

    In the below example, we perform additional tests on an array only if it has enough -elements.

    -
    if expect(array).to(haveCount(10)).status == .passed {
    -   expect(array[9]).to(...)
    -}
    -
    -
    -

    Remark

    - Similar functionality can be achieved using the onFailure(throw:) method. - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let status: ExpectationStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(expression:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expression: Expression<Value>)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - verify(_:_:) - -
    -
    -
    -
    -
    -
    -

    Takes the result of a test and passes it to the assertion handler.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func verify(_ pass: Bool, _ message: FailureMessage) -> SyncExpectation<Value>
    - -
    -
    -
    -

    Return Value

    -

    An updated Expression with the result of the test applied to the status - property.

    -
    -
    -
    -
  • -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var location: SourceLocation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - to(_:description:) - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: Matcher<Value>, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: Matcher<Value>, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: Matcher<Value>, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

AsyncMatchers -

-
-
-
    -
  • -
    - - - - to(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: AsyncMatcher<Value>, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: AsyncMatcher<Value>, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: AsyncMatcher<Value>, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func == (lhs: SyncExpectation, rhs: ExpectationNil)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func != (lhs: SyncExpectation, rhs: ExpectationNil)
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

With Synchronous Matchers -

-
-
- -
-
-
- - -
- -

With AsyncMatchers -

-
-
-
    -
  • -
    - - - - toEventually(_:timeout:pollInterval:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match by checking continuously -at each pollInterval until the timeout is reached.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toEventually(_ matcher: AsyncMatcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match by checking -continuously at each pollInterval until the timeout is reached.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toEventuallyNot(_ matcher: AsyncMatcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match by checking -continuously at each pollInterval until the timeout is reached.

    - -

    Alias of toEventuallyNot()

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNotEventually(_ matcher: AsyncMatcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNever(_:until:pollInterval:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to never match by checking -continuously at each pollInterval until the timeout is reached.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNever(_ matcher: AsyncMatcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - neverTo(_:until:pollInterval:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to never match by checking -continuously at each pollInterval until the timeout is reached.

    - -

    Alias of toNever()

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func neverTo(_ matcher: AsyncMatcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toAlways(_:until:pollInterval:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to always match by checking -continusouly at each pollInterval until the timeout is reached

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toAlways(_ matcher: AsyncMatcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - alwaysTo(_:until:pollInterval:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to always match by checking -continusouly at each pollInterval until the timeout is reached

    - -

    Alias of toAlways()

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func alwaysTo(_ matcher: AsyncMatcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -This form of toEventually does not work in any kind of async context. Use the async form of toEventually if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toEventually` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toEventually(_ matcher: Matcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -This form of toEventuallyNot does not work in any kind of async context. -Use the async form of toEventuallyNot if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toEventuallyNot` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toEventuallyNot(_ matcher: Matcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -This form of toNotEventually does not work in any kind of async context. -Use the async form of toNotEventually if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toNotEventually` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toNotEventually(_ matcher: Matcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to never 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.

    - -

    @warning -This form of toNever does not work in any kind of async context. -Use the async form of toNever if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toNever` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toNever(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to never match by checking -continuously at each pollInterval until the timeout is reached.

    - -

    Alias of toNever()

    - -

    @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.

    - -

    @warning -This form of neverTo does not work in any kind of async context. -Use the async form of neverTo if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `neverTo` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func neverTo(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to always match by checking -continusouly 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.

    - -

    @warning -This form of toAlways does not work in any kind of async context. -Use the async form of toAlways if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toAlways` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toAlways(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to always match by checking -continusouly at each pollInterval until the timeout is reached

    - -

    Alias of toAlways()

    - -

    @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.

    - -

    @warning -This form of alwaysTo does not work in any kind of async context. -Use the async form of alwaysTo if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `alwaysTo` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func alwaysTo(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/Structs/SyncRequirement.html b/docs/Structs/SyncRequirement.html deleted file mode 100644 index 415e23eaf..000000000 --- a/docs/Structs/SyncRequirement.html +++ /dev/null @@ -1,2337 +0,0 @@ - - - - SyncRequirement Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

SyncRequirement

-
-
- -
public struct SyncRequirement<Value>
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - expression - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let expression: Expression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - customError - -
    -
    -
    -
    -
    -
    -

    A custom error to throw. -If nil, then we will throw a RequireError on failure.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let customError: Error?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var location: SourceLocation { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expression: Expression<Value>, customError: Error?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - verify(_:_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func verify(_ pass: Bool, _ message: FailureMessage, _ value: Value?) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - to(_:description:) - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: Matcher<Value>, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: Matcher<Value>, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: Matcher<Value>, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

AsyncMatchers -

-
-
-
    -
  • -
    - - - - to(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: AsyncMatcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: AsyncMatcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: AsyncMatcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Dispatch Polling with Synchronous Matchers -

-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Require 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.

    - -

    @warning -This form of toEventually does not work in any kind of async context. Use the async form of toEventually if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toEventually` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toEventually(_ matcher: Matcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -This form of toEventuallyNot does not work in any kind of async context. -Use the async form of toEventuallyNot if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toEventuallyNot` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toEventuallyNot(_ matcher: Matcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -This form of toNotEventually does not work in any kind of async context. -Use the async form of toNotEventually if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toNotEventually` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toNotEventually(_ matcher: Matcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to never 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.

    - -

    @warning -This form of toNever does not work in any kind of async context. -Use the async form of toNever if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toNever` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toNever(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to never match by checking -continuously at each pollInterval until the timeout is reached.

    - -

    Alias of toNever()

    - -

    @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.

    - -

    @warning -This form of neverTo does not work in any kind of async context. -Use the async form of neverTo if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `neverTo` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func neverTo(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to always match by checking -continusouly 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.

    - -

    @warning -This form of toAlways does not work in any kind of async context. -Use the async form of toAlways if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toAlways` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toAlways(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to always match by checking -continusouly at each pollInterval until the timeout is reached

    - -

    Alias of toAlways()

    - -

    @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.

    - -

    @warning -This form of alwaysTo does not work in any kind of async context. -Use the async form of alwaysTo if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `alwaysTo` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func alwaysTo(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Async Polling with Synchronous Matchers -

-
-
- -
-
-
- - -
- -

Async Polling With AsyncMatchers -

-
-
- -
-
-
- -
-
- - diff --git a/docs/Typealiases.html b/docs/Typealiases.html deleted file mode 100644 index 1a8da189b..000000000 --- a/docs/Typealiases.html +++ /dev/null @@ -1,1525 +0,0 @@ - - - - Type Aliases Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Type Aliases

-

The following type aliases are available globally.

- -
-
-
-
    -
  • -
    - - - - AsyncPredicate - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public typealias AsyncPredicate = AsyncMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - Predicate - -
    -
    -
    -
    -
    -
    -

    Provides an easy upgrade path for custom Matchers to be renamed to Matchers

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, renamed: "Matcher")
    -public typealias Predicate = Matcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - PredicateResult - -
    -
    -
    -
    -
    -
    -

    Provides an easy upgrade path for custom Matchers to be renamed to Matchers

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, renamed: "MatcherResult")
    -public typealias PredicateResult = MatcherResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - PredicateStatus - -
    -
    -
    -
    -
    -
    -

    Provides an easy upgrade path for custom Matchers to be renamed to Matchers

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, renamed: "MatcherStatus")
    -public typealias PredicateStatus = MatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MatcherBlock - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public typealias MatcherBlock = (_ actualExpression: Expression<NSObject>) throws -> NMBMatcherResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - PredicateBlock - -
    -
    -
    -
    -
    -
    -

    Provides an easy upgrade path for custom Matchers to be renamed to Matchers

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, renamed: "MatcherBlock")
    -public typealias PredicateBlock = MatcherBlock
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBPredicate - -
    -
    -
    -
    -
    -
    -

    Provides an easy upgrade path for custom Matchers to be renamed to Matchers

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, renamed: "NMBMatcher")
    -public typealias NMBPredicate = NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBPredicateResult - -
    -
    -
    -
    -
    -
    -

    Provides an easy upgrade path for custom Matchers to be renamed to Matchers

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, renamed: "NMBMatcherResult")
    -public typealias NMBPredicateResult = NMBMatcherResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBPredicateStatus - -
    -
    -
    -
    -
    -
    -

    Provides an easy upgrade path for custom Matchers to be renamed to Matchers

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, renamed: "NMBMatcherStatus")
    -public typealias NMBPredicateStatus = NMBMatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - FileString - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
  • -
  • -
    - - - - FileString - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public typealias FileString = String
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/badge.svg b/docs/badge.svg deleted file mode 100644 index 81f3c9be8..000000000 --- a/docs/badge.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - documentation - - - documentation - - - 52% - - - 52% - - - diff --git a/docs/css/highlight.css b/docs/css/highlight.css deleted file mode 100644 index c170357ce..000000000 --- a/docs/css/highlight.css +++ /dev/null @@ -1,202 +0,0 @@ -/*! Jazzy - https://github.com/realm/jazzy - * Copyright Realm Inc. - * SPDX-License-Identifier: MIT - */ -/* Credit to https://gist.github.com/wataru420/2048287 */ -.highlight .c { - color: #999988; - font-style: italic; } - -.highlight .err { - color: #a61717; - background-color: #e3d2d2; } - -.highlight .k { - color: #000000; - font-weight: bold; } - -.highlight .o { - color: #000000; - font-weight: bold; } - -.highlight .cm { - color: #999988; - font-style: italic; } - -.highlight .cp { - color: #999999; - font-weight: bold; } - -.highlight .c1 { - color: #999988; - font-style: italic; } - -.highlight .cs { - color: #999999; - font-weight: bold; - font-style: italic; } - -.highlight .gd { - color: #000000; - background-color: #ffdddd; } - -.highlight .gd .x { - color: #000000; - background-color: #ffaaaa; } - -.highlight .ge { - color: #000000; - font-style: italic; } - -.highlight .gr { - color: #aa0000; } - -.highlight .gh { - color: #999999; } - -.highlight .gi { - color: #000000; - background-color: #ddffdd; } - -.highlight .gi .x { - color: #000000; - background-color: #aaffaa; } - -.highlight .go { - color: #888888; } - -.highlight .gp { - color: #555555; } - -.highlight .gs { - font-weight: bold; } - -.highlight .gu { - color: #aaaaaa; } - -.highlight .gt { - color: #aa0000; } - -.highlight .kc { - color: #000000; - font-weight: bold; } - -.highlight .kd { - color: #000000; - font-weight: bold; } - -.highlight .kp { - color: #000000; - font-weight: bold; } - -.highlight .kr { - color: #000000; - font-weight: bold; } - -.highlight .kt { - color: #445588; } - -.highlight .m { - color: #009999; } - -.highlight .s { - color: #d14; } - -.highlight .na { - color: #008080; } - -.highlight .nb { - color: #0086B3; } - -.highlight .nc { - color: #445588; - font-weight: bold; } - -.highlight .no { - color: #008080; } - -.highlight .ni { - color: #800080; } - -.highlight .ne { - color: #990000; - font-weight: bold; } - -.highlight .nf { - color: #990000; } - -.highlight .nn { - color: #555555; } - -.highlight .nt { - color: #000080; } - -.highlight .nv { - color: #008080; } - -.highlight .ow { - color: #000000; - font-weight: bold; } - -.highlight .w { - color: #bbbbbb; } - -.highlight .mf { - color: #009999; } - -.highlight .mh { - color: #009999; } - -.highlight .mi { - color: #009999; } - -.highlight .mo { - color: #009999; } - -.highlight .sb { - color: #d14; } - -.highlight .sc { - color: #d14; } - -.highlight .sd { - color: #d14; } - -.highlight .s2 { - color: #d14; } - -.highlight .se { - color: #d14; } - -.highlight .sh { - color: #d14; } - -.highlight .si { - color: #d14; } - -.highlight .sx { - color: #d14; } - -.highlight .sr { - color: #009926; } - -.highlight .s1 { - color: #d14; } - -.highlight .ss { - color: #990073; } - -.highlight .bp { - color: #999999; } - -.highlight .vc { - color: #008080; } - -.highlight .vg { - color: #008080; } - -.highlight .vi { - color: #008080; } - -.highlight .il { - color: #009999; } diff --git a/docs/css/jazzy.css b/docs/css/jazzy.css deleted file mode 100644 index 2e3871391..000000000 --- a/docs/css/jazzy.css +++ /dev/null @@ -1,439 +0,0 @@ -/*! Jazzy - https://github.com/realm/jazzy - * Copyright Realm Inc. - * SPDX-License-Identifier: MIT - */ -html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { - background: transparent; - border: 0; - margin: 0; - outline: 0; - padding: 0; - vertical-align: baseline; } - -body { - background-color: #f2f2f2; - font-family: Helvetica, freesans, Arial, sans-serif; - font-size: 14px; - -webkit-font-smoothing: subpixel-antialiased; - word-wrap: break-word; } - -h1, h2, h3 { - margin-top: 0.8em; - margin-bottom: 0.3em; - font-weight: 100; - color: black; } - -h1 { - font-size: 2.5em; } - -h2 { - font-size: 2em; - border-bottom: 1px solid #e2e2e2; } - -h4 { - font-size: 13px; - line-height: 1.5; - margin-top: 21px; } - -h5 { - font-size: 1.1em; } - -h6 { - font-size: 1.1em; - color: #777; } - -.section-name { - color: gray; - display: block; - font-family: Helvetica; - font-size: 22px; - font-weight: 100; - margin-bottom: 15px; } - -pre, code { - font: 0.95em Menlo, monospace; - color: #777; - word-wrap: normal; } - -p code, li code { - background-color: #eee; - padding: 2px 4px; - border-radius: 4px; } - -pre > code { - padding: 0; } - -a { - color: #0088cc; - text-decoration: none; } - a code { - color: inherit; } - -ul { - padding-left: 15px; } - -li { - line-height: 1.8em; } - -img { - max-width: 100%; } - -blockquote { - margin-left: 0; - padding: 0 10px; - border-left: 4px solid #ccc; } - -hr { - height: 1px; - border: none; - background-color: #e2e2e2; } - -.footnote-ref { - display: inline-block; - scroll-margin-top: 70px; } - -.footnote-def { - scroll-margin-top: 70px; } - -.content-wrapper { - margin: 0 auto; - width: 980px; } - -header { - font-size: 0.85em; - line-height: 32px; - background-color: #414141; - position: fixed; - width: 100%; - z-index: 3; } - header img { - padding-right: 6px; - vertical-align: -3px; - height: 16px; } - header a { - color: #fff; } - header p { - float: left; - color: #999; } - header .header-right { - float: right; - margin-left: 16px; } - -#breadcrumbs { - background-color: #f2f2f2; - height: 21px; - padding-top: 17px; - position: fixed; - width: 100%; - z-index: 2; - margin-top: 32px; } - #breadcrumbs #carat { - height: 10px; - margin: 0 5px; } - -.sidebar { - background-color: #f9f9f9; - border: 1px solid #e2e2e2; - overflow-y: auto; - overflow-x: hidden; - position: fixed; - top: 70px; - bottom: 0; - width: 230px; - word-wrap: normal; } - -.nav-groups { - list-style-type: none; - background: #fff; - padding-left: 0; } - -.nav-group-name { - border-bottom: 1px solid #e2e2e2; - font-size: 1.1em; - font-weight: 100; - padding: 15px 0 15px 20px; } - .nav-group-name > a { - color: #333; } - -.nav-group-tasks { - margin-top: 5px; } - -.nav-group-task { - font-size: 0.9em; - list-style-type: none; - white-space: nowrap; } - .nav-group-task a { - color: #888; } - -.main-content { - background-color: #fff; - border: 1px solid #e2e2e2; - margin-left: 246px; - position: absolute; - overflow: hidden; - padding-bottom: 20px; - top: 70px; - width: 734px; } - .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { - margin-bottom: 1em; } - .main-content p { - line-height: 1.8em; } - .main-content section .section:first-child { - margin-top: 0; - padding-top: 0; } - .main-content section .task-group-section .task-group:first-of-type { - padding-top: 10px; } - .main-content section .task-group-section .task-group:first-of-type .section-name { - padding-top: 15px; } - .main-content section .heading:before { - content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } - .main-content .section-name p { - margin-bottom: inherit; - line-height: inherit; } - .main-content .section-name code { - background-color: inherit; - padding: inherit; - color: inherit; } - -.section { - padding: 0 25px; } - -.highlight { - background-color: #eee; - padding: 10px 12px; - border: 1px solid #e2e2e2; - border-radius: 4px; - overflow-x: auto; } - -.declaration .highlight { - overflow-x: initial; - padding: 0 40px 40px 0; - margin-bottom: -25px; - background-color: transparent; - border: none; } - -.section-name { - margin: 0; - margin-left: 18px; } - -.task-group-section { - margin-top: 10px; - padding-left: 6px; - border-top: 1px solid #e2e2e2; } - -.task-group { - padding-top: 0px; } - -.task-name-container a[name]:before { - content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } - -.section-name-container { - position: relative; - display: inline-block; } - .section-name-container .section-name-link { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - margin-bottom: 0; } - .section-name-container .section-name { - position: relative; - pointer-events: none; - z-index: 1; } - .section-name-container .section-name a { - pointer-events: auto; } - -.item { - padding-top: 8px; - width: 100%; - list-style-type: none; } - .item a[name]:before { - content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } - .item code { - background-color: transparent; - padding: 0; } - .item .token, .item .direct-link { - display: inline-block; - text-indent: -20px; - padding-left: 3px; - margin-left: 35px; - font-size: 11.9px; - transition: all 300ms; } - .item .token-open { - margin-left: 20px; } - .item .discouraged { - text-decoration: line-through; } - .item .declaration-note { - font-size: .85em; - color: gray; - font-style: italic; } - -.pointer-container { - border-bottom: 1px solid #e2e2e2; - left: -23px; - padding-bottom: 13px; - position: relative; - width: 110%; } - -.pointer { - background: #f9f9f9; - border-left: 1px solid #e2e2e2; - border-top: 1px solid #e2e2e2; - height: 12px; - left: 21px; - top: -7px; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - position: absolute; - width: 12px; } - -.height-container { - display: none; - left: -25px; - padding: 0 25px; - position: relative; - width: 100%; - overflow: hidden; } - .height-container .section { - background: #f9f9f9; - border-bottom: 1px solid #e2e2e2; - left: -25px; - position: relative; - width: 100%; - padding-top: 10px; - padding-bottom: 5px; } - -.aside, .language { - padding: 6px 12px; - margin: 12px 0; - border-left: 5px solid #dddddd; - overflow-y: hidden; } - .aside .aside-title, .language .aside-title { - font-size: 9px; - letter-spacing: 2px; - text-transform: uppercase; - padding-bottom: 0; - margin: 0; - color: #aaa; - -webkit-user-select: none; } - .aside p:last-child, .language p:last-child { - margin-bottom: 0; } - -.language { - border-left: 5px solid #cde9f4; } - .language .aside-title { - color: #4b8afb; } - -.aside-warning, .aside-deprecated, .aside-unavailable { - border-left: 5px solid #ff6666; } - .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { - color: #ff0000; } - -.graybox { - border-collapse: collapse; - width: 100%; } - .graybox p { - margin: 0; - word-break: break-word; - min-width: 50px; } - .graybox td { - border: 1px solid #e2e2e2; - padding: 5px 25px 5px 10px; - vertical-align: middle; } - .graybox tr td:first-of-type { - text-align: right; - padding: 7px; - vertical-align: top; - word-break: normal; - width: 40px; } - -.slightly-smaller { - font-size: 0.9em; } - -#footer { - position: relative; - top: 10px; - bottom: 0px; - margin-left: 25px; } - #footer p { - margin: 0; - color: #aaa; - font-size: 0.8em; } - -html.dash header, html.dash #breadcrumbs, html.dash .sidebar { - display: none; } - -html.dash .main-content { - width: 980px; - margin-left: 0; - border: none; - width: 100%; - top: 0; - padding-bottom: 0; } - -html.dash .height-container { - display: block; } - -html.dash .item .token { - margin-left: 0; } - -html.dash .content-wrapper { - width: auto; } - -html.dash #footer { - position: static; } - -form[role=search] { - float: right; } - form[role=search] input { - font: Helvetica, freesans, Arial, sans-serif; - margin-top: 6px; - font-size: 13px; - line-height: 20px; - padding: 0px 10px; - border: none; - border-radius: 1em; } - .loading form[role=search] input { - background: white url(../img/spinner.gif) center right 4px no-repeat; } - form[role=search] .tt-menu { - margin: 0; - min-width: 300px; - background: #fff; - color: #333; - border: 1px solid #e2e2e2; - z-index: 4; } - form[role=search] .tt-highlight { - font-weight: bold; } - form[role=search] .tt-suggestion { - font: Helvetica, freesans, Arial, sans-serif; - font-size: 14px; - padding: 0 8px; } - form[role=search] .tt-suggestion span { - display: table-cell; - white-space: nowrap; } - form[role=search] .tt-suggestion .doc-parent-name { - width: 100%; - text-align: right; - font-weight: normal; - font-size: 0.9em; - padding-left: 16px; } - form[role=search] .tt-suggestion:hover, - form[role=search] .tt-suggestion.tt-cursor { - cursor: pointer; - background-color: #4183c4; - color: #fff; } - form[role=search] .tt-suggestion:hover .doc-parent-name, - form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { - color: #fff; } diff --git a/docs/docsets/Nimble.docset/Contents/Info.plist b/docs/docsets/Nimble.docset/Contents/Info.plist deleted file mode 100644 index 780a0a655..000000000 --- a/docs/docsets/Nimble.docset/Contents/Info.plist +++ /dev/null @@ -1,20 +0,0 @@ - - - - - CFBundleIdentifier - com.jazzy.nimble - CFBundleName - Nimble - DocSetPlatformFamily - nimble - isDashDocset - - dashIndexFilePath - index.html - isJavaScriptEnabled - - DashDocSetFamily - dashtoc - - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes.html deleted file mode 100644 index 3ab36d709..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes.html +++ /dev/null @@ -1,1712 +0,0 @@ - - - - Classes Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Classes

-

The following classes are available globally.

- -
-
-
-
    -
  • -
    - - - - AssertionDispatcher - -
    -
    -
    -
    -
    -
    -

    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.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class AssertionDispatcher : AssertionHandler
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - AssertionRecorder - -
    -
    -
    -
    -
    -
    -

    An AssertionHandler that silently records assertions that Nimble makes. -This is useful for testing failure messages for matchers.

    - -

    @see AssertionHandler

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class AssertionRecorder : AssertionHandler
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBExpectation - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NMBExpectation : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NimbleXCTestHandler - -
    -
    -
    -
    -
    -
    -

    Default handler for Nimble. This assertion handler passes failures along to -XCTest.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NimbleXCTestHandler : AssertionHandler
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Alternative handler for Nimble. This assertion handler passes failures along -to XCTest by attempting to reduce the failure message size.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NimbleShortXCTestHandler : AssertionHandler
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Helper class providing access to the currently executing XCTestCase instance, if any

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -final public class CurrentTestCaseTracker : NSObject, XCTestObservation
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBWait - -
    -
    -
    -
    -
    -
    -

    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.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NMBWait : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBExpectationMessage - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NMBExpectationMessage : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - FailureMessage - -
    -
    -
    -
    -
    -
    -

    Encapsulates the failure message that matchers can report to the end user.

    - -

    This is shared state between Nimble and matchers that mutate this value.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class FailureMessage : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBMatcher - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NMBMatcher : NSObject
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NMBObjCBeCloseToMatcher : NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBMatcherResult - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    final public class NMBMatcherResult : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBMatcherStatus - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    final public class NMBMatcherStatus : NSObject
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class NMBObjCRaiseExceptionMatcher : NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Without Mach exceptions or the Objective-C runtime, there’s nothing to put in the exception object. It’s really just a boolean – either a SIGILL was caught or not.

    - -
    -
    -
    -
  • -
  • -
    - - - - SourceLocation - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public final class SourceLocation : NSObject
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBStringer - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class NMBStringer : NSObject
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/AssertionDispatcher.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/AssertionDispatcher.html deleted file mode 100644 index 1497511fc..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/AssertionDispatcher.html +++ /dev/null @@ -1,1295 +0,0 @@ - - - - AssertionDispatcher Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AssertionDispatcher

-
-
- -
public class AssertionDispatcher : AssertionHandler
- -
-
-

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.

- -
-
-
- -
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/AssertionRecorder.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/AssertionRecorder.html deleted file mode 100644 index c6b84b7a4..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/AssertionRecorder.html +++ /dev/null @@ -1,1321 +0,0 @@ - - - - AssertionRecorder Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AssertionRecorder

-
-
- -
public class AssertionRecorder : AssertionHandler
- -
-
-

An AssertionHandler that silently records assertions that Nimble makes. -This is useful for testing failure messages for matchers.

- -

@see AssertionHandler

- -
-
-
-
    -
  • -
    - - - - assertions - -
    -
    -
    -
    -
    -
    -

    All the assertions that were captured by this recorder

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var assertions: [AssertionRecord]
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init()
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func assert(_ assertion: Bool, message: FailureMessage, location: SourceLocation)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/CurrentTestCaseTracker.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/CurrentTestCaseTracker.html deleted file mode 100644 index 54ae113d6..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/CurrentTestCaseTracker.html +++ /dev/null @@ -1,1320 +0,0 @@ - - - - CurrentTestCaseTracker Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

CurrentTestCaseTracker

-
-
- -
@objc
-final public class CurrentTestCaseTracker : NSObject, XCTestObservation
- -
-
-

Helper class providing access to the currently executing XCTestCase instance, if any

- -
-
-
-
    -
  • -
    - - - - sharedInstance - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public static let sharedInstance: CurrentTestCaseTracker
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - testCaseWillStart(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func testCaseWillStart(_ testCase: XCTestCase)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - testCaseDidFinish(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func testCaseDidFinish(_ testCase: XCTestCase)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/FailureMessage.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/FailureMessage.html deleted file mode 100644 index 6c855c36f..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/FailureMessage.html +++ /dev/null @@ -1,1511 +0,0 @@ - - - - FailureMessage Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

FailureMessage

-
-
- -
public class FailureMessage : NSObject
- -
-
-

Encapsulates the failure message that matchers can report to the end user.

- -

This is shared state between Nimble and matchers that mutate this value.

- -
-
-
-
    -
  • -
    - - - - expected - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var expected: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - actualValue - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var actualValue: String?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - to - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var to: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - postfixMessage - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var postfixMessage: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - postfixActual - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var postfixActual: String
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - extendedMessage - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var extendedMessage: String?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - userDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var userDescription: String?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - stringValue - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var stringValue: String { get set }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public override init()
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(stringValue:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(stringValue: String)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBExpectation.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBExpectation.html deleted file mode 100644 index 17fdabd9d..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBExpectation.html +++ /dev/null @@ -1,1881 +0,0 @@ - - - - NMBExpectation Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBExpectation

-
-
- -
public class NMBExpectation : NSObject
- -
-
-

Undocumented

- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public init(actualBlock: @escaping () -> NSObject?, negative: Bool, file: FileString, line: UInt)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - withTimeout - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var withTimeout: (TimeInterval) -> NMBExpectation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - to - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var to: (NMBMatcher) -> NMBExpectation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toWithDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toWithDescription: (NMBMatcher, String) -> NMBExpectation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toNot: (NMBMatcher) -> NMBExpectation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNotWithDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toNotWithDescription: (NMBMatcher, String) -> NMBExpectation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var notTo: (NMBMatcher) -> NMBExpectation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notToWithDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var notToWithDescription: (NMBMatcher, String) -> NMBExpectation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toEventually - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toEventually: (NMBMatcher) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toEventuallyWithDescription: (NMBMatcher, String) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toEventuallyNot - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toEventuallyNot: (NMBMatcher) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toEventuallyNotWithDescription: (NMBMatcher, String) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNotEventually - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toNotEventually: (NMBMatcher) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toNotEventuallyWithDescription: (NMBMatcher, String) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNever - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toNever: (NMBMatcher) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toNeverWithDescription: (NMBMatcher, String) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - neverTo - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var neverTo: (NMBMatcher) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var neverToWithDescription: (NMBMatcher, String) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toAlways - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toAlways: (NMBMatcher) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var toAlwaysWithDescription: (NMBMatcher, String) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - alwaysTo - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var alwaysTo: (NMBMatcher) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var alwaysToWithDescription: (NMBMatcher, String) -> Void { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func failWithMessage(_ message: String, file: FileString, line: UInt)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBExpectationMessage.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBExpectationMessage.html deleted file mode 100644 index 6e3eb381d..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBExpectationMessage.html +++ /dev/null @@ -1,1507 +0,0 @@ - - - - NMBExpectationMessage Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBExpectationMessage

-
-
- -
public class NMBExpectationMessage : NSObject
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - init(expectedTo:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expectedTo message: String)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expectedActualValueTo message: String)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expectedActualValueTo message: String, customActualValue actual: String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(fail:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(fail message: String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(prepend:child:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(prepend message: String, child: NMBExpectationMessage)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(appendedMessage message: String, child: NMBExpectationMessage)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(prependedMessage message: String, child: NMBExpectationMessage)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(details:child:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(details message: String, child: NMBExpectationMessage)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - appendedBeNilHint() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func appendedBeNilHint() -> NMBExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toSwift() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toSwift() -> ExpectationMessage
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBMatcher.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBMatcher.html deleted file mode 100644 index b75d8455a..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBMatcher.html +++ /dev/null @@ -1,2004 +0,0 @@ - - - - NMBMatcher Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBMatcher

-
-
- -
public class NMBMatcher : NSObject
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - init(matcher:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(matcher: @escaping MatcherBlock)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(predicate:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public convenience init(predicate: @escaping MatcherBlock)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - allPassMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func allPassMatcher(_ matcher: NMBMatcher) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beAKindOfMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beAKindOfMatcher(_ expected: AnyClass) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beAnInstanceOfMatcher(_ expected: AnyClass) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beCloseToMatcher(_ expected: NSNumber, within: CDouble) -> NMBObjCBeCloseToMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmptyMatcher() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beEmptyMatcher() -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beGreaterThanMatcher(_ expected: NMBComparable?) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beGreaterThanOrEqualToMatcher(_ expected: NMBComparable?) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beIdenticalToMatcher(_ expected: NSObject?) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beLessThanMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beLessThanMatcher(_ expected: NMBComparable?) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beLessThanOrEqualToMatcher(_ expected: NMBComparable?) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

beTruthy() / beFalsy() -

-
-
-
    -
  • -
    - - - - beTruthyMatcher() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beTruthyMatcher() -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beFalsyMatcher() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beFalsyMatcher() -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beTrueMatcher() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beTrueMatcher() -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beFalseMatcher() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beFalseMatcher() -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beNilMatcher() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beNilMatcher() -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beginWithMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func beginWithMatcher(_ expected: Any) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - containMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func containMatcher(_ expected: [NSObject]) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func containElementSatisfyingMatcher(_ matcher: @escaping ((NSObject) -> Bool)) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - endWithMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func endWithMatcher(_ expected: Any) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equalMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func equalMatcher(_ expected: NSObject) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - haveCountMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func haveCountMatcher(_ expected: NSNumber) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - matchMatcher(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func matchMatcher(_ expected: NSString) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func raiseExceptionMatcher() -> NMBObjCRaiseExceptionMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func satisfyAllOfMatcher(_ matchers: [NMBMatcher]) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func satisfyAnyOfMatcher(_ matchers: [NMBMatcher]) -> NMBMatcher
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBMatcherResult.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBMatcherResult.html deleted file mode 100644 index b096a0269..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBMatcherResult.html +++ /dev/null @@ -1,1372 +0,0 @@ - - - - NMBMatcherResult Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBMatcherResult

-
-
- -
final public class NMBMatcherResult : NSObject
- -
-
-

Undocumented

- -
-
-
- -
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBMatcherStatus.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBMatcherStatus.html deleted file mode 100644 index 7c23916e1..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBMatcherStatus.html +++ /dev/null @@ -1,1453 +0,0 @@ - - - - NMBMatcherStatus Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBMatcherStatus

-
-
- -
final public class NMBMatcherStatus : NSObject
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - matches - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static let matches: NMBMatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - doesNotMatch - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static let doesNotMatch: NMBMatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - fail - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static let fail: NMBMatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - hash - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public override var hash: Int { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - isEqual(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public override func isEqual(_ object: Any?) -> Bool
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - from(status:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func from(status: MatcherStatus) -> NMBMatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - from(bool:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func from(bool success: Bool) -> NMBMatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toSwift() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toSwift() -> MatcherStatus
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBObjCBeCloseToMatcher.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBObjCBeCloseToMatcher.html deleted file mode 100644 index 26a1dccb9..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBObjCBeCloseToMatcher.html +++ /dev/null @@ -1,1265 +0,0 @@ - - - - NMBObjCBeCloseToMatcher Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBObjCBeCloseToMatcher

-
-
- -
public class NMBObjCBeCloseToMatcher : NMBMatcher
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - within - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var within: (CDouble) -> NMBObjCBeCloseToMatcher { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBObjCRaiseExceptionMatcher.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBObjCRaiseExceptionMatcher.html deleted file mode 100644 index 0eb9a61c1..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBObjCRaiseExceptionMatcher.html +++ /dev/null @@ -1,1349 +0,0 @@ - - - - NMBObjCRaiseExceptionMatcher Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBObjCRaiseExceptionMatcher

-
-
- -
public class NMBObjCRaiseExceptionMatcher : NMBMatcher
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - named - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var named: (_ name: String) -> NMBObjCRaiseExceptionMatcher { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - reason - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var reason: (_ reason: String?) -> NMBObjCRaiseExceptionMatcher { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - userInfo - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var userInfo: (_ userInfo: NSDictionary?) -> NMBObjCRaiseExceptionMatcher { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyingBlock - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public var satisfyingBlock: (_ block: ((NSException) -> Void)?) -> NMBObjCRaiseExceptionMatcher { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBStringer.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBStringer.html deleted file mode 100644 index 77a2a33a5..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBStringer.html +++ /dev/null @@ -1,1266 +0,0 @@ - - - - NMBStringer Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBStringer

-
-
- -
@objc
-public class NMBStringer : NSObject
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - stringify(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func stringify(_ obj: Any?) -> String
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBWait.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBWait.html deleted file mode 100644 index 24272fa9b..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NMBWait.html +++ /dev/null @@ -1,1382 +0,0 @@ - - - - NMBWait Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBWait

-
-
- -
public class NMBWait : NSObject
- -
-
-

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.

- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public class func until(
    -    timeout: TimeInterval,
    -    file: FileString = #file,
    -    line: UInt = #line,
    -    action: @escaping (@escaping () -> Void) -> Void)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class func until(
    -    timeout: NimbleTimeInterval,
    -    file: FileString = #file,
    -    line: UInt = #line,
    -    action: @escaping (@escaping () -> Void) -> Void)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public class func throwableUntil(
    -    timeout: NimbleTimeInterval,
    -    file: FileString = #file,
    -    line: UInt = #line,
    -    action: @escaping (@escaping () -> Void) throws -> Void)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - until(_:line:action:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc(untilFile:line:action:)
    -public class func until(
    -    _ file: FileString = #file,
    -    line: UInt = #line,
    -    action: @escaping (@escaping () -> Void) -> Void)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - until(_:line:action:) - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NimbleShortXCTestHandler.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NimbleShortXCTestHandler.html deleted file mode 100644 index d97e25366..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NimbleShortXCTestHandler.html +++ /dev/null @@ -1,1265 +0,0 @@ - - - - NimbleShortXCTestHandler Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NimbleShortXCTestHandler

-
-
- -
public class NimbleShortXCTestHandler : AssertionHandler
- -
-
-

Alternative handler for Nimble. This assertion handler passes failures along -to XCTest by attempting to reduce the failure message size.

- -
-
-
- -
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NimbleXCTestHandler.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NimbleXCTestHandler.html deleted file mode 100644 index 619174d7d..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/NimbleXCTestHandler.html +++ /dev/null @@ -1,1265 +0,0 @@ - - - - NimbleXCTestHandler Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NimbleXCTestHandler

-
-
- -
public class NimbleXCTestHandler : AssertionHandler
- -
-
-

Default handler for Nimble. This assertion handler passes failures along to -XCTest.

- -
-
-
- -
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/SourceLocation.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/SourceLocation.html deleted file mode 100644 index 2f76893bc..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Classes/SourceLocation.html +++ /dev/null @@ -1,1318 +0,0 @@ - - - - SourceLocation Class Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

SourceLocation

-
-
- -
public final class SourceLocation : NSObject
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - file - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let file: FileString
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - line - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let line: UInt
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - description - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    override public var description: String { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums.html deleted file mode 100644 index 190843125..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums.html +++ /dev/null @@ -1,1401 +0,0 @@ - - - - Enumerations Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Enumerations

-

The following enumerations are available globally.

- -
-
-
-
    -
  • -
    - - - - ExpectationStatus - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public enum ExpectationStatus : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ExpectationMessage - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public indirect enum ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ExpectationStyle - -
    -
    -
    -
    -
    -
    -

    The Expectation style intended for comparison to a MatcherStatus.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public enum ExpectationStyle
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MatcherStatus - -
    -
    -
    -
    -
    -
    -

    MatcherStatus is a trinary that indicates if a Matcher matches a given value or not

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public enum MatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ToSucceedResult - -
    -
    -
    -
    -
    -
    -

    Used by the succeed matcher.

    - -

    This is the return type for the closure.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public enum ToSucceedResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NimbleTimeInterval - -
    -
    -
    -
    -
    -
    -

    A reimplementation of DispatchTimeInterval without the never case, and conforming to Sendable.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public enum NimbleTimeInterval : Sendable, Equatable
    -
    extension NimbleTimeInterval: CustomStringConvertible
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ExpectationMessage.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ExpectationMessage.html deleted file mode 100644 index 4a92ad5f4..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ExpectationMessage.html +++ /dev/null @@ -1,1647 +0,0 @@ - - - - ExpectationMessage Enumeration Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

ExpectationMessage

-
-
- -
public indirect enum ExpectationMessage
- -
-
-

Undocumented

- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    includes actual value in output (“expected to , got ”)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case expectedActualValueTo(String)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    uses a custom actual value string in output (“expected to , got ”)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case expectedCustomValueTo(String, actual: String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expectedTo(_:) - -
    -
    -
    -
    -
    -
    -

    excludes actual value in output (“expected to ”)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case expectedTo(String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - fail(_:) - -
    -
    -
    -
    -
    -
    -

    allows any free-form message (“”)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case fail(String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - prepends(_:_:) - -
    -
    -
    -
    -
    -
    -

    Not Fully Implemented Yet.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case prepends(String, ExpectationMessage)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - appends(_:_:) - -
    -
    -
    -
    -
    -
    -

    appends after an existing message (“ (use beNil() to match nils)”)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case appends(ExpectationMessage, String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - details(_:_:) - -
    -
    -
    -
    -
    -
    -

    provides long-form multi-line explainations (“\n\n”)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case details(ExpectationMessage, String)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expectedMessage - -
    -
    -
    -
    -
    -
    -

    Returns the smallest message after the “expected to” string that summarizes the error.

    - -

    Returns the message part from ExpectationMessage, ignoring all .appends and .details.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var expectedMessage: String { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - appended(message:) - -
    -
    -
    -
    -
    -
    -

    Appends a message after the primary expectation message

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func appended(message: String) -> ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - appendedBeNilHint() - -
    -
    -
    -
    -
    -
    -

    Appends a message hinting to use beNil() for when the actual value given was nil.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func appendedBeNilHint() -> ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - appended(details:) - -
    -
    -
    -
    -
    -
    -

    Appends a detailed (aka - multiline) message after the primary expectation message -Detailed messages will be placed after .appended(message:) calls.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func appended(details: String) -> ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Replaces a primary expectation with one returned by f. Preserves all composite expectations -that were built upon it (aka - all appended(message:) and appended(details:).

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func replacedExpectation(_ f: @escaping (ExpectationMessage) -> ExpectationMessage) -> ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Wraps a primary expectation with text before and after it. -Alias to prepended(message: before).appended(message: after)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func wrappedExpectation(before: String, after: String) -> ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Prepends a message by modifying the primary expectation

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func prepended(expectation message: String) -> ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Converts the tree of ExpectationMessages into a final built string.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toString(actual: String, expected: String = "expected", to: String = "to") -> String
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ExpectationStatus.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ExpectationStatus.html deleted file mode 100644 index 6f9d73b25..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ExpectationStatus.html +++ /dev/null @@ -1,1345 +0,0 @@ - - - - ExpectationStatus Enumeration Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

ExpectationStatus

-
-
- -
public enum ExpectationStatus : Equatable
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - pending - -
    -
    -
    -
    -
    -
    -

    No matchers have been performed.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case pending
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - passed - -
    -
    -
    -
    -
    -
    -

    All matchers have passed.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case passed
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - failed - -
    -
    -
    -
    -
    -
    -

    All matchers have failed.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case failed
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - mixed - -
    -
    -
    -
    -
    -
    -

    Multiple matchers have been peformed, with at least one passing and one failing.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case mixed
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ExpectationStyle.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ExpectationStyle.html deleted file mode 100644 index 3cd7cc87a..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ExpectationStyle.html +++ /dev/null @@ -1,1291 +0,0 @@ - - - - ExpectationStyle Enumeration Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

ExpectationStyle

-
-
- -
public enum ExpectationStyle
- -
-
-

The Expectation style intended for comparison to a MatcherStatus.

- -
-
-
-
    -
  • -
    - - - - toMatch - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case toMatch
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNotMatch - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case toNotMatch
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/MatcherStatus.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/MatcherStatus.html deleted file mode 100644 index bd9f989cb..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/MatcherStatus.html +++ /dev/null @@ -1,1383 +0,0 @@ - - - - MatcherStatus Enumeration Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

MatcherStatus

-
-
- -
public enum MatcherStatus
- -
-
-

MatcherStatus is a trinary that indicates if a Matcher matches a given value or not

- -
-
-
-
    -
  • -
    - - - - matches - -
    -
    -
    -
    -
    -
    -

    Matches indicates if the matcher / matcher passes with the given value

    - -

    For example, equals(1) returns .matches for expect(1).to(equal(1)).

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case matches
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - doesNotMatch - -
    -
    -
    -
    -
    -
    -

    DoesNotMatch indicates if the matcher fails with the given value, but would -succeed if the expectation was inverted.

    - -

    For example, equals(2) returns .doesNotMatch for expect(1).toNot(equal(2)).

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case doesNotMatch
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - fail - -
    -
    -
    -
    -
    -
    -

    Fail indicates the matcher will never satisfy with the given value in any case. -A perfect example is that most matchers fail whenever given nil.

    - -

    Using equal(1) fails both expect(nil).to(equal(1)) and expect(nil).toNot(equal(1)). -Note: Matcher’s requireNonNil property will also provide this feature mostly for free. - Your matcher will still need to guard against nils, but error messaging will be - handled for you.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case fail
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(bool:) - -
    -
    -
    -
    -
    -
    -

    Converts a boolean to either .matches (if true) or .doesNotMatch (if false).

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(bool matches: Bool)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toObjectiveC() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toObjectiveC() -> NMBMatcherStatus
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/NimbleTimeInterval.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/NimbleTimeInterval.html deleted file mode 100644 index 0d2d80672..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/NimbleTimeInterval.html +++ /dev/null @@ -1,1479 +0,0 @@ - - - - NimbleTimeInterval Enumeration Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NimbleTimeInterval

-
-
- -
public enum NimbleTimeInterval : Sendable, Equatable
-
extension NimbleTimeInterval: CustomStringConvertible
- -
-
-

A reimplementation of DispatchTimeInterval without the never case, and conforming to Sendable.

- -
-
-
-
    -
  • -
    - - - - seconds(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case seconds(Int)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - milliseconds(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case milliseconds(Int)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - microseconds(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case microseconds(Int)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - nanoseconds(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case nanoseconds(Int)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <(_:_:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func < (lhs: NimbleTimeInterval, rhs: NimbleTimeInterval) -> Bool
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - dispatchTimeInterval - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var dispatchTimeInterval: DispatchTimeInterval { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - nanoseconds - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var nanoseconds: UInt64 { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - description - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var description: String { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - timeInterval - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var timeInterval: TimeInterval { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ToSucceedResult.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ToSucceedResult.html deleted file mode 100644 index e29140326..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Enums/ToSucceedResult.html +++ /dev/null @@ -1,1293 +0,0 @@ - - - - ToSucceedResult Enumeration Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

ToSucceedResult

-
-
- -
public enum ToSucceedResult
- -
-
-

Used by the succeed matcher.

- -

This is the return type for the closure.

- -
-
-
-
    -
  • -
    - - - - succeeded - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case succeeded
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - failed(reason:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    case failed(reason: String)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions.html deleted file mode 100644 index d18e8da7f..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions.html +++ /dev/null @@ -1,1966 +0,0 @@ - - - - Extensions Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Extensions

-

The following extensions are available globally.

- -
-
-
- -
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/AnySequence.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/AnySequence.html deleted file mode 100644 index b97e17705..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/AnySequence.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - AnySequence Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Array.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Array.html deleted file mode 100644 index 50843ebc5..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Array.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - Array Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Data.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Data.html deleted file mode 100644 index 7cda82ea9..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Data.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - Data Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Date.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Date.html deleted file mode 100644 index c9372f85b..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Date.html +++ /dev/null @@ -1,1319 +0,0 @@ - - - - Date Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Date

-
-
- -
extension Date: NMBDoubleConvertible
-
extension Date: TestOutputStringConvertible
-
extension Date: @unchecked Sendable
- -
-
- -
-
-
-
    -
  • -
    - - - - doubleValue - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var doubleValue: CDouble { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - testDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var testDescription: String { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - advanced(by:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func advanced(by nimbleTimeInterval: NimbleTimeInterval) -> Date
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Double.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Double.html deleted file mode 100644 index 54eb1fad3..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Double.html +++ /dev/null @@ -1,1290 +0,0 @@ - - - - Double Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Double

-
-
- -
extension Double: ExpressibleByBooleanLiteral
-
extension Double: TestOutputStringConvertible
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - testDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var testDescription: String { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Float.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Float.html deleted file mode 100644 index e8194c3e5..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Float.html +++ /dev/null @@ -1,1290 +0,0 @@ - - - - Float Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Float

-
-
- -
extension Float: ExpressibleByBooleanLiteral
-
extension Float: TestOutputStringConvertible
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - testDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var testDescription: String { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int.html deleted file mode 100644 index 6d6c2e2b2..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - Int Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Int

-
-
- -
extension Int: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int16.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int16.html deleted file mode 100644 index e82972cec..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int16.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - Int16 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Int16

-
-
- -
extension Int16: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int32.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int32.html deleted file mode 100644 index cdc017258..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int32.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - Int32 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Int32

-
-
- -
extension Int32: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int64.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int64.html deleted file mode 100644 index a629aaccb..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int64.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - Int64 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Int64

-
-
- -
extension Int64: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int8.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int8.html deleted file mode 100644 index d141678d2..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/Int8.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - Int8 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Int8

-
-
- -
extension Int8: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSArray.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSArray.html deleted file mode 100644 index 65e172d7e..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSArray.html +++ /dev/null @@ -1,1265 +0,0 @@ - - - - NSArray Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSDate.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSDate.html deleted file mode 100644 index d0b89c531..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSDate.html +++ /dev/null @@ -1,1291 +0,0 @@ - - - - NSDate Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NSDate

-
-
- -
extension NSDate: NMBDoubleConvertible
-
extension NSDate: TestOutputStringConvertible
- -
-
- -
-
-
-
    -
  • -
    - - - - doubleValue - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var doubleValue: CDouble { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - testDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var testDescription: String { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSIndexSet.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSIndexSet.html deleted file mode 100644 index 75e05d666..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSIndexSet.html +++ /dev/null @@ -1,1264 +0,0 @@ - - - - NSIndexSet Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSNumber.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSNumber.html deleted file mode 100644 index 8d65bc829..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSNumber.html +++ /dev/null @@ -1,1292 +0,0 @@ - - - - NSNumber Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NSNumber

-
-
- -
extension NSNumber: NMBDoubleConvertible
-
extension NSNumber: NMBComparable
-
extension NSNumber: TestOutputStringConvertible
- -
-
- -
-
-
-
    -
  • -
    - - - - NMB_compare(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func NMB_compare(_ otherObject: NMBComparable!) -> ComparisonResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - testDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var testDescription: String { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSString.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSString.html deleted file mode 100644 index 1a2de679a..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/NSString.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - NSString Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/String.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/String.html deleted file mode 100644 index 979726b3d..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/String.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - String Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/TimeInterval.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/TimeInterval.html deleted file mode 100644 index 490ba7209..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/TimeInterval.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - TimeInterval Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- - -
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt.html deleted file mode 100644 index 1f5e1215d..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - UInt Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

UInt

-
-
- -
extension UInt: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt16.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt16.html deleted file mode 100644 index 58d82f62f..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt16.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - UInt16 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

UInt16

-
-
- -
extension UInt16: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt32.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt32.html deleted file mode 100644 index 2187727fb..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt32.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - UInt32 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

UInt32

-
-
- -
extension UInt32: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt64.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt64.html deleted file mode 100644 index d5d5b446f..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt64.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - UInt64 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

UInt64

-
-
- -
extension UInt64: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt8.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt8.html deleted file mode 100644 index bebf61837..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Extensions/UInt8.html +++ /dev/null @@ -1,1262 +0,0 @@ - - - - UInt8 Extension Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

UInt8

-
-
- -
extension UInt8: ExpressibleByBooleanLiteral
- -
-
- -
-
-
-
    -
  • -
    - - - - init(booleanLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(booleanLiteral value: Bool)
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Functions.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Functions.html deleted file mode 100644 index b9e37111e..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Functions.html +++ /dev/null @@ -1,10197 +0,0 @@ - - - - Functions Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Functions

-

The following functions are available globally.

- -
-
-
-
    -
  • -
    - - - - withAssertionHandler(_:file:line:closure:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -Unlike the synchronous version of this call, this does not support catching Objective-C exceptions.

    - -

    @see AssertionHandler

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func withAssertionHandler(_ tempAssertionHandler: AssertionHandler,
    -                                 file: FileString = #file,
    -                                 line: UInt = #line,
    -                                 closure: () async throws -> Void) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - gatherExpectations(silently:closure:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -Unlike the synchronous version of this call, this does not support catching Objective-C exceptions.

    - -

    @param silently expectations are no longer send to the default Nimble - assertion handler when this is true. Defaults to false.

    - -

    @see gatherFailingExpectations

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func gatherExpectations(silently: Bool = false, closure: () async -> Void) async -> [AssertionRecord]
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - gatherFailingExpectations(silently:closure:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -Unlike the synchronous version of this call, this does not support catching Objective-C exceptions.

    - -

    @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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func gatherFailingExpectations(silently: Bool = false, closure: () async -> Void) async -> [AssertionRecord]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Allows you to temporarily replace the current Nimble assertion handler with -the one provided for the scope of the closure.

    - -

    @warning -This form of withAssertionHandler does not work in any kind of -async context. Use the async form of withAssertionHandler -if you are running tests in an async context.

    - -

    Once the closure finishes, then the original Nimble assertion handler is restored.

    - -

    @see AssertionHandler

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func withAssertionHandler(_ tempAssertionHandler: AssertionHandler,
    -                                 file: FileString = #file,
    -                                 line: UInt = #line,
    -                                 closure: () throws -> Void)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -This form of gatherExpectations does not work in any kind of -async context. Use the async form of gatherExpectations -if you are running tests in an async context.

    - -

    @param silently expectations are no longer send to the default Nimble - assertion handler when this is true. Defaults to false.

    - -

    @see gatherFailingExpectations

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func gatherExpectations(silently: Bool = false, closure: () -> Void) -> [AssertionRecord]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -This form of gatherFailingExpectations does not work in any kind of -async context. Use the async form of gatherFailingExpectations -if you are running tests in an async context.

    - -

    @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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func gatherFailingExpectations(silently: Bool = false, closure: () -> Void) -> [AssertionRecord]
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func recordFailure(_ message: String, location: SourceLocation)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The value given is lazily evaluated.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect<T>(file: FileString = #file, line: UInt = #line, _ expression: @escaping () async throws -> T?) -> AsyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The closure is lazily invoked.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect<T>(file: FileString = #file, line: UInt = #line, _ expression: () -> (() async throws -> T)) -> AsyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The closure is lazily invoked.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect<T>(file: FileString = #file, line: UInt = #line, _ expression: () -> (() async throws -> T?)) -> AsyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The closure is lazily invoked.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect(file: FileString = #file, line: UInt = #line, _ expression: () -> (() async throws -> Void)) -> AsyncExpectation<Void>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expecta(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The value given is lazily evaluated. -This is provided to avoid confusion between expect -> SyncExpectation and expect -> AsyncExpectation.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expecta<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure @escaping () async throws -> T?) async -> AsyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expecta(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The closure is lazily invoked. -This is provided to avoid confusion between expect -> SyncExpectation and expect -> AsyncExpectation

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expecta<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() async throws -> T)) async -> AsyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expecta(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The closure is lazily invoked. -This is provided to avoid confusion between expect -> SyncExpectation and expect -> AsyncExpectation

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expecta<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() async throws -> T?)) async -> AsyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expecta(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Make an AsyncExpectation on a given actual value. The closure is lazily invoked. -This is provided to avoid confusion between expect -> SyncExpectation and expect -> AsyncExpectation

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expecta(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() async throws -> Void)) async -> AsyncExpectation<Void>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - waitUntil(timeout:file:line:action:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -Unlike the synchronous version of this call, this does not support catching Objective-C exceptions.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func waitUntil(timeout: NimbleTimeInterval = PollingDefaults.timeout, file: FileString = #file, line: UInt = #line, action: @escaping (@escaping () -> Void) async -> Void) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - waitUntil(timeout:file:line:action:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -Unlike the synchronous version of this call, this does not support catching Objective-C exceptions.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func waitUntil(timeout: NimbleTimeInterval = PollingDefaults.timeout, file: FileString = #file, line: UInt = #line, action: @escaping (@escaping () -> Void) -> Void) async
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The value given is lazily evaluated.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func require<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure @escaping () throws -> T?) -> SyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func require<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> T)) -> SyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func require<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> T?)) -> SyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func require(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> Void)) -> SyncRequirement<Void>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The value given is lazily evaluated.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -

    This is provided as an alternative to require, for when you want to be specific about whether you’re using SyncRequirement or AsyncRequirement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func requires<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure @escaping () throws -> T?) -> SyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -

    This is provided as an alternative to require, for when you want to be specific about whether you’re using SyncRequirement or AsyncRequirement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func requires<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> T)) -> SyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -

    This is provided as an alternative to require, for when you want to be specific about whether you’re using SyncRequirement or AsyncRequirement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func requires<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> T?)) -> SyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make a SyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -

    This is provided as an alternative to require, for when you want to be specific about whether you’re using SyncRequirement or AsyncRequirement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func requires(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> Void)) -> SyncRequirement<Void>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make an AsyncRequirement on a given actual value. The value given is lazily evaluated.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func require<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @escaping () async throws -> T?) -> AsyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make an AsyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func require<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: () -> (() async throws -> T)) -> AsyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Make an AsyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func require<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: () -> (() async throws -> T?)) -> AsyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - requirea(file:line:customError:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Make an AsyncRequirement on a given actual value. The value given is lazily evaluated.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -

    This is provided to avoid confusion between require -> SyncRequirement and require -> AsyncRequirement.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func requirea<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure @escaping () async throws -> T?) async -> AsyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - requirea(file:line:customError:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Make an AsyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -

    This is provided to avoid confusion between require -> SyncRequirement and require -> AsyncRequirement

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func requirea<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() async throws -> T)) async -> AsyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - requirea(file:line:customError:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Make an AsyncRequirement on a given actual value. The closure is lazily invoked.

    - -

    require will return the result of the expression if the matcher passes, and throw an error if not. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -

    This is provided to avoid confusion between require -> SyncRequirement and require -> AsyncRequirement

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func requirea<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() async throws -> T?)) async -> AsyncRequirement<T>
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Unwrap -

-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toNot(beNil()).

    - -

    unwrap will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwrap<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure @escaping () throws -> T?) throws -> T
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toNot(beNil()).

    - -

    unwrap will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwrap<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> T?)) throws -> T
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toNot(beNil()).

    - -

    unwraps will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwraps<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure @escaping () throws -> T?) throws -> T
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toNot(beNil()).

    - -

    unwraps will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwraps<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() throws -> T?)) throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - unwrap(file:line:customError:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toNot(beNil()).

    - -

    unwrap will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwrap<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @escaping () async throws -> T?) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - unwrap(file:line:customError:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toNot(beNil()).

    - -

    unwrap will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwrap<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: () -> (() async throws -> T?)) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - unwrapa(file:line:customError:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toNot(beNil()).

    - -

    unwrapa will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwrapa<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure @escaping () async throws -> T?) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - unwrapa(file:line:customError:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toNot(beNil()).

    - -

    unwrapa will return the result of the expression if it is non-nil, and throw an error if the value is nil. -if a customError is given, then that will be thrown. Otherwise, a RequireError will be thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func unwrapa<T>(file: FileString = #file, line: UInt = #line, customError: Error? = nil, _ expression: @autoclosure () -> (() async throws -> T?)) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `waitUntil` does not work in async contexts. Use the async variant as a drop-in replacement")
    -public func waitUntil(timeout: NimbleTimeInterval = PollingDefaults.timeout, file: FileString = #file, line: UInt = #line, action: @escaping (@escaping () -> Void) -> Void)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The value given is lazily evaluated.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure @escaping () throws -> T?) -> SyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The closure is lazily invoked.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> T)) -> SyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The closure is lazily invoked.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> T?)) -> SyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expect(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The closure is lazily invoked.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expect(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> Void)) -> SyncExpectation<Void>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expects(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The value given is lazily evaluated. -This is provided as an alternative to expect which avoids overloading with expect -> AsyncExpectation.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expects<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure @escaping () throws -> T?) -> SyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expects(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The closure is lazily invoked. -This is provided as an alternative to expect which avoids overloading with expect -> AsyncExpectation.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expects<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> T)) -> SyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expects(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The closure is lazily invoked. -This is provided as an alternative to expect which avoids overloading with expect -> AsyncExpectation.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expects<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> T?)) -> SyncExpectation<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - expects(file:line:_:) - -
    -
    -
    -
    -
    -
    -

    Make a SyncExpectation on a given actual value. The closure is lazily invoked. -This is provided as an alternative to expect which avoids overloading with expect -> AsyncExpectation.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func expects(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> Void)) -> SyncExpectation<Void>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - fail(_:location:) - -
    -
    -
    -
    -
    -
    -

    Always fails the test with a message and a specified location.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func fail(_ message: String, location: SourceLocation)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - fail(_:file:line:) - -
    -
    -
    -
    -
    -
    -

    Always fails the test with a message.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func fail(_ message: String, file: FileString = #file, line: UInt = #line)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - fail(_:line:) - -
    -
    -
    -
    -
    -
    -

    Always fails the test.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func fail(_ file: FileString = #file, line: UInt = #line)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - allPass(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func allPass<S: Sequence>(
    -    _ passFunc: @escaping (S.Element) throws -> Bool
    -) -> Matcher<S>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - allPass(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func allPass<S: Sequence>(
    -    _ passName: String,
    -    _ passFunc: @escaping (S.Element) throws -> Bool
    -) -> Matcher<S>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - allPass(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func allPass<S>(_ elementMatcher: Matcher<S.Element>) -> Matcher<S> where S : Sequence
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - allPass(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func allPass<S: Sequence>(
    -    _ passFunc: @escaping (S.Element) async throws -> Bool
    -) -> AsyncMatcher<S>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - allPass(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func allPass<S: Sequence>(
    -    _ passName: String,
    -    _ passFunc: @escaping (S.Element) async throws -> Bool
    -) -> AsyncMatcher<S>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - allPass(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func allPass<S>(_ elementMatcher: AsyncMatcher<S.Element>) -> AsyncMatcher<S> where S : Sequence
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beAKindOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is an instance of the given class.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beAKindOf<T>(_ expectedType: T.Type) -> Matcher<Any>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beAKindOf(_:) - -
    -
    -
    -
    -
    -
    -

    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

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beAKindOf(_ expectedClass: AnyClass) -> Matcher<NSObject>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beAnInstanceOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is an exact instance of the given class.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beAnInstanceOf<T>(_ expectedType: T.Type) -> Matcher<Any>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beAnInstanceOf(_:) - -
    -
    -
    -
    -
    -
    -

    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

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beAnInstanceOf(_ expectedClass: AnyClass) -> Matcher<NSObject>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - defaultDelta() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func defaultDelta<F>() -> F where F : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beCloseTo(_:within:) - -
    -
    -
    -
    -
    -
    -

    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

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beCloseTo<Value: FloatingPoint>(
    -    _ expectedValue: Value,
    -    within delta: Value = defaultDelta()
    -) -> Matcher<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beCloseTo(_:within:) - -
    -
    -
    -
    -
    -
    -

    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

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beCloseTo<Value: NMBDoubleConvertible>(
    -    _ expectedValue: Value,
    -    within delta: Double = DefaultDelta
    -) -> Matcher<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beCloseTo(_:within:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beCloseTo<Value: FloatingPoint, Values: Collection>(
    -    _ expectedValues: Values,
    -    within delta: Value = defaultDelta()
    -) -> Matcher<Values> where Values.Element == Value
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Operators -

-
-
-
    -
  • -
    - - - - ≈(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: SyncExpectation<Value>, rhs: Value) where Value : Collection, Value.Element : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: AsyncExpectation<Value>, rhs: Value) async where Value : Collection, Value.Element : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: SyncExpectation<Value>, rhs: Value) where Value : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: AsyncExpectation<Value>, rhs: Value) async where Value : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: SyncExpectation<Value>, rhs: (expected: Value, delta: Value)) where Value : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: AsyncExpectation<Value>, rhs: (expected: Value, delta: Value)) async where Value : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <Value>(lhs: SyncExpectation<Value>, rhs: (expected: Value, delta: Value)) where Value : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <Value>(lhs: AsyncExpectation<Value>, rhs: (expected: Value, delta: Value)) async where Value : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: SyncExpectation<Value>, rhs: Value) where Value : NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: AsyncExpectation<Value>, rhs: Value) async where Value : NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: SyncExpectation<Value>, rhs: (expected: Value, delta: Double)) where Value : NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ≈(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func  <Value>(lhs: AsyncExpectation<Value>, rhs: (expected: Value, delta: Double)) async where Value : NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <Value>(lhs: SyncExpectation<Value>, rhs: (expected: Value, delta: Double)) where Value : NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <Value>(lhs: AsyncExpectation<Value>, rhs: (expected: Value, delta: Double)) async where Value : NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ±(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func ± <Value>(lhs: Value, rhs: Value) -> (expected: Value, delta: Value) where Value : FloatingPoint
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ±(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func ± <Value>(lhs: Value, rhs: Double) -> (expected: Value, delta: Double) where Value : NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty<S>() -> Matcher<S> where S : Sequence
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty<S>() -> Matcher<S> where S : SetAlgebra
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty<S>() -> Matcher<S> where S : Sequence, S : SetAlgebra
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty() -> Matcher<String>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty() -> Matcher<NSString>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty() -> Matcher<NSDictionary>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty() -> Matcher<NSArray>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beEmpty() - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beEmpty() -> Matcher<NMBCollection>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beGreaterThan(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is greater than the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beGreaterThan<T>(_ expectedValue: T?) -> Matcher<T> where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func > <T>(lhs: SyncExpectation<T>, rhs: T) where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func > <T>(lhs: AsyncExpectation<T>, rhs: T) async where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beGreaterThan(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is greater than the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beGreaterThan<T>(_ expectedValue: T?) -> Matcher<T> where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func > <T>(lhs: SyncExpectation<T>, rhs: T?) where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func > <T>(lhs: AsyncExpectation<T>, rhs: T?) async where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is greater than -or equal to the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beGreaterThanOrEqualTo<T>(_ expectedValue: T?) -> Matcher<T> where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func >= <T>(lhs: SyncExpectation<T>, rhs: T) where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func >= <T>(lhs: AsyncExpectation<T>, rhs: T) async where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is greater than -or equal to the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beGreaterThanOrEqualTo<T>(_ expectedValue: T?) -> Matcher<T> where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func >= <T>(lhs: SyncExpectation<T>, rhs: T) where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - >=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func >= <T>(lhs: AsyncExpectation<T>, rhs: T) async where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beIdenticalTo(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is the same instance -as the expected instance.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beIdenticalTo(_ expected: AnyObject?) -> Matcher<AnyObject>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ===(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func === (lhs: SyncExpectation<AnyObject>, rhs: AnyObject?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ===(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func === (lhs: AsyncExpectation<AnyObject>, rhs: AnyObject?) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func !== (lhs: SyncExpectation<AnyObject>, rhs: AnyObject?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func !== (lhs: AsyncExpectation<AnyObject>, rhs: AnyObject?) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - be(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is the same instance -as the expected instance.

    - -

    Alias for “beIdenticalTo”.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func be(_ expected: AnyObject?) -> Matcher<AnyObject>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beLessThan(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is less than the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beLessThan<T>(_ expectedValue: T?) -> Matcher<T> where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func < <V>(lhs: SyncExpectation<V>, rhs: V) where V : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func < <V>(lhs: AsyncExpectation<V>, rhs: V) async where V : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beLessThan(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is less than the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beLessThan<T>(_ expectedValue: T?) -> Matcher<T> where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func < <V>(lhs: SyncExpectation<V>, rhs: V?) where V : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func < <V>(lhs: AsyncExpectation<V>, rhs: V?) async where V : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is less than -or equal to the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beLessThanOrEqualTo<T>(_ expectedValue: T?) -> Matcher<T> where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func <= <T>(lhs: SyncExpectation<T>, rhs: T) where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func <= <T>(lhs: AsyncExpectation<T>, rhs: T) async where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is less than -or equal to the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beLessThanOrEqualTo<T>(_ expectedValue: T?) -> Matcher<T> where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func <= <T>(lhs: SyncExpectation<T>, rhs: T) where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - <=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func <= <T>(lhs: AsyncExpectation<T>, rhs: T) async where T : NMBComparable
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

beTrue() / beFalse() -

-
-
-
    -
  • -
    - - - - beTrue() - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is exactly true. -This matcher will not match against nils.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beTrue() -> Matcher<Bool>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beFalse() - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is exactly false. -This matcher will not match against nils.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beFalse() -> Matcher<Bool>
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

beTruthy() / beFalsy() -

-
-
-
    -
  • -
    - - - - beTruthy() - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is not logically false.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beTruthy<T>() -> Matcher<T> where T : Equatable, T : ExpressibleByBooleanLiteral
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beFalsy() - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is logically false. -This matcher will match against nils.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beFalsy<T>() -> Matcher<T> where T : Equatable, T : ExpressibleByBooleanLiteral
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beNil() - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is nil.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beNil<T>() -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beSuccess(test:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher for Result that succeeds when the actual value is success.

    - -

    You can pass a closure to do any arbitrary custom matching to the value inside result. -The closure only gets called when the result is success.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beSuccess<Success, Failure>(
    -    test: ((Success) -> Void)? = nil
    -) -> Matcher<Result<Success, Failure>>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beFailure(test:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher for Result that succeeds when the actual value is failure.

    - -

    You can pass a closure to do any arbitrary custom matching to the error inside result. -The closure only gets called when the result is failure.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beFailure<Success, Failure>(
    -    test: ((Failure) -> Void)? = nil
    -) -> Matcher<Result<Success, Failure>>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beVoid() - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is Void.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beVoid() -> Matcher<()>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == (lhs: SyncExpectation<()>, rhs: ())
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == (lhs: AsyncExpectation<()>, rhs: ()) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != (lhs: SyncExpectation<()>, rhs: ())
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != (lhs: AsyncExpectation<()>, rhs: ()) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beWithin(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is within given range.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beWithin<T>(_ range: Range<T>) -> Matcher<T> where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beWithin(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value is within given range.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beWithin<T>(_ range: ClosedRange<T>) -> Matcher<T> where T : Comparable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beginWith(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual sequence’s first element -is equal to the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beginWith<S>(_ startingElement: S.Element) -> Matcher<S> where S : Sequence, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beginWith(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual collection’s first element -is equal to the expected object.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beginWith(_ startingElement: Any) -> Matcher<NMBOrderedCollection>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beginWith(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual string contains expected substring -where the expected substring’s location is zero.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beginWith(_ startingSubstring: String) -> Matcher<String>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beginWith(prefix:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the exepected sequence is a prefix of the actual sequence.

    - -

    This is a matcher abstraction for https://developer.apple.com/documentation/swift/sequence/2854218-starts

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beginWith<Seq1: Sequence, Seq2: Sequence>(prefix expectedPrefix: Seq2?)
    -    -> Matcher<Seq1> where Seq1.Element: Equatable, Seq1.Element == Seq2.Element
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - beginWith(prefix:by:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the expected sequence is the prefix of the actual sequence, using the given matcher as the equivalence test.

    - -

    This is a matcher abstraction for https://developer.apple.com/documentation/swift/sequence/2996828-starts

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func beginWith<Seq1: Sequence, Seq2: Sequence>(
    -    prefix expectedPrefix: Seq2?,
    -    by areEquivalent: @escaping (Seq1.Element, Seq2.Element) -> Bool
    -) -> Matcher<Seq1>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual sequence contains the expected values.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain<S>(_ items: S.Element...) -> Matcher<S> where S : Sequence, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual sequence contains the expected values.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain<S>(_ items: [S.Element]) -> Matcher<S> where S : Sequence, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set contains the expected values.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain<S>(_ items: S.Element...) -> Matcher<S> where S : SetAlgebra, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set contains the expected values.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain<S>(_ items: [S.Element]) -> Matcher<S> where S : SetAlgebra, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set contains the expected values.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain<S>(_ items: S.Element...) -> Matcher<S> where S : Sequence, S : SetAlgebra, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set contains the expected values.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain<S>(_ items: [S.Element]) -> Matcher<S> where S : Sequence, S : SetAlgebra, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual string contains the expected substring.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain(_ substrings: String...) -> Matcher<String>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain(_ substrings: [String]) -> Matcher<String>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual string contains the expected substring.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain(_ substrings: NSString...) -> Matcher<NSString>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain(_ substrings: [NSString]) -> Matcher<NSString>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual collection contains the expected object.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain(_ items: Any?...) -> Matcher<NMBContainer>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - contain(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func contain(_ items: [Any?]) -> Matcher<NMBContainer>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func containElementSatisfying<S: Sequence>(
    -    _ matcher: @escaping ((S.Element) -> Bool), _ matcherDescription: String = ""
    -) -> Matcher<S>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func containElementSatisfying<S: Sequence>(
    -    _ matcher: @escaping ((S.Element) async -> Bool), _ matcherDescription: String = ""
    -) -> AsyncMatcher<S>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - elementsEqual(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual sequence and the exepected sequence contain the same elements in -the same order.

    - -

    This is a matcher abstraction for https://developer.apple.com/documentation/swift/sequence/2854213-elementsequal

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func elementsEqual<Seq1: Sequence, Seq2: Sequence>(
    -    _ expectedValue: Seq2?
    -) -> Matcher<Seq1> where Seq1.Element: Equatable, Seq1.Element == Seq2.Element
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - elementsEqual(_:by:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual sequence and the exepected sequence contain equivalent elements in -the same order, using the given matcher as the equivalence test.

    - -

    This is a matcher abstraction for https://developer.apple.com/documentation/swift/sequence/2949668-elementsequal

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func elementsEqual<Seq1: Sequence, Seq2: Sequence>(
    -    _ expectedValue: Seq2?,
    -    by areEquivalent: @escaping (Seq1.Element, Seq2.Element) -> Bool
    -) -> Matcher<Seq1>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - endWith(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual sequence’s last element -is equal to the expected value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func endWith<S>(_ endingElement: S.Element) -> Matcher<S> where S : Sequence, S.Element : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - endWith(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual collection’s last element -is equal to the expected object.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func endWith(_ endingElement: Any) -> Matcher<NMBOrderedCollection>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - endWith(_:) - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func endWith(_ endingSubstring: String) -> Matcher<String>
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple2 -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual tuple is equal to the expected tuple. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable>(
    -    _ expectedValue: (T1, T2)?
    -) -> Matcher<(T1, T2)>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable>(
    -    lhs: SyncExpectation<(T1, T2)>,
    -    rhs: (T1, T2)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2)>,
    -    rhs: (T1, T2)?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable>(
    -    lhs: SyncExpectation<(T1, T2)>,
    -    rhs: (T1, T2)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2)>,
    -    rhs: (T1, T2)?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple3 -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual tuple is equal to the expected tuple. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable>(
    -    _ expectedValue: (T1, T2, T3)?
    -) -> Matcher<(T1, T2, T3)>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3)>,
    -    rhs: (T1, T2, T3)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3)>,
    -    rhs: (T1, T2, T3)?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3)>,
    -    rhs: (T1, T2, T3)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3)>,
    -    rhs: (T1, T2, T3)?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple4 -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual tuple is equal to the expected tuple. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    _ expectedValue: (T1, T2, T3, T4)?
    -) -> Matcher<(T1, T2, T3, T4)>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3, T4)>,
    -    rhs: (T1, T2, T3, T4)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3, T4)>,
    -    rhs: (T1, T2, T3, T4)?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3, T4)>,
    -    rhs: (T1, T2, T3, T4)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3, T4)>,
    -    rhs: (T1, T2, T3, T4)?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple5 -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual tuple is equal to the expected tuple. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    _ expectedValue: (T1, T2, T3, T4, T5)?
    -) -> Matcher<(T1, T2, T3, T4, T5)>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3, T4, T5)>,
    -    rhs: (T1, T2, T3, T4, T5)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3, T4, T5)>,
    -    rhs: (T1, T2, T3, T4, T5)?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3, T4, T5)>,
    -    rhs: (T1, T2, T3, T4, T5)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3, T4, T5)>,
    -    rhs: (T1, T2, T3, T4, T5)?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple6 -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual tuple is equal to the expected tuple. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    _ expectedValue: (T1, T2, T3, T4, T5, T6)?
    -) -> Matcher<(T1, T2, T3, T4, T5, T6)>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3, T4, T5, T6)>,
    -    rhs: (T1, T2, T3, T4, T5, T6)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3, T4, T5, T6)>,
    -    rhs: (T1, T2, T3, T4, T5, T6)?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: SyncExpectation<(T1, T2, T3, T4, T5, T6)>,
    -    rhs: (T1, T2, T3, T4, T5, T6)?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: AsyncExpectation<(T1, T2, T3, T4, T5, T6)>,
    -    rhs: (T1, T2, T3, T4, T5, T6)?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple2 Array -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable>(
    -    _ expectedValue: [(T1, T2)]?
    -) -> Matcher<[(T1, T2)]>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2)]>,
    -    rhs: [(T1, T2)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2)]>,
    -    rhs: [(T1, T2)]?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2)]>,
    -    rhs: [(T1, T2)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2)]>,
    -    rhs: [(T1, T2)]?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple3 Array -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable>(
    -    _ expectedValue: [(T1, T2, T3)]?
    -) -> Matcher<[(T1, T2, T3)]>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3)]>,
    -    rhs: [(T1, T2, T3)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3)]>,
    -    rhs: [(T1, T2, T3)]?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3)]>,
    -    rhs: [(T1, T2, T3)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3)]>,
    -    rhs: [(T1, T2, T3)]?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple4 Array -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    _ expectedValue: [(T1, T2, T3, T4)]?
    -) -> Matcher<[(T1, T2, T3, T4)]>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3, T4)]>,
    -    rhs: [(T1, T2, T3, T4)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3, T4)]>,
    -    rhs: [(T1, T2, T3, T4)]?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3, T4)]>,
    -    rhs: [(T1, T2, T3, T4)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3, T4)]>,
    -    rhs: [(T1, T2, T3, T4)]?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple5 Array -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    _ expectedValue: [(T1, T2, T3, T4, T5)]?
    -) -> Matcher<[(T1, T2, T3, T4, T5)]>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3, T4, T5)]>,
    -    rhs: [(T1, T2, T3, T4, T5)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3, T4, T5)]>,
    -    rhs: [(T1, T2, T3, T4, T5)]?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3, T4, T5)]>,
    -    rhs: [(T1, T2, T3, T4, T5)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3, T4, T5)]>,
    -    rhs: [(T1, T2, T3, T4, T5)]?
    -) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Tuple6 Array -

-
-
-
    -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples. -Values can support equal by supporting the Equatable protocol.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    _ expectedValue: [(T1, T2, T3, T4, T5, T6)]?
    -) -> Matcher<[(T1, T2, T3, T4, T5, T6)]>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3, T4, T5, T6)]>,
    -    rhs: [(T1, T2, T3, T4, T5, T6)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3, T4, T5, T6)]>,
    -    rhs: [(T1, T2, T3, T4, T5, T6)]?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: SyncExpectation<[(T1, T2, T3, T4, T5, T6)]>,
    -    rhs: [(T1, T2, T3, T4, T5, T6)]?
    -)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T1: Equatable, T2: Equatable, T3: Equatable, T4: Equatable, T5: Equatable, T6: Equatable>(
    -    lhs: AsyncExpectation<[(T1, T2, T3, T4, T5, T6)]>,
    -    rhs: [(T1, T2, T3, T4, T5, T6)]?
    -) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    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).

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T>(_ expectedValue: T) -> Matcher<T> where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher allowing comparison of collection with optional type

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T>(_ expectedValue: [T?]) -> Matcher<[T?]> where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    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).

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T>(_ expectedValue: T?) -> Matcher<T> where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set is equal to the expected set.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T>(_ expectedValue: Set<T>) -> Matcher<Set<T>> where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set is equal to the expected set.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T>(_ expectedValue: Set<T>?) -> Matcher<Set<T>> where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set is equal to the expected set.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T>(_ expectedValue: Set<T>) -> Matcher<Set<T>> where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual set is equal to the expected set.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<T>(_ expectedValue: Set<T>?) -> Matcher<Set<T>> where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - equal(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual dictionary is equal to the expected dictionary

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func equal<K, V>(_ expectedValue: [K : V?]) -> Matcher<[K : V]> where K : Hashable, V : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: SyncExpectation<T>, rhs: T) where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: SyncExpectation<T>, rhs: T?) where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: SyncExpectation<T>, rhs: T) where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: SyncExpectation<T>, rhs: T?) where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: SyncExpectation<[T]>, rhs: [T]?) where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: SyncExpectation<[T]>, rhs: [T]?) where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>) where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>?) where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>) where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>?) where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>) where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>?) where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>) where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: SyncExpectation<Set<T>>, rhs: Set<T>?) where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T, C>(lhs: SyncExpectation<[T : C]>, rhs: [T : C]?) where T : Hashable, C : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T, C>(lhs: SyncExpectation<[T : C]>, rhs: [T : C]?) where T : Hashable, C : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: AsyncExpectation<T>, rhs: T) async where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: AsyncExpectation<T>, rhs: T?) async where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: AsyncExpectation<T>, rhs: T) async where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: AsyncExpectation<T>, rhs: T?) async where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: AsyncExpectation<[T]>, rhs: [T]?) async where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: AsyncExpectation<[T]>, rhs: [T]?) async where T : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>) async where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>?) async where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>) async where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>?) async where T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>) async where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>?) async where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>) async where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T>(lhs: AsyncExpectation<Set<T>>, rhs: Set<T>?) async where T : Comparable, T : Hashable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func == <T, C>(lhs: AsyncExpectation<[T : C]>, rhs: [T : C]?) async where T : Hashable, C : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func != <T, C>(lhs: AsyncExpectation<[T : C]>, rhs: [T : C]?) async where T : Hashable, C : Equatable
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - haveCount(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual Collection’s count equals -the expected value

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func haveCount<T>(_ expectedValue: Int) -> Matcher<T> where T : Collection
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - haveCount(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual collection’s count equals -the expected value

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func haveCount(_ expectedValue: Int) -> Matcher<NMBCollection>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - map(_:_:) - -
    -
    -
    -
    -
    -
    -

    map works by transforming the expression to a value that the given matcher uses.

    - -

    For example, you might only care that a particular property on a method equals some other value. -So, you could write expect(myObject).to(lens(\.someIntValue, equal(3)). -This is also useful in conjunction with satisfyAllOf to do a partial equality of an object.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func map<T, U>(_ transform: @escaping (T) throws -> U, _ matcher: Matcher<U>) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - map(_:_:) - -
    -
    -
    -
    -
    -
    -

    map works by transforming the expression to a value that the given matcher uses.

    - -

    For example, you might only care that a particular property on a method equals some other value. -So, you could write expect(myObject).to(lens(\.someIntValue, equal(3)). -This is also useful in conjunction with satisfyAllOf to do a partial equality of an object.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func map<T, U>(_ transform: @escaping (T) async throws -> U, _ matcher: some AsyncableMatcher<U>) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - match(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual string satisfies the regular expression -described by the expected string.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func match(_ expectedValue: String?) -> Matcher<String>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - matchError(_:) - -
    -
    -
    -
    -
    -
    -

    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 comparison by _domain and _code.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func matchError<T>(_ error: T) -> Matcher<Error> where T : Error
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - matchError(_:) - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func matchError<T>(_ error: T) -> Matcher<Error> where T : Equatable, T : Error
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - matchError(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual expression evaluates to an -error of the specified type

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func matchError<T>(_ errorType: T.Type) -> Matcher<Error> where T : Error
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func postNotifications<Out>(
    -    _ matcher: Matcher<[Notification]>,
    -    from center: NotificationCenter = .default
    -) -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func postDistributedNotifications<Out>(
    -    _ matcher: Matcher<[Notification]>,
    -    from center: DistributedNotificationCenter = .default(),
    -    names: Set<Notification.Name>
    -) -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func raiseException<Out>(
    -    named: NSExceptionName? = nil,
    -    reason: String? = nil,
    -    userInfo: NSDictionary? = nil,
    -    closure: ((NSException) -> Void)? = nil
    -) -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func raiseException<Out>(
    -    named: String?,
    -    reason: String? = nil,
    -    userInfo: NSDictionary? = nil,
    -    closure: ((NSException) -> Void)? = nil
    -) -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAllOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with all of the matchers -provided in the variable list of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func satisfyAllOf<T>(_ matchers: Matcher<T>...) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAllOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with all of the matchers -provided in the array of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func satisfyAllOf<T>(_ matchers: [Matcher<T>]) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - &&(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func && <T>(left: Matcher<T>, right: Matcher<T>) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAllOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with all of the matchers -provided in the variable list of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(macOS 13.0.0, iOS 16.0.0, tvOS 16.0.0, watchOS 9.0.0, *)
    -public func satisfyAllOf<T>(_ matchers: any AsyncableMatcher<T>...) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAllOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with all of the matchers -provided in the array of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(macOS 13.0.0, iOS 16.0.0, tvOS 16.0.0, watchOS 9.0.0, *)
    -public func satisfyAllOf<T>(_ matchers: [any AsyncableMatcher<T>]) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - &&(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func && <T>(left: some AsyncableMatcher<T>, right: some AsyncableMatcher<T>) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAnyOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with any of the matchers -provided in the variable list of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func satisfyAnyOf<T>(_ matchers: Matcher<T>...) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAnyOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with any of the matchers -provided in the array of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func satisfyAnyOf<T>(_ matchers: [Matcher<T>]) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ||(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func || <T>(left: Matcher<T>, right: Matcher<T>) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAnyOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with any of the matchers -provided in the variable list of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(macOS 13.0.0, iOS 16.0.0, tvOS 16.0.0, watchOS 9.0.0, *)
    -public func satisfyAnyOf<T>(_ matchers: any AsyncableMatcher<T>...) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfyAnyOf(_:) - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that succeeds when the actual value matches with any of the matchers -provided in the array of matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(macOS 13.0.0, iOS 16.0.0, tvOS 16.0.0, watchOS 9.0.0, *)
    -public func satisfyAnyOf<T>(_ matchers: [any AsyncableMatcher<T>]) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ||(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func || <T>(left: some AsyncableMatcher<T>, right: some AsyncableMatcher<T>) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Run the provided block. If a POSIX SIGILL is received, handle it and return a BadInstructionException (which is just an empty object in this POSIX signal version). Otherwise return nil. -NOTE: This function is only intended for use in test harnesses – use in a distributed build is almost certainly a bad choice. If a SIGILL is received, the block will be interrupted using a C longjmp. The risks associated with abrupt jumps apply here: most Swift functions are not interrupt-safe. Memory may be leaked and the program will not necessarily be left in a safe state.

    - -
    -
    -
    -
  • -
  • -
    - - - - throwAssertion() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func throwAssertion<Out>() -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - throwError() - -
    -
    -
    -
    -
    -
    -

    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 comparison 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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func throwError<Out>() -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func throwError<T, Out>(_ error: T, closure: ((Error) -> Void)? = nil) -> Matcher<Out> where T : Error
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func throwError<T, Out>(_ error: T, closure: ((T) -> Void)? = nil) -> Matcher<Out> where T : Equatable, T : Error
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func throwError<T: Error, Out>(
    -    errorType: T.Type,
    -    closure: ((T) -> Void)? = nil
    -) -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - throwError(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 Error in the closure.

    - -

    The closure only gets called when an error was thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func throwError<Out>(closure: @escaping ((Error) -> Void)) -> Matcher<Out>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - throwError(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 Error in the closure.

    - -

    The closure only gets called when an error was thrown.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func throwError<T, Out>(closure: @escaping ((T) -> Void)) -> Matcher<Out> where T : Error
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - succeed() - -
    -
    -
    -
    -
    -
    -

    A Nimble matcher that takes in a closure for validation.

    - -

    Return .succeeded when the validation succeeds. -Return .failed with a failure reason when the validation fails.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func succeed() -> Matcher<ToSucceedResult>
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

UnwrapEventually -

-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwrap<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure @escaping () throws -> T?) throws -> T
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwrap<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> T?)) throws -> T
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwraps<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure @escaping () throws -> T?) throws -> T
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Makes sure that the expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to require(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwraps<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() throws -> T?)) throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - pollUnwrap(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwrap<T>(file: FileString = #file, line: UInt = #line, _ expression: @escaping () async throws -> T?) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - pollUnwrap(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwrap<T>(file: FileString = #file, line: UInt = #line, _ expression: () -> (() async throws -> T?)) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - pollUnwrapa(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwrapa<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure @escaping () async throws -> T?) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - pollUnwrapa(file:line:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Makes sure that the async expression evaluates to a non-nil value, otherwise throw an error. -As you can tell, this is a much less verbose equivalent to requirea(expression).toEventuallyNot(beNil())

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func pollUnwrapa<T>(file: FileString = #file, line: UInt = #line, _ expression: @autoclosure () -> (() async throws -> T?)) async throws -> T
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - stringify(_:) - -
    -
    -
    -
    -
    -
    -

    Returns a string appropriate for displaying in test output -from the provided value.

    -
    -

    See also

    -

    TestOutputStringConvertible

    - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func stringify<T>(_ value: T?) -> String
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - value - - -
    -

    A value that will show up in a test’s output.

    -
    -
    -
    -
    -

    Return Value

    -

    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.

    -
    -
    -
    -
  • -
-
-
-
- - -
- -

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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func prettyCollectionType<T>(_ value: T) -> String
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - value - - -
    -

    A value that will be used to determine a type name.

    -
    -
    -
    -
    -

    Return Value

    -

    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.

    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Returns the type name for a given collection type. This overload is used by Swift -collection types.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func prettyCollectionType<T>(_ collection: T) -> String where T : Collection
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - collection - - -
    -

    A Swift CollectionType value.

    -
    -
    -
    -
    -

    Return Value

    -

    A string representing the dynamicType of the value.

    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Global Variables.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Global Variables.html deleted file mode 100644 index 6ec912252..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Global Variables.html +++ /dev/null @@ -1,1290 +0,0 @@ - - - - Global Variables Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Global Variables

-

The following global variables are available globally.

- -
-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    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

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var NimbleAssertionHandler: AssertionHandler
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - DefaultDelta - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let DefaultDelta: Double
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols.html deleted file mode 100644 index afc040121..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols.html +++ /dev/null @@ -1,1495 +0,0 @@ - - - - Protocols Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Protocols

-

The following protocols are available globally.

- -
-
-
-
    -
  • -
    - - - - AssertionHandler - -
    -
    -
    -
    -
    -
    -

    Protocol for the assertion handler that Nimble uses for all expectations.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol AssertionHandler
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - Expectation - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol Expectation
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - AsyncableMatcher - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol AsyncableMatcher<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBContainer - -
    -
    -
    -
    -
    -
    -

    Protocol for types that support contain() matcher.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol NMBContainer
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBCollection - -
    -
    -
    -
    -
    -
    -

    Protocol for types that support only beEmpty(), haveCount() matchers

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol NMBCollection
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBOrderedCollection - -
    -
    -
    -
    -
    -
    -

    Protocol for types that support beginWith(), endWith(), beEmpty() matchers

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol NMBOrderedCollection : NMBCollection
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBDoubleConvertible - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol NMBDoubleConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBComparable - -
    -
    -
    -
    -
    -
    -

    Protocol for types to support beLessThan(), beLessThanOrEqualTo(), - beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers.

    - -

    Types that conform to Swift’s Comparable protocol will work implicitly too

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @objc
    -public protocol NMBComparable
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    -
    -

    See also

    - CustomDebugStringConvertible - -
    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public protocol TestOutputStringConvertible
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/AssertionHandler.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/AssertionHandler.html deleted file mode 100644 index 53381f86f..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/AssertionHandler.html +++ /dev/null @@ -1,1264 +0,0 @@ - - - - AssertionHandler Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AssertionHandler

-
-
- -
public protocol AssertionHandler
- -
-
-

Protocol for the assertion handler that Nimble uses for all expectations.

- -
-
-
- -
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/AsyncableMatcher.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/AsyncableMatcher.html deleted file mode 100644 index fbef97920..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/AsyncableMatcher.html +++ /dev/null @@ -1,1294 +0,0 @@ - - - - AsyncableMatcher Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AsyncableMatcher

-
-
- -
public protocol AsyncableMatcher<Value>
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - Value - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    associatedtype Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfies(_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    func satisfies(_ expression: AsyncExpression<Value>) async throws -> MatcherResult
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/Expectation.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/Expectation.html deleted file mode 100644 index 59fac22e8..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/Expectation.html +++ /dev/null @@ -1,1399 +0,0 @@ - - - - Expectation Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Expectation

-
-
- -
public protocol Expectation
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    var location: SourceLocation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - status - -
    -
    -
    -
    -
    -
    -

    The status of the test after matchers have been evaluated.

    - -

    This property can be used for changing test behavior based whether an expectation has -passed.

    - -

    In the below example, we perform additional tests on an array only if it has enough -elements.

    -
    if expect(array).to(haveCount(10)).status == .passed {
    -   expect(array[9]).to(...)
    -}
    -
    -
    -

    Remark

    - Similar functionality can be achieved using the onFailure(throw:) method. - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    var status: ExpectationStatus { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - verify(_:_:) - -
    -
    -
    -
    -
    -
    -

    Takes the result of a test and passes it to the assertion handler.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -func verify(_ pass: Bool, _ message: FailureMessage) -> Self
    - -
    -
    -
    -

    Return Value

    -

    An updated Expression with the result of the test applied to the status - property.

    -
    -
    -
    -
  • -
  • -
    - - - - onFailure(throw:) - - - Extension method - -
    -
    -
    -
    -
    -
    -

    Throws the supplied error if the expectation has previously failed.

    - -

    This provides a mechanism for halting tests when a failure occurs. This can be used in -conjunction with Quick.StopTest to halt a test when a failure would cause subsequent test -code to fail.

    - -

    In the below example, the test will stop in the first line if array.count == 5 rather -than crash on the second line.

    -
    try expect(array).to(haveCount(10)).onFailure(throw: StopTest.silently)
    -expect(array[9]).to(...)
    -
    -
    -

    Warning

    -

    This method MUST be called after a matcher method like to or not. - Otherwise, this expectation will be in an indeterminate state and will - unconditionally log an error.

    - -
    -

    Remark

    -

    Similar functionality can be achieved using the status property.

    - -
    -

    Attention

    -

    This is deprecated in favor of the require dsl (require, unwrap, - pollUnwrap), which integrates the matcher seemlessly, or, in the case of - unwrap and pollUnwrap, acts as a shorthand when you require that an - expression evaluate to some non-nil value. onFailure will be removed in - Nimble 15.

    - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, message: "Use the require dsl")
    -public func onFailure(throw error: Error) throws
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBCollection.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBCollection.html deleted file mode 100644 index 936884de8..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBCollection.html +++ /dev/null @@ -1,1264 +0,0 @@ - - - - NMBCollection Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBCollection

-
-
- -
public protocol NMBCollection
- -
-
-

Protocol for types that support only beEmpty(), haveCount() matchers

- -
-
-
-
    -
  • -
    - - - - count - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    var count: Int { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBComparable.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBComparable.html deleted file mode 100644 index 84f1a3828..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBComparable.html +++ /dev/null @@ -1,1268 +0,0 @@ - - - - NMBComparable Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBComparable

-
-
- -
@objc
-public protocol NMBComparable
- -
-
-

Protocol for types to support beLessThan(), beLessThanOrEqualTo(), - beGreaterThan(), beGreaterThanOrEqualTo(), and equal() matchers.

- -

Types that conform to Swift’s Comparable protocol will work implicitly too

- -
-
-
-
    -
  • -
    - - - - NMB_compare(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    func NMB_compare(_ otherObject: NMBComparable!) -> ComparisonResult
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBContainer.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBContainer.html deleted file mode 100644 index 48927aa8d..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBContainer.html +++ /dev/null @@ -1,1264 +0,0 @@ - - - - NMBContainer Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBContainer

-
-
- -
public protocol NMBContainer
- -
-
-

Protocol for types that support contain() matcher.

- -
-
-
-
    -
  • -
    - - - - contains(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    func contains(_ anObject: Any) -> Bool
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBDoubleConvertible.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBDoubleConvertible.html deleted file mode 100644 index f4846ead3..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBDoubleConvertible.html +++ /dev/null @@ -1,1264 +0,0 @@ - - - - NMBDoubleConvertible Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBDoubleConvertible

-
-
- -
public protocol NMBDoubleConvertible
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - doubleValue - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    var doubleValue: CDouble { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBOrderedCollection.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBOrderedCollection.html deleted file mode 100644 index 7a0d06242..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/NMBOrderedCollection.html +++ /dev/null @@ -1,1264 +0,0 @@ - - - - NMBOrderedCollection Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

NMBOrderedCollection

-
-
- -
public protocol NMBOrderedCollection : NMBCollection
- -
-
-

Protocol for types that support beginWith(), endWith(), beEmpty() matchers

- -
-
-
-
    -
  • -
    - - - - object(at:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    func object(at index: Int) -> Any
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/TestOutputStringConvertible.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/TestOutputStringConvertible.html deleted file mode 100644 index 971db493e..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Protocols/TestOutputStringConvertible.html +++ /dev/null @@ -1,1273 +0,0 @@ - - - - TestOutputStringConvertible Protocol Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

TestOutputStringConvertible

-
-
- -
public protocol TestOutputStringConvertible
- -
-
-

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.

-
-

See also

- CustomDebugStringConvertible - -
- -
-
-
-
    -
  • -
    - - - - testDescription - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    var testDescription: String { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs.html deleted file mode 100644 index 7028eac53..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs.html +++ /dev/null @@ -1,1665 +0,0 @@ - - - - Structures Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Structures

-

The following structures are available globally.

- -
-
-
-
    -
  • -
    - - - - AssertionRecord - -
    -
    -
    -
    -
    -
    -

    A data structure that stores information about an assertion when -AssertionRecorder is set as the Nimble assertion handler.

    - -

    @see AssertionRecorder -@see AssertionHandler

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct AssertionRecord : CustomStringConvertible
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - AsyncExpression - -
    -
    -
    -
    -
    -
    -

    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, SyncExpression 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.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct AsyncExpression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - SyncExpectation - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct SyncExpectation<Value> : Expectation
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - AsyncExpectation - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct AsyncExpectation<Value> : Expectation
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - Expression - -
    -
    -
    -
    -
    -
    -

    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, SyncExpression 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.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct Expression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - Matcher - -
    -
    -
    -
    -
    -
    -

    A Matcher is part of the new matcher API that provides assertions to expectations.

    - -

    Given a code snippet:

    - -

    expect(1).to(equal(2)) - ^^^^^^^^ - Called a “matcher”

    - -

    A matcher consists of two parts a constructor function and the Matcher.

    - -

    The Matcher provide the heavy lifting on how to assert against a given value. Internally, -matchers are simple wrappers around closures to provide static type information and -allow composition and wrapping of existing behaviors.

    - -

    In the 2023 Apple Platform releases (macOS 14, iOS 17, watchOS 10, tvOS 17, visionOS 1), Apple -renamed NSMatcher to Matcher. In response, we decided to rename Matcher to -Matcher.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct Matcher<T>
    -
    extension Matcher: AsyncableMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - AsyncMatcher - -
    -
    -
    -
    -
    -
    -

    An AsyncMatcher is part of the new matcher API that provides assertions to expectations.

    - -

    Given a code snippet:

    - -

    expect(1).to(equal(2)) - ^^^^^^^^ - Called a “matcher”

    - -

    A matcher consists of two parts a constructor function and the Matcher.

    - -

    The Matcher provide the heavy lifting on how to assert against a given value. Internally, -matchers are simple wrappers around closures to provide static type information and -allow composition and wrapping of existing behaviors.

    - -

    AsyncMatchers serve to allow writing matchers that must be run in async contexts. -These can also be used with either Expectations or AsyncExpectations. -But these can only be used from async contexts, and are unavailable in Objective-C. -You can, however, call regular Matchers from an AsyncMatcher, if you wish to compose one like that.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct AsyncMatcher<T> : AsyncableMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ExpectationNil - -
    -
    -
    -
    -
    -
    -

    Represents nil value to be used with the operator overloads for beNil.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct ExpectationNil : ExpressibleByNilLiteral
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MatcherResult - -
    -
    -
    -
    -
    -
    -

    The value that a Matcher returns to describe if the given (actual) value matches the -matcher.

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct MatcherResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - SyncRequirement - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct SyncRequirement<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - AsyncRequirement - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct AsyncRequirement<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - PollingDefaults - -
    -
    -
    -
    -
    -
    -

    If you are running on a slower machine, it could be useful to increase the default timeout value -or slow down poll interval. Default timeout interval is 1, and poll interval is 0.01.

    -
    -

    Note

    - This used to be known as AsyncDefaults. - -
    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct PollingDefaults
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - RequireError - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - - See more -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public struct RequireError : Error, CustomNSError
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AssertionRecord.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AssertionRecord.html deleted file mode 100644 index acf45a260..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AssertionRecord.html +++ /dev/null @@ -1,1348 +0,0 @@ - - - - AssertionRecord Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AssertionRecord

-
-
- -
public struct AssertionRecord : CustomStringConvertible
- -
-
-

A data structure that stores information about an assertion when -AssertionRecorder is set as the Nimble assertion handler.

- -

@see AssertionRecorder -@see AssertionHandler

- -
-
-
-
    -
  • -
    - - - - success - -
    -
    -
    -
    -
    -
    -

    Whether the assertion succeeded or failed

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let success: Bool
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - message - -
    -
    -
    -
    -
    -
    -

    The failure message the assertion would display on failure.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let message: FailureMessage
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    The source location the expectation occurred on.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let location: SourceLocation
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - description - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var description: String { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncExpectation.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncExpectation.html deleted file mode 100644 index 754e98889..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncExpectation.html +++ /dev/null @@ -1,2129 +0,0 @@ - - - - AsyncExpectation Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AsyncExpectation

-
-
- -
public struct AsyncExpectation<Value> : Expectation
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - expression - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let expression: AsyncExpression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - status - -
    -
    -
    -
    -
    -
    -

    The status of the test after matchers have been evaluated.

    - -

    This property can be used for changing test behavior based whether an expectation has -passed.

    - -

    In the below example, we perform additional tests on an array only if it has enough -elements.

    -
    if expect(array).to(haveCount(10)).status == .passed {
    -   expect(array[9]).to(...)
    -}
    -
    -
    -

    Remark

    - Similar functionality can be achieved using the onFailure(throw:) method. - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let status: ExpectationStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(expression:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expression: AsyncExpression<Value>)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var location: SourceLocation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - verify(_:_:) - -
    -
    -
    -
    -
    -
    -

    Takes the result of a test and passes it to the assertion handler.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func verify(_ pass: Bool, _ message: FailureMessage) -> AsyncExpectation<Value>
    - -
    -
    -
    -

    Return Value

    -

    An updated Expression with the result of the test applied to the status - property.

    -
    -
    -
    -
  • -
  • -
    - - - - to(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: Matcher<Value>, description: String? = nil) async -> AsyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: Matcher<Value>, description: String? = nil) async -> AsyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: Matcher<Value>, description: String? = nil) async -> AsyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - to(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: AsyncMatcher<Value>, description: String? = nil) async -> AsyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: AsyncMatcher<Value>, description: String? = nil) async -> AsyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: AsyncMatcher<Value>, description: String? = nil) async -> AsyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func == (lhs: AsyncExpectation, rhs: ExpectationNil) async
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func != (lhs: AsyncExpectation, rhs: ExpectationNil) async
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

With Synchronous Matchers -

-
-
- -
-
-
- - -
- -

With AsyncMatchers -

-
-
- -
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncExpression.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncExpression.html deleted file mode 100644 index 7638d6c71..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncExpression.html +++ /dev/null @@ -1,1662 +0,0 @@ - - - - AsyncExpression Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AsyncExpression

-
-
- -
public struct AsyncExpression<Value>
- -
-
-

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, SyncExpression 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.

- -
-
-
-
    -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let location: SourceLocation
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - isClosure - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let isClosure: Bool
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Creates a new expression struct. Normally, expect(…) will manage this -creation process. The expression is memoized.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expression: @escaping () async throws -> Value?, location: SourceLocation, isClosure: Bool = true)
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - - - - - -
    - - expression - - -
    -

    The closure that produces a given value.

    -
    -
    - - location - - -
    -

    The source location that this closure originates from.

    -
    -
    - - 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.

    -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Creates a new expression struct. Normally, expect(…) will manage this -creation process.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(memoizedExpression: @escaping (Bool) async throws -> Value?, location: SourceLocation, withoutCaching: Bool, isClosure: Bool = true)
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - -
    - - expression - - -
    -

    The closure that produces a given value.

    -
    -
    - - location - - -
    -

    The source location that this closure originates from.

    -
    -
    - - 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.

    -
    -
    - - 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.

    -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - toSynchronousExpression() - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Creates a new synchronous expression, for use in Matchers.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toSynchronousExpression() async -> Expression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - cast(_:) - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func cast<U>(_ block: @escaping (Value?) throws -> U?) -> AsyncExpression<U>
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - block - - -
    -

    The block that can cast the current Expression value to a - new type.

    -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - cast(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func cast<U>(_ block: @escaping (Value?) async throws -> U?) -> AsyncExpression<U>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - evaluate() - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func evaluate() async throws -> Value?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - withoutCaching() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func withoutCaching() -> AsyncExpression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - withCaching() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func withCaching() -> AsyncExpression<Value>
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncMatcher.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncMatcher.html deleted file mode 100644 index d78d8375d..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncMatcher.html +++ /dev/null @@ -1,1485 +0,0 @@ - - - - AsyncMatcher Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AsyncMatcher

-
-
- -
public struct AsyncMatcher<T> : AsyncableMatcher
- -
-
-

An AsyncMatcher is part of the new matcher API that provides assertions to expectations.

- -

Given a code snippet:

- -

expect(1).to(equal(2)) - ^^^^^^^^ - Called a “matcher”

- -

A matcher consists of two parts a constructor function and the Matcher.

- -

The Matcher provide the heavy lifting on how to assert against a given value. Internally, -matchers are simple wrappers around closures to provide static type information and -allow composition and wrapping of existing behaviors.

- -

AsyncMatchers serve to allow writing matchers that must be run in async contexts. -These can also be used with either Expectations or AsyncExpectations. -But these can only be used from async contexts, and are unavailable in Objective-C. -You can, however, call regular Matchers from an AsyncMatcher, if you wish to compose one like that.

- -
-
-
-
    -
  • -
    - - - - init(_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(_ matcher: @escaping (AsyncExpression<T>) async throws -> MatcherResult)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfies(_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Uses a matcher on a given value to see if it passes the matcher.

    - -

    @param expression The value to run the matcher’s logic against -@returns A matcher result indicate passing or failing and an associated error message.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func satisfies(_ expression: AsyncExpression<T>) async throws -> MatcherResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - define(matcher:) - -
    -
    -
    -
    -
    -
    -

    Like Matcher() constructor, but automatically guard against nil (actual) values

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func define(matcher: @escaping (AsyncExpression<T>) async throws -> MatcherResult) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - define(_:matcher:) - -
    -
    -
    -
    -
    -
    -

    Defines a matcher with a default message that can be returned in the closure -Also ensures the matcher’s actual value cannot pass with nil given.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func define(_ message: String = "match", matcher: @escaping (AsyncExpression<T>, ExpectationMessage) async throws -> MatcherResult) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Defines a matcher with a default message that can be returned in the closure -Unlike define, this allows nil values to succeed if the given closure chooses to.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func defineNilable(_ message: String = "match", matcher: @escaping (AsyncExpression<T>, ExpectationMessage) async throws -> MatcherResult) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - simple(_:matcher:) - -
    -
    -
    -
    -
    -
    -

    Provides a simple matcher definition that provides no control over the predefined -error message.

    - -

    Also ensures the matcher’s actual value cannot pass with nil given.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func simple(_ message: String = "match", matcher: @escaping (AsyncExpression<T>) async throws -> MatcherStatus) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Provides a simple matcher definition that provides no control over the predefined -error message.

    - -

    Unlike simple, this allows nil values to succeed if the given closure chooses to.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func simpleNilable(_ message: String = "match", matcher: @escaping (AsyncExpression<T>) async throws -> MatcherStatus) -> AsyncMatcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - requireNonNil - -
    -
    -
    -
    -
    -
    -

    Returns a new Matcher based on the current one that always fails if nil is given as -the actual value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var requireNonNil: AsyncMatcher<T> { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncRequirement.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncRequirement.html deleted file mode 100644 index dee5f829e..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/AsyncRequirement.html +++ /dev/null @@ -1,2062 +0,0 @@ - - - - AsyncRequirement Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

AsyncRequirement

-
-
- -
public struct AsyncRequirement<Value>
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - expression - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let expression: AsyncExpression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - customError - -
    -
    -
    -
    -
    -
    -

    A custom error to throw. -If nil, then we will throw a RequireError on failure.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let customError: Error?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var location: SourceLocation { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expression: AsyncExpression<Value>, customError: Error?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - verify(_:_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func verify(_ pass: Bool, _ message: FailureMessage, _ value: Value?) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - to(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: Matcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: Matcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: Matcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

AsyncMatchers -

-
-
-
    -
  • -
    - - - - to(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: AsyncMatcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: AsyncMatcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: AsyncMatcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Async Polling With Synchronous Matchers -

-
-
- -
-
-
- - -
- -

Async Polling With AsyncMatchers -

-
-
- -
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/ExpectationNil.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/ExpectationNil.html deleted file mode 100644 index d5076ec7e..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/ExpectationNil.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - ExpectationNil Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

ExpectationNil

-
-
- -
public struct ExpectationNil : ExpressibleByNilLiteral
- -
-
-

Represents nil value to be used with the operator overloads for beNil.

- -
-
-
-
    -
  • -
    - - - - init(nilLiteral:) - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(nilLiteral: ())
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/Expression.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/Expression.html deleted file mode 100644 index 1182058d2..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/Expression.html +++ /dev/null @@ -1,1629 +0,0 @@ - - - - Expression Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Expression

-
-
- -
public struct Expression<Value>
- -
-
-

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, SyncExpression 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.

- -
-
-
-
    -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let location: SourceLocation
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - isClosure - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let isClosure: Bool
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Creates a new expression struct. Normally, expect(…) will manage this -creation process. The expression is memoized.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expression: @escaping () throws -> Value?, location: SourceLocation, isClosure: Bool = true)
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - - - - - -
    - - expression - - -
    -

    The closure that produces a given value.

    -
    -
    - - location - - -
    -

    The source location that this closure originates from.

    -
    -
    - - 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.

    -
    -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Creates a new expression struct. Normally, expect(…) will manage this -creation process.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(memoizedExpression: @escaping (Bool) throws -> Value?, location: SourceLocation, withoutCaching: Bool, isClosure: Bool = true)
    - -
    -
    -
    -

    Parameters

    - - - - - - - - - - - - - - - - - - - -
    - - expression - - -
    -

    The closure that produces a given value.

    -
    -
    - - location - - -
    -

    The source location that this closure originates from.

    -
    -
    - - 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.

    -
    -
    - - 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.

    -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - cast(_:) - -
    -
    -
    -
    -
    -
    -

    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.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func cast<U>(_ block: @escaping (Value?) throws -> U?) -> Expression<U>
    - -
    -
    -
    -

    Parameters

    - - - - - - - -
    - - block - - -
    -

    The block that can cast the current Expression value to a - new type.

    -
    -
    -
    -
    -
    -
  • -
  • -
    - - - - evaluate() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func evaluate() throws -> Value?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - withoutCaching() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func withoutCaching() -> Expression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - withCaching() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func withCaching() -> Expression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toAsyncExpression() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toAsyncExpression() -> AsyncExpression<Value>
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/Matcher.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/Matcher.html deleted file mode 100644 index cb2a010d4..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/Matcher.html +++ /dev/null @@ -1,1512 +0,0 @@ - - - - Matcher Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Matcher

-
-
- -
public struct Matcher<T>
-
extension Matcher: AsyncableMatcher
- -
-
-

A Matcher is part of the new matcher API that provides assertions to expectations.

- -

Given a code snippet:

- -

expect(1).to(equal(2)) - ^^^^^^^^ - Called a “matcher”

- -

A matcher consists of two parts a constructor function and the Matcher.

- -

The Matcher provide the heavy lifting on how to assert against a given value. Internally, -matchers are simple wrappers around closures to provide static type information and -allow composition and wrapping of existing behaviors.

- -

In the 2023 Apple Platform releases (macOS 14, iOS 17, watchOS 10, tvOS 17, visionOS 1), Apple -renamed NSMatcher to Matcher. In response, we decided to rename Matcher to -Matcher.

- -
-
-
-
    -
  • -
    - - - - init(_:) - -
    -
    -
    -
    -
    -
    -

    Constructs a matcher that knows how take a given value

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(_ matcher: @escaping (Expression<T>) throws -> MatcherResult)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfies(_:) - -
    -
    -
    -
    -
    -
    -

    Uses a matcher on a given value to see if it passes the matcher.

    - -

    @param expression The value to run the matcher’s logic against -@returns A matcher result indicate passing or failing and an associated error message.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func satisfies(_ expression: Expression<T>) throws -> MatcherResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - satisfies(_:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func satisfies(_ expression: AsyncExpression<T>) async throws -> MatcherResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - define(matcher:) - -
    -
    -
    -
    -
    -
    -

    Like Matcher() constructor, but automatically guard against nil (actual) values

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func define(matcher: @escaping (Expression<T>) throws -> MatcherResult) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - define(_:matcher:) - -
    -
    -
    -
    -
    -
    -

    Defines a matcher with a default message that can be returned in the closure -Also ensures the matcher’s actual value cannot pass with nil given.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func define(_ message: String = "match", matcher: @escaping (Expression<T>, ExpectationMessage) throws -> MatcherResult) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Defines a matcher with a default message that can be returned in the closure -Unlike define, this allows nil values to succeed if the given closure chooses to.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func defineNilable(_ message: String = "match", matcher: @escaping (Expression<T>, ExpectationMessage) throws -> MatcherResult) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - simple(_:matcher:) - -
    -
    -
    -
    -
    -
    -

    Provides a simple matcher definition that provides no control over the predefined -error message.

    - -

    Also ensures the matcher’s actual value cannot pass with nil given.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func simple(_ message: String = "match", matcher: @escaping (Expression<T>) throws -> MatcherStatus) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Provides a simple matcher definition that provides no control over the predefined -error message.

    - -

    Unlike simple, this allows nil values to succeed if the given closure chooses to.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func simpleNilable(_ message: String = "match", matcher: @escaping (Expression<T>) throws -> MatcherStatus) -> Matcher<T>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - requireNonNil - -
    -
    -
    -
    -
    -
    -

    Returns a new Matcher based on the current one that always fails if nil is given as -the actual value.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var requireNonNil: Matcher<T> { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/MatcherResult.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/MatcherResult.html deleted file mode 100644 index 390edd516..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/MatcherResult.html +++ /dev/null @@ -1,1400 +0,0 @@ - - - - MatcherResult Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

MatcherResult

-
-
- -
public struct MatcherResult
- -
-
-

The value that a Matcher returns to describe if the given (actual) value matches the -matcher.

- -
-
-
-
    -
  • -
    - - - - status - -
    -
    -
    -
    -
    -
    -

    Status indicates if the matcher matches, does not match, or fails.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var status: MatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - message - -
    -
    -
    -
    -
    -
    -

    The error message that can be displayed if it does not match

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var message: ExpectationMessage
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(status:message:) - -
    -
    -
    -
    -
    -
    -

    Constructs a new MatcherResult with a given status and error message

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(status: MatcherStatus, message: ExpectationMessage)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(bool:message:) - -
    -
    -
    -
    -
    -
    -

    Shorthand to MatcherResult(status: MatcherStatus(bool: bool), message: message)

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(bool: Bool, message: ExpectationMessage)
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Converts the result to a boolean based on what the expectation intended

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toBoolean(expectation style: ExpectationStyle) -> Bool
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toObjectiveC() - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func toObjectiveC() -> NMBMatcherResult
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/PollingDefaults.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/PollingDefaults.html deleted file mode 100644 index 4d59dac12..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/PollingDefaults.html +++ /dev/null @@ -1,1297 +0,0 @@ - - - - PollingDefaults Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

PollingDefaults

-
-
- -
public struct PollingDefaults
- -
-
-

If you are running on a slower machine, it could be useful to increase the default timeout value -or slow down poll interval. Default timeout interval is 1, and poll interval is 0.01.

-
-

Note

- This used to be known as AsyncDefaults. - -
- -
-
-
-
    -
  • -
    - - - - timeout - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static var timeout: NimbleTimeInterval
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - pollInterval - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static var pollInterval: NimbleTimeInterval
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/RequireError.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/RequireError.html deleted file mode 100644 index fb80c799e..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/RequireError.html +++ /dev/null @@ -1,1263 +0,0 @@ - - - - RequireError Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

RequireError

-
-
- -
public struct RequireError : Error, CustomNSError
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - errorUserInfo - -
    -
    -
    -
    -
    -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var errorUserInfo: [String : Any] { get }
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/SyncExpectation.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/SyncExpectation.html deleted file mode 100644 index 0a66b5fa0..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/SyncExpectation.html +++ /dev/null @@ -1,2398 +0,0 @@ - - - - SyncExpectation Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

SyncExpectation

-
-
- -
public struct SyncExpectation<Value> : Expectation
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - expression - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let expression: Expression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - status - -
    -
    -
    -
    -
    -
    -

    The status of the test after matchers have been evaluated.

    - -

    This property can be used for changing test behavior based whether an expectation has -passed.

    - -

    In the below example, we perform additional tests on an array only if it has enough -elements.

    -
    if expect(array).to(haveCount(10)).status == .passed {
    -   expect(array[9]).to(...)
    -}
    -
    -
    -

    Remark

    - Similar functionality can be achieved using the onFailure(throw:) method. - -
    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let status: ExpectationStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - init(expression:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expression: Expression<Value>)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - verify(_:_:) - -
    -
    -
    -
    -
    -
    -

    Takes the result of a test and passes it to the assertion handler.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func verify(_ pass: Bool, _ message: FailureMessage) -> SyncExpectation<Value>
    - -
    -
    -
    -

    Return Value

    -

    An updated Expression with the result of the test applied to the status - property.

    -
    -
    -
    -
  • -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var location: SourceLocation { get }
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - to(_:description:) - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: Matcher<Value>, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: Matcher<Value>, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: Matcher<Value>, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

AsyncMatchers -

-
-
-
    -
  • -
    - - - - to(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: AsyncMatcher<Value>, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: AsyncMatcher<Value>, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: AsyncMatcher<Value>, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - ==(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func == (lhs: SyncExpectation, rhs: ExpectationNil)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - !=(_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public static func != (lhs: SyncExpectation, rhs: ExpectationNil)
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

With Synchronous Matchers -

-
-
- -
-
-
- - -
- -

With AsyncMatchers -

-
-
-
    -
  • -
    - - - - toEventually(_:timeout:pollInterval:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match by checking continuously -at each pollInterval until the timeout is reached.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toEventually(_ matcher: AsyncMatcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match by checking -continuously at each pollInterval until the timeout is reached.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toEventuallyNot(_ matcher: AsyncMatcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match by checking -continuously at each pollInterval until the timeout is reached.

    - -

    Alias of toEventuallyNot()

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNotEventually(_ matcher: AsyncMatcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNever(_:until:pollInterval:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to never match by checking -continuously at each pollInterval until the timeout is reached.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNever(_ matcher: AsyncMatcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - neverTo(_:until:pollInterval:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to never match by checking -continuously at each pollInterval until the timeout is reached.

    - -

    Alias of toNever()

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func neverTo(_ matcher: AsyncMatcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toAlways(_:until:pollInterval:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to always match by checking -continusouly at each pollInterval until the timeout is reached

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toAlways(_ matcher: AsyncMatcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - alwaysTo(_:until:pollInterval:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to always match by checking -continusouly at each pollInterval until the timeout is reached

    - -

    Alias of toAlways()

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func alwaysTo(_ matcher: AsyncMatcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) async -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -This form of toEventually does not work in any kind of async context. Use the async form of toEventually if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toEventually` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toEventually(_ matcher: Matcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -This form of toEventuallyNot does not work in any kind of async context. -Use the async form of toEventuallyNot if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toEventuallyNot` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toEventuallyNot(_ matcher: Matcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -This form of toNotEventually does not work in any kind of async context. -Use the async form of toNotEventually if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toNotEventually` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toNotEventually(_ matcher: Matcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to never 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.

    - -

    @warning -This form of toNever does not work in any kind of async context. -Use the async form of toNever if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toNever` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toNever(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to never match by checking -continuously at each pollInterval until the timeout is reached.

    - -

    Alias of toNever()

    - -

    @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.

    - -

    @warning -This form of neverTo does not work in any kind of async context. -Use the async form of neverTo if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `neverTo` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func neverTo(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to always match by checking -continusouly 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.

    - -

    @warning -This form of toAlways does not work in any kind of async context. -Use the async form of toAlways if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toAlways` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toAlways(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to always match by checking -continusouly at each pollInterval until the timeout is reached

    - -

    Alias of toAlways()

    - -

    @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.

    - -

    @warning -This form of alwaysTo does not work in any kind of async context. -Use the async form of alwaysTo if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `alwaysTo` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func alwaysTo(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) -> SyncExpectation<Value>
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/SyncRequirement.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/SyncRequirement.html deleted file mode 100644 index 415e23eaf..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Structs/SyncRequirement.html +++ /dev/null @@ -1,2337 +0,0 @@ - - - - SyncRequirement Structure Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

SyncRequirement

-
-
- -
public struct SyncRequirement<Value>
- -
-
-

Undocumented

- -
-
-
-
    -
  • -
    - - - - expression - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let expression: Expression<Value>
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - customError - -
    -
    -
    -
    -
    -
    -

    A custom error to throw. -If nil, then we will throw a RequireError on failure.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public let customError: Error?
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - location - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public var location: SourceLocation { get }
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public init(expression: Expression<Value>, customError: Error?)
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - verify(_:_:_:) - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public func verify(_ pass: Bool, _ message: FailureMessage, _ value: Value?) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - to(_:description:) - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: Matcher<Value>, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: Matcher<Value>, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: Matcher<Value>, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

AsyncMatchers -

-
-
-
    -
  • -
    - - - - to(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func to(_ matcher: AsyncMatcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - toNot(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func toNot(_ matcher: AsyncMatcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - notTo(_:description:) - - - Asynchronous - -
    -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to not match.

    - -

    Alias to toNot().

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @discardableResult
    -public func notTo(_ matcher: AsyncMatcher<Value>, description: String? = nil) async throws -> Value
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Dispatch Polling with Synchronous Matchers -

-
-
-
    -
  • - -
    -
    -
    -
    -
    -

    Require 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.

    - -

    @warning -This form of toEventually does not work in any kind of async context. Use the async form of toEventually if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toEventually` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toEventually(_ matcher: Matcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -This form of toEventuallyNot does not work in any kind of async context. -Use the async form of toEventuallyNot if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toEventuallyNot` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toEventuallyNot(_ matcher: Matcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    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.

    - -

    @warning -This form of toNotEventually does not work in any kind of async context. -Use the async form of toNotEventually if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toNotEventually` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toNotEventually(_ matcher: Matcher<Value>, timeout: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to never 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.

    - -

    @warning -This form of toNever does not work in any kind of async context. -Use the async form of toNever if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toNever` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toNever(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to never match by checking -continuously at each pollInterval until the timeout is reached.

    - -

    Alias of toNever()

    - -

    @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.

    - -

    @warning -This form of neverTo does not work in any kind of async context. -Use the async form of neverTo if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `neverTo` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func neverTo(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to always match by checking -continusouly 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.

    - -

    @warning -This form of toAlways does not work in any kind of async context. -Use the async form of toAlways if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `toAlways` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func toAlways(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
  • - -
    -
    -
    -
    -
    -

    Tests the actual value using a matcher to always match by checking -continusouly at each pollInterval until the timeout is reached

    - -

    Alias of toAlways()

    - -

    @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.

    - -

    @warning -This form of alwaysTo does not work in any kind of async context. -Use the async form of alwaysTo if you are running tests in an async context.

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, noasync, message: "the sync variant of `alwaysTo` does not work in async contexts. Use the async variant as a drop-in replacement")
    -@discardableResult
    -public func alwaysTo(_ matcher: Matcher<Value>, until: NimbleTimeInterval = PollingDefaults.timeout, pollInterval: NimbleTimeInterval = PollingDefaults.pollInterval, description: String? = nil) throws -> Value
    - -
    -
    -
    -
    -
  • -
-
-
-
- - -
- -

Async Polling with Synchronous Matchers -

-
-
- -
-
-
- - -
- -

Async Polling With AsyncMatchers -

-
-
- -
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Typealiases.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/Typealiases.html deleted file mode 100644 index 1a8da189b..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/Typealiases.html +++ /dev/null @@ -1,1525 +0,0 @@ - - - - Type Aliases Reference - - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
-

Type Aliases

-

The following type aliases are available globally.

- -
-
-
-
    -
  • -
    - - - - AsyncPredicate - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public typealias AsyncPredicate = AsyncMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - Predicate - -
    -
    -
    -
    -
    -
    -

    Provides an easy upgrade path for custom Matchers to be renamed to Matchers

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, renamed: "Matcher")
    -public typealias Predicate = Matcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - PredicateResult - -
    -
    -
    -
    -
    -
    -

    Provides an easy upgrade path for custom Matchers to be renamed to Matchers

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, renamed: "MatcherResult")
    -public typealias PredicateResult = MatcherResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - PredicateStatus - -
    -
    -
    -
    -
    -
    -

    Provides an easy upgrade path for custom Matchers to be renamed to Matchers

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, renamed: "MatcherStatus")
    -public typealias PredicateStatus = MatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - MatcherBlock - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public typealias MatcherBlock = (_ actualExpression: Expression<NSObject>) throws -> NMBMatcherResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - PredicateBlock - -
    -
    -
    -
    -
    -
    -

    Provides an easy upgrade path for custom Matchers to be renamed to Matchers

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, renamed: "MatcherBlock")
    -public typealias PredicateBlock = MatcherBlock
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBPredicate - -
    -
    -
    -
    -
    -
    -

    Provides an easy upgrade path for custom Matchers to be renamed to Matchers

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, renamed: "NMBMatcher")
    -public typealias NMBPredicate = NMBMatcher
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBPredicateResult - -
    -
    -
    -
    -
    -
    -

    Provides an easy upgrade path for custom Matchers to be renamed to Matchers

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, renamed: "NMBMatcherResult")
    -public typealias NMBPredicateResult = NMBMatcherResult
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - NMBPredicateStatus - -
    -
    -
    -
    -
    -
    -

    Provides an easy upgrade path for custom Matchers to be renamed to Matchers

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    @available(*, deprecated, renamed: "NMBMatcherStatus")
    -public typealias NMBPredicateStatus = NMBMatcherStatus
    - -
    -
    -
    -
    -
  • -
  • -
    - - - - FileString - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
  • -
  • -
    - - - - FileString - -
    -
    -
    -
    -
    -
    -

    Undocumented

    - -
    -
    -

    Declaration

    -
    -

    Swift

    -
    public typealias FileString = String
    - -
    -
    -
    -
    -
  • -
-
-
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/css/highlight.css b/docs/docsets/Nimble.docset/Contents/Resources/Documents/css/highlight.css deleted file mode 100644 index c170357ce..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/css/highlight.css +++ /dev/null @@ -1,202 +0,0 @@ -/*! Jazzy - https://github.com/realm/jazzy - * Copyright Realm Inc. - * SPDX-License-Identifier: MIT - */ -/* Credit to https://gist.github.com/wataru420/2048287 */ -.highlight .c { - color: #999988; - font-style: italic; } - -.highlight .err { - color: #a61717; - background-color: #e3d2d2; } - -.highlight .k { - color: #000000; - font-weight: bold; } - -.highlight .o { - color: #000000; - font-weight: bold; } - -.highlight .cm { - color: #999988; - font-style: italic; } - -.highlight .cp { - color: #999999; - font-weight: bold; } - -.highlight .c1 { - color: #999988; - font-style: italic; } - -.highlight .cs { - color: #999999; - font-weight: bold; - font-style: italic; } - -.highlight .gd { - color: #000000; - background-color: #ffdddd; } - -.highlight .gd .x { - color: #000000; - background-color: #ffaaaa; } - -.highlight .ge { - color: #000000; - font-style: italic; } - -.highlight .gr { - color: #aa0000; } - -.highlight .gh { - color: #999999; } - -.highlight .gi { - color: #000000; - background-color: #ddffdd; } - -.highlight .gi .x { - color: #000000; - background-color: #aaffaa; } - -.highlight .go { - color: #888888; } - -.highlight .gp { - color: #555555; } - -.highlight .gs { - font-weight: bold; } - -.highlight .gu { - color: #aaaaaa; } - -.highlight .gt { - color: #aa0000; } - -.highlight .kc { - color: #000000; - font-weight: bold; } - -.highlight .kd { - color: #000000; - font-weight: bold; } - -.highlight .kp { - color: #000000; - font-weight: bold; } - -.highlight .kr { - color: #000000; - font-weight: bold; } - -.highlight .kt { - color: #445588; } - -.highlight .m { - color: #009999; } - -.highlight .s { - color: #d14; } - -.highlight .na { - color: #008080; } - -.highlight .nb { - color: #0086B3; } - -.highlight .nc { - color: #445588; - font-weight: bold; } - -.highlight .no { - color: #008080; } - -.highlight .ni { - color: #800080; } - -.highlight .ne { - color: #990000; - font-weight: bold; } - -.highlight .nf { - color: #990000; } - -.highlight .nn { - color: #555555; } - -.highlight .nt { - color: #000080; } - -.highlight .nv { - color: #008080; } - -.highlight .ow { - color: #000000; - font-weight: bold; } - -.highlight .w { - color: #bbbbbb; } - -.highlight .mf { - color: #009999; } - -.highlight .mh { - color: #009999; } - -.highlight .mi { - color: #009999; } - -.highlight .mo { - color: #009999; } - -.highlight .sb { - color: #d14; } - -.highlight .sc { - color: #d14; } - -.highlight .sd { - color: #d14; } - -.highlight .s2 { - color: #d14; } - -.highlight .se { - color: #d14; } - -.highlight .sh { - color: #d14; } - -.highlight .si { - color: #d14; } - -.highlight .sx { - color: #d14; } - -.highlight .sr { - color: #009926; } - -.highlight .s1 { - color: #d14; } - -.highlight .ss { - color: #990073; } - -.highlight .bp { - color: #999999; } - -.highlight .vc { - color: #008080; } - -.highlight .vg { - color: #008080; } - -.highlight .vi { - color: #008080; } - -.highlight .il { - color: #009999; } diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/css/jazzy.css b/docs/docsets/Nimble.docset/Contents/Resources/Documents/css/jazzy.css deleted file mode 100644 index 2e3871391..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/css/jazzy.css +++ /dev/null @@ -1,439 +0,0 @@ -/*! Jazzy - https://github.com/realm/jazzy - * Copyright Realm Inc. - * SPDX-License-Identifier: MIT - */ -html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { - background: transparent; - border: 0; - margin: 0; - outline: 0; - padding: 0; - vertical-align: baseline; } - -body { - background-color: #f2f2f2; - font-family: Helvetica, freesans, Arial, sans-serif; - font-size: 14px; - -webkit-font-smoothing: subpixel-antialiased; - word-wrap: break-word; } - -h1, h2, h3 { - margin-top: 0.8em; - margin-bottom: 0.3em; - font-weight: 100; - color: black; } - -h1 { - font-size: 2.5em; } - -h2 { - font-size: 2em; - border-bottom: 1px solid #e2e2e2; } - -h4 { - font-size: 13px; - line-height: 1.5; - margin-top: 21px; } - -h5 { - font-size: 1.1em; } - -h6 { - font-size: 1.1em; - color: #777; } - -.section-name { - color: gray; - display: block; - font-family: Helvetica; - font-size: 22px; - font-weight: 100; - margin-bottom: 15px; } - -pre, code { - font: 0.95em Menlo, monospace; - color: #777; - word-wrap: normal; } - -p code, li code { - background-color: #eee; - padding: 2px 4px; - border-radius: 4px; } - -pre > code { - padding: 0; } - -a { - color: #0088cc; - text-decoration: none; } - a code { - color: inherit; } - -ul { - padding-left: 15px; } - -li { - line-height: 1.8em; } - -img { - max-width: 100%; } - -blockquote { - margin-left: 0; - padding: 0 10px; - border-left: 4px solid #ccc; } - -hr { - height: 1px; - border: none; - background-color: #e2e2e2; } - -.footnote-ref { - display: inline-block; - scroll-margin-top: 70px; } - -.footnote-def { - scroll-margin-top: 70px; } - -.content-wrapper { - margin: 0 auto; - width: 980px; } - -header { - font-size: 0.85em; - line-height: 32px; - background-color: #414141; - position: fixed; - width: 100%; - z-index: 3; } - header img { - padding-right: 6px; - vertical-align: -3px; - height: 16px; } - header a { - color: #fff; } - header p { - float: left; - color: #999; } - header .header-right { - float: right; - margin-left: 16px; } - -#breadcrumbs { - background-color: #f2f2f2; - height: 21px; - padding-top: 17px; - position: fixed; - width: 100%; - z-index: 2; - margin-top: 32px; } - #breadcrumbs #carat { - height: 10px; - margin: 0 5px; } - -.sidebar { - background-color: #f9f9f9; - border: 1px solid #e2e2e2; - overflow-y: auto; - overflow-x: hidden; - position: fixed; - top: 70px; - bottom: 0; - width: 230px; - word-wrap: normal; } - -.nav-groups { - list-style-type: none; - background: #fff; - padding-left: 0; } - -.nav-group-name { - border-bottom: 1px solid #e2e2e2; - font-size: 1.1em; - font-weight: 100; - padding: 15px 0 15px 20px; } - .nav-group-name > a { - color: #333; } - -.nav-group-tasks { - margin-top: 5px; } - -.nav-group-task { - font-size: 0.9em; - list-style-type: none; - white-space: nowrap; } - .nav-group-task a { - color: #888; } - -.main-content { - background-color: #fff; - border: 1px solid #e2e2e2; - margin-left: 246px; - position: absolute; - overflow: hidden; - padding-bottom: 20px; - top: 70px; - width: 734px; } - .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { - margin-bottom: 1em; } - .main-content p { - line-height: 1.8em; } - .main-content section .section:first-child { - margin-top: 0; - padding-top: 0; } - .main-content section .task-group-section .task-group:first-of-type { - padding-top: 10px; } - .main-content section .task-group-section .task-group:first-of-type .section-name { - padding-top: 15px; } - .main-content section .heading:before { - content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } - .main-content .section-name p { - margin-bottom: inherit; - line-height: inherit; } - .main-content .section-name code { - background-color: inherit; - padding: inherit; - color: inherit; } - -.section { - padding: 0 25px; } - -.highlight { - background-color: #eee; - padding: 10px 12px; - border: 1px solid #e2e2e2; - border-radius: 4px; - overflow-x: auto; } - -.declaration .highlight { - overflow-x: initial; - padding: 0 40px 40px 0; - margin-bottom: -25px; - background-color: transparent; - border: none; } - -.section-name { - margin: 0; - margin-left: 18px; } - -.task-group-section { - margin-top: 10px; - padding-left: 6px; - border-top: 1px solid #e2e2e2; } - -.task-group { - padding-top: 0px; } - -.task-name-container a[name]:before { - content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } - -.section-name-container { - position: relative; - display: inline-block; } - .section-name-container .section-name-link { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - margin-bottom: 0; } - .section-name-container .section-name { - position: relative; - pointer-events: none; - z-index: 1; } - .section-name-container .section-name a { - pointer-events: auto; } - -.item { - padding-top: 8px; - width: 100%; - list-style-type: none; } - .item a[name]:before { - content: ""; - display: block; - padding-top: 70px; - margin: -70px 0 0; } - .item code { - background-color: transparent; - padding: 0; } - .item .token, .item .direct-link { - display: inline-block; - text-indent: -20px; - padding-left: 3px; - margin-left: 35px; - font-size: 11.9px; - transition: all 300ms; } - .item .token-open { - margin-left: 20px; } - .item .discouraged { - text-decoration: line-through; } - .item .declaration-note { - font-size: .85em; - color: gray; - font-style: italic; } - -.pointer-container { - border-bottom: 1px solid #e2e2e2; - left: -23px; - padding-bottom: 13px; - position: relative; - width: 110%; } - -.pointer { - background: #f9f9f9; - border-left: 1px solid #e2e2e2; - border-top: 1px solid #e2e2e2; - height: 12px; - left: 21px; - top: -7px; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - position: absolute; - width: 12px; } - -.height-container { - display: none; - left: -25px; - padding: 0 25px; - position: relative; - width: 100%; - overflow: hidden; } - .height-container .section { - background: #f9f9f9; - border-bottom: 1px solid #e2e2e2; - left: -25px; - position: relative; - width: 100%; - padding-top: 10px; - padding-bottom: 5px; } - -.aside, .language { - padding: 6px 12px; - margin: 12px 0; - border-left: 5px solid #dddddd; - overflow-y: hidden; } - .aside .aside-title, .language .aside-title { - font-size: 9px; - letter-spacing: 2px; - text-transform: uppercase; - padding-bottom: 0; - margin: 0; - color: #aaa; - -webkit-user-select: none; } - .aside p:last-child, .language p:last-child { - margin-bottom: 0; } - -.language { - border-left: 5px solid #cde9f4; } - .language .aside-title { - color: #4b8afb; } - -.aside-warning, .aside-deprecated, .aside-unavailable { - border-left: 5px solid #ff6666; } - .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { - color: #ff0000; } - -.graybox { - border-collapse: collapse; - width: 100%; } - .graybox p { - margin: 0; - word-break: break-word; - min-width: 50px; } - .graybox td { - border: 1px solid #e2e2e2; - padding: 5px 25px 5px 10px; - vertical-align: middle; } - .graybox tr td:first-of-type { - text-align: right; - padding: 7px; - vertical-align: top; - word-break: normal; - width: 40px; } - -.slightly-smaller { - font-size: 0.9em; } - -#footer { - position: relative; - top: 10px; - bottom: 0px; - margin-left: 25px; } - #footer p { - margin: 0; - color: #aaa; - font-size: 0.8em; } - -html.dash header, html.dash #breadcrumbs, html.dash .sidebar { - display: none; } - -html.dash .main-content { - width: 980px; - margin-left: 0; - border: none; - width: 100%; - top: 0; - padding-bottom: 0; } - -html.dash .height-container { - display: block; } - -html.dash .item .token { - margin-left: 0; } - -html.dash .content-wrapper { - width: auto; } - -html.dash #footer { - position: static; } - -form[role=search] { - float: right; } - form[role=search] input { - font: Helvetica, freesans, Arial, sans-serif; - margin-top: 6px; - font-size: 13px; - line-height: 20px; - padding: 0px 10px; - border: none; - border-radius: 1em; } - .loading form[role=search] input { - background: white url(../img/spinner.gif) center right 4px no-repeat; } - form[role=search] .tt-menu { - margin: 0; - min-width: 300px; - background: #fff; - color: #333; - border: 1px solid #e2e2e2; - z-index: 4; } - form[role=search] .tt-highlight { - font-weight: bold; } - form[role=search] .tt-suggestion { - font: Helvetica, freesans, Arial, sans-serif; - font-size: 14px; - padding: 0 8px; } - form[role=search] .tt-suggestion span { - display: table-cell; - white-space: nowrap; } - form[role=search] .tt-suggestion .doc-parent-name { - width: 100%; - text-align: right; - font-weight: normal; - font-size: 0.9em; - padding-left: 16px; } - form[role=search] .tt-suggestion:hover, - form[role=search] .tt-suggestion.tt-cursor { - cursor: pointer; - background-color: #4183c4; - color: #fff; } - form[role=search] .tt-suggestion:hover .doc-parent-name, - form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { - color: #fff; } diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/img/carat.png b/docs/docsets/Nimble.docset/Contents/Resources/Documents/img/carat.png deleted file mode 100755 index 29d2f7fd4955fca6bc6fb740e0373a2c358c398e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRo!3HEV4DF?Wlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqAi{-jv*Ddl5#RKJQ5NTUZgiPI4RUKGIKU?u8L&ndhX1t za+0CMVUnT(Gnb}ei=c~x==tMH^F1_tBocXwcoSWoO-SZY-o>!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/img/dash.png b/docs/docsets/Nimble.docset/Contents/Resources/Documents/img/dash.png deleted file mode 100755 index 6f694c7a012b417908da3687a0a39aa182e91c74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1338 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 diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/index.html b/docs/docsets/Nimble.docset/Contents/Resources/Documents/index.html deleted file mode 100644 index 937b39709..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/index.html +++ /dev/null @@ -1,3146 +0,0 @@ - - - - Nimble Reference - - - - - - - - - - - - -
-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
- -

Nimble

- -

Build Status -CocoaPods -Carthage Compatible -Platforms

- -

Use Nimble to express the expected outcomes of Swift -or Objective-C expressions. Inspired by -Cedar.

-
// 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

- - - - -

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
-
-XCTAssertEqual(1 + 1, 2, "expected one plus one to equal two")
-
- -

Or, in Objective-C:

-
// 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. -
  3. It’s hard to write asynchronous tests. XCTest forces you to write -a lot of boilerplate code.
  4. -
- -

Nimble addresses these concerns.

-

Nimble: Expectations Using expect(...).to

- -

Nimble allows you to express expectations using a natural, -easily understood language:

-
// Swift
-
-import Nimble
-
-expect(seagull.squawk).to(equal("Squee!"))
-
-
// 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
-
-import Nimble
-
-expect(seagull.squawk).toNot(equal("Oh, hello there!"))
-expect(seagull.squawk).notTo(equal("Oh, hello there!"))
-
-
// 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
-
-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:

-
// 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 Safety

- -

Nimble makes sure you don’t compare two types that don’t match:

-
// 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
-
-// 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
-
-// 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:

-
// 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
-
-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
-
-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:

-
-
expect(@(1 + 1)).to(equal(@2));
-
-

Async/Await Support

- -

Nimble makes it easy to await for an async function to complete. Simply pass -the async function in to expect:

-
// Swift
-await expect { await aFunctionReturning1() }.to(equal(1))
-
- -

The async function is awaited on first, before passing it to the matcher. This -enables the matcher to run synchronous code like before, without caring about -whether the value it’s processing was abtained async or not.

- -

Async support is Swift-only, and it requires that you execute the test in an -async context. For XCTest, this is as simple as marking your test function with -async. If you use Quick, all tests in Quick 6 are executed in an async context. -In Quick 7 and later, only tests that are in an AsyncSpec subclass will be -executed in an async context.

- -

To avoid a compiler errors when using synchronous expect in asynchronous contexts, -expect with async expressions does not support autoclosures. However, the expecta -(expect async) function is provided as an alternative, which does support autoclosures.

-
// Swift
-await expecta(await aFunctionReturning1()).to(equal(1)))
-
- -

Similarly, if you’re ever in a situation where you want to force the compiler to -produce a SyncExpectation, you can use the expects (expect sync) function to -produce a SyncExpectation. Like so:

-
// Swift
-expects(someNonAsyncFunction()).to(equal(1)))
-
-expects(await someAsyncFunction()).to(equal(1)) // Compiler error: 'async' call in an autoclosure that does not support concurrency
-
-

Async Matchers

- -

In addition to asserting on async functions prior to passing them to a -synchronous matcher, you can also write matchers that directly take in an -async value. These are called AsyncMatchers. This is most obviously useful -when directly asserting against an actor. In addition to writing your own -async matchers, Nimble currently ships with async versions of the following -matchers:

- -
    -
  • allPass
  • -
  • containElementSatisfying
  • -
  • satisfyAllOf and the && operator overload accept both AsyncMatcher and -synchronous Matchers.
  • -
  • satisfyAnyOf and the || operator overload accept both AsyncMatcher and -synchronous Matchers.
  • -
- -

Note: Async/Await support is different than the toEventually/toEventuallyNot -feature described below.

-

Polling Expectations

- -

In Nimble, it’s easy to make expectations on values that are updated -asynchronously. Just use toEventually or toEventuallyNot:

-
// Swift
-DispatchQueue.main.async {
-    ocean.add("dolphins")
-    ocean.add("whales")
-}
-expect(ocean).toEventually(contain("dolphins", "whales"))
-
-
// 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.

-

Using Polling Expectations in Async Tests

- -

You can easily use toEventually or toEventuallyNot in async contexts as -well. You only need to add an await statement to the beginning of the line:

-
// Swift
-DispatchQueue.main.async {
-    ocean.add("dolphins")
-    ocean.add("whales")
-}
-await expect(ocean).toEventually(contain("dolphens", "whiles"))
-
- -

Starting in Nimble 12, toEventually et. al. now also supports async -expectations. For example, the following test is now supported:

-
actor MyActor {
-    private var counter = 0
-
-    func access() -> Int {
-        counter += 1
-        return counter
-    }
-}
-
-let subject = MyActor()
-await expect { await subject.access() }.toEventually(equal(2))
-
-

Verifying a Matcher will Never or Always Match

- -

You can also test that a value always or never matches throughout the length of the timeout. Use toNever and toAlways for this:

-
// Swift
-ocean.add("dolphins")
-expect(ocean).toAlways(contain("dolphins"))
-expect(ocean).toNever(contain("hares"))
-
-
// Objective-C
-[ocean add:@"dolphins"]
-expect(ocean).toAlways(contain(@"dolphins"))
-expect(ocean).toNever(contain(@"hares"))
-
-

Waiting for a Callback to be Called

- -

You can also provide a callback by using the waitUntil function:

-
// Swift
-
-waitUntil { done in
-    ocean.goFish { success in
-        expect(success).to(beTrue())
-        done()
-    }
-}
-
-
// Objective-C
-
-waitUntil(^(void (^done)(void)){
-    [ocean goFishWithHandler:^(BOOL success){
-        expect(success).to(beTrue());
-        done();
-    }];
-});
-
- -

waitUntil also optionally takes a timeout parameter:

-
// Swift
-
-waitUntil(timeout: .seconds(10)) { done in
-    ocean.goFish { success in
-        expect(success).to(beTrue())
-        done()
-    }
-}
-
-
// Objective-C
-
-waitUntilTimeout(10, ^(void (^done)(void)){
-    [ocean goFishWithHandler:^(BOOL success){
-        expect(success).to(beTrue());
-        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.

-

Changing the Timeout and Polling Intervals

- -

Sometimes it takes more than a second for a value to update. In those -cases, use the timeout parameter:

-
// Swift
-
-// Waits three seconds for ocean to contain "starfish":
-expect(ocean).toEventually(contain("starfish"), timeout: .seconds(3))
-
-// Evaluate someValue every 0.2 seconds repeatedly until it equals 100, or fails if it timeouts after 5.5 seconds.
-expect(someValue).toEventually(equal(100), timeout: .milliseconds(5500), pollInterval: .milliseconds(200))
-
-
// Objective-C
-
-// Waits three seconds for ocean to contain "starfish":
-expect(ocean).withTimeout(3).toEventually(contain(@"starfish"));
-
-

Changing default Timeout and Poll Intervals

- -

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
-
-// Increase the global timeout to 5 seconds:
-Nimble.PollingDefaults.timeout = .seconds(5)
-
-// Slow the polling interval to 0.1 seconds:
-Nimble.PollingDefaults.pollInterval = .milliseconds(100)
-
- -

You can set these globally at test startup in two ways:

-

Quick

- -

If you use Quick, add a QuickConfiguration subclass which sets your desired PollingDefaults.

-
import Quick
-import Nimble
-
-class PollingConfiguration: QuickConfiguration {
-    override class func configure(_ configuration: QCKConfiguration) {
-        Nimble.PollingDefaults.timeout = .seconds(5)
-        Nimble.PollingDefaults.pollInterval = .milliseconds(100)
-    }
-}
-
-

XCTest

- -

If you use XCTest, add an object that conforms to XCTestObservation and implement testBundleWillStart(_:).

- -

Additionally, you will need to register this observer with the XCTestObservationCenter at test startup. To do this, set the NSPrincipalClass key in your test bundle’s Info.plist and implement a class with that same name.

- -

For example

-
<!-- Info.plist -->
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-    <!-- ... -->
-    <key>NSPrincipalClass</key>
-    <string>MyTests.TestSetup</string>
-</dict>
-</plist>
-
-
// TestSetup.swift
-import XCTest
-import Nimble
-
-@objc
-class TestSetup: NSObject {
-    override init() {
-        XCTestObservationCenter.shared.register(PollingConfigurationTestObserver())
-    }
-}
-
-class PollingConfigurationTestObserver: NSObject, XCTestObserver {
-    func testBundleWillStart(_ testBundle: Bundle) {
-        Nimble.PollingDefaults.timeout = .seconds(5)
-        Nimble.PollingDefaults.pollInterval = .milliseconds(100)
-    }
-}
-
- -

In Linux, you can implement LinuxMain to set the PollingDefaults before calling XCTMain.

-

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 or can be converted into -an NSObject equivalent:
  2. -
-
   // Objective-C
-
-   @import Nimble;
-
-   expect(@(1 + 1)).to(equal(@2));
-   expect(@"Hello world").to(contain(@"world"));
-
-   // Boxed as NSNumber *
-   expect(2).to(equal(2));
-   expect(1.2).to(beLessThan(2.0));
-   expect(true).to(beTruthy());
-
-   // Boxed as NSString *
-   expect("Hello world").to(equal("Hello world"));
-
-   // Boxed as NSRange
-   expect(NSMakeRange(1, 10)).to(equal(NSMakeRange(1, 10)));
-
- -
    -
  1. To make an expectation on an expression that does not return a value, -such as -[NSException raise], use expectAction instead of -expect:
  2. -
-
   // Objective-C
-
-   expectAction(^{ [exception raise]; }).to(raiseException());
-
- -

The following types are currently converted to an NSObject type:

- -
    -
  • C Numeric types are converted to NSNumber *
  • -
  • NSRange is converted to NSValue *
  • -
  • char * is converted to NSString *
  • -
- -

For the following matchers:

- -
    -
  • equal
  • -
  • beGreaterThan
  • -
  • beGreaterThanOrEqual
  • -
  • beLessThan
  • -
  • beLessThanOrEqual
  • -
  • beCloseTo
  • -
  • beTrue
  • -
  • beFalse
  • -
  • beTruthy
  • -
  • beFalsy
  • -
  • haveCount
  • -
- -

If you would like to see more, file an issue.

-

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:

-
#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.

-
-

Using require to demand that a matcher pass before continuing

- -

Nimble 13.1 added the require dsl to complement expect. require -looks similar to expect and works with matchers just like expect does. The -difference is that require requires that the matcher passes - if the matcher -doesn’t pass, then require will throw an error. Additionally, if require -does pass, then it’ll return the result of running the expression.

- -

For example, in testing a function that returns an array, you might need to -first guarantee that there are exactly 3 items in the array before continuing -to assert on it. Instead of writing code that needlessly duplicates an assertion -and a conditional like so:

-
let collection = myFunction()
-expect(collection).to(haveCount(3))
-guard collection.count == 3 else { return }
-// ...
-
- -

You can replace that with:

-
let collection = try require(myFunction()).to(haveCount(3))
-// ...
-
-

Polling with require.

- -

Because require does everything you can do with expect, you can also use -require to poll matchers using toEventually, -eventuallyTo, toEventuallyNot, toNotEventually, toNever, neverTo, -toAlways, and alwaysTo. These work exactly the same as they do when using -expect, except that they throw if they fail, and they return the value of the -expression when they pass.

-

Using require with Async expressions and Async matchers

- -

require also works with both async expressions -(require { await someExpression() }.to(...)), and async matchers -(require().to(someAsyncMatcher())).

- -

Note that to prevent compiler confusion, -you cannot use require with async autoclosures. That is, -require(await someExpression()) will not compile. You can instead either -make the closure explicit (require { await someExpression() }), or use the -requirea function, which does accept autoclosures. -Similarly, if you ever wish to use the sync version of require when the -compiler is trying to force you to use the async version, you can use the -requires function, which only allows synchronous expressions.

-

Using unwrap to replace require(...).toNot(beNil())

- -

It’s very common to require that a value not be nil. Instead of writing -try require(...).toNot(beNil()), Nimble provides the unwrap function. This -expression throws an error if the expression evaluates to nil, or returns the -non-nil result when it passes. For example:

-
let value = try unwrap(nil as Int?) // throws
-let value = try unwrap(1 as Int?) // returns 1
-
- -

Additionally, there is also the pollUnwrap function, which aliases to -require(...).toEventuallyNot(beNil()). This is extremely useful for verifying -that a value that is updated on a background thread was eventually set to a -non-nil value.

- -

Note: As with require, there are unwraps, unwrapa, pollUnwraps, and -pollUnwrapa variants for allowing you to use autoclosures specifically with -synchronous or asynchronous code.

-

Throwing a Custom Error from Require

- -

By default, if the matcher fails in a require, then a RequireError will be -thrown. You can override this behavior and throw a custom error by passing a -non-nil Error value to the customError parameter:

-
try require(1).to(equal(2)) // throws a `RequireError`
-try require(customError: MyCustomError(), 1).to(equal(2)) // throws a `MyCustomError`
-
-

Built-in Matcher Functions

- -

Nimble includes a wide variety of matcher functions.

-

Type Checking

- -

Nimble supports checking the type membership of any kind of object, whether -Objective-C conformant or not:

-
// Swift
-
-protocol SomeProtocol{}
-class SomeClassConformingToProtocol: SomeProtocol{}
-struct SomeStructConformingToProtocol: SomeProtocol{}
-
-// The following tests pass
-expect(1).to(beAKindOf(Int.self))
-expect("turtle").to(beAKindOf(String.self))
-
-let classObject = SomeClassConformingToProtocol()
-expect(classObject).to(beAKindOf(SomeProtocol.self))
-expect(classObject).to(beAKindOf(SomeClassConformingToProtocol.self))
-expect(classObject).toNot(beAKindOf(SomeStructConformingToProtocol.self))
-
-let structObject = SomeStructConformingToProtocol()
-expect(structObject).to(beAKindOf(SomeProtocol.self))
-expect(structObject).to(beAKindOf(SomeStructConformingToProtocol.self))
-expect(structObject).toNot(beAKindOf(SomeClassConformingToProtocol.self))
-
-
// Objective-C
-
-// The following tests pass
-NSMutableArray *array = [NSMutableArray array];
-expect(array).to(beAKindOf([NSArray class]));
-expect(@1).toNot(beAKindOf([NSNull class]));
-
- -

Objects can be tested for their exact types using the beAnInstanceOf matcher:

-
// Swift
-
-protocol SomeProtocol{}
-class SomeClassConformingToProtocol: SomeProtocol{}
-struct SomeStructConformingToProtocol: SomeProtocol{}
-
-// Unlike the 'beKindOf' matcher, the 'beAnInstanceOf' matcher only
-// passes if the object is the EXACT type requested. The following
-// tests pass -- note its behavior when working in an inheritance hierarchy.
-expect(1).to(beAnInstanceOf(Int.self))
-expect("turtle").to(beAnInstanceOf(String.self))
-
-let classObject = SomeClassConformingToProtocol()
-expect(classObject).toNot(beAnInstanceOf(SomeProtocol.self))
-expect(classObject).to(beAnInstanceOf(SomeClassConformingToProtocol.self))
-expect(classObject).toNot(beAnInstanceOf(SomeStructConformingToProtocol.self))
-
-let structObject = SomeStructConformingToProtocol()
-expect(structObject).toNot(beAnInstanceOf(SomeProtocol.self))
-expect(structObject).to(beAnInstanceOf(SomeStructConformingToProtocol.self))
-expect(structObject).toNot(beAnInstanceOf(SomeClassConformingToProtocol.self))
-
-

Equivalence

-
// 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
-
-
// 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
-
-// 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
-
- -

It is important to remember that beIdenticalTo only makes sense when comparing -types with reference semantics, which have a notion of identity. In Swift, -that means types that are defined as a class.

- -

This matcher will not work when comparing types with value semantics such as -those defined as a struct or enum. If you need to compare two value types, -consider what it means for instances of your type to be identical. This may mean -comparing individual properties or, if it makes sense to do so, conforming your type -to Equatable and using Nimble’s equivalence matchers instead.

-
// 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
-
-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
-
-
// 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
-
-expect(actual).to(beCloseTo(expected, within: delta))
-
-
// Objective-C
-
-expect(actual).to(beCloseTo(expected).within(delta));
-
- -

For example, to assert that 10.01 is close to 10, you can write:

-
// Swift
-
-expect(10.01).to(beCloseTo(10, within: 0.1))
-
-
// Objective-C
-
-expect(@(10.01)).to(beCloseTo(@10).within(0.1));
-
- -

There is also an operator shortcut available in 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
-
-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
-
-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 conform to FloatingPoint.

-
-

Types/Classes

-
// 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))
-
-
// 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
-
-expect(dolphin).to(beAKindOf(Mammal))
-
-
// Objective-C
-
-expect(dolphin).to(beAKindOf([Mammal class]));
-
- -
-

beAnInstanceOf uses the -[NSObject isMemberOfClass:] method to - test membership. beAKindOf uses -[NSObject isKindOfClass:].

-
-

Truthiness

-
// 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 Boolean 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 Boolean false):
-expect(actual).to(beFalse())
-
-// Passes if 'actual' is nil:
-expect(actual).to(beNil())
-
-
// 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 Boolean 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 Boolean false):
-expect(actual).to(beFalse());
-
-// Passes if 'actual' is nil:
-expect(actual).to(beNil());
-
-

Swift Assertions

- -

If you’re using Swift, you can use the throwAssertion matcher to check if an assertion is thrown (e.g. fatalError()). This is made possible by @mattgallagher’s CwlPreconditionTesting library.

-
// Swift
-
-// Passes if 'somethingThatThrows()' throws an assertion, 
-// such as by calling 'fatalError()' or if a precondition fails:
-expect { try somethingThatThrows() }.to(throwAssertion())
-expect { () -> Void in fatalError() }.to(throwAssertion())
-expect { precondition(false) }.to(throwAssertion())
-
-// Passes if throwing an NSError is not equal to throwing an assertion:
-expect { throw NSError(domain: "test", code: 0, userInfo: nil) }.toNot(throwAssertion())
-
-// Passes if the code after the precondition check is not run:
-var reachedPoint1 = false
-var reachedPoint2 = false
-expect {
-    reachedPoint1 = true
-    precondition(false, "condition message")
-    reachedPoint2 = true
-}.to(throwAssertion())
-
-expect(reachedPoint1) == true
-expect(reachedPoint2) == false
-
- -

Notes:

- -
    -
  • This feature is only available in Swift.
  • -
  • The tvOS simulator is supported, but using a different mechanism, requiring you to turn off the Debug executable scheme setting for your tvOS scheme’s Test configuration.
  • -
-

Swift Error Handling

- -

You can use the throwError matcher to check if an error is thrown.

-
// Swift
-
-// Passes if 'somethingThatThrows()' throws an 'Error':
-expect { try somethingThatThrows() }.to(throwError())
-
-// Passes if 'somethingThatThrows()' throws an error within a particular domain:
-expect { try somethingThatThrows() }.to(throwError { (error: Error) in
-    expect(error._domain).to(equal(NSCocoaErrorDomain))
-})
-
-// Passes if 'somethingThatThrows()' throws a particular error enum case:
-expect { try somethingThatThrows() }.to(throwError(NSCocoaError.PropertyListReadCorruptError))
-
-// Passes if 'somethingThatThrows()' throws an error of a particular type:
-expect { try somethingThatThrows() }.to(throwError(errorType: NimbleError.self))
-
- -

When working directly with Error values, using the matchError matcher -allows you to perform certain checks on the error itself without having to -explicitly cast the error.

- -

The matchError matcher allows you to check whether or not the error:

- -
    -
  • is the same type of error you are expecting.
  • -
  • represents a particular error value that you are expecting.
  • -
- -

This can be useful when using Result or Promise types, for example.

-
// Swift
-
-let actual: Error = ...
-
-// Passes if 'actual' represents any error value from the NimbleErrorEnum type:
-expect(actual).to(matchError(NimbleErrorEnum.self))
-
-// Passes if 'actual' represents the case 'timeout' from the NimbleErrorEnum type:
-expect(actual).to(matchError(NimbleErrorEnum.timeout))
-
-// Passes if 'actual' contains an NSError equal to the one provided:
-expect(actual).to(matchError(NSError(domain: "err", code: 123, userInfo: nil)))
-
- -

Note: This feature is only available in Swift.

-

Exceptions

-
// 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 which passes expectations defined in the given closure:
-// (in this case, if the exception's name begins with "a r")
-expect { exception.raise() }.to(raiseException { (exception: NSException) in
-    expect(exception.name).to(beginWith("a r"))
-})
-
-
// 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 defined in the given 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). -Only Objective-C code can raise exceptions that Nimble will catch.

-

Collection Membership

-
// Swift
-
-// Passes if all of the expected values are members of 'actual':
-expect(actual).to(contain(expected...))
-
-// Passes if 'actual' is empty (i.e. it contains no elements):
-expect(actual).to(beEmpty())
-
-
// Objective-C
-
-// Passes if expected is a member of 'actual':
-expect(actual).to(contain(expected));
-
-// Passes if 'actual' is empty (i.e. 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.

-
- -

For example, to assert that a list of sea creature names contains -“dolphin” and “starfish”:

-
// Swift
-
-expect(["whale", "dolphin", "starfish"]).to(contain("dolphin", "starfish"))
-
-
// 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
-
-// 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...))
-
-
// 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.

- -

For code that returns collections of complex objects without a strict -ordering, there is the containElementSatisfying matcher:

-
// Swift
-
-struct Turtle {
-    let color: String
-}
-
-let turtles: [Turtle] = functionThatReturnsSomeTurtlesInAnyOrder()
-
-// This set of matchers passes regardless of whether the array is 
-// [{color: "blue"}, {color: "green"}] or [{color: "green"}, {color: "blue"}]:
-
-expect(turtles).to(containElementSatisfying({ turtle in
-    return turtle.color == "green"
-}))
-expect(turtles).to(containElementSatisfying({ turtle in
-    return turtle.color == "blue"
-}, "that is a turtle with color 'blue'"))
-
-// The second matcher will incorporate the provided string in the error message
-// should it fail
-
- -

Note: in Swift, containElementSatisfying also has a variant that takes in an -async function.

-
// Objective-C
-
-@interface Turtle : NSObject
-@property (nonatomic, readonly, nonnull) NSString *color;
-@end
-
-@implementation Turtle 
-@end
-
-NSArray<Turtle *> * __nonnull turtles = functionThatReturnsSomeTurtlesInAnyOrder();
-
-// This set of matchers passes regardless of whether the array is 
-// [{color: "blue"}, {color: "green"}] or [{color: "green"}, {color: "blue"}]:
-
-expect(turtles).to(containElementSatisfying(^BOOL(id __nonnull object) {
-    return [[turtle color] isEqualToString:@"green"];
-}));
-expect(turtles).to(containElementSatisfying(^BOOL(id __nonnull object) {
-    return [[turtle color] isEqualToString:@"blue"];
-}));
-
- -

For asserting on if the given Comparable value is inside of a Range, use the beWithin matcher.

-
// Swift
-
-// Passes if 5 is within the range 1 through 10, inclusive
-expect(5).to(beWithin(1...10))
-
-// Passes if 5 is not within the range 2 through 4.
-expect(5).toNot(beWithin(2..<5))
-
-

Strings

-
// Swift
-
-// Passes if 'actual' contains 'substring':
-expect(actual).to(contain(substring))
-
-// Passes if 'actual' begins with 'prefix':
-expect(actual).to(beginWith(prefix))
-
-// Passes if 'actual' ends with 'suffix':
-expect(actual).to(endWith(suffix))
-
-// Passes if 'actual' represents the empty string, "":
-expect(actual).to(beEmpty())
-
-// Passes if 'actual' matches the regular expression defined in 'expected':
-expect(actual).to(match(expected))
-
-
// Objective-C
-
-// Passes if 'actual' contains 'substring':
-expect(actual).to(contain(expected));
-
-// Passes if 'actual' begins with 'prefix':
-expect(actual).to(beginWith(prefix));
-
-// Passes if 'actual' ends with 'suffix':
-expect(actual).to(endWith(suffix));
-
-// Passes if 'actual' represents the empty string, "":
-expect(actual).to(beEmpty());
-
-// Passes if 'actual' matches the regular expression defined in 'expected':
-expect(actual).to(match(expected))
-
-

Collection Elements

- -

Nimble provides a means to check that all elements of a collection pass a given expectation.

-

Swift

- -

In Swift, the collection must be an instance of a type conforming to -Sequence.

-
// Swift
-
-// Providing a custom function:
-expect([1, 2, 3, 4]).to(allPass { $0 < 5 })
-
-// Composing the expectation with another matcher:
-expect([1, 2, 3, 4]).to(allPass(beLessThan(5)))
-
- -

There are also variants of allPass that check against async matchers, and -that take in async functions:

-
// Swift
-
-// Providing a custom function:
-expect([1, 2, 3, 4]).to(allPass { await asyncFunctionReturningBool($0) })
-
-// Composing the expectation with another matcher:
-expect([1, 2, 3, 4]).to(allPass(someAsyncMatcher()))
-
-

Objective-C

- -

In Objective-C, the collection must be an instance of a type which implements -the NSFastEnumeration protocol, and whose elements are instances of a type -which subclasses NSObject.

- -

Additionally, unlike in Swift, there is no override to specify a custom -matcher function.

-
// Objective-C
-
-expect(@[@1, @2, @3, @4]).to(allPass(beLessThan(@5)));
-
-

Collection Count

-
// Swift
-
-// Passes if 'actual' contains the 'expected' number of elements:
-expect(actual).to(haveCount(expected))
-
-// Passes if 'actual' does _not_ contain the 'expected' number of elements:
-expect(actual).notTo(haveCount(expected))
-
-
// Objective-C
-
-// Passes if 'actual' contains the 'expected' number of elements:
-expect(actual).to(haveCount(expected))
-
-// Passes if 'actual' does _not_ contain the 'expected' number of elements:
-expect(actual).notTo(haveCount(expected))
-
- -

For Swift, the actual value must be an instance of a type conforming to Collection. -For example, instances of Array, Dictionary, or Set.

- -

For Objective-C, the actual value must be one of the following classes, or their subclasses:

- -
    -
  • NSArray,
  • -
  • NSDictionary,
  • -
  • NSSet, or
  • -
  • NSHashTable.
  • -
-

Notifications

-
// Swift
-let testNotification = Notification(name: Notification.Name("Foo"), object: nil)
-
-// Passes if the closure in expect { ... } posts a notification to the default
-// notification center.
-expect {
-    NotificationCenter.default.post(testNotification)
-}.to(postNotifications(equal([testNotification])))
-
-// Passes if the closure in expect { ... } posts a notification to a given
-// notification center
-let notificationCenter = NotificationCenter()
-expect {
-    notificationCenter.post(testNotification)
-}.to(postNotifications(equal([testNotification]), from: notificationCenter))
-
-// Passes if the closure in expect { ... } posts a notification with the provided names to a given
-// notification center. Make sure to use this when running tests on Catalina, 
-// using DistributedNotificationCenter as there is currently no way 
-// of observing notifications without providing specific names.
-let distributedNotificationCenter = DistributedNotificationCenter()
-expect {
-    distributedNotificationCenter.post(testNotification)
-}.toEventually(postDistributedNotifications(equal([testNotification]),
-                                  from: distributedNotificationCenter,
-                                  names: [testNotification.name]))
-
- -
-

This matcher is only available in Swift.

-
-

Result

-
// Swift
-let aResult: Result<String, Error> = .success("Hooray") 
-
-// passes if result is .success
-expect(aResult).to(beSuccess()) 
-
-// passes if result value is .success and validates Success value
-expect(aResult).to(beSuccess { value in
-    expect(value).to(equal("Hooray"))
-})
-
-
-enum AnError: Error {
-    case somethingHappened
-}
-let otherResult: Result<String, AnError> = .failure(.somethingHappened) 
-
-// passes if result is .failure
-expect(otherResult).to(beFailure()) 
-
-// passes if result value is .failure and validates error
-expect(otherResult).to(beFailure { error in
-    expect(error).to(matchError(AnError.somethingHappened))
-}) 
-
- -
-

This matcher is only available in Swift.

-
-

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))
-
- -

Note: In swift, you can mix and match synchronous and asynchronous matchers -using by satisfyAnyOf/||.

-
// Objective-C
-
-// 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.

-

Custom Validation

-
// Swift
-
-// passes if .succeeded is returned from the closure
-expect {
-    guard case .enumCaseWithAssociatedValueThatIDontCareAbout = actual else {
-        return .failed(reason: "wrong enum case")
-    }
-
-    return .succeeded
-}.to(succeed())
-
-// passes if .failed is returned from the closure
-expect {
-    guard case .enumCaseWithAssociatedValueThatIDontCareAbout = actual else {
-        return .failed(reason: "wrong enum case")
-    }
-
-    return .succeeded
-}.notTo(succeed())
-
- -

The String provided with .failed() is shown when the test fails.

- -

When using toEventually() be careful not to make state changes or run process intensive code since this closure will be ran many times.

-

Mapping a Value to Another Value

- -

Sometimes, you only want to match against a property or group of properties. -For example, if you wanted to check that only one or a few properties of a value -are equal to something else. For this, use the map matcher to convert a value -to another value and check it with a matcher.

-
// Swift
-
-expect(someValue).to(map(\.someProperty, equal(expectedProperty)))
-
-// or, for checking multiple different properties:
-
-expect(someValue).to(satisfyAllOf(
-    map(\.firstProperty, equal(expectedFirstProperty)),
-    map({ $0.secondProperty }, equal(expectedSecondProperty))
-))
-
- -

The map matcher takes in either a closure or a keypath literal, and a matcher -to compose with. It also works with async closures and async matchers.

- -

In most cases, it is simpler and easier to not use map (that is, prefer -expect(someValue.property).to(equal(1)) to -expect(someValue).to(map(\.property, equal(1)))). But map is incredibly -useful when combined with satisfyAllOf/satisfyAnyOf, especially for checking -a value that cannot conform to Equatable (or you don’t want to make it -conform to Equatable). However, if you find yourself reusing map many times -to do a fuzzy-equals of a given type, you will find writing a custom matcher to -be much easier to use and maintain.

-

Writing Your Own Matchers

- -

In Nimble, matchers are Swift functions that take an expected -value and return a Matcher closure. Take equal, for example:

-
// Swift
-
-public func equal<T: Equatable>(expectedValue: T?) -> Matcher<T> {
-    // Can be shortened to:
-    //   Matcher { actual in  ... }
-    //
-    // But shown with types here for clarity.
-    return Matcher { (actualExpression: Expression<T>) throws -> MatcherResult in
-        let msg = ExpectationMessage.expectedActualValueTo("equal <\(expectedValue)>")
-        if let actualValue = try actualExpression.evaluate() {
-            return MatcherResult(
-                bool: actualValue == expectedValue!,
-                message: msg
-            )
-        } else {
-            return MatcherResult(
-                status: .fail,
-                message: msg.appendedBeNilHint()
-            )
-        }
-    }
-}
-
- -

The return value of a Matcher closure is a MatcherResult that indicates -whether the actual value matches the expectation and what error message to -display on failure.

- -
-

The actual equal matcher function does not match when - 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 -to see how Nimble’s built-in set of matchers are implemented. You can -also check out the tips below.

-

MatcherResult

- -

MatcherResult is the return struct that Matcher return to indicate -success and failure. A MatcherResult is made up of two values: -MatcherStatus and ExpectationMessage.

- -

Instead of a boolean, MatcherStatus captures a trinary set of values:

-
// Swift
-
-public enum MatcherStatus {
-// The matcher "passes" with the given expression
-// eg - expect(1).to(equal(1))
-case matches
-
-// The matcher "fails" with the given expression
-// eg - expect(1).toNot(equal(1))
-case doesNotMatch
-
-// The matcher never "passes" with the given expression, even if negated
-// eg - expect(nil as Int?).toNot(equal(1))
-case fail
-
-// ...
-}
-
- -

Meanwhile, ExpectationMessage provides messaging semantics for error reporting.

-
// Swift
-
-public indirect enum ExpectationMessage {
-// Emits standard error message:
-// eg - "expected to <string>, got <actual>"
-case expectedActualValueTo(/* message: */ String)
-
-// Allows any free-form message
-// eg - "<string>"
-case fail(/* message: */ String)
-
-// ...
-}
-
- -

Matchers should usually depend on either .expectedActualValueTo(..) or -.fail(..) when reporting errors. Special cases can be used for the other enum -cases.

- -

Finally, if your Matcher utilizes other Matchers, you can utilize -.appended(details:) and .appended(message:) methods to annotate an existing -error with more details.

- -

A common message to append is failing on nils. For that, .appendedBeNilHint() -can be used.

-

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
-
-public func beNil<T>() -> Matcher<T> {
-    // Matcher.simpleNilable(..) automatically generates ExpectationMessage for
-    // us based on the string we provide to it. Also, the 'Nilable' postfix indicates
-    // that this Matcher supports matching against nil actualExpressions, instead of
-    // always resulting in a MatcherStatus.fail result -- which is true for
-    // Matcher.simple(..)
-    return Matcher.simpleNilable("be nil") { actualExpression in
-        let actualValue = try actualExpression.evaluate()
-        return MatcherStatus(bool: actualValue == 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.

-

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
-
-public func haveDescription(description: String) -> Matcher<Printable?> {
-    return Matcher.simple("have description") { actual in
-        return MatcherStatus(bool: actual.evaluate().description == description)
-    }
-}
-
-

Customizing Failure Messages

- -

When using Matcher.simple(..) or Matcher.simpleNilable(..), Nimble -outputs the following failure message when an expectation fails:

-
// where `message` is the first string argument and
-// `actual` is the actual value received in `expect(..)`
-"expected to \(message), got <\(actual)>"
-
- -

You can customize this message by modifying the way you create a Matcher.

-

Basic Customization

- -

For slightly more complex error messaging, receive the created failure message -with Matcher.define(..):

-
// Swift
-
-public func equal<T: Equatable>(_ expectedValue: T?) -> Matcher<T> {
-    return Matcher.define("equal <\(stringify(expectedValue))>") { actualExpression, msg in
-        let actualValue = try actualExpression.evaluate()
-        let matches = actualValue == expectedValue && expectedValue != nil
-        if expectedValue == nil || actualValue == nil {
-            if expectedValue == nil && actualValue != nil {
-                return MatcherResult(
-                    status: .fail,
-                    message: msg.appendedBeNilHint()
-                )
-            }
-            return MatcherResult(status: .fail, message: msg)
-        }
-        return MatcherResult(bool: matches, message: msg)
-    }
-}
-
- -

In the example above, msg is defined based on the string given to -Matcher.define. The code looks akin to:

-
// Swift
-
-let msg = ExpectationMessage.expectedActualValueTo("equal <\(stringify(expectedValue))>")
-
-

Full Customization

- -

To fully customize the behavior of the Matcher, use the overload that expects -a MatcherResult to be returned.

- -

Along with MatcherResult, there are other ExpectationMessage enum values you can use:

-
public indirect enum ExpectationMessage {
-// Emits standard error message:
-// eg - "expected to <message>, got <actual>"
-case expectedActualValueTo(/* message: */ String)
-
-// Allows any free-form message
-// eg - "<message>"
-case fail(/* message: */ String)
-
-// Emits standard error message with a custom actual value instead of the default.
-// eg - "expected to <message>, got <actual>"
-case expectedCustomValueTo(/* message: */ String, /* actual: */ String)
-
-// Emits standard error message without mentioning the actual value
-// eg - "expected to <message>"
-case expectedTo(/* message: */ String)
-
-// ...
-}
-
- -

For matchers that compose other matchers, there are a handful of helper -functions to annotate messages.

- -

appended(message: String) is used to append to the original failure message:

-
// produces "expected to be true, got <actual> (use beFalse() for inverse)"
-// appended message do show up inline in Xcode.
-.expectedActualValueTo("be true").appended(message: " (use beFalse() for inverse)")
-
- -

For a more comprehensive message that spans multiple lines, use -appended(details: String) instead:

-
// produces "expected to be true, got <actual>\n\nuse beFalse() for inverse\nor use beNil()"
-// details do not show inline in Xcode, but do show up in test logs.
-.expectedActualValueTo("be true").appended(details: "use beFalse() for inverse\nor use beNil()")
-
-

Asynchronous Matchers

- -

To write matchers against async expressions, return an instance of -AsyncMatcher. The closure passed to AsyncMatcher is async, and the -expression you evaluate is also asynchronous and needs to be awaited on.

-
// Swift
-
-actor CallRecorder<Arguments> {
-    private(set) var calls: [Arguments] = []
-
-    func record(call: Arguments) {
-        calls.append(call)
-    }
-}
-
-func beCalled<Argument: Equatable>(with arguments: Argument) -> AsyncMatcher<CallRecorder<Argument>> {
-    AsyncMatcher { (expression: AsyncExpression<CallRecorder<Argument>>) in
-        let message = ExpectationMessage.expectedActualValueTo("be called with \(arguments)")
-        guard let calls = try await expression.evaluate()?.calls else {
-            return MatcherResult(status: .fail, message: message.appendedBeNilHint())
-        }
-
-        return MatcherResult(bool: calls.contains(args), message: message.appended(details: "called with \(calls)"))
-    }
-}
-
- -

In this example, we created an actor to act as an object to record calls to an -async function. Then, we created the beCalled(with:) matcher to check if the -actor has received a call with the given arguments.

-

Supporting Objective-C

- -

To use a custom matcher written in Swift from Objective-C, you’ll have -to extend the NMBMatcher class, adding a new class method for your -custom matcher. The example below defines the class method -+[NMBMatcher beNilMatcher]:

-
// Swift
-
-extension NMBMatcher {
-    @objc public class func beNilMatcher() -> NMBMatcher {
-        return NMBMatcher { actualExpression in
-            return try beNil().satisfies(actualExpression).toObjectiveC()
-        }
-    }
-}
-
- -

The above allows you to use the matcher from Objective-C:

-
// Objective-C
-
-expect(actual).to([NMBMatcher beNilMatcher]());
-
- -

To make the syntax easier to use, define a C function that calls the -class method:

-
// Objective-C
-
-FOUNDATION_EXPORT NMBMatcher *beNil() {
-    return [NMBMatcher beNilMatcher];
-}
-
-

Properly Handling nil in Objective-C Matchers

- -

When supporting Objective-C, make sure you handle nil appropriately. -Like Cedar, -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:

-
// 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 Matcher.define or Matcher.simple. -Using those factory methods will automatically generate expected value failure messages when they’re nil.

-
public func beginWith<S: Sequence>(_ startingElement: S.Element) -> Matcher<S> where S.Element: Equatable {
-    return Matcher.simple("begin with <\(startingElement)>") { actualExpression in
-        guard let actualValue = try actualExpression.evaluate() else { return .fail }
-
-        var actualGenerator = actualValue.makeIterator()
-        return MatcherStatus(bool: actualGenerator.next() == startingElement)
-    }
-}
-
-extension NMBMatcher {
-    @objc public class func beginWithMatcher(_ expected: Any) -> NMBMatcher {
-        return NMBMatcher { actualExpression in
-            let actual = try actualExpression.evaluate()
-            let expr = actualExpression.cast { $0 as? NMBOrderedCollection }
-            return try beginWith(expected).satisfies(expr).toObjectiveC()
-        }
-    }
-}
-
-

Installing Nimble

- -
-

Nimble can be used on its own, or in conjunction with its sister - project, Quick. To install both - Quick and Nimble, follow the installation instructions in the Quick - Documentation.

-
- -

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 macOS, iOS or tvOS applications, follow -these 4 easy steps:

- -
    -
  1. Clone the Nimble repository
  2. -
  3. Add Nimble.xcodeproj to the Xcode workspace for your project
  4. -
  5. Link Nimble.framework to your test target
  6. -
  7. Start writing expectations!
  8. -
- -

For more detailed instructions on each of these steps, -read 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 macOS, iOS, tvOS or watchOS applications, add -Nimble to your podfile and add the use_frameworks! line to enable Swift -support for CocoaPods.

-
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'
-end
-
- -

Finally run pod install.

-

Installing Nimble via Swift Package Manager

-

Xcode

- -

To install Nimble via Xcode’s Swift Package Manager Integration: -Select your project configuration, then the project tab, then the Package -Dependencies tab. Click on the “plus” button at the bottom of the list, -then follow the wizard to add Quick to your project. Specify -https://github.com/Quick/Nimble.git as the url, and be sure to add -Nimble as a dependency of your unit test target, not your app target.

-

Package.Swift

- -

To use Nimble with Swift Package Manager to test your applications, add Nimble -to your Package.Swift and link it with your test target:

-
// swift-tools-version:5.5
-
-import PackageDescription
-
-let package = Package(
-    name: "MyAwesomeLibrary",
-    products: [
-        // ...
-    ],
-    dependencies: [
-        // ...
-        .package(url:  "https://github.com/Quick/Nimble.git", from: "12.0.0"),
-    ],
-    targets: [
-        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
-        // Targets can depend on other targets in this package, and on products in packages this package depends on.
-        .target(
-            name: "MyAwesomeLibrary",
-            dependencies: ...),
-        .testTarget(
-            name: "MyAwesomeLibraryTests",
-            dependencies: ["MyAwesomeLibrary", "Nimble"]),
-    ]
-)
-
- -

Please note that if you install Nimble using Swift Package Manager, then raiseException is not available.

-

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:
  2. -
-
class MyAssertionHandler : AssertionHandler {
-    func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) {
-        if (!assertion) {
-            print("Expectation failed: \(message.stringValue)")
-        }
-    }
-}
-
-
// Somewhere before you use any assertions
-NimbleAssertionHandler = MyAssertionHandler()
-
- -
    -
  1. 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" -
    • -
  2. -
- -

You can now use Nimble assertions in your code and handle failures as you see -fit.

-

Privacy Statement

- -

Nimble is a library that is only used for testing and should never be included -in the binary submitted to App Store Connect.

- -

Despite not being shipped to Apple, Nimble does not and will never collect any -kind of analytics or tracking.

- -
-
- -
-
- - diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/js/jazzy.js b/docs/docsets/Nimble.docset/Contents/Resources/Documents/js/jazzy.js deleted file mode 100755 index 198441660..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/js/jazzy.js +++ /dev/null @@ -1,74 +0,0 @@ -// Jazzy - https://github.com/realm/jazzy -// Copyright Realm Inc. -// SPDX-License-Identifier: MIT - -window.jazzy = {'docset': false} -if (typeof window.dash != 'undefined') { - document.documentElement.className += ' dash' - window.jazzy.docset = true -} -if (navigator.userAgent.match(/xcode/i)) { - document.documentElement.className += ' xcode' - window.jazzy.docset = true -} - -function toggleItem($link, $content) { - var animationDuration = 300; - $link.toggleClass('token-open'); - $content.slideToggle(animationDuration); -} - -function itemLinkToContent($link) { - return $link.parent().parent().next(); -} - -// On doc load + hash-change, open any targetted item -function openCurrentItemIfClosed() { - if (window.jazzy.docset) { - return; - } - var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); - $content = itemLinkToContent($link); - if ($content.is(':hidden')) { - toggleItem($link, $content); - } -} - -$(openCurrentItemIfClosed); -$(window).on('hashchange', openCurrentItemIfClosed); - -// On item link ('token') click, toggle its discussion -$('.token').on('click', function(event) { - if (window.jazzy.docset) { - return; - } - var $link = $(this); - toggleItem($link, itemLinkToContent($link)); - - // Keeps the document from jumping to the hash. - var href = $link.attr('href'); - if (history.pushState) { - history.pushState({}, '', href); - } else { - location.hash = href; - } - event.preventDefault(); -}); - -// Clicks on links to the current, closed, item need to open the item -$("a:not('.token')").on('click', function() { - if (location == this.href) { - openCurrentItemIfClosed(); - } -}); - -// KaTeX rendering -if ("katex" in window) { - $($('.math').each( (_, element) => { - katex.render(element.textContent, element, { - displayMode: $(element).hasClass('m-block'), - throwOnError: false, - trust: true - }); - })) -} diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/js/jazzy.search.js b/docs/docsets/Nimble.docset/Contents/Resources/Documents/js/jazzy.search.js deleted file mode 100644 index 359cdbb8b..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/js/jazzy.search.js +++ /dev/null @@ -1,74 +0,0 @@ -// Jazzy - https://github.com/realm/jazzy -// Copyright Realm Inc. -// SPDX-License-Identifier: MIT - -$(function(){ - var $typeahead = $('[data-typeahead]'); - var $form = $typeahead.parents('form'); - var searchURL = $form.attr('action'); - - function displayTemplate(result) { - return result.name; - } - - function suggestionTemplate(result) { - var t = '
'; - t += '' + result.name + ''; - if (result.parent_name) { - t += '' + result.parent_name + ''; - } - t += '
'; - return t; - } - - $typeahead.one('focus', function() { - $form.addClass('loading'); - - $.getJSON(searchURL).then(function(searchData) { - const searchIndex = lunr(function() { - this.ref('url'); - this.field('name'); - this.field('abstract'); - for (const [url, doc] of Object.entries(searchData)) { - this.add({url: url, name: doc.name, abstract: doc.abstract}); - } - }); - - $typeahead.typeahead( - { - highlight: true, - minLength: 3, - autoselect: true - }, - { - limit: 10, - display: displayTemplate, - templates: { suggestion: suggestionTemplate }, - source: function(query, sync) { - const lcSearch = query.toLowerCase(); - const results = searchIndex.query(function(q) { - q.term(lcSearch, { boost: 100 }); - q.term(lcSearch, { - boost: 10, - wildcard: lunr.Query.wildcard.TRAILING - }); - }).map(function(result) { - var doc = searchData[result.ref]; - doc.url = result.ref; - return doc; - }); - sync(results); - } - } - ); - $form.removeClass('loading'); - $typeahead.trigger('focus'); - }); - }); - - var baseURL = searchURL.slice(0, -"search.json".length); - - $typeahead.on('typeahead:select', function(e, result) { - window.location = baseURL + result.url; - }); -}); diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/js/jquery.min.js b/docs/docsets/Nimble.docset/Contents/Resources/Documents/js/jquery.min.js deleted file mode 100644 index 7f37b5d99..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/js/jquery.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 00){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/js/typeahead.jquery.js b/docs/docsets/Nimble.docset/Contents/Resources/Documents/js/typeahead.jquery.js deleted file mode 100644 index 3a2d2ab03..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/js/typeahead.jquery.js +++ /dev/null @@ -1,1694 +0,0 @@ -/*! - * typeahead.js 1.3.1 - * https://github.com/corejavascript/typeahead.js - * Copyright 2013-2020 Twitter, Inc. and other contributors; Licensed MIT - */ - - -(function(root, factory) { - if (typeof define === "function" && define.amd) { - define([ "jquery" ], function(a0) { - return factory(a0); - }); - } else if (typeof module === "object" && module.exports) { - module.exports = factory(require("jquery")); - } else { - factory(root["jQuery"]); - } -})(this, function($) { - var _ = function() { - "use strict"; - return { - isMsie: function() { - return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false; - }, - isBlankString: function(str) { - return !str || /^\s*$/.test(str); - }, - escapeRegExChars: function(str) { - return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); - }, - isString: function(obj) { - return typeof obj === "string"; - }, - isNumber: function(obj) { - return typeof obj === "number"; - }, - isArray: $.isArray, - isFunction: $.isFunction, - isObject: $.isPlainObject, - isUndefined: function(obj) { - return typeof obj === "undefined"; - }, - isElement: function(obj) { - return !!(obj && obj.nodeType === 1); - }, - isJQuery: function(obj) { - return obj instanceof $; - }, - toStr: function toStr(s) { - return _.isUndefined(s) || s === null ? "" : s + ""; - }, - bind: $.proxy, - each: function(collection, cb) { - $.each(collection, reverseArgs); - function reverseArgs(index, value) { - return cb(value, index); - } - }, - map: $.map, - filter: $.grep, - every: function(obj, test) { - var result = true; - if (!obj) { - return result; - } - $.each(obj, function(key, val) { - if (!(result = test.call(null, val, key, obj))) { - return false; - } - }); - return !!result; - }, - some: function(obj, test) { - var result = false; - if (!obj) { - return result; - } - $.each(obj, function(key, val) { - if (result = test.call(null, val, key, obj)) { - return false; - } - }); - return !!result; - }, - mixin: $.extend, - identity: function(x) { - return x; - }, - clone: function(obj) { - return $.extend(true, {}, obj); - }, - getIdGenerator: function() { - var counter = 0; - return function() { - return counter++; - }; - }, - templatify: function templatify(obj) { - return $.isFunction(obj) ? obj : template; - function template() { - return String(obj); - } - }, - defer: function(fn) { - setTimeout(fn, 0); - }, - debounce: function(func, wait, immediate) { - var timeout, result; - return function() { - var context = this, args = arguments, later, callNow; - later = function() { - timeout = null; - if (!immediate) { - result = func.apply(context, args); - } - }; - callNow = immediate && !timeout; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - if (callNow) { - result = func.apply(context, args); - } - return result; - }; - }, - throttle: function(func, wait) { - var context, args, timeout, result, previous, later; - previous = 0; - later = function() { - previous = new Date(); - timeout = null; - result = func.apply(context, args); - }; - return function() { - var now = new Date(), remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0) { - clearTimeout(timeout); - timeout = null; - previous = now; - result = func.apply(context, args); - } else if (!timeout) { - timeout = setTimeout(later, remaining); - } - return result; - }; - }, - stringify: function(val) { - return _.isString(val) ? val : JSON.stringify(val); - }, - guid: function() { - function _p8(s) { - var p = (Math.random().toString(16) + "000000000").substr(2, 8); - return s ? "-" + p.substr(0, 4) + "-" + p.substr(4, 4) : p; - } - return "tt-" + _p8() + _p8(true) + _p8(true) + _p8(); - }, - noop: function() {} - }; - }(); - var WWW = function() { - "use strict"; - var defaultClassNames = { - wrapper: "twitter-typeahead", - input: "tt-input", - hint: "tt-hint", - menu: "tt-menu", - dataset: "tt-dataset", - suggestion: "tt-suggestion", - selectable: "tt-selectable", - empty: "tt-empty", - open: "tt-open", - cursor: "tt-cursor", - highlight: "tt-highlight" - }; - return build; - function build(o) { - var www, classes; - classes = _.mixin({}, defaultClassNames, o); - www = { - css: buildCss(), - classes: classes, - html: buildHtml(classes), - selectors: buildSelectors(classes) - }; - return { - css: www.css, - html: www.html, - classes: www.classes, - selectors: www.selectors, - mixin: function(o) { - _.mixin(o, www); - } - }; - } - function buildHtml(c) { - return { - wrapper: '', - menu: '
' - }; - } - function buildSelectors(classes) { - var selectors = {}; - _.each(classes, function(v, k) { - selectors[k] = "." + v; - }); - return selectors; - } - function buildCss() { - var css = { - wrapper: { - position: "relative", - display: "inline-block" - }, - hint: { - position: "absolute", - top: "0", - left: "0", - borderColor: "transparent", - boxShadow: "none", - opacity: "1" - }, - input: { - position: "relative", - verticalAlign: "top", - backgroundColor: "transparent" - }, - inputWithNoHint: { - position: "relative", - verticalAlign: "top" - }, - menu: { - position: "absolute", - top: "100%", - left: "0", - zIndex: "100", - display: "none" - }, - ltr: { - left: "0", - right: "auto" - }, - rtl: { - left: "auto", - right: " 0" - } - }; - if (_.isMsie()) { - _.mixin(css.input, { - backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" - }); - } - return css; - } - }(); - var EventBus = function() { - "use strict"; - var namespace, deprecationMap; - namespace = "typeahead:"; - deprecationMap = { - render: "rendered", - cursorchange: "cursorchanged", - select: "selected", - autocomplete: "autocompleted" - }; - function EventBus(o) { - if (!o || !o.el) { - $.error("EventBus initialized without el"); - } - this.$el = $(o.el); - } - _.mixin(EventBus.prototype, { - _trigger: function(type, args) { - var $e = $.Event(namespace + type); - this.$el.trigger.call(this.$el, $e, args || []); - return $e; - }, - before: function(type) { - var args, $e; - args = [].slice.call(arguments, 1); - $e = this._trigger("before" + type, args); - return $e.isDefaultPrevented(); - }, - trigger: function(type) { - var deprecatedType; - this._trigger(type, [].slice.call(arguments, 1)); - if (deprecatedType = deprecationMap[type]) { - this._trigger(deprecatedType, [].slice.call(arguments, 1)); - } - } - }); - return EventBus; - }(); - var EventEmitter = function() { - "use strict"; - var splitter = /\s+/, nextTick = getNextTick(); - return { - onSync: onSync, - onAsync: onAsync, - off: off, - trigger: trigger - }; - function on(method, types, cb, context) { - var type; - if (!cb) { - return this; - } - types = types.split(splitter); - cb = context ? bindContext(cb, context) : cb; - this._callbacks = this._callbacks || {}; - while (type = types.shift()) { - this._callbacks[type] = this._callbacks[type] || { - sync: [], - async: [] - }; - this._callbacks[type][method].push(cb); - } - return this; - } - function onAsync(types, cb, context) { - return on.call(this, "async", types, cb, context); - } - function onSync(types, cb, context) { - return on.call(this, "sync", types, cb, context); - } - function off(types) { - var type; - if (!this._callbacks) { - return this; - } - types = types.split(splitter); - while (type = types.shift()) { - delete this._callbacks[type]; - } - return this; - } - function trigger(types) { - var type, callbacks, args, syncFlush, asyncFlush; - if (!this._callbacks) { - return this; - } - types = types.split(splitter); - args = [].slice.call(arguments, 1); - while ((type = types.shift()) && (callbacks = this._callbacks[type])) { - syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args)); - asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args)); - syncFlush() && nextTick(asyncFlush); - } - return this; - } - function getFlush(callbacks, context, args) { - return flush; - function flush() { - var cancelled; - for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) { - cancelled = callbacks[i].apply(context, args) === false; - } - return !cancelled; - } - } - function getNextTick() { - var nextTickFn; - if (window.setImmediate) { - nextTickFn = function nextTickSetImmediate(fn) { - setImmediate(function() { - fn(); - }); - }; - } else { - nextTickFn = function nextTickSetTimeout(fn) { - setTimeout(function() { - fn(); - }, 0); - }; - } - return nextTickFn; - } - function bindContext(fn, context) { - return fn.bind ? fn.bind(context) : function() { - fn.apply(context, [].slice.call(arguments, 0)); - }; - } - }(); - var highlight = function(doc) { - "use strict"; - var defaults = { - node: null, - pattern: null, - tagName: "strong", - className: null, - wordsOnly: false, - caseSensitive: false, - diacriticInsensitive: false - }; - var accented = { - A: "[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]", - B: "[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]", - C: "[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]", - D: "[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]", - E: "[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]", - F: "[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]", - G: "[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]", - H: "[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]", - I: "[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]", - J: "[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]", - K: "[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]", - L: "[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]", - M: "[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]", - N: "[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]", - O: "[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]", - P: "[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]", - Q: "[Qqℚ⒬Ⓠⓠ㏃Qq]", - R: "[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]", - S: "[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]", - T: "[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]", - U: "[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]", - V: "[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]", - W: "[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]", - X: "[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]", - Y: "[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]", - Z: "[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]" - }; - return function hightlight(o) { - var regex; - o = _.mixin({}, defaults, o); - if (!o.node || !o.pattern) { - return; - } - o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ]; - regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive); - traverse(o.node, hightlightTextNode); - function hightlightTextNode(textNode) { - var match, patternNode, wrapperNode; - if (match = regex.exec(textNode.data)) { - wrapperNode = doc.createElement(o.tagName); - o.className && (wrapperNode.className = o.className); - patternNode = textNode.splitText(match.index); - patternNode.splitText(match[0].length); - wrapperNode.appendChild(patternNode.cloneNode(true)); - textNode.parentNode.replaceChild(wrapperNode, patternNode); - } - return !!match; - } - function traverse(el, hightlightTextNode) { - var childNode, TEXT_NODE_TYPE = 3; - for (var i = 0; i < el.childNodes.length; i++) { - childNode = el.childNodes[i]; - if (childNode.nodeType === TEXT_NODE_TYPE) { - i += hightlightTextNode(childNode) ? 1 : 0; - } else { - traverse(childNode, hightlightTextNode); - } - } - } - }; - function accent_replacer(chr) { - return accented[chr.toUpperCase()] || chr; - } - function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) { - var escapedPatterns = [], regexStr; - for (var i = 0, len = patterns.length; i < len; i++) { - var escapedWord = _.escapeRegExChars(patterns[i]); - if (diacriticInsensitive) { - escapedWord = escapedWord.replace(/\S/g, accent_replacer); - } - escapedPatterns.push(escapedWord); - } - regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")"; - return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i"); - } - }(window.document); - var Input = function() { - "use strict"; - var specialKeyCodeMap; - specialKeyCodeMap = { - 9: "tab", - 27: "esc", - 37: "left", - 39: "right", - 13: "enter", - 38: "up", - 40: "down" - }; - function Input(o, www) { - var id; - o = o || {}; - if (!o.input) { - $.error("input is missing"); - } - www.mixin(this); - this.$hint = $(o.hint); - this.$input = $(o.input); - this.$menu = $(o.menu); - id = this.$input.attr("id") || _.guid(); - this.$menu.attr("id", id + "_listbox"); - this.$hint.attr({ - "aria-hidden": true - }); - this.$input.attr({ - "aria-owns": id + "_listbox", - role: "combobox", - "aria-autocomplete": "list", - "aria-expanded": false - }); - this.query = this.$input.val(); - this.queryWhenFocused = this.hasFocus() ? this.query : null; - this.$overflowHelper = buildOverflowHelper(this.$input); - this._checkLanguageDirection(); - if (this.$hint.length === 0) { - this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop; - } - this.onSync("cursorchange", this._updateDescendent); - } - Input.normalizeQuery = function(str) { - return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " "); - }; - _.mixin(Input.prototype, EventEmitter, { - _onBlur: function onBlur() { - this.resetInputValue(); - this.trigger("blurred"); - }, - _onFocus: function onFocus() { - this.queryWhenFocused = this.query; - this.trigger("focused"); - }, - _onKeydown: function onKeydown($e) { - var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; - this._managePreventDefault(keyName, $e); - if (keyName && this._shouldTrigger(keyName, $e)) { - this.trigger(keyName + "Keyed", $e); - } - }, - _onInput: function onInput() { - this._setQuery(this.getInputValue()); - this.clearHintIfInvalid(); - this._checkLanguageDirection(); - }, - _managePreventDefault: function managePreventDefault(keyName, $e) { - var preventDefault; - switch (keyName) { - case "up": - case "down": - preventDefault = !withModifier($e); - break; - - default: - preventDefault = false; - } - preventDefault && $e.preventDefault(); - }, - _shouldTrigger: function shouldTrigger(keyName, $e) { - var trigger; - switch (keyName) { - case "tab": - trigger = !withModifier($e); - break; - - default: - trigger = true; - } - return trigger; - }, - _checkLanguageDirection: function checkLanguageDirection() { - var dir = (this.$input.css("direction") || "ltr").toLowerCase(); - if (this.dir !== dir) { - this.dir = dir; - this.$hint.attr("dir", dir); - this.trigger("langDirChanged", dir); - } - }, - _setQuery: function setQuery(val, silent) { - var areEquivalent, hasDifferentWhitespace; - areEquivalent = areQueriesEquivalent(val, this.query); - hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false; - this.query = val; - if (!silent && !areEquivalent) { - this.trigger("queryChanged", this.query); - } else if (!silent && hasDifferentWhitespace) { - this.trigger("whitespaceChanged", this.query); - } - }, - _updateDescendent: function updateDescendent(event, id) { - this.$input.attr("aria-activedescendant", id); - }, - bind: function() { - var that = this, onBlur, onFocus, onKeydown, onInput; - onBlur = _.bind(this._onBlur, this); - onFocus = _.bind(this._onFocus, this); - onKeydown = _.bind(this._onKeydown, this); - onInput = _.bind(this._onInput, this); - this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown); - if (!_.isMsie() || _.isMsie() > 9) { - this.$input.on("input.tt", onInput); - } else { - this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { - if (specialKeyCodeMap[$e.which || $e.keyCode]) { - return; - } - _.defer(_.bind(that._onInput, that, $e)); - }); - } - return this; - }, - focus: function focus() { - this.$input.focus(); - }, - blur: function blur() { - this.$input.blur(); - }, - getLangDir: function getLangDir() { - return this.dir; - }, - getQuery: function getQuery() { - return this.query || ""; - }, - setQuery: function setQuery(val, silent) { - this.setInputValue(val); - this._setQuery(val, silent); - }, - hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() { - return this.query !== this.queryWhenFocused; - }, - getInputValue: function getInputValue() { - return this.$input.val(); - }, - setInputValue: function setInputValue(value) { - this.$input.val(value); - this.clearHintIfInvalid(); - this._checkLanguageDirection(); - }, - resetInputValue: function resetInputValue() { - this.setInputValue(this.query); - }, - getHint: function getHint() { - return this.$hint.val(); - }, - setHint: function setHint(value) { - this.$hint.val(value); - }, - clearHint: function clearHint() { - this.setHint(""); - }, - clearHintIfInvalid: function clearHintIfInvalid() { - var val, hint, valIsPrefixOfHint, isValid; - val = this.getInputValue(); - hint = this.getHint(); - valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0; - isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow(); - !isValid && this.clearHint(); - }, - hasFocus: function hasFocus() { - return this.$input.is(":focus"); - }, - hasOverflow: function hasOverflow() { - var constraint = this.$input.width() - 2; - this.$overflowHelper.text(this.getInputValue()); - return this.$overflowHelper.width() >= constraint; - }, - isCursorAtEnd: function() { - var valueLength, selectionStart, range; - valueLength = this.$input.val().length; - selectionStart = this.$input[0].selectionStart; - if (_.isNumber(selectionStart)) { - return selectionStart === valueLength; - } else if (document.selection) { - range = document.selection.createRange(); - range.moveStart("character", -valueLength); - return valueLength === range.text.length; - } - return true; - }, - destroy: function destroy() { - this.$hint.off(".tt"); - this.$input.off(".tt"); - this.$overflowHelper.remove(); - this.$hint = this.$input = this.$overflowHelper = $("
"); - }, - setAriaExpanded: function setAriaExpanded(value) { - this.$input.attr("aria-expanded", value); - } - }); - return Input; - function buildOverflowHelper($input) { - return $('').css({ - position: "absolute", - visibility: "hidden", - whiteSpace: "pre", - fontFamily: $input.css("font-family"), - fontSize: $input.css("font-size"), - fontStyle: $input.css("font-style"), - fontVariant: $input.css("font-variant"), - fontWeight: $input.css("font-weight"), - wordSpacing: $input.css("word-spacing"), - letterSpacing: $input.css("letter-spacing"), - textIndent: $input.css("text-indent"), - textRendering: $input.css("text-rendering"), - textTransform: $input.css("text-transform") - }).insertAfter($input); - } - function areQueriesEquivalent(a, b) { - return Input.normalizeQuery(a) === Input.normalizeQuery(b); - } - function withModifier($e) { - return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey; - } - }(); - var Dataset = function() { - "use strict"; - var keys, nameGenerator; - keys = { - dataset: "tt-selectable-dataset", - val: "tt-selectable-display", - obj: "tt-selectable-object" - }; - nameGenerator = _.getIdGenerator(); - function Dataset(o, www) { - o = o || {}; - o.templates = o.templates || {}; - o.templates.notFound = o.templates.notFound || o.templates.empty; - if (!o.source) { - $.error("missing source"); - } - if (!o.node) { - $.error("missing node"); - } - if (o.name && !isValidName(o.name)) { - $.error("invalid dataset name: " + o.name); - } - www.mixin(this); - this.highlight = !!o.highlight; - this.name = _.toStr(o.name || nameGenerator()); - this.limit = o.limit || 5; - this.displayFn = getDisplayFn(o.display || o.displayKey); - this.templates = getTemplates(o.templates, this.displayFn); - this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; - this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async; - this._resetLastSuggestion(); - this.$el = $(o.node).attr("role", "presentation").addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); - } - Dataset.extractData = function extractData(el) { - var $el = $(el); - if ($el.data(keys.obj)) { - return { - dataset: $el.data(keys.dataset) || "", - val: $el.data(keys.val) || "", - obj: $el.data(keys.obj) || null - }; - } - return null; - }; - _.mixin(Dataset.prototype, EventEmitter, { - _overwrite: function overwrite(query, suggestions) { - suggestions = suggestions || []; - if (suggestions.length) { - this._renderSuggestions(query, suggestions); - } else if (this.async && this.templates.pending) { - this._renderPending(query); - } else if (!this.async && this.templates.notFound) { - this._renderNotFound(query); - } else { - this._empty(); - } - this.trigger("rendered", suggestions, false, this.name); - }, - _append: function append(query, suggestions) { - suggestions = suggestions || []; - if (suggestions.length && this.$lastSuggestion.length) { - this._appendSuggestions(query, suggestions); - } else if (suggestions.length) { - this._renderSuggestions(query, suggestions); - } else if (!this.$lastSuggestion.length && this.templates.notFound) { - this._renderNotFound(query); - } - this.trigger("rendered", suggestions, true, this.name); - }, - _renderSuggestions: function renderSuggestions(query, suggestions) { - var $fragment; - $fragment = this._getSuggestionsFragment(query, suggestions); - this.$lastSuggestion = $fragment.children().last(); - this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions)); - }, - _appendSuggestions: function appendSuggestions(query, suggestions) { - var $fragment, $lastSuggestion; - $fragment = this._getSuggestionsFragment(query, suggestions); - $lastSuggestion = $fragment.children().last(); - this.$lastSuggestion.after($fragment); - this.$lastSuggestion = $lastSuggestion; - }, - _renderPending: function renderPending(query) { - var template = this.templates.pending; - this._resetLastSuggestion(); - template && this.$el.html(template({ - query: query, - dataset: this.name - })); - }, - _renderNotFound: function renderNotFound(query) { - var template = this.templates.notFound; - this._resetLastSuggestion(); - template && this.$el.html(template({ - query: query, - dataset: this.name - })); - }, - _empty: function empty() { - this.$el.empty(); - this._resetLastSuggestion(); - }, - _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) { - var that = this, fragment; - fragment = document.createDocumentFragment(); - _.each(suggestions, function getSuggestionNode(suggestion) { - var $el, context; - context = that._injectQuery(query, suggestion); - $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable); - fragment.appendChild($el[0]); - }); - this.highlight && highlight({ - className: this.classes.highlight, - node: fragment, - pattern: query - }); - return $(fragment); - }, - _getFooter: function getFooter(query, suggestions) { - return this.templates.footer ? this.templates.footer({ - query: query, - suggestions: suggestions, - dataset: this.name - }) : null; - }, - _getHeader: function getHeader(query, suggestions) { - return this.templates.header ? this.templates.header({ - query: query, - suggestions: suggestions, - dataset: this.name - }) : null; - }, - _resetLastSuggestion: function resetLastSuggestion() { - this.$lastSuggestion = $(); - }, - _injectQuery: function injectQuery(query, obj) { - return _.isObject(obj) ? _.mixin({ - _query: query - }, obj) : obj; - }, - update: function update(query) { - var that = this, canceled = false, syncCalled = false, rendered = 0; - this.cancel(); - this.cancel = function cancel() { - canceled = true; - that.cancel = $.noop; - that.async && that.trigger("asyncCanceled", query, that.name); - }; - this.source(query, sync, async); - !syncCalled && sync([]); - function sync(suggestions) { - if (syncCalled) { - return; - } - syncCalled = true; - suggestions = (suggestions || []).slice(0, that.limit); - rendered = suggestions.length; - that._overwrite(query, suggestions); - if (rendered < that.limit && that.async) { - that.trigger("asyncRequested", query, that.name); - } - } - function async(suggestions) { - suggestions = suggestions || []; - if (!canceled && rendered < that.limit) { - that.cancel = $.noop; - var idx = Math.abs(rendered - that.limit); - rendered += idx; - that._append(query, suggestions.slice(0, idx)); - that.async && that.trigger("asyncReceived", query, that.name); - } - } - }, - cancel: $.noop, - clear: function clear() { - this._empty(); - this.cancel(); - this.trigger("cleared"); - }, - isEmpty: function isEmpty() { - return this.$el.is(":empty"); - }, - destroy: function destroy() { - this.$el = $("
"); - } - }); - return Dataset; - function getDisplayFn(display) { - display = display || _.stringify; - return _.isFunction(display) ? display : displayFn; - function displayFn(obj) { - return obj[display]; - } - } - function getTemplates(templates, displayFn) { - return { - notFound: templates.notFound && _.templatify(templates.notFound), - pending: templates.pending && _.templatify(templates.pending), - header: templates.header && _.templatify(templates.header), - footer: templates.footer && _.templatify(templates.footer), - suggestion: templates.suggestion ? userSuggestionTemplate : suggestionTemplate - }; - function userSuggestionTemplate(context) { - var template = templates.suggestion; - return $(template(context)).attr("id", _.guid()); - } - function suggestionTemplate(context) { - return $('
').attr("id", _.guid()).text(displayFn(context)); - } - } - function isValidName(str) { - return /^[_a-zA-Z0-9-]+$/.test(str); - } - }(); - var Menu = function() { - "use strict"; - function Menu(o, www) { - var that = this; - o = o || {}; - if (!o.node) { - $.error("node is required"); - } - www.mixin(this); - this.$node = $(o.node); - this.query = null; - this.datasets = _.map(o.datasets, initializeDataset); - function initializeDataset(oDataset) { - var node = that.$node.find(oDataset.node).first(); - oDataset.node = node.length ? node : $("
").appendTo(that.$node); - return new Dataset(oDataset, www); - } - } - _.mixin(Menu.prototype, EventEmitter, { - _onSelectableClick: function onSelectableClick($e) { - this.trigger("selectableClicked", $($e.currentTarget)); - }, - _onRendered: function onRendered(type, dataset, suggestions, async) { - this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); - this.trigger("datasetRendered", dataset, suggestions, async); - }, - _onCleared: function onCleared() { - this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); - this.trigger("datasetCleared"); - }, - _propagate: function propagate() { - this.trigger.apply(this, arguments); - }, - _allDatasetsEmpty: function allDatasetsEmpty() { - return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) { - var isEmpty = dataset.isEmpty(); - this.$node.attr("aria-expanded", !isEmpty); - return isEmpty; - }, this)); - }, - _getSelectables: function getSelectables() { - return this.$node.find(this.selectors.selectable); - }, - _removeCursor: function _removeCursor() { - var $selectable = this.getActiveSelectable(); - $selectable && $selectable.removeClass(this.classes.cursor); - }, - _ensureVisible: function ensureVisible($el) { - var elTop, elBottom, nodeScrollTop, nodeHeight; - elTop = $el.position().top; - elBottom = elTop + $el.outerHeight(true); - nodeScrollTop = this.$node.scrollTop(); - nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10); - if (elTop < 0) { - this.$node.scrollTop(nodeScrollTop + elTop); - } else if (nodeHeight < elBottom) { - this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight)); - } - }, - bind: function() { - var that = this, onSelectableClick; - onSelectableClick = _.bind(this._onSelectableClick, this); - this.$node.on("click.tt", this.selectors.selectable, onSelectableClick); - this.$node.on("mouseover", this.selectors.selectable, function() { - that.setCursor($(this)); - }); - this.$node.on("mouseleave", function() { - that._removeCursor(); - }); - _.each(this.datasets, function(dataset) { - dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that); - }); - return this; - }, - isOpen: function isOpen() { - return this.$node.hasClass(this.classes.open); - }, - open: function open() { - this.$node.scrollTop(0); - this.$node.addClass(this.classes.open); - }, - close: function close() { - this.$node.attr("aria-expanded", false); - this.$node.removeClass(this.classes.open); - this._removeCursor(); - }, - setLanguageDirection: function setLanguageDirection(dir) { - this.$node.attr("dir", dir); - }, - selectableRelativeToCursor: function selectableRelativeToCursor(delta) { - var $selectables, $oldCursor, oldIndex, newIndex; - $oldCursor = this.getActiveSelectable(); - $selectables = this._getSelectables(); - oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1; - newIndex = oldIndex + delta; - newIndex = (newIndex + 1) % ($selectables.length + 1) - 1; - newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex; - return newIndex === -1 ? null : $selectables.eq(newIndex); - }, - setCursor: function setCursor($selectable) { - this._removeCursor(); - if ($selectable = $selectable && $selectable.first()) { - $selectable.addClass(this.classes.cursor); - this._ensureVisible($selectable); - } - }, - getSelectableData: function getSelectableData($el) { - return $el && $el.length ? Dataset.extractData($el) : null; - }, - getActiveSelectable: function getActiveSelectable() { - var $selectable = this._getSelectables().filter(this.selectors.cursor).first(); - return $selectable.length ? $selectable : null; - }, - getTopSelectable: function getTopSelectable() { - var $selectable = this._getSelectables().first(); - return $selectable.length ? $selectable : null; - }, - update: function update(query) { - var isValidUpdate = query !== this.query; - if (isValidUpdate) { - this.query = query; - _.each(this.datasets, updateDataset); - } - return isValidUpdate; - function updateDataset(dataset) { - dataset.update(query); - } - }, - empty: function empty() { - _.each(this.datasets, clearDataset); - this.query = null; - this.$node.addClass(this.classes.empty); - function clearDataset(dataset) { - dataset.clear(); - } - }, - destroy: function destroy() { - this.$node.off(".tt"); - this.$node = $("
"); - _.each(this.datasets, destroyDataset); - function destroyDataset(dataset) { - dataset.destroy(); - } - } - }); - return Menu; - }(); - var Status = function() { - "use strict"; - function Status(options) { - this.$el = $("", { - role: "status", - "aria-live": "polite" - }).css({ - position: "absolute", - padding: "0", - border: "0", - height: "1px", - width: "1px", - "margin-bottom": "-1px", - "margin-right": "-1px", - overflow: "hidden", - clip: "rect(0 0 0 0)", - "white-space": "nowrap" - }); - options.$input.after(this.$el); - _.each(options.menu.datasets, _.bind(function(dataset) { - if (dataset.onSync) { - dataset.onSync("rendered", _.bind(this.update, this)); - dataset.onSync("cleared", _.bind(this.cleared, this)); - } - }, this)); - } - _.mixin(Status.prototype, { - update: function update(event, suggestions) { - var length = suggestions.length; - var words; - if (length === 1) { - words = { - result: "result", - is: "is" - }; - } else { - words = { - result: "results", - is: "are" - }; - } - this.$el.text(length + " " + words.result + " " + words.is + " available, use up and down arrow keys to navigate."); - }, - cleared: function() { - this.$el.text(""); - } - }); - return Status; - }(); - var DefaultMenu = function() { - "use strict"; - var s = Menu.prototype; - function DefaultMenu() { - Menu.apply(this, [].slice.call(arguments, 0)); - } - _.mixin(DefaultMenu.prototype, Menu.prototype, { - open: function open() { - !this._allDatasetsEmpty() && this._show(); - return s.open.apply(this, [].slice.call(arguments, 0)); - }, - close: function close() { - this._hide(); - return s.close.apply(this, [].slice.call(arguments, 0)); - }, - _onRendered: function onRendered() { - if (this._allDatasetsEmpty()) { - this._hide(); - } else { - this.isOpen() && this._show(); - } - return s._onRendered.apply(this, [].slice.call(arguments, 0)); - }, - _onCleared: function onCleared() { - if (this._allDatasetsEmpty()) { - this._hide(); - } else { - this.isOpen() && this._show(); - } - return s._onCleared.apply(this, [].slice.call(arguments, 0)); - }, - setLanguageDirection: function setLanguageDirection(dir) { - this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl); - return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0)); - }, - _hide: function hide() { - this.$node.hide(); - }, - _show: function show() { - this.$node.css("display", "block"); - } - }); - return DefaultMenu; - }(); - var Typeahead = function() { - "use strict"; - function Typeahead(o, www) { - var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged; - o = o || {}; - if (!o.input) { - $.error("missing input"); - } - if (!o.menu) { - $.error("missing menu"); - } - if (!o.eventBus) { - $.error("missing event bus"); - } - www.mixin(this); - this.eventBus = o.eventBus; - this.minLength = _.isNumber(o.minLength) ? o.minLength : 1; - this.input = o.input; - this.menu = o.menu; - this.enabled = true; - this.autoselect = !!o.autoselect; - this.active = false; - this.input.hasFocus() && this.activate(); - this.dir = this.input.getLangDir(); - this._hacks(); - this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this); - onFocused = c(this, "activate", "open", "_onFocused"); - onBlurred = c(this, "deactivate", "_onBlurred"); - onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed"); - onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed"); - onEscKeyed = c(this, "isActive", "_onEscKeyed"); - onUpKeyed = c(this, "isActive", "open", "_onUpKeyed"); - onDownKeyed = c(this, "isActive", "open", "_onDownKeyed"); - onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed"); - onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed"); - onQueryChanged = c(this, "_openIfActive", "_onQueryChanged"); - onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged"); - this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this); - } - _.mixin(Typeahead.prototype, { - _hacks: function hacks() { - var $input, $menu; - $input = this.input.$input || $("
"); - $menu = this.menu.$node || $("
"); - $input.on("blur.tt", function($e) { - var active, isActive, hasActive; - active = document.activeElement; - isActive = $menu.is(active); - hasActive = $menu.has(active).length > 0; - if (_.isMsie() && (isActive || hasActive)) { - $e.preventDefault(); - $e.stopImmediatePropagation(); - _.defer(function() { - $input.focus(); - }); - } - }); - $menu.on("mousedown.tt", function($e) { - $e.preventDefault(); - }); - }, - _onSelectableClicked: function onSelectableClicked(type, $el) { - this.select($el); - }, - _onDatasetCleared: function onDatasetCleared() { - this._updateHint(); - }, - _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) { - this._updateHint(); - if (this.autoselect) { - var cursorClass = this.selectors.cursor.substr(1); - this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass); - } - this.eventBus.trigger("render", suggestions, async, dataset); - }, - _onAsyncRequested: function onAsyncRequested(type, dataset, query) { - this.eventBus.trigger("asyncrequest", query, dataset); - }, - _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) { - this.eventBus.trigger("asynccancel", query, dataset); - }, - _onAsyncReceived: function onAsyncReceived(type, dataset, query) { - this.eventBus.trigger("asyncreceive", query, dataset); - }, - _onFocused: function onFocused() { - this._minLengthMet() && this.menu.update(this.input.getQuery()); - }, - _onBlurred: function onBlurred() { - if (this.input.hasQueryChangedSinceLastFocus()) { - this.eventBus.trigger("change", this.input.getQuery()); - } - }, - _onEnterKeyed: function onEnterKeyed(type, $e) { - var $selectable; - if ($selectable = this.menu.getActiveSelectable()) { - if (this.select($selectable)) { - $e.preventDefault(); - $e.stopPropagation(); - } - } else if (this.autoselect) { - if (this.select(this.menu.getTopSelectable())) { - $e.preventDefault(); - $e.stopPropagation(); - } - } - }, - _onTabKeyed: function onTabKeyed(type, $e) { - var $selectable; - if ($selectable = this.menu.getActiveSelectable()) { - this.select($selectable) && $e.preventDefault(); - } else if (this.autoselect) { - if ($selectable = this.menu.getTopSelectable()) { - this.autocomplete($selectable) && $e.preventDefault(); - } - } - }, - _onEscKeyed: function onEscKeyed() { - this.close(); - }, - _onUpKeyed: function onUpKeyed() { - this.moveCursor(-1); - }, - _onDownKeyed: function onDownKeyed() { - this.moveCursor(+1); - }, - _onLeftKeyed: function onLeftKeyed() { - if (this.dir === "rtl" && this.input.isCursorAtEnd()) { - this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); - } - }, - _onRightKeyed: function onRightKeyed() { - if (this.dir === "ltr" && this.input.isCursorAtEnd()) { - this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); - } - }, - _onQueryChanged: function onQueryChanged(e, query) { - this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty(); - }, - _onWhitespaceChanged: function onWhitespaceChanged() { - this._updateHint(); - }, - _onLangDirChanged: function onLangDirChanged(e, dir) { - if (this.dir !== dir) { - this.dir = dir; - this.menu.setLanguageDirection(dir); - } - }, - _openIfActive: function openIfActive() { - this.isActive() && this.open(); - }, - _minLengthMet: function minLengthMet(query) { - query = _.isString(query) ? query : this.input.getQuery() || ""; - return query.length >= this.minLength; - }, - _updateHint: function updateHint() { - var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match; - $selectable = this.menu.getTopSelectable(); - data = this.menu.getSelectableData($selectable); - val = this.input.getInputValue(); - if (data && !_.isBlankString(val) && !this.input.hasOverflow()) { - query = Input.normalizeQuery(val); - escapedQuery = _.escapeRegExChars(query); - frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i"); - match = frontMatchRegEx.exec(data.val); - match && this.input.setHint(val + match[1]); - } else { - this.input.clearHint(); - } - }, - isEnabled: function isEnabled() { - return this.enabled; - }, - enable: function enable() { - this.enabled = true; - }, - disable: function disable() { - this.enabled = false; - }, - isActive: function isActive() { - return this.active; - }, - activate: function activate() { - if (this.isActive()) { - return true; - } else if (!this.isEnabled() || this.eventBus.before("active")) { - return false; - } else { - this.active = true; - this.eventBus.trigger("active"); - return true; - } - }, - deactivate: function deactivate() { - if (!this.isActive()) { - return true; - } else if (this.eventBus.before("idle")) { - return false; - } else { - this.active = false; - this.close(); - this.eventBus.trigger("idle"); - return true; - } - }, - isOpen: function isOpen() { - return this.menu.isOpen(); - }, - open: function open() { - if (!this.isOpen() && !this.eventBus.before("open")) { - this.input.setAriaExpanded(true); - this.menu.open(); - this._updateHint(); - this.eventBus.trigger("open"); - } - return this.isOpen(); - }, - close: function close() { - if (this.isOpen() && !this.eventBus.before("close")) { - this.input.setAriaExpanded(false); - this.menu.close(); - this.input.clearHint(); - this.input.resetInputValue(); - this.eventBus.trigger("close"); - } - return !this.isOpen(); - }, - setVal: function setVal(val) { - this.input.setQuery(_.toStr(val)); - }, - getVal: function getVal() { - return this.input.getQuery(); - }, - select: function select($selectable) { - var data = this.menu.getSelectableData($selectable); - if (data && !this.eventBus.before("select", data.obj, data.dataset)) { - this.input.setQuery(data.val, true); - this.eventBus.trigger("select", data.obj, data.dataset); - this.close(); - return true; - } - return false; - }, - autocomplete: function autocomplete($selectable) { - var query, data, isValid; - query = this.input.getQuery(); - data = this.menu.getSelectableData($selectable); - isValid = data && query !== data.val; - if (isValid && !this.eventBus.before("autocomplete", data.obj, data.dataset)) { - this.input.setQuery(data.val); - this.eventBus.trigger("autocomplete", data.obj, data.dataset); - return true; - } - return false; - }, - moveCursor: function moveCursor(delta) { - var query, $candidate, data, suggestion, datasetName, cancelMove, id; - query = this.input.getQuery(); - $candidate = this.menu.selectableRelativeToCursor(delta); - data = this.menu.getSelectableData($candidate); - suggestion = data ? data.obj : null; - datasetName = data ? data.dataset : null; - id = $candidate ? $candidate.attr("id") : null; - this.input.trigger("cursorchange", id); - cancelMove = this._minLengthMet() && this.menu.update(query); - if (!cancelMove && !this.eventBus.before("cursorchange", suggestion, datasetName)) { - this.menu.setCursor($candidate); - if (data) { - if (typeof data.val === "string") { - this.input.setInputValue(data.val); - } - } else { - this.input.resetInputValue(); - this._updateHint(); - } - this.eventBus.trigger("cursorchange", suggestion, datasetName); - return true; - } - return false; - }, - destroy: function destroy() { - this.input.destroy(); - this.menu.destroy(); - } - }); - return Typeahead; - function c(ctx) { - var methods = [].slice.call(arguments, 1); - return function() { - var args = [].slice.call(arguments); - _.each(methods, function(method) { - return ctx[method].apply(ctx, args); - }); - }; - } - }(); - (function() { - "use strict"; - var old, keys, methods; - old = $.fn.typeahead; - keys = { - www: "tt-www", - attrs: "tt-attrs", - typeahead: "tt-typeahead" - }; - methods = { - initialize: function initialize(o, datasets) { - var www; - datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1); - o = o || {}; - www = WWW(o.classNames); - return this.each(attach); - function attach() { - var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor; - _.each(datasets, function(d) { - d.highlight = !!o.highlight; - }); - $input = $(this); - $wrapper = $(www.html.wrapper); - $hint = $elOrNull(o.hint); - $menu = $elOrNull(o.menu); - defaultHint = o.hint !== false && !$hint; - defaultMenu = o.menu !== false && !$menu; - defaultHint && ($hint = buildHintFromInput($input, www)); - defaultMenu && ($menu = $(www.html.menu).css(www.css.menu)); - $hint && $hint.val(""); - $input = prepInput($input, www); - if (defaultHint || defaultMenu) { - $wrapper.css(www.css.wrapper); - $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint); - $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null); - } - MenuConstructor = defaultMenu ? DefaultMenu : Menu; - eventBus = new EventBus({ - el: $input - }); - input = new Input({ - hint: $hint, - input: $input, - menu: $menu - }, www); - menu = new MenuConstructor({ - node: $menu, - datasets: datasets - }, www); - status = new Status({ - $input: $input, - menu: menu - }); - typeahead = new Typeahead({ - input: input, - menu: menu, - eventBus: eventBus, - minLength: o.minLength, - autoselect: o.autoselect - }, www); - $input.data(keys.www, www); - $input.data(keys.typeahead, typeahead); - } - }, - isEnabled: function isEnabled() { - var enabled; - ttEach(this.first(), function(t) { - enabled = t.isEnabled(); - }); - return enabled; - }, - enable: function enable() { - ttEach(this, function(t) { - t.enable(); - }); - return this; - }, - disable: function disable() { - ttEach(this, function(t) { - t.disable(); - }); - return this; - }, - isActive: function isActive() { - var active; - ttEach(this.first(), function(t) { - active = t.isActive(); - }); - return active; - }, - activate: function activate() { - ttEach(this, function(t) { - t.activate(); - }); - return this; - }, - deactivate: function deactivate() { - ttEach(this, function(t) { - t.deactivate(); - }); - return this; - }, - isOpen: function isOpen() { - var open; - ttEach(this.first(), function(t) { - open = t.isOpen(); - }); - return open; - }, - open: function open() { - ttEach(this, function(t) { - t.open(); - }); - return this; - }, - close: function close() { - ttEach(this, function(t) { - t.close(); - }); - return this; - }, - select: function select(el) { - var success = false, $el = $(el); - ttEach(this.first(), function(t) { - success = t.select($el); - }); - return success; - }, - autocomplete: function autocomplete(el) { - var success = false, $el = $(el); - ttEach(this.first(), function(t) { - success = t.autocomplete($el); - }); - return success; - }, - moveCursor: function moveCursoe(delta) { - var success = false; - ttEach(this.first(), function(t) { - success = t.moveCursor(delta); - }); - return success; - }, - val: function val(newVal) { - var query; - if (!arguments.length) { - ttEach(this.first(), function(t) { - query = t.getVal(); - }); - return query; - } else { - ttEach(this, function(t) { - t.setVal(_.toStr(newVal)); - }); - return this; - } - }, - destroy: function destroy() { - ttEach(this, function(typeahead, $input) { - revert($input); - typeahead.destroy(); - }); - return this; - } - }; - $.fn.typeahead = function(method) { - if (methods[method]) { - return methods[method].apply(this, [].slice.call(arguments, 1)); - } else { - return methods.initialize.apply(this, arguments); - } - }; - $.fn.typeahead.noConflict = function noConflict() { - $.fn.typeahead = old; - return this; - }; - function ttEach($els, fn) { - $els.each(function() { - var $input = $(this), typeahead; - (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input); - }); - } - function buildHintFromInput($input, www) { - return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({ - readonly: true, - required: false - }).removeAttr("id name placeholder").removeClass("required").attr({ - spellcheck: "false", - tabindex: -1 - }); - } - function prepInput($input, www) { - $input.data(keys.attrs, { - dir: $input.attr("dir"), - autocomplete: $input.attr("autocomplete"), - spellcheck: $input.attr("spellcheck"), - style: $input.attr("style") - }); - $input.addClass(www.classes.input).attr({ - spellcheck: false - }); - try { - !$input.attr("dir") && $input.attr("dir", "auto"); - } catch (e) {} - return $input; - } - function getBackgroundStyles($el) { - return { - backgroundAttachment: $el.css("background-attachment"), - backgroundClip: $el.css("background-clip"), - backgroundColor: $el.css("background-color"), - backgroundImage: $el.css("background-image"), - backgroundOrigin: $el.css("background-origin"), - backgroundPosition: $el.css("background-position"), - backgroundRepeat: $el.css("background-repeat"), - backgroundSize: $el.css("background-size") - }; - } - function revert($input) { - var www, $wrapper; - www = $input.data(keys.www); - $wrapper = $input.parent().filter(www.selectors.wrapper); - _.each($input.data(keys.attrs), function(val, key) { - _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); - }); - $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input); - if ($wrapper.length) { - $input.detach().insertAfter($wrapper); - $wrapper.remove(); - } - } - function $elOrNull(obj) { - var isValid, $el; - isValid = _.isJQuery(obj) || _.isElement(obj); - $el = isValid ? $(obj).first() : []; - return $el.length ? $el : null; - } - })(); -}); \ No newline at end of file diff --git a/docs/docsets/Nimble.docset/Contents/Resources/Documents/search.json b/docs/docsets/Nimble.docset/Contents/Resources/Documents/search.json deleted file mode 100644 index 1d2ba21a7..000000000 --- a/docs/docsets/Nimble.docset/Contents/Resources/Documents/search.json +++ /dev/null @@ -1 +0,0 @@ -{"Typealiases.html#/s:6Nimble14AsyncPredicatea":{"name":"AsyncPredicate","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Typealiases.html#/s:6Nimble9Predicatea":{"name":"Predicate","abstract":"\u003cp\u003eProvides an easy upgrade path for custom Matchers to be renamed to Matchers\u003c/p\u003e"},"Typealiases.html#/s:6Nimble15PredicateResulta":{"name":"PredicateResult","abstract":"\u003cp\u003eProvides an easy upgrade path for custom Matchers to be renamed to Matchers\u003c/p\u003e"},"Typealiases.html#/s:6Nimble15PredicateStatusa":{"name":"PredicateStatus","abstract":"\u003cp\u003eProvides an easy upgrade path for custom Matchers to be renamed to Matchers\u003c/p\u003e"},"Typealiases.html#/s:6Nimble12MatcherBlocka":{"name":"MatcherBlock","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Typealiases.html#/s:6Nimble14PredicateBlocka":{"name":"PredicateBlock","abstract":"\u003cp\u003eProvides an easy upgrade path for custom Matchers to be renamed to Matchers\u003c/p\u003e"},"Typealiases.html#/s:6Nimble12NMBPredicatea":{"name":"NMBPredicate","abstract":"\u003cp\u003eProvides an easy upgrade path for custom Matchers to be renamed to Matchers\u003c/p\u003e"},"Typealiases.html#/s:6Nimble18NMBPredicateResulta":{"name":"NMBPredicateResult","abstract":"\u003cp\u003eProvides an easy upgrade path for custom Matchers to be renamed to Matchers\u003c/p\u003e"},"Typealiases.html#/s:6Nimble18NMBPredicateStatusa":{"name":"NMBPredicateStatus","abstract":"\u003cp\u003eProvides an easy upgrade path for custom Matchers to be renamed to Matchers\u003c/p\u003e"},"Typealiases.html#/FileString":{"name":"FileString"},"Typealiases.html#/s:6Nimble10FileStringa":{"name":"FileString","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Structs/RequireError.html#/s:10Foundation13CustomNSErrorP13errorUserInfoSDySSypGvp":{"name":"errorUserInfo","parent_name":"RequireError"},"Structs/PollingDefaults.html#/s:6Nimble15PollingDefaultsV7timeoutAA0A12TimeIntervalOvpZ":{"name":"timeout","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"PollingDefaults"},"Structs/PollingDefaults.html#/s:6Nimble15PollingDefaultsV12pollIntervalAA0a4TimeE0OvpZ":{"name":"pollInterval","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"PollingDefaults"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV10expressionAA0B10ExpressionVyxGvp":{"name":"expression","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV11customErrors0E0_pSgvp":{"name":"customError","abstract":"\u003cp\u003eA custom error to throw.","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV10expression11customErrorACyxGAA0B10ExpressionVyxG_s0F0_pSgtcfc":{"name":"init(expression:customError:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV6verifyyxSb_AA14FailureMessageCxSgtKF":{"name":"verify(_:_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV2to_11descriptionxAA7MatcherVyxG_SSSgtYaKF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV5toNot_11descriptionxAA7MatcherVyxG_SSSgtYaKF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV5notTo_11descriptionxAA7MatcherVyxG_SSSgtYaKF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV2to_11descriptionxAA0B7MatcherVyxG_SSSgtYaKF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV5toNot_11descriptionxAA0B7MatcherVyxG_SSSgtYaKF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV5notTo_11descriptionxAA0B7MatcherVyxG_SSSgtYaKF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV12toEventually_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV15toEventuallyNot_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV15toNotEventually_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV7toNever_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV7neverTo_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV8toAlways_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV8alwaysTo_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV12toEventually_7timeout12pollInterval11descriptionxAA0B7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV15toEventuallyNot_7timeout12pollInterval11descriptionxAA0B7MatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV15toNotEventually_7timeout12pollInterval11descriptionxAA0B7MatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV7toNever_5until12pollInterval11descriptionxAA0B7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV7neverTo_5until12pollInterval11descriptionxAA0B7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV8toAlways_5until12pollInterval11descriptionxAA0B7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV8alwaysTo_5until12pollInterval11descriptionxAA0B7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV10expressionAA10ExpressionVyxGvp":{"name":"expression","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV11customErrors0E0_pSgvp":{"name":"customError","abstract":"\u003cp\u003eA custom error to throw.","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV10expression11customErrorACyxGAA10ExpressionVyxG_s0F0_pSgtcfc":{"name":"init(expression:customError:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV6verifyyxSb_AA14FailureMessageCxSgtKF":{"name":"verify(_:_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV2to_11descriptionxAA7MatcherVyxG_SSSgtKF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV5toNot_11descriptionxAA7MatcherVyxG_SSSgtKF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV5notTo_11descriptionxAA7MatcherVyxG_SSSgtKF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV2to_11descriptionxAA12AsyncMatcherVyxG_SSSgtYaKF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV5toNot_11descriptionxAA12AsyncMatcherVyxG_SSSgtYaKF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV5notTo_11descriptionxAA12AsyncMatcherVyxG_SSSgtYaKF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV12toEventually_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtKF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eRequire the actual value using a matcher to match by checking continuously","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV15toEventuallyNot_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeI0OALSSSgtKF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV15toNotEventually_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeI0OALSSSgtKF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV7toNever_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtKF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV7neverTo_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtKF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV8toAlways_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtKF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV8alwaysTo_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtKF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV12toEventually_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV15toEventuallyNot_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV15toNotEventually_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV7toNever_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV7neverTo_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV8toAlways_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV8alwaysTo_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV12toEventually_7timeout12pollInterval11descriptionxAA12AsyncMatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV15toEventuallyNot_7timeout12pollInterval11descriptionxAA12AsyncMatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV15toNotEventually_7timeout12pollInterval11descriptionxAA12AsyncMatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV7toNever_5until12pollInterval11descriptionxAA12AsyncMatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV7neverTo_5until12pollInterval11descriptionxAA12AsyncMatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV8toAlways_5until12pollInterval11descriptionxAA12AsyncMatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV8alwaysTo_5until12pollInterval11descriptionxAA12AsyncMatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncRequirement"},"Structs/MatcherResult.html#/s:6Nimble13MatcherResultV6statusAA0B6StatusOvp":{"name":"status","abstract":"\u003cp\u003eStatus indicates if the matcher matches, does not match, or fails.\u003c/p\u003e","parent_name":"MatcherResult"},"Structs/MatcherResult.html#/s:6Nimble13MatcherResultV7messageAA18ExpectationMessageOvp":{"name":"message","abstract":"\u003cp\u003eThe error message that can be displayed if it does not match\u003c/p\u003e","parent_name":"MatcherResult"},"Structs/MatcherResult.html#/s:6Nimble13MatcherResultV6status7messageAcA0B6StatusO_AA18ExpectationMessageOtcfc":{"name":"init(status:message:)","abstract":"\u003cp\u003eConstructs a new MatcherResult with a given status and error message\u003c/p\u003e","parent_name":"MatcherResult"},"Structs/MatcherResult.html#/s:6Nimble13MatcherResultV4bool7messageACSb_AA18ExpectationMessageOtcfc":{"name":"init(bool:message:)","abstract":"\u003cp\u003eShorthand to MatcherResult(status: MatcherStatus(bool: bool), message: message)\u003c/p\u003e","parent_name":"MatcherResult"},"Structs/MatcherResult.html#/s:6Nimble13MatcherResultV9toBoolean11expectationSbAA16ExpectationStyleO_tF":{"name":"toBoolean(expectation:)","abstract":"\u003cp\u003eConverts the result to a boolean based on what the expectation intended\u003c/p\u003e","parent_name":"MatcherResult"},"Structs/MatcherResult.html#/s:6Nimble13MatcherResultV12toObjectiveCAA010NMBMatcherC0CyF":{"name":"toObjectiveC()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"MatcherResult"},"Structs/ExpectationNil.html#/s:s23ExpressibleByNilLiteralP03nilD0xyt_tcfc":{"name":"init(nilLiteral:)","parent_name":"ExpectationNil"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherVyACyxGAA0C6ResultVAA0B10ExpressionVyxGYaKccfc":{"name":"init(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncMatcher"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherV9satisfiesyAA0C6ResultVAA0B10ExpressionVyxGYaKF":{"name":"satisfies(_:)","abstract":"\u003cp\u003eUses a matcher on a given value to see if it passes the matcher.\u003c/p\u003e","parent_name":"AsyncMatcher"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherV6define7matcherACyxGAA0C6ResultVAA0B10ExpressionVyxGYaKc_tFZ":{"name":"define(matcher:)","abstract":"\u003cp\u003eLike Matcher() constructor, but automatically guard against nil (actual) values\u003c/p\u003e","parent_name":"AsyncMatcher"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherV6define_7matcherACyxGSS_AA0C6ResultVAA0B10ExpressionVyxG_AA18ExpectationMessageOtYaKctFZ":{"name":"define(_:matcher:)","abstract":"\u003cp\u003eDefines a matcher with a default message that can be returned in the closure","parent_name":"AsyncMatcher"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherV13defineNilable_7matcherACyxGSS_AA0C6ResultVAA0B10ExpressionVyxG_AA18ExpectationMessageOtYaKctFZ":{"name":"defineNilable(_:matcher:)","abstract":"\u003cp\u003eDefines a matcher with a default message that can be returned in the closure","parent_name":"AsyncMatcher"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherV6simple_7matcherACyxGSS_AA0C6StatusOAA0B10ExpressionVyxGYaKctFZ":{"name":"simple(_:matcher:)","abstract":"\u003cp\u003eProvides a simple matcher definition that provides no control over the predefined","parent_name":"AsyncMatcher"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherV13simpleNilable_7matcherACyxGSS_AA0C6StatusOAA0B10ExpressionVyxGYaKctFZ":{"name":"simpleNilable(_:matcher:)","abstract":"\u003cp\u003eProvides a simple matcher definition that provides no control over the predefined","parent_name":"AsyncMatcher"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherV13requireNonNilACyxGvp":{"name":"requireNonNil","abstract":"\u003cp\u003eReturns a new Matcher based on the current one that always fails if nil is given as","parent_name":"AsyncMatcher"},"Structs/Matcher.html#/s:6Nimble7MatcherVyACyxGAA0B6ResultVAA10ExpressionVyxGKccfc":{"name":"init(_:)","abstract":"\u003cp\u003eConstructs a matcher that knows how take a given value\u003c/p\u003e","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV9satisfiesyAA0B6ResultVAA10ExpressionVyxGKF":{"name":"satisfies(_:)","abstract":"\u003cp\u003eUses a matcher on a given value to see if it passes the matcher.\u003c/p\u003e","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV9satisfiesyAA0B6ResultVAA15AsyncExpressionVyxGYaKF":{"name":"satisfies(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV6define7matcherACyxGAA0B6ResultVAA10ExpressionVyxGKc_tFZ":{"name":"define(matcher:)","abstract":"\u003cp\u003eLike Matcher() constructor, but automatically guard against nil (actual) values\u003c/p\u003e","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV6define_7matcherACyxGSS_AA0B6ResultVAA10ExpressionVyxG_AA18ExpectationMessageOtKctFZ":{"name":"define(_:matcher:)","abstract":"\u003cp\u003eDefines a matcher with a default message that can be returned in the closure","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV13defineNilable_7matcherACyxGSS_AA0B6ResultVAA10ExpressionVyxG_AA18ExpectationMessageOtKctFZ":{"name":"defineNilable(_:matcher:)","abstract":"\u003cp\u003eDefines a matcher with a default message that can be returned in the closure","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV6simple_7matcherACyxGSS_AA0B6StatusOAA10ExpressionVyxGKctFZ":{"name":"simple(_:matcher:)","abstract":"\u003cp\u003eProvides a simple matcher definition that provides no control over the predefined","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV13simpleNilable_7matcherACyxGSS_AA0B6StatusOAA10ExpressionVyxGKctFZ":{"name":"simpleNilable(_:matcher:)","abstract":"\u003cp\u003eProvides a simple matcher definition that provides no control over the predefined","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV13requireNonNilACyxGvp":{"name":"requireNonNil","abstract":"\u003cp\u003eReturns a new Matcher based on the current one that always fails if nil is given as","parent_name":"Matcher"},"Structs/Expression.html#/s:6Nimble10ExpressionV8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV9isClosureSbvp":{"name":"isClosure","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV10expression8location9isClosureACyxGxSgyKc_AA14SourceLocationCSbtcfc":{"name":"init(expression:location:isClosure:)","abstract":"\u003cp\u003eCreates a new expression struct. Normally, expect(\u0026hellip;) will manage this","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV08memoizedB08location14withoutCaching9isClosureACyxGxSgSbKc_AA14SourceLocationCS2btcfc":{"name":"init(memoizedExpression:location:withoutCaching:isClosure:)","abstract":"\u003cp\u003eCreates a new expression struct. Normally, expect(\u0026hellip;) will manage this","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV4castyACyqd__Gqd__SgxSgKclF":{"name":"cast(_:)","abstract":"\u003cp\u003eReturns a new Expression from the given expression. Identical to a map()","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV8evaluatexSgyKF":{"name":"evaluate()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV14withoutCachingACyxGyF":{"name":"withoutCaching()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV11withCachingACyxGyF":{"name":"withCaching()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV07toAsyncB0AA0dB0VyxGyF":{"name":"toAsyncExpression()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Expression"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV10expressionAA0B10ExpressionVyxGvp":{"name":"expression","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV6statusAA0C6StatusOvp":{"name":"status","abstract":"\u003cp\u003eThe status of the test after matchers have been evaluated.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV10expressionACyxGAA0B10ExpressionVyxG_tcfc":{"name":"init(expression:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV6verifyyACyxGSb_AA14FailureMessageCtF":{"name":"verify(_:_:)","abstract":"\u003cp\u003eTakes the result of a test and passes it to the assertion handler.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV2to_11descriptionACyxGAA7MatcherVyxG_SSSgtYaF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV5toNot_11descriptionACyxGAA7MatcherVyxG_SSSgtYaF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV5notTo_11descriptionACyxGAA7MatcherVyxG_SSSgtYaF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV2to_11descriptionACyxGAA0B7MatcherVyxG_SSSgtYaF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV5toNot_11descriptionACyxGAA0B7MatcherVyxG_SSSgtYaF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV5notTo_11descriptionACyxGAA0B7MatcherVyxG_SSSgtYaF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV2eeoiyyACyxG_AA0C3NilVtYaFZ":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV2neoiyyACyxG_AA0C3NilVtYaFZ":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV12toEventually_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV15toEventuallyNot_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV15toNotEventually_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV7toNever_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV7neverTo_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV8toAlways_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV8alwaysTo_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV12toEventually_7timeout12pollInterval11descriptionACyxGAA0B7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV15toEventuallyNot_7timeout12pollInterval11descriptionACyxGAA0B7MatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV15toNotEventually_7timeout12pollInterval11descriptionACyxGAA0B7MatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV7toNever_5until12pollInterval11descriptionACyxGAA0B7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV7neverTo_5until12pollInterval11descriptionACyxGAA0B7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV8toAlways_5until12pollInterval11descriptionACyxGAA0B7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV8alwaysTo_5until12pollInterval11descriptionACyxGAA0B7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV10expressionAA10ExpressionVyxGvp":{"name":"expression","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV6statusAA0C6StatusOvp":{"name":"status","abstract":"\u003cp\u003eThe status of the test after matchers have been evaluated.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV10expressionACyxGAA10ExpressionVyxG_tcfc":{"name":"init(expression:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV6verifyyACyxGSb_AA14FailureMessageCtF":{"name":"verify(_:_:)","abstract":"\u003cp\u003eTakes the result of a test and passes it to the assertion handler.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV2to_11descriptionACyxGAA7MatcherVyxG_SSSgtF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV5toNot_11descriptionACyxGAA7MatcherVyxG_SSSgtF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV5notTo_11descriptionACyxGAA7MatcherVyxG_SSSgtF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV2to_11descriptionACyxGAA12AsyncMatcherVyxG_SSSgtYaF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV5toNot_11descriptionACyxGAA12AsyncMatcherVyxG_SSSgtYaF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV5notTo_11descriptionACyxGAA12AsyncMatcherVyxG_SSSgtYaF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV2eeoiyyACyxG_AA0C3NilVtFZ":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV2neoiyyACyxG_AA0C3NilVtFZ":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV12toEventually_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV15toEventuallyNot_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV15toNotEventually_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV7toNever_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV7neverTo_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV8toAlways_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV8alwaysTo_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV12toEventually_7timeout12pollInterval11descriptionACyxGAA12AsyncMatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV15toEventuallyNot_7timeout12pollInterval11descriptionACyxGAA12AsyncMatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV15toNotEventually_7timeout12pollInterval11descriptionACyxGAA12AsyncMatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV7toNever_5until12pollInterval11descriptionACyxGAA12AsyncMatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV7neverTo_5until12pollInterval11descriptionACyxGAA12AsyncMatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV8toAlways_5until12pollInterval11descriptionACyxGAA12AsyncMatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV8alwaysTo_5until12pollInterval11descriptionACyxGAA12AsyncMatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV12toEventually_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV15toEventuallyNot_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeI0OAMSSSgtF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV15toNotEventually_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeI0OAMSSSgtF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV7toNever_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV7neverTo_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV8toAlways_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV8alwaysTo_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncExpectation"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV9isClosureSbvp":{"name":"isClosure","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV10expression8location9isClosureACyxGxSgyYaKc_AA14SourceLocationCSbtcfc":{"name":"init(expression:location:isClosure:)","abstract":"\u003cp\u003eCreates a new expression struct. Normally, expect(\u0026hellip;) will manage this","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV08memoizedC08location14withoutCaching9isClosureACyxGxSgSbYaKc_AA14SourceLocationCS2btcfc":{"name":"init(memoizedExpression:location:withoutCaching:isClosure:)","abstract":"\u003cp\u003eCreates a new expression struct. Normally, expect(\u0026hellip;) will manage this","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV013toSynchronousC0AA0C0VyxGyYaF":{"name":"toSynchronousExpression()","abstract":"\u003cp\u003eCreates a new synchronous expression, for use in Matchers.\u003c/p\u003e","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV4castyACyqd__Gqd__SgxSgKclF":{"name":"cast(_:)","abstract":"\u003cp\u003eReturns a new Expression from the given expression. Identical to a map()","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV4castyACyqd__Gqd__SgxSgYaKclF":{"name":"cast(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV8evaluatexSgyYaKF":{"name":"evaluate()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV14withoutCachingACyxGyF":{"name":"withoutCaching()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV11withCachingACyxGyF":{"name":"withCaching()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpression"},"Structs/AssertionRecord.html#/s:6Nimble15AssertionRecordV7successSbvp":{"name":"success","abstract":"\u003cp\u003eWhether the assertion succeeded or failed\u003c/p\u003e","parent_name":"AssertionRecord"},"Structs/AssertionRecord.html#/s:6Nimble15AssertionRecordV7messageAA14FailureMessageCvp":{"name":"message","abstract":"\u003cp\u003eThe failure message the assertion would display on failure.\u003c/p\u003e","parent_name":"AssertionRecord"},"Structs/AssertionRecord.html#/s:6Nimble15AssertionRecordV8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eThe source location the expectation occurred on.\u003c/p\u003e","parent_name":"AssertionRecord"},"Structs/AssertionRecord.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"AssertionRecord"},"Structs/AssertionRecord.html":{"name":"AssertionRecord","abstract":"\u003cp\u003eA data structure that stores information about an assertion when"},"Structs/AsyncExpression.html":{"name":"AsyncExpression","abstract":"\u003cp\u003eExpression represents the closure of the value inside expect(\u0026hellip;)."},"Structs/SyncExpectation.html":{"name":"SyncExpectation","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Structs/AsyncExpectation.html":{"name":"AsyncExpectation","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Structs/Expression.html":{"name":"Expression","abstract":"\u003cp\u003eExpression represents the closure of the value inside expect(\u0026hellip;)."},"Structs/Matcher.html":{"name":"Matcher","abstract":"\u003cp\u003eA Matcher is part of the new matcher API that provides assertions to expectations.\u003c/p\u003e"},"Structs/AsyncMatcher.html":{"name":"AsyncMatcher","abstract":"\u003cp\u003eAn AsyncMatcher is part of the new matcher API that provides assertions to expectations.\u003c/p\u003e"},"Structs/ExpectationNil.html":{"name":"ExpectationNil","abstract":"\u003cp\u003eRepresents \u003ccode\u003enil\u003c/code\u003e value to be used with the operator overloads for \u003ccode\u003ebeNil\u003c/code\u003e.\u003c/p\u003e"},"Structs/MatcherResult.html":{"name":"MatcherResult","abstract":"\u003cp\u003eThe value that a Matcher returns to describe if the given (actual) value matches the"},"Structs/SyncRequirement.html":{"name":"SyncRequirement","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Structs/AsyncRequirement.html":{"name":"AsyncRequirement","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Structs/PollingDefaults.html":{"name":"PollingDefaults","abstract":"\u003cp\u003eIf you are running on a slower machine, it could be useful to increase the default timeout value"},"Structs/RequireError.html":{"name":"RequireError","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Protocols/TestOutputStringConvertible.html#/s:6Nimble27TestOutputStringConvertibleP15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"TestOutputStringConvertible"},"Protocols/NMBComparable.html#/c:@M@Nimble@objc(pl)NMBComparable(im)NMB_compare:":{"name":"NMB_compare(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBComparable"},"Protocols/NMBDoubleConvertible.html#/s:6Nimble20NMBDoubleConvertibleP11doubleValueSdvp":{"name":"doubleValue","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBDoubleConvertible"},"Protocols/NMBOrderedCollection.html#/s:6Nimble20NMBOrderedCollectionP6object2atypSi_tF":{"name":"object(at:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBOrderedCollection"},"Protocols/NMBCollection.html#/s:6Nimble13NMBCollectionP5countSivp":{"name":"count","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBCollection"},"Protocols/NMBContainer.html#/s:6Nimble12NMBContainerP8containsySbypF":{"name":"contains(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBContainer"},"Protocols/AsyncableMatcher.html#/s:6Nimble16AsyncableMatcherP5ValueQa":{"name":"Value","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncableMatcher"},"Protocols/AsyncableMatcher.html#/s:6Nimble16AsyncableMatcherP9satisfiesyAA0C6ResultVAA15AsyncExpressionVy5ValueQzGYaKF":{"name":"satisfies(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncableMatcher"},"Protocols/Expectation.html#/s:6Nimble11ExpectationP8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Expectation"},"Protocols/Expectation.html#/s:6Nimble11ExpectationP6statusAA0B6StatusOvp":{"name":"status","abstract":"\u003cp\u003eThe status of the test after matchers have been evaluated.\u003c/p\u003e","parent_name":"Expectation"},"Protocols/Expectation.html#/s:6Nimble11ExpectationP6verifyyxSb_AA14FailureMessageCtF":{"name":"verify(_:_:)","abstract":"\u003cp\u003eTakes the result of a test and passes it to the assertion handler.\u003c/p\u003e","parent_name":"Expectation"},"Protocols/Expectation.html#/s:6Nimble11ExpectationPAAE9onFailure5throwys5Error_p_tKF":{"name":"onFailure(throw:)","abstract":"\u003cp\u003eThrows the supplied error if the expectation has previously failed.\u003c/p\u003e","parent_name":"Expectation"},"Protocols/AssertionHandler.html#/s:6Nimble16AssertionHandlerP6assert_7message8locationySb_AA14FailureMessageCAA14SourceLocationCtF":{"name":"assert(_:message:location:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AssertionHandler"},"Protocols/AssertionHandler.html":{"name":"AssertionHandler","abstract":"\u003cp\u003eProtocol for the assertion handler that Nimble uses for all expectations.\u003c/p\u003e"},"Protocols/Expectation.html":{"name":"Expectation","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Protocols/AsyncableMatcher.html":{"name":"AsyncableMatcher","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Protocols/NMBContainer.html":{"name":"NMBContainer","abstract":"\u003cp\u003eProtocol for types that support contain() matcher.\u003c/p\u003e"},"Protocols/NMBCollection.html":{"name":"NMBCollection","abstract":"\u003cp\u003eProtocol for types that support only beEmpty(), haveCount() matchers\u003c/p\u003e"},"Protocols/NMBOrderedCollection.html":{"name":"NMBOrderedCollection","abstract":"\u003cp\u003eProtocol for types that support beginWith(), endWith(), beEmpty() matchers\u003c/p\u003e"},"Protocols/NMBDoubleConvertible.html":{"name":"NMBDoubleConvertible","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Protocols/NMBComparable.html":{"name":"NMBComparable","abstract":"\u003cp\u003eProtocol for types to support beLessThan(), beLessThanOrEqualTo(),"},"Protocols/TestOutputStringConvertible.html":{"name":"TestOutputStringConvertible","abstract":"\u003cp\u003eA type with a customized test output text representation.\u003c/p\u003e"},"Functions.html#/s:6Nimble20withAssertionHandler_4file4line7closureyAA0cD0_p_SSSuyyYaKXEtYaF":{"name":"withAssertionHandler(_:file:line:closure:)","abstract":"\u003cp\u003eAllows you to temporarily replace the current Nimble assertion handler with"},"Functions.html#/s:6Nimble18gatherExpectations8silently7closureSayAA15AssertionRecordVGSb_yyYaXEtYaF":{"name":"gatherExpectations(silently:closure:)","abstract":"\u003cp\u003eCaptures expectations that occur in the given closure. Note that all"},"Functions.html#/s:6Nimble25gatherFailingExpectations8silently7closureSayAA15AssertionRecordVGSb_yyYaXEtYaF":{"name":"gatherFailingExpectations(silently:closure:)","abstract":"\u003cp\u003eCaptures failed expectations that occur in the given closure. Note that all"},"Functions.html#/s:6Nimble20withAssertionHandler_4file4line7closureyAA0cD0_p_SSSuyyKXEtF":{"name":"withAssertionHandler(_:file:line:closure:)","abstract":"\u003cp\u003eAllows you to temporarily replace the current Nimble assertion handler with"},"Functions.html#/s:6Nimble18gatherExpectations8silently7closureSayAA15AssertionRecordVGSb_yyXEtF":{"name":"gatherExpectations(silently:closure:)","abstract":"\u003cp\u003eCaptures expectations that occur in the given closure. Note that all"},"Functions.html#/s:6Nimble25gatherFailingExpectations8silently7closureSayAA15AssertionRecordVGSb_yyXEtF":{"name":"gatherFailingExpectations(silently:closure:)","abstract":"\u003cp\u003eCaptures failed expectations that occur in the given closure. Note that all"},"Functions.html#/s:6Nimble13recordFailure_8locationySS_AA14SourceLocationCtF":{"name":"recordFailure(_:location:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA16AsyncExpectationVyxGSS_SuxSgyYaKctlF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated.\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA16AsyncExpectationVyxGSS_SuxyYaKcyXEtlF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA16AsyncExpectationVyxGSS_SuxSgyYaKcyXEtlF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA16AsyncExpectationVyytGSS_SuyyYaKcyXEtF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble7expecta4file4line_AA16AsyncExpectationVyxGSS_SuxSgyYaKXAtYalF":{"name":"expecta(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated."},"Functions.html#/s:6Nimble7expecta4file4line_AA16AsyncExpectationVyxGSS_SuxyYaKcyXKtYalF":{"name":"expecta(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked."},"Functions.html#/s:6Nimble7expecta4file4line_AA16AsyncExpectationVyxGSS_SuxSgyYaKcyXKtYalF":{"name":"expecta(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked."},"Functions.html#/s:6Nimble7expecta4file4line_AA16AsyncExpectationVyytGSS_SuyyYaKcyXKtYaF":{"name":"expecta(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked."},"Functions.html#/s:6Nimble9waitUntil7timeout4file4line6actionyAA0A12TimeIntervalO_SSSuyyycYactYaF":{"name":"waitUntil(timeout:file:line:action:)","abstract":"\u003cp\u003eWait asynchronously until the done closure is called or the timeout has been reached.\u003c/p\u003e"},"Functions.html#/s:6Nimble9waitUntil7timeout4file4line6actionyAA0A12TimeIntervalO_SSSuyyycctYaF":{"name":"waitUntil(timeout:file:line:action:)","abstract":"\u003cp\u003eWait asynchronously until the done closure is called or the timeout has been reached.\u003c/p\u003e"},"Functions.html#/s:6Nimble7require4file4line11customError_AA15SyncRequirementVyxGSS_Sus0F0_pSgxSgyKXAtlF":{"name":"require(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated.\u003c/p\u003e"},"Functions.html#/s:6Nimble7require4file4line11customError_AA15SyncRequirementVyxGSS_Sus0F0_pSgxyKcyXKtlF":{"name":"require(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble7require4file4line11customError_AA15SyncRequirementVyxGSS_Sus0F0_pSgxSgyKcyXKtlF":{"name":"require(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble7require4file4line11customError_AA15SyncRequirementVyytGSS_Sus0F0_pSgyyKcyXKtF":{"name":"require(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble8requires4file4line11customError_AA15SyncRequirementVyxGSS_Sus0F0_pSgxSgyKXAtlF":{"name":"requires(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated.\u003c/p\u003e"},"Functions.html#/s:6Nimble8requires4file4line11customError_AA15SyncRequirementVyxGSS_Sus0F0_pSgxyKcyXKtlF":{"name":"requires(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble8requires4file4line11customError_AA15SyncRequirementVyxGSS_Sus0F0_pSgxSgyKcyXKtlF":{"name":"requires(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble8requires4file4line11customError_AA15SyncRequirementVyytGSS_Sus0F0_pSgyyKcyXKtF":{"name":"requires(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble7require4file4line11customError_AA16AsyncRequirementVyxGSS_Sus0F0_pSgxSgyYaKctlF":{"name":"require(file:line:customError:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncRequirement.html\"\u003eAsyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated.\u003c/p\u003e"},"Functions.html#/s:6Nimble7require4file4line11customError_AA16AsyncRequirementVyxGSS_Sus0F0_pSgxyYaKcyXEtlF":{"name":"require(file:line:customError:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncRequirement.html\"\u003eAsyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble7require4file4line11customError_AA16AsyncRequirementVyxGSS_Sus0F0_pSgxSgyYaKcyXEtlF":{"name":"require(file:line:customError:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncRequirement.html\"\u003eAsyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble8requirea4file4line11customError_AA16AsyncRequirementVyxGSS_Sus0F0_pSgxSgyYaKXAtYalF":{"name":"requirea(file:line:customError:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncRequirement.html\"\u003eAsyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated.\u003c/p\u003e"},"Functions.html#/s:6Nimble8requirea4file4line11customError_AA16AsyncRequirementVyxGSS_Sus0F0_pSgxyYaKcyXKtYalF":{"name":"requirea(file:line:customError:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncRequirement.html\"\u003eAsyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble8requirea4file4line11customError_AA16AsyncRequirementVyxGSS_Sus0F0_pSgxSgyYaKcyXKtYalF":{"name":"requirea(file:line:customError:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncRequirement.html\"\u003eAsyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble6unwrap4file4line11customError_xSS_Sus0F0_pSgxSgyKXAtKlF":{"name":"unwrap(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble6unwrap4file4line11customError_xSS_Sus0F0_pSgxSgyKcyXKtKlF":{"name":"unwrap(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble7unwraps4file4line11customError_xSS_Sus0F0_pSgxSgyKXAtKlF":{"name":"unwraps(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble7unwraps4file4line11customError_xSS_Sus0F0_pSgxSgyKcyXKtKlF":{"name":"unwraps(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble6unwrap4file4line11customError_xSS_Sus0F0_pSgxSgyYaKctYaKlF":{"name":"unwrap(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble6unwrap4file4line11customError_xSS_Sus0F0_pSgxSgyYaKcyXEtYaKlF":{"name":"unwrap(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble7unwrapa4file4line11customError_xSS_Sus0F0_pSgxSgyYaKXAtYaKlF":{"name":"unwrapa(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble7unwrapa4file4line11customError_xSS_Sus0F0_pSgxSgyYaKcyXKtYaKlF":{"name":"unwrapa(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble9waitUntil7timeout4file4line6actionyAA0A12TimeIntervalO_SSSuyyycctF":{"name":"waitUntil(timeout:file:line:action:)","abstract":"\u003cp\u003eWait asynchronously until the done closure is called or the timeout has been reached.\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA15SyncExpectationVyxGSS_SuxSgyKXAtlF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated.\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA15SyncExpectationVyxGSS_SuxyKcyXKtlF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA15SyncExpectationVyxGSS_SuxSgyKcyXKtlF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA15SyncExpectationVyytGSS_SuyyKcyXKtF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble7expects4file4line_AA15SyncExpectationVyxGSS_SuxSgyKXAtlF":{"name":"expects(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated."},"Functions.html#/s:6Nimble7expects4file4line_AA15SyncExpectationVyxGSS_SuxyKcyXKtlF":{"name":"expects(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked."},"Functions.html#/s:6Nimble7expects4file4line_AA15SyncExpectationVyxGSS_SuxSgyKcyXKtlF":{"name":"expects(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked."},"Functions.html#/s:6Nimble7expects4file4line_AA15SyncExpectationVyytGSS_SuyyKcyXKtF":{"name":"expects(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked."},"Functions.html#/s:6Nimble4fail_8locationySS_AA14SourceLocationCtF":{"name":"fail(_:location:)","abstract":"\u003cp\u003eAlways fails the test with a message and a specified location.\u003c/p\u003e"},"Functions.html#/s:6Nimble4fail_4file4lineySS_SSSutF":{"name":"fail(_:file:line:)","abstract":"\u003cp\u003eAlways fails the test with a message.\u003c/p\u003e"},"Functions.html#/s:6Nimble4fail_4lineySS_SutF":{"name":"fail(_:line:)","abstract":"\u003cp\u003eAlways fails the test.\u003c/p\u003e"},"Functions.html#/s:6Nimble7allPassyAA7MatcherVyxGSb7ElementQzKcSTRzlF":{"name":"allPass(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7allPassyAA7MatcherVyxGSS_Sb7ElementQzKctSTRzlF":{"name":"allPass(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7allPassyAA7MatcherVyxGADy7ElementQzGSTRzlF":{"name":"allPass(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7allPassyAA12AsyncMatcherVyxGSb7ElementQzYaKcSTRzlF":{"name":"allPass(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7allPassyAA12AsyncMatcherVyxGSS_Sb7ElementQzYaKctSTRzlF":{"name":"allPass(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7allPassyAA12AsyncMatcherVyxGADy7ElementQzGSTRzlF":{"name":"allPass(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble9beAKindOfyAA7MatcherVyypGxmlF":{"name":"beAKindOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is an instance of the given class.\u003c/p\u003e"},"Functions.html#/s:6Nimble9beAKindOfyAA7MatcherVySo8NSObjectCGyXlXpF":{"name":"beAKindOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is an instance of the given class."},"Functions.html#/s:6Nimble14beAnInstanceOfyAA7MatcherVyypGxmlF":{"name":"beAnInstanceOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is an \u003cem\u003eexact\u003c/em\u003e instance of the given class.\u003c/p\u003e"},"Functions.html#/s:6Nimble14beAnInstanceOfyAA7MatcherVySo8NSObjectCGyXlXpF":{"name":"beAnInstanceOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is an instance of the given class."},"Functions.html#/s:6Nimble12defaultDeltaxySFRzlF":{"name":"defaultDelta()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble9beCloseTo_6withinAA7MatcherVyxGx_xtSFRzlF":{"name":"beCloseTo(_:within:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is close to another. This is used for floating"},"Functions.html#/s:6Nimble9beCloseTo_6withinAA7MatcherVyxGx_SdtAA20NMBDoubleConvertibleRzlF":{"name":"beCloseTo(_:within:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is close to another. This is used for floating"},"Functions.html#/s:6Nimble9beCloseTo_6withinAA7MatcherVyq_Gq__xtSFRz7ElementQy_RszSlR_r0_lF":{"name":"beCloseTo(_:within:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA15SyncExpectationVyxG_xtSlRzSF7ElementRpzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA16AsyncExpectationVyxG_xtYaSlRzSF7ElementRpzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA15SyncExpectationVyxG_xtSFRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA16AsyncExpectationVyxG_xtYaSFRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA15SyncExpectationVyxG_x8expected_x5deltattSFRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA16AsyncExpectationVyxG_x8expected_x5deltattYaSFRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyxG_x8expected_x5deltattSFRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyxG_x8expected_x5deltattYaSFRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA15SyncExpectationVyxG_xtAA20NMBDoubleConvertibleRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA16AsyncExpectationVyxG_xtYaAA20NMBDoubleConvertibleRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA15SyncExpectationVyxG_x8expected_Sd5deltattAA20NMBDoubleConvertibleRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA16AsyncExpectationVyxG_x8expected_Sd5deltattYaAA20NMBDoubleConvertibleRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyxG_x8expected_Sd5deltattAA20NMBDoubleConvertibleRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyxG_x8expected_Sd5deltattYaAA20NMBDoubleConvertibleRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003obaoiyx8expected_x5deltatx_xtSFRzlF":{"name":"±(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003obaoiyx8expected_Sd5deltatx_SdtAA20NMBDoubleConvertibleRzlF":{"name":"±(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVyxGySTRzlF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVyxGys10SetAlgebraRzlF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVyxGySTRzs10SetAlgebraRzlF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVySSGyF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVySo8NSStringCGyF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVySo12NSDictionaryCGyF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVySo7NSArrayCGyF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVyAA13NMBCollection_pGyF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble13beGreaterThanyAA7MatcherVyxGxSgSLRzlF":{"name":"beGreaterThan(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is greater than the expected value.\u003c/p\u003e"},"Functions.html#/s:6Nimble1goiyyAA15SyncExpectationVyxG_xtSLRzlF":{"name":"\u003e(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble1goiyyAA16AsyncExpectationVyxG_xtYaSLRzlF":{"name":"\u003e(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble13beGreaterThanyAA7MatcherVyxGxSgAA13NMBComparableRzlF":{"name":"beGreaterThan(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is greater than the expected value.\u003c/p\u003e"},"Functions.html#/s:6Nimble1goiyyAA15SyncExpectationVyxG_xSgtAA13NMBComparableRzlF":{"name":"\u003e(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble1goiyyAA16AsyncExpectationVyxG_xSgtYaAA13NMBComparableRzlF":{"name":"\u003e(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble22beGreaterThanOrEqualToyAA7MatcherVyxGxSgSLRzlF":{"name":"beGreaterThanOrEqualTo(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is greater than"},"Functions.html#/s:6Nimble2geoiyyAA15SyncExpectationVyxG_xtSLRzlF":{"name":"\u003e=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2geoiyyAA16AsyncExpectationVyxG_xtYaSLRzlF":{"name":"\u003e=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble22beGreaterThanOrEqualToyAA7MatcherVyxGxSgAA13NMBComparableRzlF":{"name":"beGreaterThanOrEqualTo(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is greater than"},"Functions.html#/s:6Nimble2geoiyyAA15SyncExpectationVyxG_xtAA13NMBComparableRzlF":{"name":"\u003e=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2geoiyyAA16AsyncExpectationVyxG_xtYaAA13NMBComparableRzlF":{"name":"\u003e=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble13beIdenticalToyAA7MatcherVyyXlGyXlSgF":{"name":"beIdenticalTo(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is the same instance"},"Functions.html#/s:6Nimble3eeeoiyyAA15SyncExpectationVyyXlG_yXlSgtF":{"name":"===(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble3eeeoiyyAA16AsyncExpectationVyyXlG_yXlSgtYaF":{"name":"===(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble3neeoiyyAA15SyncExpectationVyyXlG_yXlSgtF":{"name":"!==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble3neeoiyyAA16AsyncExpectationVyyXlG_yXlSgtYaF":{"name":"!==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2beyAA7MatcherVyyXlGyXlSgF":{"name":"be(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is the same instance"},"Functions.html#/s:6Nimble10beLessThanyAA7MatcherVyxGxSgSLRzlF":{"name":"beLessThan(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is less than the expected value.\u003c/p\u003e"},"Functions.html#/s:6Nimble1loiyyAA15SyncExpectationVyxG_xtSLRzlF":{"name":"\u003c(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble1loiyyAA16AsyncExpectationVyxG_xtYaSLRzlF":{"name":"\u003c(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble10beLessThanyAA7MatcherVyxGxSgAA13NMBComparableRzlF":{"name":"beLessThan(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is less than the expected value.\u003c/p\u003e"},"Functions.html#/s:6Nimble1loiyyAA15SyncExpectationVyxG_xSgtAA13NMBComparableRzlF":{"name":"\u003c(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble1loiyyAA16AsyncExpectationVyxG_xSgtYaAA13NMBComparableRzlF":{"name":"\u003c(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble19beLessThanOrEqualToyAA7MatcherVyxGxSgSLRzlF":{"name":"beLessThanOrEqualTo(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is less than"},"Functions.html#/s:6Nimble2leoiyyAA15SyncExpectationVyxG_xtSLRzlF":{"name":"\u003c=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2leoiyyAA16AsyncExpectationVyxG_xtYaSLRzlF":{"name":"\u003c=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble19beLessThanOrEqualToyAA7MatcherVyxGxSgAA13NMBComparableRzlF":{"name":"beLessThanOrEqualTo(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is less than"},"Functions.html#/s:6Nimble2leoiyyAA15SyncExpectationVyxG_xtAA13NMBComparableRzlF":{"name":"\u003c=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2leoiyyAA16AsyncExpectationVyxG_xtYaAA13NMBComparableRzlF":{"name":"\u003c=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble6beTrueAA7MatcherVySbGyF":{"name":"beTrue()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is exactly true."},"Functions.html#/s:6Nimble7beFalseAA7MatcherVySbGyF":{"name":"beFalse()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is exactly false."},"Functions.html#/s:6Nimble8beTruthyAA7MatcherVyxGySQRzs27ExpressibleByBooleanLiteralRzlF":{"name":"beTruthy()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is not logically false.\u003c/p\u003e"},"Functions.html#/s:6Nimble7beFalsyAA7MatcherVyxGySQRzs27ExpressibleByBooleanLiteralRzlF":{"name":"beFalsy()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is logically false."},"Functions.html#/s:6Nimble5beNilAA7MatcherVyxGylF":{"name":"beNil()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is nil.\u003c/p\u003e"},"Functions.html#/s:6Nimble9beSuccess4testAA7MatcherVys6ResultOyxq_GGyxcSg_ts5ErrorR_r0_lF":{"name":"beSuccess(test:)","abstract":"\u003cp\u003eA Nimble matcher for Result that succeeds when the actual value is success.\u003c/p\u003e"},"Functions.html#/s:6Nimble9beFailure4testAA7MatcherVys6ResultOyxq_GGyq_cSg_ts5ErrorR_r0_lF":{"name":"beFailure(test:)","abstract":"\u003cp\u003eA Nimble matcher for Result that succeeds when the actual value is failure.\u003c/p\u003e"},"Functions.html#/s:6Nimble6beVoidAA7MatcherVyytGyF":{"name":"beVoid()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is Void.\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyytG_yttF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyytG_yttYaF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyytG_yttF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyytG_yttYaF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble8beWithinyAA7MatcherVyxGSnyxGSLRzlF":{"name":"beWithin(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is within given range.\u003c/p\u003e"},"Functions.html#/s:6Nimble8beWithinyAA7MatcherVyxGSNyxGSLRzlF":{"name":"beWithin(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is within given range.\u003c/p\u003e"},"Functions.html#/s:6Nimble9beginWithyAA7MatcherVyxG7ElementQzSTRzSQAGRQlF":{"name":"beginWith(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual sequence\u0026rsquo;s first element"},"Functions.html#/s:6Nimble9beginWithyAA7MatcherVyAA20NMBOrderedCollection_pGypF":{"name":"beginWith(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual collection\u0026rsquo;s first element"},"Functions.html#/s:6Nimble9beginWithyAA7MatcherVySSGSSF":{"name":"beginWith(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual string contains expected substring"},"Functions.html#/s:6Nimble9beginWith6prefixAA7MatcherVyxGq_Sg_tSTRzSTR_SQ7ElementRpzAHQy_AIRSr0_lF":{"name":"beginWith(prefix:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the exepected sequence is a prefix of the actual sequence.\u003c/p\u003e"},"Functions.html#/s:6Nimble9beginWith6prefix2byAA7MatcherVyxGq_Sg_Sb7ElementQz_AIQy_tctSTRzSTR_r0_lF":{"name":"beginWith(prefix:by:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the expected sequence is the prefix of the actual sequence, using the given matcher as the equivalence test.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyxG7ElementQzd_tSTRzSQAGRQlF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual sequence contains the expected values.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyxGSay7ElementQzGSTRzSQAGRQlF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual sequence contains the expected values.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyxG7ElementQzd_ts10SetAlgebraRzSQAGRQlF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set contains the expected values.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyxGSay7ElementQzGs10SetAlgebraRzSQAGRQlF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set contains the expected values.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyxG7ElementSTQzd_tSTRzs10SetAlgebraRzSQAGRQlF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set contains the expected values.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyxGSay7ElementSTQzGSTRzs10SetAlgebraRzSQAGRQlF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set contains the expected values.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVySSGSSd_tF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual string contains the expected substring.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVySSGSaySSGF":{"name":"contain(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVySo8NSStringCGAFd_tF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual string contains the expected substring.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVySo8NSStringCGSayAFGF":{"name":"contain(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyAA12NMBContainer_pGypSgd_tF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual collection contains the expected object.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyAA12NMBContainer_pGSayypSgGF":{"name":"contain(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble24containElementSatisfyingyAA7MatcherVyxGSb0C0Qzc_SStSTRzlF":{"name":"containElementSatisfying(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble24containElementSatisfyingyAA12AsyncMatcherVyxGSb0C0QzYac_SStSTRzlF":{"name":"containElementSatisfying(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble13elementsEqualyAA7MatcherVyxGq_SgSTRzSTR_SQ7ElementRpzAGQy_AHRSr0_lF":{"name":"elementsEqual(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual sequence and the exepected sequence contain the same elements in"},"Functions.html#/s:6Nimble13elementsEqual_2byAA7MatcherVyxGq_Sg_Sb7ElementQz_AHQy_tctSTRzSTR_r0_lF":{"name":"elementsEqual(_:by:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual sequence and the exepected sequence contain equivalent elements in"},"Functions.html#/s:6Nimble7endWithyAA7MatcherVyxG7ElementQzSTRzSQAGRQlF":{"name":"endWith(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual sequence\u0026rsquo;s last element"},"Functions.html#/s:6Nimble7endWithyAA7MatcherVyAA20NMBOrderedCollection_pGypF":{"name":"endWith(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual collection\u0026rsquo;s last element"},"Functions.html#/s:6Nimble7endWithyAA7MatcherVySSGSSF":{"name":"endWith(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual string contains the expected substring"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyx_q_tGx_q_tSgSQRzSQR_r0_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual tuple is equal to the expected tuple."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyx_q_tG_x_q_tSgtSQRzSQR_r0_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyx_q_tG_x_q_tSgtYaSQRzSQR_r0_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyx_q_tG_x_q_tSgtSQRzSQR_r0_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyx_q_tG_x_q_tSgtYaSQRzSQR_r0_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyx_q_q0_tGx_q_q0_tSgSQRzSQR_SQR0_r1_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual tuple is equal to the expected tuple."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyx_q_q0_tG_x_q_q0_tSgtSQRzSQR_SQR0_r1_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyx_q_q0_tG_x_q_q0_tSgtYaSQRzSQR_SQR0_r1_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyx_q_q0_tG_x_q_q0_tSgtSQRzSQR_SQR0_r1_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyx_q_q0_tG_x_q_q0_tSgtYaSQRzSQR_SQR0_r1_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyx_q_q0_q1_tGx_q_q0_q1_tSgSQRzSQR_SQR0_SQR1_r2_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual tuple is equal to the expected tuple."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyx_q_q0_q1_tG_x_q_q0_q1_tSgtSQRzSQR_SQR0_SQR1_r2_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyx_q_q0_q1_tG_x_q_q0_q1_tSgtYaSQRzSQR_SQR0_SQR1_r2_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyx_q_q0_q1_tG_x_q_q0_q1_tSgtSQRzSQR_SQR0_SQR1_r2_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyx_q_q0_q1_tG_x_q_q0_q1_tSgtYaSQRzSQR_SQR0_SQR1_r2_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyx_q_q0_q1_q2_tGx_q_q0_q1_q2_tSgSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual tuple is equal to the expected tuple."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyx_q_q0_q1_q2_tG_x_q_q0_q1_q2_tSgtSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyx_q_q0_q1_q2_tG_x_q_q0_q1_q2_tSgtYaSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyx_q_q0_q1_q2_tG_x_q_q0_q1_q2_tSgtSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyx_q_q0_q1_q2_tG_x_q_q0_q1_q2_tSgtYaSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyx_q_q0_q1_q2_q3_tGx_q_q0_q1_q2_q3_tSgSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual tuple is equal to the expected tuple."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyx_q_q0_q1_q2_q3_tG_x_q_q0_q1_q2_q3_tSgtSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyx_q_q0_q1_q2_q3_tG_x_q_q0_q1_q2_q3_tSgtYaSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyx_q_q0_q1_q2_q3_tG_x_q_q0_q1_q2_q3_tSgtSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyx_q_q0_q1_q2_q3_tG_x_q_q0_q1_q2_q3_tSgtYaSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVySayx_q_tGGAESgSQRzSQR_r0_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVySayx_q_tGG_AESgtSQRzSQR_r0_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVySayx_q_tGG_AESgtYaSQRzSQR_r0_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVySayx_q_tGG_AESgtSQRzSQR_r0_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVySayx_q_tGG_AESgtYaSQRzSQR_r0_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVySayx_q_q0_tGGAESgSQRzSQR_SQR0_r1_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVySayx_q_q0_tGG_AESgtSQRzSQR_SQR0_r1_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVySayx_q_q0_tGG_AESgtYaSQRzSQR_SQR0_r1_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVySayx_q_q0_tGG_AESgtSQRzSQR_SQR0_r1_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVySayx_q_q0_tGG_AESgtYaSQRzSQR_SQR0_r1_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVySayx_q_q0_q1_tGGAESgSQRzSQR_SQR0_SQR1_r2_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVySayx_q_q0_q1_tGG_AESgtSQRzSQR_SQR0_SQR1_r2_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVySayx_q_q0_q1_tGG_AESgtYaSQRzSQR_SQR0_SQR1_r2_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVySayx_q_q0_q1_tGG_AESgtSQRzSQR_SQR0_SQR1_r2_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVySayx_q_q0_q1_tGG_AESgtYaSQRzSQR_SQR0_SQR1_r2_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVySayx_q_q0_q1_q2_tGGAESgSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVySayx_q_q0_q1_q2_tGG_AESgtSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVySayx_q_q0_q1_q2_tGG_AESgtYaSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVySayx_q_q0_q1_q2_tGG_AESgtSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVySayx_q_q0_q1_q2_tGG_AESgtYaSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVySayx_q_q0_q1_q2_q3_tGGAESgSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVySayx_q_q0_q1_q2_q3_tGG_AESgtSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVySayx_q_q0_q1_q2_q3_tGG_AESgtYaSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVySayx_q_q0_q1_q2_q3_tGG_AESgtSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVySayx_q_q0_q1_q2_q3_tGG_AESgtYaSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyxGxSQRzlF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is equal to the expected value."},"Functions.html#/s:6Nimble5equalyAA7MatcherVySayxSgGGAFSQRzlF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher allowing comparison of collection with optional type\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyxGxSgSQRzlF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is equal to the expected value."},"Functions.html#/s:6Nimble5equalyAA7MatcherVyShyxGGAESHRzlF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set is equal to the expected set.\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyShyxGGAESgSHRzlF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set is equal to the expected set.\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyShyxGGAESLRzSHRzlF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set is equal to the expected set.\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyShyxGGAESgSLRzSHRzlF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set is equal to the expected set.\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVySDyxq_GGSDyxq_SgGSHRzSQR_r0_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual dictionary is equal to the expected dictionary\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyxG_xtSQRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyxG_xSgtSQRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyxG_xtSQRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyxG_xSgtSQRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVySayxGG_AESgtSQRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVySayxGG_AESgtSQRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyShyxGG_AEtSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyShyxGG_AESgtSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyShyxGG_AEtSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyShyxGG_AESgtSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyShyxGG_AEtSLRzSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyShyxGG_AESgtSLRzSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyShyxGG_AEtSLRzSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyShyxGG_AESgtSLRzSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVySDyxq_GG_AESgtSHRzSQR_r0_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVySDyxq_GG_AESgtSHRzSQR_r0_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyxG_xtYaSQRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyxG_xSgtYaSQRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyxG_xtYaSQRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyxG_xSgtYaSQRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVySayxGG_AESgtYaSQRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVySayxGG_AESgtYaSQRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyShyxGG_AEtYaSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyShyxGG_AESgtYaSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyShyxGG_AEtYaSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyShyxGG_AESgtYaSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyShyxGG_AEtYaSLRzSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyShyxGG_AESgtYaSLRzSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyShyxGG_AEtYaSLRzSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyShyxGG_AESgtYaSLRzSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVySDyxq_GG_AESgtYaSHRzSQR_r0_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVySDyxq_GG_AESgtYaSHRzSQR_r0_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble9haveCountyAA7MatcherVyxGSiSlRzlF":{"name":"haveCount(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual Collection\u0026rsquo;s count equals"},"Functions.html#/s:6Nimble9haveCountyAA7MatcherVyAA13NMBCollection_pGSiF":{"name":"haveCount(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual collection\u0026rsquo;s count equals"},"Functions.html#/s:6Nimble3mapyAA7MatcherVyxGq_xKc_ADyq_Gtr0_lF":{"name":"map(_:_:)","abstract":"\u003cp\u003e\u003ccode\u003emap\u003c/code\u003e works by transforming the expression to a value that the given matcher uses.\u003c/p\u003e"},"Functions.html#/s:6Nimble3mapyAA12AsyncMatcherVyxGq_xYaKc_q0_t5ValueQy0_Rs_AA09AsyncableD0R0_r1_lF":{"name":"map(_:_:)","abstract":"\u003cp\u003e\u003ccode\u003emap\u003c/code\u003e works by transforming the expression to a value that the given matcher uses.\u003c/p\u003e"},"Functions.html#/s:6Nimble5matchyAA7MatcherVySSGSSSgF":{"name":"match(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual string satisfies the regular expression"},"Functions.html#/s:6Nimble10matchErroryAA7MatcherVys0C0_pGxsAERzlF":{"name":"matchError(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression evaluates to an"},"Functions.html#/s:6Nimble10matchErroryAA7MatcherVys0C0_pGxSQRzsAERzlF":{"name":"matchError(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression evaluates to an"},"Functions.html#/s:6Nimble10matchErroryAA7MatcherVys0C0_pGxmsAERzlF":{"name":"matchError(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression evaluates to an"},"Functions.html#/s:6Nimble17postNotifications_4fromAA7MatcherVyxGAEySay10Foundation12NotificationVGG_So20NSNotificationCenterCtlF":{"name":"postNotifications(_:from:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble28postDistributedNotifications_4from5namesAA7MatcherVyxGAFySay10Foundation12NotificationVGG_So013NSDistributedI6CenterCShySo18NSNotificationNameaGtlF":{"name":"postDistributedNotifications(_:from:names:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble14raiseException5named6reason8userInfo7closureAA7MatcherVyxGSo15NSExceptionNameaSg_SSSgSo12NSDictionaryCSgySo0J0CcSgtlF":{"name":"raiseException(named:reason:userInfo:closure:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression raises an"},"Functions.html#/s:6Nimble14raiseException5named6reason8userInfo7closureAA7MatcherVyxGSSSg_AJSo12NSDictionaryCSgySo11NSExceptionCcSgtlF":{"name":"raiseException(named:reason:userInfo:closure:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression raises an"},"Functions.html#/s:6Nimble12satisfyAllOfyAA7MatcherVyxGAEd_tlF":{"name":"satisfyAllOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with all of the matchers"},"Functions.html#/s:6Nimble12satisfyAllOfyAA7MatcherVyxGSayAEGlF":{"name":"satisfyAllOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with all of the matchers"},"Functions.html#/s:6Nimble2aaoiyAA7MatcherVyxGAE_AEtlF":{"name":"\u0026\u0026(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble12satisfyAllOfyAA12AsyncMatcherVyxGAA09AsyncableF0_px5ValueRts_XPd_tlF":{"name":"satisfyAllOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with all of the matchers"},"Functions.html#/s:6Nimble12satisfyAllOfyAA12AsyncMatcherVyxGSayAA09AsyncableF0_px5ValueRts_XPGlF":{"name":"satisfyAllOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with all of the matchers"},"Functions.html#/s:6Nimble2aaoiyAA12AsyncMatcherVyxGq__q0_t5ValueQy_RszAA09AsyncableD0R_AaHR0_AFQy0_AGRSr1_lF":{"name":"\u0026\u0026(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble12satisfyAnyOfyAA7MatcherVyxGAEd_tlF":{"name":"satisfyAnyOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with any of the matchers"},"Functions.html#/s:6Nimble12satisfyAnyOfyAA7MatcherVyxGSayAEGlF":{"name":"satisfyAnyOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with any of the matchers"},"Functions.html#/s:6Nimble2oooiyAA7MatcherVyxGAE_AEtlF":{"name":"||(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble12satisfyAnyOfyAA12AsyncMatcherVyxGAA09AsyncableF0_px5ValueRts_XPd_tlF":{"name":"satisfyAnyOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with any of the matchers"},"Functions.html#/s:6Nimble12satisfyAnyOfyAA12AsyncMatcherVyxGSayAA09AsyncableF0_px5ValueRts_XPGlF":{"name":"satisfyAnyOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with any of the matchers"},"Functions.html#/s:6Nimble2oooiyAA12AsyncMatcherVyxGq__q0_t5ValueQy_RszAA09AsyncableD0R_AaHR0_AFQy0_AGRSr1_lF":{"name":"||(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/catchBadInstruction(block:)":{"name":"catchBadInstruction(block:)","abstract":"\u003cp\u003eRun the provided block. If a POSIX SIGILL is received, handle it and return a BadInstructionException (which is just an empty object in this POSIX signal version). Otherwise return nil."},"Functions.html#/s:6Nimble14throwAssertionAA7MatcherVyxGylF":{"name":"throwAssertion()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble10throwErrorAA7MatcherVyxGylF":{"name":"throwError()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression throws an"},"Functions.html#/s:6Nimble10throwError_7closureAA7MatcherVyq_Gx_ys0C0_pcSgtsAGRzr0_lF":{"name":"throwError(_:closure:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression throws an"},"Functions.html#/s:6Nimble10throwError_7closureAA7MatcherVyq_Gx_yxcSgtSQRzs0C0Rzr0_lF":{"name":"throwError(_:closure:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression throws an"},"Functions.html#/s:6Nimble10throwError9errorType7closureAA7MatcherVyq_Gxm_yxcSgts0C0Rzr0_lF":{"name":"throwError(errorType:closure:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression throws an"},"Functions.html#/s:6Nimble10throwError7closureAA7MatcherVyxGys0C0_pc_tlF":{"name":"throwError(closure:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression throws any"},"Functions.html#/s:6Nimble10throwError7closureAA7MatcherVyq_Gyxc_ts0C0Rzr0_lF":{"name":"throwError(closure:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression throws any"},"Functions.html#/s:6Nimble7succeedAA7MatcherVyAA15ToSucceedResultOGyF":{"name":"succeed()","abstract":"\u003cp\u003eA Nimble matcher that takes in a closure for validation.\u003c/p\u003e"},"Functions.html#/s:6Nimble10pollUnwrap4file4line_xSS_SuxSgyKXAtKlF":{"name":"pollUnwrap(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble10pollUnwrap4file4line_xSS_SuxSgyKcyXKtKlF":{"name":"pollUnwrap(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble11pollUnwraps4file4line_xSS_SuxSgyKXAtKlF":{"name":"pollUnwraps(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble11pollUnwraps4file4line_xSS_SuxSgyKcyXKtKlF":{"name":"pollUnwraps(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble10pollUnwrap4file4line_xSS_SuxSgyYaKctYaKlF":{"name":"pollUnwrap(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble10pollUnwrap4file4line_xSS_SuxSgyYaKcyXEtYaKlF":{"name":"pollUnwrap(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble11pollUnwrapa4file4line_xSS_SuxSgyYaKXAtYaKlF":{"name":"pollUnwrapa(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble11pollUnwrapa4file4line_xSS_SuxSgyYaKcyXKtYaKlF":{"name":"pollUnwrapa(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble9stringifyySSxSglF":{"name":"stringify(_:)","abstract":"\u003cp\u003eReturns a string appropriate for displaying in test output"},"Functions.html#/s:6Nimble20prettyCollectionTypeySSxlF":{"name":"prettyCollectionType(_:)","abstract":"\u003cp\u003eAttempts to generate a pretty type string for a given value. If the value is of a Objective-C"},"Functions.html#/s:6Nimble20prettyCollectionTypeySSxSlRzlF":{"name":"prettyCollectionType(_:)","abstract":"\u003cp\u003eReturns the type name for a given collection type. This overload is used by Swift"},"Extensions/Data.html#/s:10Foundation4DataV6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Data"},"Extensions/String.html#/s:SS6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"String"},"Extensions/AnySequence.html#/s:s11AnySequenceV6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AnySequence"},"Extensions/Array.html#/s:Sa6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Array"},"Extensions/TimeInterval.html#/s:Sd6NimbleE14nimbleIntervalAA0a4TimeC0Ovp":{"name":"nimbleInterval","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"TimeInterval"},"Extensions/NSString.html#/c:@CM@Nimble@@objc(cs)NSString(im)NMB_compare:":{"name":"NMB_compare(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NSString"},"Extensions/NSDate.html#/s:So6NSDateC6NimbleE11doubleValueSdvp":{"name":"doubleValue","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NSDate"},"Extensions/NSDate.html#/s:So6NSDateC6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NSDate"},"Extensions/Date.html#/s:10Foundation4DateV6NimbleE11doubleValueSdvp":{"name":"doubleValue","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Date"},"Extensions/Date.html#/s:10Foundation4DateV6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Date"},"Extensions/Date.html#/s:10Foundation4DateV6NimbleE8advanced2byAcD0C12TimeIntervalO_tF":{"name":"advanced(by:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Date"},"Extensions/NSNumber.html#/c:@CM@Nimble@@objc(cs)NSNumber(im)NMB_compare:":{"name":"NMB_compare(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NSNumber"},"Extensions/NSNumber.html#/s:So8NSNumberC6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NSNumber"},"Extensions/NSIndexSet.html#/s:So10NSIndexSetC6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NSIndexSet"},"Extensions/NSArray.html#/s:So7NSArrayC6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NSArray"},"Extensions/UInt.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"UInt"},"Extensions/Int.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"Int"},"Extensions/Double.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"Double"},"Extensions/Double.html#/s:Sd6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Double"},"Extensions/Float.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"Float"},"Extensions/Float.html#/s:Sf6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Float"},"Extensions/UInt64.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"UInt64"},"Extensions/Int64.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"Int64"},"Extensions/UInt32.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"UInt32"},"Extensions/Int32.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"Int32"},"Extensions/UInt16.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"UInt16"},"Extensions/Int16.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"Int16"},"Extensions/UInt8.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"UInt8"},"Extensions/Int8.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"Int8"},"Extensions/Int8.html":{"name":"Int8"},"Extensions/UInt8.html":{"name":"UInt8"},"Extensions/Int16.html":{"name":"Int16"},"Extensions/UInt16.html":{"name":"UInt16"},"Extensions/Int32.html":{"name":"Int32"},"Extensions/UInt32.html":{"name":"UInt32"},"Extensions/Int64.html":{"name":"Int64"},"Extensions/UInt64.html":{"name":"UInt64"},"Extensions/Float.html":{"name":"Float"},"Extensions/Double.html":{"name":"Double"},"Extensions/Int.html":{"name":"Int"},"Extensions/UInt.html":{"name":"UInt"},"Extensions/NSArray.html":{"name":"NSArray"},"Extensions.html#/c:objc(cs)NSSet":{"name":"NSSet"},"Extensions.html#/c:objc(cs)NSHashTable":{"name":"NSHashTable"},"Extensions.html#/c:objc(cs)NSMapTable":{"name":"NSMapTable"},"Extensions/NSIndexSet.html":{"name":"NSIndexSet"},"Extensions.html#/c:objc(cs)NSDictionary":{"name":"NSDictionary"},"Extensions/NSNumber.html":{"name":"NSNumber"},"Extensions/Date.html":{"name":"Date"},"Extensions/NSDate.html":{"name":"NSDate"},"Extensions/NSString.html":{"name":"NSString"},"Extensions/TimeInterval.html":{"name":"TimeInterval"},"Extensions/Array.html":{"name":"Array"},"Extensions/AnySequence.html":{"name":"AnySequence"},"Extensions/String.html":{"name":"String"},"Extensions/Data.html":{"name":"Data"},"Enums/NimbleTimeInterval.html#/s:6Nimble0A12TimeIntervalO7secondsyACSicACmF":{"name":"seconds(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:6Nimble0A12TimeIntervalO12millisecondsyACSicACmF":{"name":"milliseconds(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:6Nimble0A12TimeIntervalO12microsecondsyACSicACmF":{"name":"microseconds(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:6Nimble0A12TimeIntervalO11nanosecondsyACSicACmF":{"name":"nanoseconds(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:SL1loiySbx_xtFZ":{"name":"\u003c(_:_:)","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:6Nimble0A12TimeIntervalO08dispatchbC08Dispatch0ebC0Ovp":{"name":"dispatchTimeInterval","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:6Nimble0A12TimeIntervalO11nanosecondss6UInt64Vvp":{"name":"nanoseconds","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:6Nimble0A12TimeIntervalO04timeC0Sdvp":{"name":"timeInterval","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleTimeInterval"},"Enums/ToSucceedResult.html#/s:6Nimble15ToSucceedResultO9succeededyA2CmF":{"name":"succeeded","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"ToSucceedResult"},"Enums/ToSucceedResult.html#/s:6Nimble15ToSucceedResultO6failedyACSS_tcACmF":{"name":"failed(reason:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"ToSucceedResult"},"Enums/MatcherStatus.html#/s:6Nimble13MatcherStatusO7matchesyA2CmF":{"name":"matches","abstract":"\u003cp\u003eMatches indicates if the matcher / matcher passes with the given value\u003c/p\u003e","parent_name":"MatcherStatus"},"Enums/MatcherStatus.html#/s:6Nimble13MatcherStatusO12doesNotMatchyA2CmF":{"name":"doesNotMatch","abstract":"\u003cp\u003eDoesNotMatch indicates if the matcher fails with the given value, but \u003cem\u003ewould\u003c/em\u003e","parent_name":"MatcherStatus"},"Enums/MatcherStatus.html#/s:6Nimble13MatcherStatusO4failyA2CmF":{"name":"fail","abstract":"\u003cp\u003eFail indicates the matcher will never satisfy with the given value in any case.","parent_name":"MatcherStatus"},"Enums/MatcherStatus.html#/s:6Nimble13MatcherStatusO4boolACSb_tcfc":{"name":"init(bool:)","abstract":"\u003cp\u003eConverts a boolean to either .matches (if true) or .doesNotMatch (if false).\u003c/p\u003e","parent_name":"MatcherStatus"},"Enums/MatcherStatus.html#/s:6Nimble13MatcherStatusO12toObjectiveCAA010NMBMatcherC0CyF":{"name":"toObjectiveC()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"MatcherStatus"},"Enums/ExpectationStyle.html#/s:6Nimble16ExpectationStyleO7toMatchyA2CmF":{"name":"toMatch","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"ExpectationStyle"},"Enums/ExpectationStyle.html#/s:6Nimble16ExpectationStyleO10toNotMatchyA2CmF":{"name":"toNotMatch","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"ExpectationStyle"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO21expectedActualValueToyACSScACmF":{"name":"expectedActualValueTo(_:)","abstract":"\u003cp\u003eincludes actual value in output (\u0026ldquo;expected to \u003cmessage\u003e, got \u003cactual\u003e\u0026rdquo;)\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO21expectedCustomValueToyACSS_SStcACmF":{"name":"expectedCustomValueTo(_:actual:)","abstract":"\u003cp\u003euses a custom actual value string in output (\u0026ldquo;expected to \u003cmessage\u003e, got \u003cactual\u003e\u0026rdquo;)\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO10expectedToyACSScACmF":{"name":"expectedTo(_:)","abstract":"\u003cp\u003eexcludes actual value in output (\u0026ldquo;expected to \u003cmessage\u003e\u0026rdquo;)\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO4failyACSScACmF":{"name":"fail(_:)","abstract":"\u003cp\u003eallows any free-form message (\u0026ldquo;\u003cmessage\u003e\u0026rdquo;)\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO8prependsyACSS_ACtcACmF":{"name":"prepends(_:_:)","abstract":"\u003cp\u003eNot Fully Implemented Yet.\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO7appendsyA2C_SStcACmF":{"name":"appends(_:_:)","abstract":"\u003cp\u003eappends after an existing message (\u0026ldquo;\u003cexpectation\u003e (use beNil() to match nils)\u0026rdquo;)\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO7detailsyA2C_SStcACmF":{"name":"details(_:_:)","abstract":"\u003cp\u003eprovides long-form multi-line explainations (\u0026ldquo;\u003cexpectation\u003e\\n\\n\u003cstring\u003e\u0026rdquo;)\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO08expectedC0SSvp":{"name":"expectedMessage","abstract":"\u003cp\u003eReturns the smallest message after the \u0026ldquo;expected to\u0026rdquo; string that summarizes the error.\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO8appended7messageACSS_tF":{"name":"appended(message:)","abstract":"\u003cp\u003eAppends a message after the primary expectation message\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO17appendedBeNilHintACyF":{"name":"appendedBeNilHint()","abstract":"\u003cp\u003eAppends a message hinting to use beNil() for when the actual value given was nil.\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO8appended7detailsACSS_tF":{"name":"appended(details:)","abstract":"\u003cp\u003eAppends a detailed (aka - multiline) message after the primary expectation message","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO08replacedB0yA3CcF":{"name":"replacedExpectation(_:)","abstract":"\u003cp\u003eReplaces a primary expectation with one returned by f. Preserves all composite expectations","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO07wrappedB06before5afterACSS_SStF":{"name":"wrappedExpectation(before:after:)","abstract":"\u003cp\u003eWraps a primary expectation with text before and after it.","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO9prepended11expectationACSS_tF":{"name":"prepended(expectation:)","abstract":"\u003cp\u003ePrepends a message by modifying the primary expectation\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO8toString6actual8expected0D0S2S_S2StF":{"name":"toString(actual:expected:to:)","abstract":"\u003cp\u003eConverts the tree of ExpectationMessages into a final built string.\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationStatus.html#/s:6Nimble17ExpectationStatusO7pendingyA2CmF":{"name":"pending","abstract":"\u003cp\u003eNo matchers have been performed.\u003c/p\u003e","parent_name":"ExpectationStatus"},"Enums/ExpectationStatus.html#/s:6Nimble17ExpectationStatusO6passedyA2CmF":{"name":"passed","abstract":"\u003cp\u003eAll matchers have passed.\u003c/p\u003e","parent_name":"ExpectationStatus"},"Enums/ExpectationStatus.html#/s:6Nimble17ExpectationStatusO6failedyA2CmF":{"name":"failed","abstract":"\u003cp\u003eAll matchers have failed.\u003c/p\u003e","parent_name":"ExpectationStatus"},"Enums/ExpectationStatus.html#/s:6Nimble17ExpectationStatusO5mixedyA2CmF":{"name":"mixed","abstract":"\u003cp\u003eMultiple matchers have been peformed, with at least one passing and one failing.\u003c/p\u003e","parent_name":"ExpectationStatus"},"Enums/ExpectationStatus.html":{"name":"ExpectationStatus","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Enums/ExpectationMessage.html":{"name":"ExpectationMessage","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Enums/ExpectationStyle.html":{"name":"ExpectationStyle","abstract":"\u003cp\u003eThe Expectation style intended for comparison to a MatcherStatus.\u003c/p\u003e"},"Enums/MatcherStatus.html":{"name":"MatcherStatus","abstract":"\u003cp\u003eMatcherStatus is a trinary that indicates if a Matcher matches a given value or not\u003c/p\u003e"},"Enums/ToSucceedResult.html":{"name":"ToSucceedResult","abstract":"\u003cp\u003eUsed by the \u003ccode\u003esucceed\u003c/code\u003e matcher.\u003c/p\u003e"},"Enums/NimbleTimeInterval.html":{"name":"NimbleTimeInterval","abstract":"\u003cp\u003eA reimplementation of \u003ccode\u003eDispatchTimeInterval\u003c/code\u003e without the \u003ccode\u003enever\u003c/code\u003e case, and conforming to \u003ccode\u003eSendable\u003c/code\u003e.\u003c/p\u003e"},"Global%20Variables.html#/s:6Nimble0A16AssertionHandlerAA0bC0_pvp":{"name":"NimbleAssertionHandler","abstract":"\u003cp\u003eGlobal backing interface for assertions that Nimble creates."},"Global%20Variables.html#/s:6Nimble12DefaultDeltaSdvp":{"name":"DefaultDelta","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/NMBStringer.html#/c:@M@Nimble@objc(cs)NMBStringer(cm)stringify:":{"name":"stringify(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBStringer"},"Classes/SourceLocation.html#/s:6Nimble14SourceLocationC4fileSSvp":{"name":"file","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SourceLocation"},"Classes/SourceLocation.html#/s:6Nimble14SourceLocationC4lineSuvp":{"name":"line","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SourceLocation"},"Classes/SourceLocation.html#/c:@M@Nimble@objc(cs)SourceLocation(py)description":{"name":"description","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SourceLocation"},"Classes/NMBObjCRaiseExceptionMatcher.html#/c:@M@Nimble@objc(cs)NMBObjCRaiseExceptionMatcher(py)named":{"name":"named","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBObjCRaiseExceptionMatcher"},"Classes/NMBObjCRaiseExceptionMatcher.html#/c:@M@Nimble@objc(cs)NMBObjCRaiseExceptionMatcher(py)reason":{"name":"reason","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBObjCRaiseExceptionMatcher"},"Classes/NMBObjCRaiseExceptionMatcher.html#/c:@M@Nimble@objc(cs)NMBObjCRaiseExceptionMatcher(py)userInfo":{"name":"userInfo","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBObjCRaiseExceptionMatcher"},"Classes/NMBObjCRaiseExceptionMatcher.html#/c:@M@Nimble@objc(cs)NMBObjCRaiseExceptionMatcher(py)satisfyingBlock":{"name":"satisfyingBlock","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBObjCRaiseExceptionMatcher"},"Classes/NMBMatcherStatus.html#/s:6Nimble16NMBMatcherStatusC7matchesACvpZ":{"name":"matches","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherStatus.html#/s:6Nimble16NMBMatcherStatusC12doesNotMatchACvpZ":{"name":"doesNotMatch","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherStatus.html#/s:6Nimble16NMBMatcherStatusC4failACvpZ":{"name":"fail","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherStatus.html#/c:@M@Nimble@objc(cs)NMBMatcherStatus(py)hash":{"name":"hash","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherStatus.html#/c:@M@Nimble@objc(cs)NMBMatcherStatus(im)isEqual:":{"name":"isEqual(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherStatus.html#/s:6Nimble16NMBMatcherStatusC4from6statusAcA07MatcherC0O_tFZ":{"name":"from(status:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherStatus.html#/s:6Nimble16NMBMatcherStatusC4from4boolACSb_tFZ":{"name":"from(bool:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherStatus.html#/s:6Nimble16NMBMatcherStatusC7toSwiftAA07MatcherC0OyF":{"name":"toSwift()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherResult.html#/s:6Nimble16NMBMatcherResultC6statusAA0B6StatusCvp":{"name":"status","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherResult"},"Classes/NMBMatcherResult.html#/s:6Nimble16NMBMatcherResultC7messageAA21NMBExpectationMessageCvp":{"name":"message","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherResult"},"Classes/NMBMatcherResult.html#/s:6Nimble16NMBMatcherResultC6status7messageAcA0B6StatusC_AA21NMBExpectationMessageCtcfc":{"name":"init(status:message:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherResult"},"Classes/NMBMatcherResult.html#/s:6Nimble16NMBMatcherResultC4bool7messageACSb_AA21NMBExpectationMessageCtcfc":{"name":"init(bool:message:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherResult"},"Classes/NMBMatcherResult.html#/s:6Nimble16NMBMatcherResultC7toSwiftAA07MatcherC0VyF":{"name":"toSwift()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherResult"},"Classes/NMBObjCBeCloseToMatcher.html#/c:@M@Nimble@objc(cs)NMBObjCBeCloseToMatcher(py)within":{"name":"within","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBObjCBeCloseToMatcher"},"Classes/NMBMatcher.html#/s:6Nimble10NMBMatcherC7matcherAcA0B6ResultCAA10ExpressionVySo8NSObjectCGKc_tcfc":{"name":"init(matcher:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/s:6Nimble10NMBMatcherC9predicateAcA0B6ResultCAA10ExpressionVySo8NSObjectCGKc_tcfc":{"name":"init(predicate:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)allPassMatcher:":{"name":"allPassMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beAKindOfMatcher:":{"name":"beAKindOfMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beAnInstanceOfMatcher:":{"name":"beAnInstanceOfMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beCloseToMatcher:within:":{"name":"beCloseToMatcher(_:within:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beEmptyMatcher":{"name":"beEmptyMatcher()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beGreaterThanMatcher:":{"name":"beGreaterThanMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beGreaterThanOrEqualToMatcher:":{"name":"beGreaterThanOrEqualToMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beIdenticalToMatcher:":{"name":"beIdenticalToMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beLessThanMatcher:":{"name":"beLessThanMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beLessThanOrEqualToMatcher:":{"name":"beLessThanOrEqualToMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beTruthyMatcher":{"name":"beTruthyMatcher()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beFalsyMatcher":{"name":"beFalsyMatcher()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beTrueMatcher":{"name":"beTrueMatcher()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beFalseMatcher":{"name":"beFalseMatcher()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beNilMatcher":{"name":"beNilMatcher()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beginWithMatcher:":{"name":"beginWithMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)containMatcher:":{"name":"containMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)containElementSatisfyingMatcher:":{"name":"containElementSatisfyingMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)endWithMatcher:":{"name":"endWithMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)equalMatcher:":{"name":"equalMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)haveCountMatcher:":{"name":"haveCountMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)matchMatcher:":{"name":"matchMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)raiseExceptionMatcher":{"name":"raiseExceptionMatcher()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)satisfyAllOfMatcher:":{"name":"satisfyAllOfMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)satisfyAnyOfMatcher:":{"name":"satisfyAnyOfMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC8expectedSSvp":{"name":"expected","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC11actualValueSSSgvp":{"name":"actualValue","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC2toSSvp":{"name":"to","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC07postfixC0SSvp":{"name":"postfixMessage","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC13postfixActualSSvp":{"name":"postfixActual","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC08extendedC0SSSgvp":{"name":"extendedMessage","abstract":"\u003cp\u003eAn optional message that will be appended as a new line and provides additional details","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC15userDescriptionSSSgvp":{"name":"userDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC11stringValueSSvp":{"name":"stringValue","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/c:@M@Nimble@objc(cs)FailureMessage(im)init":{"name":"init()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC11stringValueACSS_tcfc":{"name":"init(stringValue:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC10expectedToACSS_tcfc":{"name":"init(expectedTo:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC21expectedActualValueToACSS_tcfc":{"name":"init(expectedActualValueTo:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC21expectedActualValueTo06customeF0ACSS_SStcfc":{"name":"init(expectedActualValueTo:customActualValue:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC4failACSS_tcfc":{"name":"init(fail:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC7prepend5childACSS_ACtcfc":{"name":"init(prepend:child:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC08appendedC05childACSS_ACtcfc":{"name":"init(appendedMessage:child:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC09prependedC05childACSS_ACtcfc":{"name":"init(prependedMessage:child:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC7details5childACSS_ACtcfc":{"name":"init(details:child:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC17appendedBeNilHintACyF":{"name":"appendedBeNilHint()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC7toSwiftAA011ExpectationC0OyF":{"name":"toSwift()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBWait.html#/c:@M@Nimble@objc(cs)NMBWait(cm)untilTimeout:file:line:action:":{"name":"until(timeout:file:line:action:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBWait"},"Classes/NMBWait.html#/s:6Nimble7NMBWaitC5until7timeout4file4line6actionyAA0A12TimeIntervalO_SSSuyyycctFZ":{"name":"until(timeout:file:line:action:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBWait"},"Classes/NMBWait.html#/s:6Nimble7NMBWaitC14throwableUntil7timeout4file4line6actionyAA0A12TimeIntervalO_SSSuyyycKctFZ":{"name":"throwableUntil(timeout:file:line:action:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBWait"},"Classes/NMBWait.html#/c:@M@Nimble@objc(cs)NMBWait(cm)untilFile:line:action:":{"name":"until(_:line:action:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBWait"},"Classes/NMBWait.html#/until(_:line:action:)":{"name":"until(_:line:action:)","parent_name":"NMBWait"},"Classes/CurrentTestCaseTracker.html#/c:@M@Nimble@objc(cs)CurrentTestCaseTracker(cpy)sharedInstance":{"name":"sharedInstance","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"CurrentTestCaseTracker"},"Classes/CurrentTestCaseTracker.html#/c:@M@Nimble@objc(cs)CurrentTestCaseTracker(im)testCaseWillStart:":{"name":"testCaseWillStart(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"CurrentTestCaseTracker"},"Classes/CurrentTestCaseTracker.html#/c:@M@Nimble@objc(cs)CurrentTestCaseTracker(im)testCaseDidFinish:":{"name":"testCaseDidFinish(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"CurrentTestCaseTracker"},"Classes/NimbleShortXCTestHandler.html#/s:6Nimble0A18ShortXCTestHandlerC6assert_7message8locationySb_AA14FailureMessageCAA14SourceLocationCtF":{"name":"assert(_:message:location:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleShortXCTestHandler"},"Classes/NimbleXCTestHandler.html#/s:6Nimble0A13XCTestHandlerC6assert_7message8locationySb_AA14FailureMessageCAA14SourceLocationCtF":{"name":"assert(_:message:location:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleXCTestHandler"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(im)initWithActualBlock:negative:file:line:":{"name":"init(actualBlock:negative:file:line:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)withTimeout":{"name":"withTimeout","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)to":{"name":"to","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toWithDescription":{"name":"toWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toNot":{"name":"toNot","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toNotWithDescription":{"name":"toNotWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)notTo":{"name":"notTo","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)notToWithDescription":{"name":"notToWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toEventually":{"name":"toEventually","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toEventuallyWithDescription":{"name":"toEventuallyWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toEventuallyNot":{"name":"toEventuallyNot","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toEventuallyNotWithDescription":{"name":"toEventuallyNotWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toNotEventually":{"name":"toNotEventually","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toNotEventuallyWithDescription":{"name":"toNotEventuallyWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toNever":{"name":"toNever","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toNeverWithDescription":{"name":"toNeverWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)neverTo":{"name":"neverTo","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)neverToWithDescription":{"name":"neverToWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toAlways":{"name":"toAlways","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toAlwaysWithDescription":{"name":"toAlwaysWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)alwaysTo":{"name":"alwaysTo","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)alwaysToWithDescription":{"name":"alwaysToWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(cm)failWithMessage:file:line:":{"name":"failWithMessage(_:file:line:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/AssertionRecorder.html#/s:6Nimble17AssertionRecorderC10assertionsSayAA0B6RecordVGvp":{"name":"assertions","abstract":"\u003cp\u003eAll the assertions that were captured by this recorder\u003c/p\u003e","parent_name":"AssertionRecorder"},"Classes/AssertionRecorder.html#/s:6Nimble17AssertionRecorderCACycfc":{"name":"init()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AssertionRecorder"},"Classes/AssertionRecorder.html#/s:6Nimble17AssertionRecorderC6assert_7message8locationySb_AA14FailureMessageCAA14SourceLocationCtF":{"name":"assert(_:message:location:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AssertionRecorder"},"Classes/AssertionDispatcher.html#/s:6Nimble19AssertionDispatcherC8handlersACSayAA0B7Handler_pG_tcfc":{"name":"init(handlers:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AssertionDispatcher"},"Classes/AssertionDispatcher.html#/s:6Nimble19AssertionDispatcherC6assert_7message8locationySb_AA14FailureMessageCAA14SourceLocationCtF":{"name":"assert(_:message:location:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AssertionDispatcher"},"Classes/AssertionDispatcher.html":{"name":"AssertionDispatcher","abstract":"\u003cp\u003eAssertionDispatcher allows multiple AssertionHandlers to receive"},"Classes/AssertionRecorder.html":{"name":"AssertionRecorder","abstract":"\u003cp\u003eAn AssertionHandler that silently records assertions that Nimble makes."},"Classes/NMBExpectation.html":{"name":"NMBExpectation","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/NimbleXCTestHandler.html":{"name":"NimbleXCTestHandler","abstract":"\u003cp\u003eDefault handler for Nimble. This assertion handler passes failures along to"},"Classes/NimbleShortXCTestHandler.html":{"name":"NimbleShortXCTestHandler","abstract":"\u003cp\u003eAlternative handler for Nimble. This assertion handler passes failures along"},"Classes/CurrentTestCaseTracker.html":{"name":"CurrentTestCaseTracker","abstract":"\u003cp\u003eHelper class providing access to the currently executing XCTestCase instance, if any\u003c/p\u003e"},"Classes/NMBWait.html":{"name":"NMBWait","abstract":"\u003cp\u003eOnly classes, protocols, methods, properties, and subscript declarations can be"},"Classes/NMBExpectationMessage.html":{"name":"NMBExpectationMessage","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/FailureMessage.html":{"name":"FailureMessage","abstract":"\u003cp\u003eEncapsulates the failure message that matchers can report to the end user.\u003c/p\u003e"},"Classes/NMBMatcher.html":{"name":"NMBMatcher","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/NMBObjCBeCloseToMatcher.html":{"name":"NMBObjCBeCloseToMatcher","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/NMBMatcherResult.html":{"name":"NMBMatcherResult","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/NMBMatcherStatus.html":{"name":"NMBMatcherStatus","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/NMBObjCRaiseExceptionMatcher.html":{"name":"NMBObjCRaiseExceptionMatcher","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes.html#/BadInstructionException":{"name":"BadInstructionException","abstract":"\u003cp\u003eWithout Mach exceptions or the Objective-C runtime, there\u0026rsquo;s nothing to put in the exception object. It\u0026rsquo;s really just a boolean – either a SIGILL was caught or not.\u003c/p\u003e"},"Classes/SourceLocation.html":{"name":"SourceLocation","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/NMBStringer.html":{"name":"NMBStringer","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes.html":{"name":"Classes","abstract":"\u003cp\u003eThe following classes are available globally.\u003c/p\u003e"},"Global%20Variables.html":{"name":"Global Variables","abstract":"\u003cp\u003eThe following global variables are available globally.\u003c/p\u003e"},"Enums.html":{"name":"Enumerations","abstract":"\u003cp\u003eThe following enumerations are available globally.\u003c/p\u003e"},"Extensions.html":{"name":"Extensions","abstract":"\u003cp\u003eThe following extensions are available globally.\u003c/p\u003e"},"Functions.html":{"name":"Functions","abstract":"\u003cp\u003eThe following functions are available globally.\u003c/p\u003e"},"Protocols.html":{"name":"Protocols","abstract":"\u003cp\u003eThe following protocols are available globally.\u003c/p\u003e"},"Structs.html":{"name":"Structures","abstract":"\u003cp\u003eThe following structures are available globally.\u003c/p\u003e"},"Typealiases.html":{"name":"Type Aliases","abstract":"\u003cp\u003eThe following type aliases are available globally.\u003c/p\u003e"}} \ No newline at end of file diff --git a/docs/docsets/Nimble.docset/Contents/Resources/docSet.dsidx b/docs/docsets/Nimble.docset/Contents/Resources/docSet.dsidx deleted file mode 100644 index b04a8d4460ac2b333dddeb38a93307848cddd37c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204800 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 diff --git a/docs/docsets/Nimble.tgz b/docs/docsets/Nimble.tgz deleted file mode 100644 index cde2ca3faf6021641993b9988a0b2e5095da3901..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617128 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%0A(4W<`- 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 z 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

RwZ)LO1lF3%}Y$5E@<;g1c>*Jv@ zOs*a0y8{VMUBadPGs9gg2yC8j$BJ~HmQG1M8R7kZ*n6v>I>2??5_bXtf_v~_!GpWI zySux)OK^90cY;O_43F1<*y<(#g2x^8z@S9R5XTmJ)3t9V%Rn{x~kK1AlMJwf(j zRaM~yGBLC{$;e2#sj;6x$nOwfc@n9`<$Aql!C+X_l!x8e2m2-SxuX`M zpRG>rF`glD##ST!OB91~N`zo*bQ@QlFy<(Lp-)njI@(QwXuX4ZRz;P(39EYiil71s z`s|Ra#0!O-6V_(D3PgBmX#{2ynx%Cl#TUtPh;ju8PIwntO{pO<+@1JY)#Pg>&wJ^= zvF)hZ-`KW=SK<6$vF&ugdu(g*_1|OLXz-=Ku`NE8zO(D!*p^HBzs0tBHj{wZc3rxa{fK6qpsll*)%S5ZLj6^@xsZezCbP|@gHaOX}#M2i^# zL4iL1b8H*+wS)72$Zdf{{w=pP-8XJ^1LU@*PeNhtXeQtAAWlBw3~j2oWn#M>G)g7C zUM&?G@9);K_E|CD>s>qim(dO;9Pz}C|+gh}c?hRMAneiS5|bn)6r z#QEv8mB!S+Ba0hrYl__M7CjhZIJ=E1`XxWQ?$6i z5b_+$P)}u?u=UDN=}*5t;G8vl(*Xujmu`VOD3^IebpF{&h$|~zhJ-C6ArPaghn9ON zokKB;)lbGDtEJh{P_FH+4~Li?!ANC+9 zwBUf7@JxQ9V0$^$ikl`Gc62D#5$Iwk^)UQ0q9-Ti;r?Fzoyh7~s(m;GRDV&lb5D)U z!S^=uW;kDsyUt*cz~DPOYgp(E*#Onw_`=_*?XT1X4nS(F2uN*NQH+Wy->bi||EJW} zLIYd{P$8woHzz0vR@(ye5J-fEl4RPNtK;Z6Gvw^BmCqHHcU0bU(T8r2+=1+f1!+lv;~K zlyk@V!U;M(!#*=OxAOK}SBCTsX}zo49$o?JHiiMi;2IwQ5%~T^VIq?lYaS}5%vf}7 zCg{r%Yy!k|1pd~?1cVA4c(q?cxy1(I8GKikmj>4`5$0(1x{cEE23ALXj>$hda!|An zNN=+9GT7ORSn@dG-hfb*sxRa;T##c$`S^m@r=Xl57pRyOD$N9x;LD)J7gEJ_J9@;m z^(=$*mePTqXf$p!>Jt|6+;!+PH|^+9FHeL8aCYU>hX@+-(#K zTZtTe$c_k748yx%Hlj*t<766jxRXTR&D*o1c%w1{t&4f1&;XD(0&r;C5V*ceHh&AP2H9JN`Nt01_V07Bbx6}-G}c+-g&0Y8tv-pU)@ zrio@F)EkV#*=~)eyMJ|rd&BT@A>oN-XAC*OzQ6jyJ)6@M#2U8Gs2Mh)O;;QR#z3C1 z)`vVFs)*ix#gNYnb9v59Wz0bFoyRZ@I>vT1c7W9rQGS2TX-j zE1t9yQ^j!E2Wchx&I9%|08*_2zvhj4PT(1(9FSG-kphABVMbul+{q)NMMlCRAd%B1 z^vUKf2kXX<`Xw2RcuWT6&#Ph!VdvO%j{(J|P1!RVj{ebhgEa(ZK*3K?lqY3W2Noc1 zgZ?XSvwj!1DaiXDp_Zt`Nk{S8jL?UQHGS+c9N_(6KiiccIZ7vz98OAn;J0N)n%CL9 zQY7m+rL)y3Yl^HpGB2yhmSgWso=qH$r88t8T*X83qq*87%k6_YJ?5+a=e$gFA{`I~ z>@ovci7vW9CJjiSrZ+YkuRr28^zEUub`)@f{#Az5h}9DV>e=kwzDh@YCi@yw0`y4- zrh$h@)mT$iBpDM}>EB8(dVqo?0S2%-SH^r$)EIAjRW)`&CuX+m zXXX$4pn(LSWapAFjJsXQ#0Ku107BTThPKEQFn14qN2ailSpi~PrdwG& z#tnkExX2XwwQ(1WwaSpag*-1wXge zSHk{t&(FmQLn5soUzsfZx^v?pjyRg(hxo3kE&XDuS^yy~TwH?<7D`4xYa>r~*OjFo z0EgkH)&k#-0(FFH=@;H}GJJYi%Vf65VFG$R-6w>d=X9ZhjLUJhKE*PBdK|%NR=cYa z%fz#nPYE}>^i($JqlvF`2D;=KIr-)06gPwa>G*XIf$QhuCxH>&%4BvU5OZxw3AW*dz%LZKEU3lNo6j>?dS@yx6zD&MgTVg>}_pT0DBv(FPZ|B zBUcjVy(PHauMOa}edo8C&?Y(JN1x-a$zy#&d=cP_ERkRU6j&1g1@2mspk^)Yosl3~ zenNI`R)$C(%0vg)+i2|P61RfaNit8Nz!j&!e(pLpKg-;Gj?O-;&*%z)><#=vD4%z}pwQF?^ava|k2n65zbd2jb($G#Q5@mjFxFfJp=dDgbzJ&4rOKh*r?hU zZ``UaRbE{H6u6ezNADd9Z2BP$8vq3^O==zLHJuh+<;TzHK!UJoO!c`OWov`>@z`0F zxD~PgMi!qCh=^@1;A)X06JmgpWmE{=REY^*Cb_Pbr(wBZxka|gD|Hl%sH~O8ayqF9 zYeS4LM+r}{F9Iy$+K6u3J8_BJID2Qbi3l;8HY<=^(U zJ%GK<(D5;Jl%rM|M0c*Px&S)DhEY-};~dWSR)?kiSvxGq)w^zHTGgO>ZNJG3zp1jy z4q$Jyeb94$C72AVq^ZyA2tFA12iu%Z=O_L*d)udCk^f?En;GqO46h6tQ|&j?WMX>J zZjuDDh51-XiYyn`>WeE&gBhHY&xG~)Yb|zRal+j}EH zM!v9dkYW66?8qv0?wQ6lr^JBE4RCs@W+HTlV|=g%FKUtFo_pIiA64VL%?n1Drdu<| zA1ZLBpfHc(J$uRLPfv9itdqGHvib^0@N58kTZ0x6F>t=*oWC5v-Uj_{Z_}+r;H>+n zy)CAT{{hP6yO8kSAQXA5Fu>l1LH5YBl?wn!$z;fa_Ts}Cd}O$0#&p;n&GM0G9Hbk@S0%_ZKL2>8g8Iqeq7K77um{yG)&RdQ z1AZxxl08}!)qJXY9&Bj5R^ulK=vX$Y%1jh858}L?&nJoR(QMWH#%c5-(lFFgt&cR; zZ$jzF{1D3f>0%K`(RG!h4$}`)eA`F04qc8_c3W z`uC+d_DwAJG0v%AaW1S?l>Nj8An6gafa#UqQ4OEoQ4Q@nEuQ;4$H9SzSL1gVA5kjo zpx>#$5%nRsU$2Uih9uL52*d;oV=}u6T7>^mj_GaqNX#qtCTSGE6})Zp}&)G!1msD)Ep6doN<<>f5; z#pbbmJPEA^81=&$(!qk+UJGPG+Cj$<9NwCC>w%Ll`X5q5+Weq9?IQuzeK0zq?&euu zF!!f-QiC7O0QR`z{latnJ>0WJeFXj$teQ5>6q|3>87`#;7fbbXXDx{i&&3Oybg}@R!gF3+_=$DPfPs7LpeSdUiI%wcsK)UcQrc z_Js|#G?O;A^fv{+Ze%8?83LXe?H^})QN)`=(1-R|JPtEuWJyU#DseDbKSXn>Incpm zSP5G~|H|8jR^R1qNY%l{Y#a#6oa`C^c^el%-iGarcwb?MnB((mW_0)y8R+3EuRfXc z*=-|BG%rY6d5>3276)VTyL^?oAsbOGU&?|`n#xryC>JqGnatmsP% zz?yu^PIu8GiN9>x&4kPsoV?_Lu)8ckn2u8doKa_k&6QlGd_X>8nE zH1)zvo$?!i2`p=7@37PU4r+)@J-;TP2A>c#CHc z%7TWRquNBDN-w~7kVpFwcSo-3&8Y>jnJV-KLO@S|+IQNg#&%s@@cF zx7DF0w@l$64(LJ~>MDZG7p~B9jO=E}nIX-YrdmiK^a>X_e$F$=sdLd+`A`8B^|@Mq zx6ds#WVFn-!Xy_J#ai*;L)xXQG`Av6JLs1tN048u2!ENtKv68t=HU=4O8Ylv$80z7 z^JfFUnZRSenZWjr%B%oTLrO#|QTX}7TVASeGe)Yi*O)7rr;1-73pmpoJBytRT7QgU;b=AUc>+(ft?4$07zh~j!Yl%8>7$F3PWPUq6%H>HgSIb zvK>LQ?$aMEIEmf_$QfHT@P)z)Z&vL<=d3M6OC8eK(GYP09Dl4o`);37Y!O{KuCf~K zUv?p=@3P|>YSK?JcE!R2+-*ud=qS{AOeo2GU(qAPl>wlJuvQl$8^DM8@L+aCRC&?} z-$1Dg6wR5CQtLJG(9-h~CUqr%yDgxL4sKq;2fVucA?NE&d9<5^-i|~jF9K6e8%Bb> z(^RbYWl3rvr}d8l<(ieRm5oPJNiGcAyH_CSsH&t1F{@=68I*p$SNS{9)?JL*8>YPh z254-GD9U&-=ETKqp8BPNZS}r8f*x%(P{zs%-)~)Pbjdr_y|*|{vQ=}TSP-JLLC0p0o;`YWkBi(V&sH$j;^2&V#Ya?#@Wj>&g(f;N{TjWWdqAp} zo6E_S?`Rq2C!U)MVgOxV{n{Zv@PftB_pWaMPCQg<8^QIE7BKkIF^$^tqQvT)8Qz5r z&QxUJ=MlQV_YgQ%Kp;t~3O=ET-679;DUYymflexwIH*y+9*GL{AC=z|WzXN0U&XgZ zHC?GIu1C&`h+nhG%AO|_UGcNWO^7jpa5i5^DAL635))M4tG~3ioRS8LOC>M$-^wMp zut3G1J3$4dli5uM<{}O-38;;XcbDXLrz~nU*4~J|?zU~kUW-i^-vFAw7KQPbqW(sqwT%(glN1UAqYTBZpF-UWDY1_(=A5UsFn1Olo7p#N8k})b7eYJ}{Wcgv~J6N@p-^#|FlU^IbCDi%2jPlE9C(IWZ;| zsHCP)7DoGB=8Umm3K**0`3kAHr{q?sxe|UxWp;~gs|Hp0-VLdgYra5KA8;L zJ*L7Z7X6Op!l~;TDn@T-D-7#rv`H<7PfBd};jU3@si$AM!x$H1bz7|ZZu5Fi-4urV zzfjCn7G}%6PFmn>HOSYCDwaH_S(WR#Y39?EqNOxwmQrZx_AIy}B%jn$Ky$n~C=w8+ zy?&Xi&qVQjHieB<=Ad1$UDMCQ?G^K);FmgUr#hRZX}wz}zVQSi2yLL`#yOdt= z(n^q4;AmBH>v;ado0Rd1!J%6qN+93R^qfk;v{hnPB%g`l*LY7qN`(B#vxx%cG;3m1 z7Y_RfI{QLNq*OHo7rop$17BzNSK8w;vBtyC-wcpLiYbi z>I42J^?-xanTh(csPWF-U#@a}gmK9C2B7+&hK;9k`#VzCoN|Xm|HiWn(MfniIn_>} z`t@(;(j#6EbF@jET=!qx1cYEi&oGFhX`lurpxTU`biTD{Nn?@}1iPX>>NrsPc2Mvt zP_o&#F75h*16lK&(B(A>9`LPWT!lIdCsv7C^T)%An1=gdm3$yB(QTUupZt8YV_>!f z^Hb<2(8ojNZ?+_8OG!`Ic%vP|*C9pp8_d}6{pt%H&AO+<;}b_GHke7@ygOOP$CVDU z;=bgQblKW)Ul+;dABrjc1*13j1FFL@IXqsCMprBO^k(Fpf*b?$Frz&pr5?`{zH6U| zpfJ6C3~clvz}b=7Kliy&ej4k$EHH?)CBT6jWH0{EHxivt+q=XPOEM?>m(n3gqlOs* zU@NOm!W_);+>ZDC~v3O%s^pcxeSb z@NbF*MZ$RL+(mOr{|m{<`Pgx&KCFvw__E3ps+3gCUH4U zRA9G0RtcmMwuyU4nKS21CHM|pM*1(nWkPlFNer;tc>r+P1pr(|{U>l4`WD+;{MNxp zlkTs_PjbZnNcF_uY*o6cVnMcPS0dmj#Uj9LRT=P9ZQ30UI4VC02tp?|Jgeg0wRv9d zMX!ELv4&LC{9c;QUy9|yJ{wfHNI5=A<7JFT?I1;bm-_Z#&~uks3Hl*N0ptm^ty$i_ z^%1_^^tB*&&Hg5pgJbXmIHB)>}b!? z0B^Rp76c>X-t_bjFw@ZfC)5xXl0S*^CTt_|fx+O)x-1aYJcuiSu;(v)BUF8W$dA+~ zpfeR9^0SpiN&*NW5o5_|qdTRu6agZ?0fRpxKi+KYZ7YXS1T-#C9mwwn^FKa*=A~9A zl>z=?Ixb8uJoU}I3t;lw_+#=z`fc(H4Ygk3Weh`tktM5e5wwA3)}4n_8Soipou3?3 zAtA55$RqNg#gHBHb!d^ve=g|x>61TA(wkD9U*^bva4yR$M#$V9_bW=Gheb7r$|A0y9GwR+uPm`)6c*?ZN)aYTsF<;HfS&JEfbcX5L*S6wLo+OIuZg zTtDjndFHPhwhI)42*BzsFkf`R0MiAuP|%I+&upV~-Pmb)n-le1ZDAmd(2Jrs%bS(@Q7 zx+q%!ZV1q+@PM**)qBSq%L8yS5RVGLcCb7E7zMRe^3)ld`j2RA;m(+2RP)n%u{Nv# z9c^}1ld9F+r7U*-vrQ&4=$54>_#ti+tVW&Pgg~cbn{1h|j(!txEGt`&| zumiT6f(ab!X028Jq{2Kr1v3QFqmNV0hFS+>Qo+&`Uq27uNjfXQcxN_ex23K>1qq=a z6cY0caehLyuEVZGZ6L#E;{faFO56kP_f{K9c+ylpZcPI33ZnpP!4t=GZ}k1KbM9?r z-}+`Muw0Dv!hNf4;z;)~D$m<_oQOZa7PHcRWO@CB1T9@*^N+RviHXn%bLHD%?SH1vS&r5=!dEB76p)=Z_`)mkw@VwAZ#o?f-Tl>`!y|%aJ%fKuljek+n$j;5jA7SiHh+-eP|+VW11-HrGpu-odR1{ z3I|anJ*S$aZZvPSL9xj$bl`_7qmjjSGARvcLW&|!@J8GRTt##iepDoE@^6HvsBW)H zuB{oHmQzqtp?2tqnbG%Y zz4peuAU21RIY_F{DfooG^I(F!^`X;5CFzMiHXR@&nlcx>m!?L#EkEaajLNqdX|Pf~ zY1K)Az6Au&#fFfJYVsfyqrvk}$fkxzC#ifFRBCVJ4<|@<#iupS`P3H#buJbC_3~=B zhrSDZ$WI^#CnJPXwOxuq#H0vgZI#~y^@>Un9 zo`b|&-1bGu+q@j~*BjK%arbBV`8n@O-#<DNAqF z)zz=hM1CV-BchOrzfXyyoB(K(lagWT9t!gjE1cENXuPvvNgu-yu^dsB;Xe3|GAy*l zc@d7YM<=XpkPcCGEYN}vHA9#fw&6h89K>LMfm+YUXHPn;%yb|GAL{r=XDG?ffpld; zhS6jqGVnxF%@?$$x7<-^LQu-Rm~kx4G{;s&IWJ5l+B^n+vTQ{*R; z{v?Yha?Z|H^*h6-h0ex}{R7$j0uG^kolfwSGuUFt{0SLK z-^c(Ww=zP0`sct<0vCIJJj;us@i6QH5NwcB$n|mk)e5NC=(UzXV5Al8>NVR}xR;TE z!FztmV|`Bamnc+sez=ccFPvogvqFKAjfT6>^gkGXc}F(8L%cSq3Pn8xP*o)!;P8w) z{k8)t1MGmY06Sm+ma<$}#JWct^Ubor8Zhks-Umj`9#4Io8@S|pl82_Lom@}sNQV)H z=#2`SkPh7MznZGVQ1CkOiqXMp}7cUCJ_yaqX``kCE z3GTOgdWS7&?`N0EMRB~>Hfw3(Nj|bNyKLg(2sjHt3T38RoR|fIkz?A?vWG#ROr+4I z1H0jnoZoW5A@KZHjd%%mw?D*YOGcg45Q5&}lXgfe-d}zuT#E+_-;+Ss1GF{3r|AFme!D6cOx0kal z%qIj6+Xma;#AXi^i_HKO(#L@Z+jfq~jB0!L7q^Ct=YDZUD@AtIn#iO>Lo8A5lJp9x zu}1VorXQsR+ks4;z^HO+6E_RLI_J3Bm>p!3+$sLJ0o4I+KulN(GPZKk=6k!nEjTIg zPZh{3LMQ#jP@{W}^;#^vW@a7Z#$ojxCQUT%wwM`=;RAUO-?hX1FgYaq`uk1!==VHl zI&2vqeQ`!5B6JMbn4GU=Xp-Dc?|N^_x3jK}A>nxyppkSP1SymzqtC(97N+^=`pvnkkx5~O8Gh1RW>g`PH@6wOM6DZec6z6Kdjw#uiIG;<{ z=Mot*WX3hjrftDPc|!pU`>ITLwb?epZ>0Ebu1*FPhNaXVQqqNk48Ig@&F7Okn~%X6 zoY?C)+sSEW`U774uwYr#+bNc#rhRXq1z&;1=@y%f|5 zfR&2(8h6IxY6?eA4r{#G+!~7EMbCw|<-r_YrGfvYWCcKz8 zz$66V2FwMx0nh%r0a+z8V1pxgThy&Rd2F5HZDL&5tkUW2AJ!qM?Qjw3E0YgW)(0Wx z0)t9*;9$^Xu|kKl(cy$h$~1{C1XkH&SO6c61^IEIU`vpNczOz*VJZ)M6`HI_`V^cM zuqwXnL!NbOV?Z1ibo$QEx=$oM&JMH{R9_ZI0o;HS05@RCyBpADMuHEoNnMU|;WTM( z>BeN39n<#81sDz%;06?VcLOHybUjR73OB8%j9W8qcGraAe1R!L5NU{+*5s;D$X!+K zvdwMRQ~_fsBf&nCVfIIPfo?OR`5IlD&8VYO?n4>y72jQ2f~-!~p@cCfeIm>|4!X8;0t7_bPibK6*3qch=_*WlhKffl zFD;JfX{3swAW$I1zw9@^xaV^S%M-bnBcax8J*4zhWjCX^GH3MU78 zejtQ5|F8+$t}Q?|qX|N23BKSBk$n?ZFOgOsO*o-Ke99k*7k{*wupXLKKuuzz z{^A`r3Bp0KF}#YX6A!?0Fn!c&a0b^xd1|pF)s)A?~XuFnzt0r&zzh%h$qS)7n=UKkfRD>h`xj5XblGcHMBt3;PcWZ=p5PRhxxw zDA4H&BoC8M;bC7*{1F>F0TpfTE{(YsH|Z|&dg3V)sqP#>D~wOdlsF` zBq3FQ6(8~=41SGbyN=G6gxn^5Rk?+S873>y$1bPpX-_VPj(rc{C*0&}^Ov;Rw$e;Yz7k$;IAcpFm1Dy>ZqNG(_`PE}w1PaVl zts_%dV}WJ;>-uIYs^%`sx<%udK%etE&oq33I2Bi6ZbHXQZJIsqM3U)cpbLlTsdhBu zAJ&GhUT1aTs|go%cIMZMkJeY8-RCA`wpgv-6g|QV+&_iG#gV3aow4Focy=3mO&+^X z2TdGHHMsP^BrGF3X{E$#5GqAVQsEo@;3}SQQ_AgZSUD38VU4D{!FT6$Xbb3`*3aR~ zyf!qMews;bir_LC7G&H7ju}T{Es*NJ>6!2t*6KBpjl5O8HX=s&06UQ{MR5Zxe;9y8 zW|VCqG<4J#qX?q!=^5B{8oSu)Rga-`fVul&mIjg2WG!>L{YltQHh%_ZWor4WShe7c z8V@1(Wu6n>a9lo}Vkb&|1f?o?1tnK!Z3nm;Y5}-Y*|9&TJjpo-{MU>P6%gBv+)d?% zx8uRpo!r&RO~XD1wYIi;kc!z2DMk9bUEJ#i=;)tSXL44xC`Z#vJ4CYhQm#+g*SC{) z9V*TwbB^g4soqd0ovsmMX*{CtCZ9F0L)&cOU*EpHW!mwhJ!Tk^(aD@C>DB%`&#P{X zAT9c-7z>IeSW@7jwko00@%w5)rsAMCIG0lyhGI*WA%D$LvM+}2k1N~Jg-!7aGS77F z*IQC>%jBt`ZmW05;@AVV3q+n}T@93R13Gydz5e@v1K)GzOt{L?kXS>|*c%ly3F^7k<$QXrf0^?PkVOyr$c3I2%ok1giVE3eGv zko%d2sf{`+9=l9Ne!5ib<%xzj90!L2JiXw3rwQ+nV0aSfnjr=}9-IB@ zjhPCAkuvn*9wu(jUKDq1fU6}P{_U4Y8Y1j@{8@s<=b1`M3+*iHlwnI7?IQF}&y-fc zbQ~SLOpDMN6I^(Vzjjp<6{X<-$40-?6bUAzHBk)ItQ>CG1 z825|dO;+iPfo-lsWRhsQ6@^u|alilq8{q~$utm9<(-g{G{SB?A;2ekWg$0_5O}d*{ zbOL766Skl7K=u5Rd!pOr&@ArpDJ4eHxzw`Ip-hRIPuyw_nV{$m;Tpb5z4rF}>S+0H zHIw5ek+SaM)fR7Ux}n!&SR16U0`jT1IXn{j{>N!-{>YsoLo8p6hz8DqVZ;pg0S^?| zi5#=r*~&53Iit_f<2+CWNB}DM3Gg7G9^mLj0BOBx@@-dY%prlYyLJ;Q{HNDtz3kx` zLzu*I10SPm$sL=ln%yo)1-VpDcmKpln{XU|Vb4L*Q<8)D3__x{1jiDI>dt(|W3}5^ z|7tCV#&Y*ZOhjt+sT9HK@G|?Mi(7WAcbup*p7?pS^RoB%gt^~*&U zrgdMwrI@C3G%M{_(vy6Or@yY))uN}AMuqdOdF|QfocPb#ExzRM*^S&XZ|h%Yw+gIU zsy(yiun|A)1H6VM`Y%aAu^K%ZbzJ@l7xfZu4GBmROoKj-y&QTZm@UfhztYKc&Lk2U#rWJj`aqI!DkqOpn2 zV#DBR(~*_4JR(hl!txlW3C;a)+n7TnU+@wYFQj9I8NOa;2#?#$6_?wMiz|F@&Hr|ED_ZecJb4q5 zF%M6vj1< zJOkfC)ar33kCaN9ItcQ@s4@2<*Ck=+avFvUXlZOc%}WM|25J@B=y}6+6=uMl5w*B==SyJkcDKpW*2f^tu(?-M*XC2Ay`kPD12ieh=jgq4C+ha`_Yu+`8#z=Q`JqXZnF*+#|lfuLN!uC~p_*=m2Qiq1K-raydjjOF{f>gcQBwQ`z3A z^Y8Gm-eCBQyrU1tMKpTc#}!+oLj{?wLy z9m*?H9cmyWr3p65AboYlO*dOc@Rn}AI~B6MqQpC76-E6I*GMD%1}3QzCsUmx1V0V% zV>>Sv^An9J(k$7vv>w#?%Jk>;o-YXKTF4>s9c9o97*)sPe&#tL1Va$B{@a^(N_}i% zwf{yox_c=AuKzr+{FwT_kztnHnwYjl_#Cvmvi)oS6ZQhNX`f|w(a`E_*a?y{r?|Zq zK!YQ7$R|QN-;HE%)Ie#VHF(fzrMY7=E%iCcUz3_Jl z#gjlj2Rhjs;(xAXu0qQotlv*>nWHv}i!Ak6Ea2?PudRrhTqy(8(eTg};9|+~a)lv$ zGUE^q22|^2t>~}t^B6B<9Yx?{@udNQz}d;w0(RLW^>+$DICzccdAq&9;S3K%cempq z49>`#gUQar8G-EfgEqA62>f4xo}D~YGQEMS(k?RV4dJG~o1xr>U`Zn32;v?7dLDM< zS!N$xyDgL=MmSa483vWIT`VHL*O{pWTm#p~F|ER1c|rFbB32}T zC`+XJ`9ng8{AR}y%8)=)QXW0jakYp~)@3L6Atfpi1Z!J-Fo7dUDJ(b1Q!_mchUoOS zU|}EiLc?x{az_B>hzx)^B3HjE0AP+908dK5lS!^`>HYw*p82?+vv;K1O38mA&Sh8&SeNv^(tBEf9OXUB};&im#ZVs$&lT8 zVilexSP}XdA(2bJvvh5rxy18-XHm1^pr8G}Bp@m2c@T@xgk=u_*J;D<2jD+Y`K75u zHA4rO*Snn}IJjMwTdB8&FJ3HVM2l>9+>HVn*04uR?XI{$0hOW#4 z);Cp)KZPWan6TWZ0Z{1^z`z0P0eZ6ox6wQjtRMxzA|BCG23c3NwVJ>7trPEmdW^S z9G2+VLwo5=#x;L+r6<<-Z94GYwf6t@dCnZx|CjTeO6UK~bN(~W`OiG(Kl7ab%ya%T z&-u?h$2Bc9GIA!+@PBWfbN^O*SAJxHHR!u{#||DaCoKUu2rUS3#Yo?}IIU&I6DW!g?A!oh>9Gog*-ell8-TV}1(7$@264tFsg+iC z20LdWlay7@qog=qqkBecgfRLzU7S^Z;FXl~%KB>Dt>YF5& z86krje^J;a5{dLAN02WNNkyR8 z;n6bi4BH$w7ZzWf<0j=Ik~T(QHuF}U{Am`-YQH8ssYBBdr`HtwvPbA%QK#T(sGi)^ z0Z!pAs_+hnOHhk@?rTN18Pi#i5H*nV1w0qmXkgIF#x7#587VX1^!N6f+2{Ah>yx?i zsRPLR10*TXp1z=}Z%+wyli~T>3)fpek`8g9z{nt-_Zw-F&km;5cY`y|8QEPL-0gS_ z=aRXz%2T?DvHD;QeP=2XnUT)*v9AbXEQea!j8>I}?V7S>G9j3_Xk=Lhxi_pZvDS!> z*i?E#9Etdgk}rooVPc=}e(064YSEbPfi&x0;IZ$qvh%i~mX!LEYPp-88>5hLPl#H= zhpNlM0Si?eI}${rxg13e)GP(?F9#Qa5{6nLM<4}_t&_JkOEihzjp$p)Yp!6bTdAbA zipJWc1gCO>`1z-)){kQnE_oi(Cl)6$6kp+>0(oMb+WXT zBmjWCTp`isTr=quM;SJL9<-G4|$Bx~gmzT~$(x{f9dU&@D> zz>2&X;_Lin2^}$qALu=CcI9>(7n(-XMy%XxnpI8<9IR9u1 z4O4!CBf4y?_}rIsR)^7+BA_7Je%gjTMXVd4tEc){wqY!__azCFEWSqXZ4*aa?U zy-pu8TYLm==KMe>Yz|+1lEemV%MncXQ0z=8x*40GAB2QOMxH}|J*rR72f;)L~+X3}7i`QF-M#3!ISN5kH{@`8*V>L9vXxr&j4=Gg6+7Zl5bc_01+W z1&{|0)KosS$dcG;FRaVmAf)o;FC575fRJI)tvka2A-wVa51w%E>h-%-+nX+1oR@SsN4x+!Ne^2URa z3#n0&1b#8Gz}F~^pNf6c$96@Z$@ikKElsUS`N1(_!Sxp4hC&+6CTz%5S>D0YF&cwR zqNpsdrquCsoU*lFo3tdmoV|TJ>qlV~*g}9CjJ+PLZ@$~IZmmJcL9qa(NG?8VC6=k; z!_vn(e9rB}hq^LBq?Bi-rUYU&6BH$v50$AA6YkXI?JO=;wV5+uvv1mxJE=9d=19}u z`&OgMi8VKS&@|L-{I^@BxMWb!*+8RKbL3k+{fNsCn-hIc4CyiU;!m0ZzZ zqIK+6R_x8$Ka3@6PtA|wjbzw$Zk}~CU7&6MOd^rr>Sl%IymRkBrCm>BjMmAH!Rwi0 zWKNp4&SrXTP{XP<1`8HB4V|T2s4CP+8)(qmJgdJ#{<*X_Vw3a1I?y2jTDm=~ZC%-D zDur-_xK9QuYKP@(om??JXjRWp3dYb799PI~M^v}Dxw7}s(Tm;Z`q3CcpnXy_u3`0^pY3Ct87YY81>thpD zySSh~x|~7wzoG@(!~Jj^+MMV3*_9&|nPhz9PuLPTy+kDbh9p=|L;an_>`@HrLWvoX zS4e07?9?IhLu{Avxr^;SU`OrW<3Mwcgq&)o=GDYN!JY2V=HZEQA|H@81br{Y;!$Fa zRIRS0spLc4iQ^CRQc z()>6{VTaa|C4S~4J-(GDfMkjObt1zv#ZIqc)_LcFAp!H9G=>$o6>)Xmfs;Ognbjeve|(yJs?- zz`$ZM-MyopPd#wn?>4nW_BI;{uMdY*^f?3$F`5USEya9Er|4 ztoM4Gdwaa|dO2HEshw~gclK7E&!QhaOKvuE-WYju_0!VcG9KURHr1NUe%5a!2!R>U^ggqiO~FFITj_Yi ztKYSNNxrA#)S(2X{)*vem#}sb0#nbCkIjDhqQ-m0knJvJip=yuqebIB0y5TG?0XjOd~_PLKo4c*(|n zNnkLMXLAT1zLp(MkQ02FKr#9nx}JH{RaW`T5X@OmiVcLeS4@EaqEDvxe*jZJtiR?) zgOeHG0Z$b)u+5n)H8p1^1IVGwDdrm{&>WGAW89Fu^luS7fLV$NP5l&+dTW@iYn;;z zK&0vlmlq7#h19ON5O3XYY&2RmV1XpVYv$(0f7UYXJ1?U%6_x|DM#5fG>aJ5UcDB9K zV>L1Gd;R#NF%FK6n(KocedZ<4(<5Vj=O>Sy*I*!c0ayHVIC2J(4vDT#jKb)&7KJ$6 zeCDAS60_8~B8GB^niq`IL|br1ZS1=Pb`tu~lVf!0OEpN`s;Gf_$Lwo~Q)j=ET$juRZ#hH!#agEP8I3kP`F?izXF3yWcYiU=W+}!uT7RnzO zEWP=ILz+u4@zbPbh-CTgz$3z|AG^aBK}^S!00ebqqp>sN#VrliUK+t-Nbvmfo*T2b zkvn*=My&efEkP!(e*A&<0_8dDeBmuY0=9qoTwA{IP9Vt-P361WgDZa~G%L7u2y!Pw zi^aDN&9zRX+kxiQ(eHbY*`6Q5Dh^9iRrU6EVSAIi$F>r{$||=9B|p)p10_pt4~Cyz zPa|x6x~;xRP3wXIk^HiU;vk=TXV&Xmg>E)rcL7uWMq_#YI9GUQ$B&=+;gReA=SK4< zH}Wt6j^t1LMNJjog=RSexZEL9alC#Xv#fQ8XJcbWFZqLK_<8`FljcRwdd4v~9 zAh5hvvBsT|1Nj+cDv8Wcx|7*2`8@MF&aEpr^L(&I*)Mnd&`kV_v7zEyfu%~zxlI*^ zL%|o6o|rqw|MeHQ0#D&aDw*RUUwU`z{UTvOtkM-C<;a3NS@Np)_1$37Wgk*>&Pba* zEBT{mP6H!~+=&DLf8So$`)=Zjp7H0ccFeMlZ*j1BwmI1~J=|XBPyNu9%aeZJUe_;F zR+<-ocn+(4x2=a+$E}CA+V%a7tn2$5x7zi?2U*t-AKYr!-()?1b9)`X?CN|>Jl$sZ z8cX31x7N8($OrB4==Xs+h%M;fBloHsO$ZwGbeAwacjJ?{E^S3=54Sl*FK{cS%al_= z72M^p{NRq&sL0>9IVdmF)1%CTARg~>Kwv%)klUOV7zXa%Qp0d78Lcz`a^2r{=M|>J zZ5k07An!6Y;oYt33GZ}8;oU833h#7P;oU9k3h#7f;oU833-2^_;oXh(g+Ibd%;&TR z^;kaNg^f7-+Ms~VyeOl)Ke_mD`0Ux??i0L9_xYQT-5=i^imOjooIAenXddA161U58h6f4NYa zgHN=vM5t8bA?`L?0u)N{F9Vx8(b&}UC16uJyx+qxFB8nmHNs0XzIXx8l1N#8@7FQ_ zTG9m$OGV4C85GolJc@JhTLKM1R}VD2s*zd(H9_eJ5}6VvOQ0xlErBpdmP=2V0N9fx zStuwg?qbWEi@&-HYcN*9u33x#`N9c_86eLx8aWC}BOGpk-Swy~oLsmLtGOsGoK%>L z%`8+FPAtsEq5_4bU|c6T#-Y87IRZMm#^M5TGTgqlRb!dxyzLKvC9x(fj4{eaD}hJWz^(qDWSVFGn=V67U} z3|KL;cTEGX3(x|v8~TN$D9Jt?($d@f3A6eBI5~V1f85<|eyeWb-fzA++;yMBTHJm5 z;{^VF_NFUV<*Iu+-lBgN1Gz^UTDwnB16m{~TmE(4ba;0^cfmGSFIN3zu|cO@iv@#p zo{qWr<2*;_T$rKW@UPi(nKR6H%?+;uT_5Fzfps=fEW=3OjHK@x+&K!!+_0!Sm+$ic zuLz4;ba?+8VNuJ3+6}{^mIkHk!=jc0mAPS2OMt?xu&9Lwy&^1XY2elTtV;p&a*goP zj4x_5-|%~7*zmAB+#F(Jg#=XL4a_~xk7Y8}`Z=wS@=yzZIjl zRM_1(Ms0bpx=D=Ml3;U9jM_3_F*`r1 z@2^GbBExC%Ec}~<4K6&iO9Sf{3>#b?L_a5Na7nQHl(4~NKHK1o9K8pkC=ftcnJoI{i&z%Fiar~Jv zYsYsVnsgoL`Y109te+mUwj9te&|p7ueg8GIR~g;CyFYpK#AkTL*^eKeb>DKR#TVwH zLft*efd19}Zm^heKU%VJel%l*7j=9q=%RaAB#opD`(i-#p>B%=_oE~B-35j% zY;EYN?)MfM)JNiif`tb18<_@ufuX#3Hjzr%BEuKAnq8Lc`p4`jau*xiMFbTXzPJka zLBirhhd6%7@0WVTL&ZQg54y*PNxbr&z+FCZ-O5iE7xauq76R69GdMnHt(LxB0%XcFun^F19}`}*D_Z#C?uPgq0w6j0d_{|Yes>ta*!~oH z!<<-2#Mt7CJ007f$;(sp<-f##6f59$?sEOl1T+ zSKRk3zFI)oyWMBq?t;U3@hsbULJvas$K7Xde)Ja)>W9FsM&3mp_78_B8VK&U7~Cgu zc{BdF`~1hr;qHq!T_rChI=rC;!fE4ZQh}DfCkTiDHpxJtIt!_z$*toxK)4^fL)=k` zQhH?``QhMw+cI|Myu35_!ypV2x4;l_Kbcffdc`7OFI{&s8F!DL!7z(2?sVt-hEOBO z!^32OfhMlF_#nFY?;^vf`^|TsF8F}zz{1e(K3(LY)n(#Ph!-Ummjvj7dwrSU@4i*T zzJyo+br)j2mJjOX9(JUkXNyif8xI5!5@c0@OAKMk8U=GL|efoX1N7<${kV?*1>Z{Nuq1iws~%I#;9; zSyEYD5Y)x&AZZ5Y)T98GP+z)xGs0Sm@XAgWYV23jf zq~npt6!_BQyI*$c8Ycdsi66G{!@G3$d7xr77UR`92oZ#sS8BNuWmLe?ouN|%4M@ zc#8npH-0#v2}kIF4jy#FG#aq)Md_Xnt|+_1E#z;G-2@C~jZWilVwmJ0@h6W4ei)|_ z!$35k=iNBQ6cl0bh7H1K_|voQ(cwg>N99&b*-Bfqvdl>S>i+VCi?oGCbYqi)hi9w3 z;P}f-YDHszMwE+Fyx3@ed*Yt4y)X@~&tB5?04G)bP7f(m0}bNc>x#2f3jyc-Q+He$ zUH0Md0`=S6RqxHiH}PTdu6N}cg_iC(RW8RR9~E=~IPC6Y-lRmhMDHBV%~J%h96Lkj zqUqh;9x5gf=wxLM#<;oHgf&JxTk-A_PQ+Q=g@*Zb*#KTRc*nqJ-v#H9JJwYHi=6rR z9m1Q{TMR}2ddSH>Sx(r=9}NF2E$|akL>3eNRtAwf3jy*o7QkN+AJC297yhfo#~{8b z*I5w%!VO@r;yVih{l+)rFi!TpIElQYG-1P+Vd9NEZo$Wg4@OaVx*52qEG{H9eu{Bq zt>#luYll?1wV{9d)3axX-LMIYdsl1x#lt-?HCVLQJ;79Z-@NSV-@Jrw+-C_Nr`bTE z!v>&g6I6FN?~f43is32@)RUVG)J8Ku6k?dvSX2(c-4RW59I+&sWER=m$r$}s7t-RX zdVi+}Ze~Kfh|snkM6MUJCl>=Y#tO6mhYus>#$oVH3WolRU=&IRKrx?m_xN!4AEiW< zz=xo$^|Gs4-5Yd|iNNxmnbcXEch;7j-Mw?*zcnafYg5CV7!4jGfw8I{sOCSK%Qigs zBXazR41_mw*yg@i2+!@Khc>_V9G_34{)IzmF7+=ov}NkQYjD4fDI1eN83z3|g(lCp=PLBABGGxi!X1LzBuGf>m<1+}{a6SP53Bs> z9}b^g9E!LVbdJZn&)$3#p;j6KhYR2gzZoi+TRx#6C%|b5P?>=V;BlDDLSf+%z}uiW zNpX>~sIY&_@L${-oJCNlf}&0%LNzEtMnN-75U%- zV)gC0>m~1k#Pc5|-YE-H?Y#R#m%c&U8jS9@@cISDPMx{_D>~;lnM?-1x&wX+Mzv## zcC@p9yq)Dma*+J#5nT8=+-TzU&&u9>?gm4jMcV08sXHQ~gMC`Ues)*<0>C*O zoB*7Y8EFX)t0v%@!TnKdZLFjX|j2-n{ zf@nMSs|PMFjojysvFd!isGSSwip78Moa^ui^;)Q|3Z8uNt-+&Fm;gm9xiu(qNihT* zxw6}ZL|){rLn6y=7ZPzJq7H~Cx=lDr96p1m^y)U@D&04e!Bu*7YjC|~aq=on#%UsM z3M>uVoEmq=zPog#DUH~jaBl%i#=ChYpd#z$rGN0eX0YVNvCg+|k7E|0p_|W3 zz=+b@gr!27-Hs&7L7~Oc>X2x~w*-ww5idQzELfrN_8`d<$*t2zo-}TkDnxHQ)+-MI zFS{i;UV|6{M!(PR*;6WVzVw!05vzf=!UQ0C(JevItz@U&JK?6?O4iZ+49@XKNM?+) zaedE?nWP&msqONjyO7UCh;o69#BpDP>V-)jm@8PYD)@t^v<%u)&u3iCGIp}xw+@CD ziIqX&E(k~)f+s%4EA3syBI)ri!2&&ArzHLH4#E0Hhl7ie0&uq?TW$kdbu8bhm0q(T zJ*|G37*(iO)EpZ-?b%IyNZo{c&Zx%rItOzdP}%ugd34rcc*^urD%>9LybFfmAVuYj z4WYSQW6;@+r@V$sK&*xtRG>{+R=KQDWq z?aHAG-?P9FeC6+-2DW&d-OKu{k*cI9IqGULFT0k$u+9_A{;u@xQt{pKJ)W$3th0!S+Hj0ZX_xVjhna>Q> z7bg#P_OqJ6VIRz?d{YjZ;i?8E_J(XN@e&`t=pu0wlJh?OM2>6h3_ws;vco_l&^H@?5gtY@-3ALQ0L`ENVqjm8f$jQ!frIfu{)=PHJJmbuzGd zYHl#3=MlfV=`UVa`{KM#5dAW-x}xW|;^T_0s*2>2@rI5u3d5wZEP;Yo2jO_KRoiH8 zJkWRy5aWBvVos7|9JklkkAaHQqsAaSUH>ul2JhE7+c9d18y&O6F%FM_G~ly{`HsOZ zptHdBYe5)-g^wNc`ZbK#qul>tM2_%A4Ml&1vmC>>F^kSX>etNgaj~T1p_{N_n*dyE zZmexQunP18NIb(1uwLzGa&s&q=K81Wzq=nlPHv6_Rj>W~zy8<1|LcF(&YF$ZgT@2I z!mhd3^i16~yzu6Iy}>WA@!B{Fe}}1T~&{l(Qlf14Yd8;>?OYpn;H4je;8VVqLZAU(=`jN@t_6tcH{|0#GS%I~ZQ7Pqf!)s$AKV ziXLh~>ia7We8?OJh=otfmA&V98Clq=bBS%WSDJPl4e(C@gT(lcABf=K_tlnczjlfg zZ3osRPG4kuFa&1c1k>rB)fj*fN|-Q1Od}pd-WcfzNHJ_AAc7oR4WPH0QOyf#sbzXj z(u?}jDNX%uB5v(jUClq6k!7u}hK)E^W_#8aObBy_IHN2W?wxr4&ymoRdT zh@FOKOuo5NXj~Kq3Pz~I>W0xSEkZV(R!vqX=y{Uf00H?~TfV=-@c}7JY{jsBXZ`ux zAHM%;-LnVG$#Vw@2CU5i5OM%C=q2<@8}|VM%-dX9L2B?>aGabNFpfCI4gLsZiajZh5o6eI^RoVxjeG%Y-NE}@n|u}kgHr~Y z7PZyT05>h0WjqtmWM`ZoIK&c@E1S84lPV~oNqj{u5_39r$638V)uSF2Y$ihDj?Fy7 z%~6&hR9Lvss)bw+d1}RI7Fvek;>?oT2ECFiL)gN|i{fNf3+#j0ggT(D&a1N4f;#Ms z1=j-tC>}>_4vuD0Z(0AjLCA%};TLGJmWbxqhl<(P=mpkXoz+burgk%%`FwxPZ6{b= z4Yrd`kH{H$P$%t@@&U;4C+7|1tt8o<1tMwKGLr%8>tGk|6u5F z?jjzvJ`pA2>NYWSkYj49dre?&mnbG%AS+a{MBR5*T3g7_jiWI1nX7R~7dVdZxVgq+ z(OA81*(FBnPN!$4YfY!73sTd9E*&R@MqIvb;H3k}Yw1MUCdCMS&ui%(6<0;xCl-2pS#5BArOZNso^F9vgOI6=8i$pmvG zUDOSc^`M=o(@DS6a%UlptNx<1oX-2IGM}>bW0}@4slC@-UJEahexjeOUyHtxN1VaHO!_ind|QI5n@dNL2Fi0hI_=BL1%Wks1K^?JRW)6XVIXusmYJ4`pssk8!Qdu_8`J)9=N< z{P6vLIH-^mTsy)WC&#cP-@SPOBah&+MtB~uNO~BiQ)U&%OH!o|0~f>CPp2qCl&S>_ z2X#sV6$Qk#Fjz<~e8B37(|hDLxzxV%TO7}QD%`AWL>0|DQ$iLB)~^@i=19j9Zo!P`CqIaOgDbSI}r zq0eQ@DCqG=wACUPSXLkG%u<&4ACpBq4#)P8TjHo-obaDxZk02~ z=p7tfY%~uJl7oZj;2=0S81)VN42)%vCmcZ2_|2#vgLze-nr5f{+qC!F0sPmu-~oR$ ztb3NI@Rea3$6zuJ$XdsJo7k!30my$dJ5Nz9H*P=#!M`n_wm`8qEX^A2WIsW0wDAcK zoHMx`Ux%@WeXg#y9H0n=(Tk9MQE%@^l;(PH8 zyi1?Le+TDl{q^I_vK!~M&W>@=L>rC4k90H|4UM+&ftXDjROY&IaA4E{q!TyV1Kf6j zaK$Qsx5^n|wjM&&8W^-x9nCHl58N^9GCZIiMinjt6D{COdl=bcf!u^Sd%$Cycx$Dk zHXhmMs507bK>+R9Ls+Ztol|CaxspSwiv0vuZvg*`ou9!v8qmKf{d+?H`qdUO&SpXy z;7Zf7K{k&ZV{pO-@7Zt~6B_Wt#p6y>H%-D3%uY?Rw1qhS48yvabVz^17j*$wx+TfSaXJb>=^B=&w~TgG(WvyhRzRK-M6_dDUi@#9ew6cQP+o}Hxd%`Cxt9?=I zXSxHWzvoIVd$-sojKo(^Z{N9mvER7#qf<>w)%JHHmx<+Zkl+!}J&s<7j1A77&3aSV%*wL-6acnH{J18zAtNfbz8vAQUNBA*!7!!>4{&mKdXy$f7+C0$`vCP$4u<&id;ZDaftSO&1^mr}bNCl#S`@$s z_H$>w2f(k}uX3bx9b+(c&R~fp@VZjG8O;mi@tp0qthI-moA)0o&jOgI!FIF58GQq9 z^xhM~zzphC)oNG1+}UY0r<Ia4m&k!3%AA zf>I4=7(a@EJLDfhY08yIcb$^(R|5=_Kv3U1m(+McBR-YxEM_Z5AmWa{a+-TZMdf9% zTky$M<`sRxjR3IXY3|5>V#juB`}P0?7ODR^O&_>F>trTZ`&-m$$%PJTv@}+fiytO? zCE>cvcy;w#{-;Hcmb6RAYD34tPXN5l9ME;%+Itr50ky=JX6k$o@|X<}WwakXC+)TR zR0qwqG2bx)S*@4Vt7(p$=kjrN^&Kd3*{ZS7 zB6N^`d|(8qfxxmiV?I6EHi+R3LBe-pr=;MS=;6-qnP6p5!n%M&=$O9qD}o_SC~owJ zYipJdhLB^%9pmptJ#HIq>fIo9vi_rqZ$UwK{KoI07ns1utSem5r9m7u$gMBo*@X!m z(D12sdID<)RJ*H@7r=B+F45)J#d+e}HU%tU)k$L!rdO${XTW~GY5^%N)u}B90B!#p7}kE3(PGb0LB*UMUD8x8zrXIx0#rHC(u~IQ_YtT z7GB>$Z(H{ItIR3zwzyZ8@z1SnELT>LjI-gA-YPX-x(Spwh;kcWi3O@F8oC;+kIhWa zuGos;T%9DRK`VzgYCs*=nmC->gqdq%I^~aC>KfLpHb2g7)4-TF+VbkK9O~o@%cN4r z@ZBTk^P1Xk?VDT!>O+L4U3&E5eXRi2rB(vmbp>pcHzu>HKGr%%jP-XK*1wpp!un|@ zbi-`(+Np=O_9o|GbZIYJdR{`y_M9lcs6ANJtQR;@&+GTm_tXo3IL!qA;BSy<_B=~-Pwo(UUYc1C(3XSR-CsW-W=UxM_*ULBL=WXj``LJO1?6C z&sibQJ9osHZ}~9r$jNv*jT-0d=)ITlR12|WO8DY5E)?1oWviR)X6|B(Ye6(D~(O0GiQurCV>2alg$pPV8kCnrM;Um-{XvyIW04-z|5-_RI zfugeI<(ibM1Jq>Pm=P+E7W5>JJJK}>?Lr&8a0kO#v3SP-QCVhJJ^4}Jko*$# zdaf1fzPe7EC}7H+9jJ6xHRcWf<#1@LnuB-M-?@LMkLvd-K5G2EQAel4j8EIbFIw?s z_R2OZG*6+RSp`c0Nd#1T?kuHF^(jq?)hVZzZR|tM(&VeT0(E#}1@*KF_+=%90NPXn z0T%FAwqEU1kP*;Tpiw=4bi(HAujkVOHOhZFnwu8ArUytGy5!Sl10);3F?5CsPtAuk z6gJfqa431jVHK0QEY~Kw#qH)6mjo*_H!0Rul3A~m!~xT?wF^(Uk}2OUK3E$Y{~?i^>raz29z29x48Y{Kg&*VhMt zTkWtT_iaOHU@dz9h@0&Ps{yvz!ijr(gZAQ))|Q;yJu1@_$EKmJPOM7T|#!{}!$z+>IymDv(>>me7wPupUoT0|CaGv=q674}+ws|CspUAn?JTmRgrp@{O>zJj(u>I7g71!Rkv)RUgE7XVZZ^V2z z@y?*k*fH8=_cV`X#NZ#?FfF}@;<_r1*qIlmao0P-BXzlN|23-;=*dv@l=S%aC2a*& znH{|rTH~#LPN%n7?|vWnGW-i`q4$9P-NcAvZKswhqFzDsxWP?)_zWF(_=DV9cD9ZD z00x)uFwKP{w_I!^NKSYM@JhCH-|7h1#G-(wW*?z`(0A%4{^=mR`12vuYFX`#d!~V# zKD@2_6g)i~$|noI-Q?ds>I3xOlq$6G4>I^%hgWhlt!nkGVDDhwz}Uz|zTcn`;0%}A z=pZGx37rnsbn?U92EOt;uO3+B2l&+tkaO~fKpq`1LHOH&+>%eMHTm13X=!4+&1?iw z2f@w)twf)z`?%d;j|B1HHsf`sZGPSazF@~wP(f)?0_j#!fe7}7uKCVqxl;_AM%krr zOC`AtG4r=hI^|ywNmGDc zq9{?eU2jqAVBHu*n*~lXv{9;_*vEXd&KzPKfa_4BX?uc4ed9zgUweQX{)X7VCUVt- z4Nv&^99J9wT3OM(xmUBJ$oSTra|XRmItFe_N*-Oo+I>fF)gCyfvkyAhBWDHp!^){W z#*ks zb3z*AS85$Yd$H4-bo>TMC9-kaegnsue)sLk>gve496O*upd;0D{9YHBn~8rg=-TQH z`?wEjA)9iXC#$OwZW7|34GepBS66*)3%2L>6-Mn-2V1BHl;8jW zLJmNv0f3N?`?#rw$mAk$&GDLZjOzsy^znb5I8GA}*f`_$ldG!=k!6QcXt|*0j!D14 zvnbQ)5!$p|hk$~D)|-i6V1^<(5fn}SJy$YSFgd{8am^6W+;+u^?!aR2fl&n}vK{tq zy{p2BHiMDYl3UDT=g=(I0`Flj$6xuHZ@ zD*O|JR5DpgKFt(pxM9z%`KRt+Snz@yfqAw>n6@#2c`(y zDGL6JQ@@Qbu=nCSUT(<~Ma8ICOFKEI5DrKTUU51wSx#gCE%1Fw#Y$vEcMC^}AJnhV ztUQ1{9JoCGRC~a+c#?C)%K#zj#T$aD6NZ%s;Lx)Yff|V+lC$2=+MB_vk#3w($*+1(H%GQkbuy)oOFjTHwqralCVo6b?BSi9>;+mBw6@Mx3TLPaY zUX_2Vd9-@TS_`YN4}}UD3-4hdUQkck0ae7qjK#LHa~RF7U_03g>duD6&zzf?{eUM4 z@ZjR?uUprA?HAEdn(r1rEFnQnwu24;yaj5=+FGgm^<>SAj#e9k~xxunvoApIuj)xw&wwp^6q zsA!~!qV)7g-GC1p9XCM>0VZO?1MyrWT$2v`Ij(38g}*f6rc>9lW8sa1<}r2(j}Sr& zr>X^99gYf20vnC0U!L)!R5l&%r$%+{r$)OIS+B}N!8b4wdJ6&F?}dF0))XE&2KWn) zL}DcBb-jnS@Q1gf8J$x6VjzyXsUeoiY1{26SC7>mz*NPS8vASxf0Rs^%TPRUz_Mdc zhOq@?zm?SMR#c~Rp?oVhJAR}Z`iJS-iX14-h8Mxiaz+jmk%HL(#vsUF-AM?n#|I-Y zsMoU-RK$5Y#YM!)0we>TR~2Rv(~hYO)c%h6B2yaX9FGDEWJE+-(L+TStE;kgONkz` zx2}hdVn+*Bn4OA1;MB7Cx1a!Q$+%4*7_aAZGg7zGQ0I`yhUf!BE0c$8LUkv!u&fMc zrbDSY`_9bVHLY#ws3;9R=UrZ2c}Mp)9eeCW{X$=wTyA?PE>wsAltu#ji6qs9bVLnU zL6hi3oss5e%o25a8SGISUR=Ado&vBsu^l}5%oh;YO+Ll*;RE`@vy;GC03$Pp=w-3b z?1`Pp<}+yU3}yw|K69YX8La6E=78X36D*t1fyX%pk8qO!E3kGUYg zgy|gB<0O)ibqKOfZmjgkqmA6Yk4bRQS)pE`@Wd=TomLx{Mb()CvOc^kpgOby{K`5o z6mk?i%8kJ*51d~0B3}t{bxo(qigS)D3r~1j8Lg$FcH5UrUXrHAZSUx+59>9O*#?q4 zwz0t0g8u(uerFEAnzQ;D!^7%aj%t-?bX+^*GkoO)eC6O4Ek(4VPe&|2STv#hwFPx>@_{>oV&XKnfhBs zm{Gd6X2TE+r1&D1nbtuif{F-mN-(JoC%nTLc+-gMIEuwKw^QM@^G>=^o3M=HRkwVl={>M6hL94Yz~xY_5<82HMSecE{n zZ`+voLm2)cu)nLaB#zh&0gBX7J{*po2A~)`umhy*_^NS?b$q@;;6`#R^rr!CoM zb}l@`>B{^7hDF6-+ltULigoVVKbe+Y2;i!Y6mQKr9zW-p3mTvpF#^-$ys$->M-RkM zU&eeWWYmIna!Z%ukxs`z7Jwl<@MYvg{CA?5-cRsMS*^W~%=s0Acj%Z@`M?ysI%dgR z%u^>^+fYIW3LNcZf$AxYVhJjiarZTrh@ViX1;gY(zcP6&)6l6_UTEV&MIi-SnRgis zSBoD5)V#_iGmVJULsmz@x0vEU>I@?FhT?kB6^Nu+E~j3c+4bMH&7QmVvETdcVEv%E)22ic$w71w9E|$+tX}^4V7;?rcG}xex3x3H zle?Ke=dCHuU`jIxvo6UTU#v30*UCyRFB*n>U0H3-9;x~~r?Lj(o6@1pVD7h?DjQ@S z(_+8{i-l+#sDc?pk^rYtV~zHJW3+=17FnI~&}5z8FDV|YB0L8)Ej^!_M^DJXO9QLo7fX?3Na$kxG)FI` zdIG&80gXE08nqsX=wUK19&V-#eTzF41ESr_v<@W@3)=)z3JbzeR{M_U!Md*D6ltNR99AlfC zGR;0HKRf()mJJ08?{6!MwbSF47j3on+gI0VlfG@)~W-RSwlCOcuSSB6um&g&QiI}Cz5oYq1EZl5R zN)eHq{T}|Bdz@aMaBAhcR6NCKA9#EhB%VLr^?l1)w|{poDYgY_(7uGo2TsXwaRUqY zCE&AsLfl<0Q;H(GwNkb5TVq#wmWbQ>yo9Nn0)4Ai)SWmv6cwJ8cyXiq4W|l-kX@4Ap*Fevcu~K3m(;+9>ev&}xUYdkVc* zZX)1T~_RQ z%fQxhjxTw-LFbZfI^8bz&MN~PP*CgpHI}MPEMQiIPVqC!_7@a)vt@7#R@OuFtSini zX4Nf*9E!Gg3+YI7SSp&ISA9kg*W;}BLr7ywHyEm75G8&Z^M}fLIWcotFEBr>rNvN? zt5-4Q%J21%3#=@;c12~8EV3c$?5pE4ky$FVI;Env$Z3$U)3Fa`twC=1tUYw#Wb&O3 zi47F6U!3GEPP)&)7c z?bf!&)1k)il!m>iw%SjGl0j!*VQN`KK^1m^p#+xH3iq9LOm?T4ZFN1@-AkQoW*)Q; z*$Eo0^!tKajWS~Zvp>WAN0jxaUJTlT$|~C!h5;je%=LWA>L=?aCoIS+a>u{C2Y@RZ zc+yF3!CP9&ji6KuP=#UIgO-i}b?qorBs1a#TaixM$%qgUGZ{l1DdJaUdW;VYqZqW;1NJQy$u>Qa^oiq;!KHjqmKj~Zdxl?p^8SXmya zibXF*AGiHz$%=%uxHX5X)>2z~0s0+-ZO30-_1D&}WbZ|7Qt2nqqShQnP_&zBf=khC zxzR`RlI@Fly{a_)PRh5w6Fl&ct6edzEAZA2b)BNv5N>q<$?*1M_xMR=b1N=|d9k0p zq?ms$Io&g_*{uv&KMuu5z z0{KL3Mmza;O7q9xQ86KZx;GwbgMx1Ee%^F|1?Rdev$#fDab^hAX1eOpHV~1sTd@Drps*F zQ4bk^-9UOb`nz)t*ovPY;HT9#(|X;WUrCjQV)AfKEc_PlHh4)I zpU_w$2Xz+PjBz(uOfA*sLjgKz;>4XCEt8sMYD$ns#lWZrj3TX{hv9oNysKX!J@cqN z%TBi)uTEw>K=+{nx=;`qu~Grome&D&q;2Xwpc4w4#11;5d1qDylhh{t6)CG6Zga-h zstPiHkJ9J8^-fusl1EJ?psQThFjBaC*t_2+o7gv-HiJozK<#M1v{`PdY}|G&)&%lM z+ArzlM(HKpBJshp^6N_coMY^CGU-C$LwIr~1}$`}pqNy%q6E)<;a2#}F79D`HU&_Z>7%oJB)j7ttaJwGYfpnQxS;kg)2Lpz3o&OYMG#Txd$8B3WCrzUO-`*o|skIY%|7EbYnX z=(WYmIHoTGeuL%ojT;=Z=^Gq628zR!Ct8?Nc)1d&TFRSv{dm^>Ylegg9_{-8<4f1VNa+z8~{T=yuU-dmF9Gei9vBa?C}bC zFE*+HIBvpr)Zc)$xL3LpWf*n`QRw@f{H)79K?3eo78YS3_NdB^Qp@W-1-S$|!B+mhCH^L|@;Bso#oGq8 ziRbiAVc5Bj+Xc)qB}uM;LjbnyU;tucma9E$emb4u^Ho)Xj@s8j2-|#{C+3gPrk(A! zf`W;{sp!MXZ3h-7JGZ!b$^-d`PE0(sm%k?sm0a>{KSfv^#Mgo`jyj+hw3D1iw2+z_ zBYZ_JX0%0ve*enUM}oM#cJ&v(Hgq1{2}MyQc+R~=+vvoN_ua(3Inigx1G6sygr}p4 z4Iffa-edct`1^|prMTpA6!#9UrUyOwyN`DcymQujyKDc<-5m2%MHEFg@1?`X7@pu5 zL%?TE&jj+$HrBpcHHv4ei$p~imlbbi<;G&*7)g|pAOz+f(2Z{B52icc&{RfNZqP+v zlw!w&pLMTp7@fM;{)MYop4ItB_ti@t4S|_RJk0>T`lt~sKj$D#$Sm4S(;lj(P1O6? z5HC#(raaW1uIyp{o7|H7*x*Z20wGq(e(@9Q@}tnDM4Ge1d95B6TRoiF>|w515j~j& z66AZqeQyz6CGx8B{bW3yffwevauVY_&G68b+|H2ad?e-(@_;fufyc@re`6bB6p=P! zgUG^h^NSaif0qme><9=EAGk`LB~IeB$zyea;R@I6CUEzk_!%j>;BM=XsG-=cp2W@* zKT1v-!41jc)f8(^U)-gI`5JyG-U}*EEMxGm##~j%l3Mq`(!_Y7UIF&J{^qAb>DINt z(1op6wuoFR8-4r@VqQ&rEo}|t0()Sn+K~+1u)&G9JrXP-ZIan) z|52L(=wIL?*hL74;?V$FrnE0Z4hr=3Xnodm{ zUv%$iEU1^Lc@FwKdwhu{6{bm%4s$l-W_Ibe6LJos!jFS%GaTw7$#0WOi;tOPYl%$Z zs1%-dCBgIVbD#6$Cj~m-FYsx>ZT7?$xLC^sI)4=wTj5K7;4?S+ac)C` zZaCfBbenM5AE+yDEuj9q+lfmC+s%b|#k#L;Z4K6)motq+8;>AfZB@m9VIYFdgm4y@ z(a^HgGUWtPM$% zybZ_j^u{|r!TqksVUmQW@Z)c{8WmY@WFzK3dG458H8GT|`l5Oxz+FQW;>_XKmd441XQZWj_ofEV z-H|KBrS{exCbqlzZPf7q+Wz#7&;wHr`R!ub_TsxzcZ+t__yA&?ghP#e!Cu!+aFgT z223Q5Z)2c`i|1J27hWHZ7a@7%n+O>0Ca9^4Sm6{&A)yAHCvW0Ga;YE=wntk7JQk1E z<)AOfUSO2R1z8X6TF2ppJV@s@jUqW?Vb-b=v-j-R`@~k2Z*8Y zq|#N&3}4uyeu0F%!g1$fdtLoDu#+I99`^Wm&dN%utE_Q(g%7$Ei#@12Bg7ACod4#H zs%H367~p^jX5wo1S~kFkZb|sY0Py%vV0oe6?ro@-+wgoGh3S}AQ%~9#NtF8_L1rQv zrJs6L==grI>UI)|>d{WcH-`fMcCU$99}T0g@$jyGIA3{KX5S)HzP)7DrF@k11K3k# zOU0WQIu(~Q$QD416uh7!V{vx%dykRZKFHkePl~e1X=*7gRNe*7BQf8CZ5;dIk?Z3Q zq(Mh>xv)u!?=0);J!{Y?JNRP+`W60=GfTf+PC@S}9>g8m^n)IU8G(W9cu&98cY^SU zw#0QP^2TE4Yx(PIKH2h;lRjr#zav+guKvAqa9-b9*AA^H{i=|^M!UH(naP6eF-q|v z4BkmLc*AY@A3t+K`E72#F8 zy<-ORiyiYVJGRym`23ZqM@ieQlCdazxM6W|S*bpZ7wIrU#hOhizJRvmAm z1T`kbBbZ!y8=!v+onDGFXehe5i%jWSOf6Y7YCgd|!%$OxFpz@wNh6+>1O43S zF+#7CY@#h*pxdapTN7aI2x`l^;!%S@-Ri)>E30vg`+qL|p|n)=jHiETe~=Q?SGX}S|6#)8cerQ8gYgP-S%seCKt|-T z>zIPk!ZSvO=NiDmOVldju{&TG2XI37Iz;8Y7+d-icx)h9U6_@?i{D1x@iB|UajJ-) z%nU43^%RfUz;k^%{D22f&|!Cs%Z;CGC%+x;M!Lr?$5M@bP!-g3n0amyZ(E+V#O>@H zi20g`Je`D7(@7n_I6Y-U53jkt_3JL3q% zXy9c}j@Z2BoSJxnMO^+&0Ko$ttWt*tOdCcqe{|g_&x+bn@6aTp>ze)>(VhID+}0Ez0S1XwUw5;AmSDlv{FWhcGhK$}!)*ixi&- zY@E3^pGaGhK-8p6WhhqE~W6D$_qt@P}zbO;RTL0{*^5afQw4Xmz10@aQJwj z_og$J$4SO{cYKGhexgC0g;7u>v<+!r8v->Z;%zw4l$(r=b>_b?M{A z8L9m@pu9fDRhdJv@c$P!0|nmQj~91W%y)H0~Xs zn;Lh{O#Fq{qu@TRGcKnF95|Rt(8fbY$19i}N|Hb5E2wJW)KWR0`xvi_;6yxVC>jPR zfv_T~Czl24CHL;pvBK$eB`Zg|R%8<5sU!WH0^O{w0abE}zyntNm)!Ikfa2-`JmYL@ z8TD8<8iwbAS{JfFesyANOmvV7Q-rs}?5*5uqs4fo;&+A^zmr;OO4SC|u#SX5vUVJ?OZfgcU?cAWH8P-fO;IppchhN= zjOnF3${FK3e(o$eskb6KmfoyvbtTJKzk<`@tGh}qk+qvAy8!0Tv$v<@ zA5to>+w*V=DdD7Ii}FH87ZbBaIemhk!!&uW6cP7g`j$+zBwmQC7kwq)KpfEJe4)y* z9x5g(POn}f9kl&yCc-N2`AMSMoGuib2^ispm*3IThWytPa)$B#19(A)}xR zT(SUoi44>%25wRSC8d1P50QunBwPbtfc`Z+jV~>us&~14zqy~6-vEy*29C}`P}sEB zpmZL2iTusuRe2_SJPlf%J*1Zf;PyMLjRHfCC55F4w$Q%BP;R{K=5cx?0$**S5(rI%Co!Dy0V24@&|PTeKfB!w{%6s zrDPMI+KUjVsw29d0v=rw<3|h@I!gmSxH`Mb!ys8U6KoIN135~fP}5vVgF{MN4C*`R z^GX~5QL0QSyuI=~2KHEWOoK-bN|GtxHoHQUo6knY>t>ldb2NuRP~`qdRK}(}VlsIX z#f9@~yugcvpn1*34jW?r{6f)mn#IqRUJ5zJ^s(!_WbF^KOD^aoF|4lM=c0k0v`AlB zl8J-1EaMI36$h4o=2a-UC>yFOxo5Gp$cF$k0c5tRj2_|@yi?Xq+|#kchg3dJr(pl! zmesi_97P%%aA<9p7%GN?sLW$+`Q9#%Iu2Kr&cw^-s6MxKRrI^%HHhM&XXcd2 zV`~;IykvN)ZbiISz0lP=1w94WUS3W4l#VOiRWrLT=|jBls!{qBAm%&I=0Y>W^T+qN zOVDNsMJ`=G`HoFc^c<0lpxk8xT=l+^S0{LWZumA#=}rzTNg`i-HDrnF`S^=w<26|6 z^wBAliz?7D`$hiv6@O6Vqj-Dfv2*-uKsS-W<>OHH8|{hT?|EhTBTK|(L+Td?%=Z9@ zU$URnT{s$nxcephNu^`3s1p{w7-|n>og;u?HL>8A>?eJ}nSnMANho%b_=743O9F&} zSdq%DiF2T(u;Mps8T7{s4ExAWBk>r57%HazQU35yq`l4}#(uyYXhP=cwjfv1FwUcB zHEso*4XNIhw%p-GM%zGm@U{hw+VB`wLIRf8P(=d%0N>AV>^c(8ILZ+WSbI+J8 z1|}on~iv!0I zCd8natumlHrZ_VLV_Nz}VA3Mx)~?*cw8b|b?v9mX({mTw$w*TH()ThBTa;hfVNiB) z&#G=CRf1rebrO-zO_VhrEK!3a)$-hkQBuZ&D~|8vMw#cSlZ{c`Xc%?vRa+arNO>!4 zHI7`rsN66Y_rQ4QOl1~dSkNzKAj4Z|s*=W%%M9b@RZ5gB$e(Tv!ytdTzfLMYr-Tn8 zS?28R<=l}K81Y04(|d*SE<9Xex=j&_({0}i-miQ1Yj`CB$}nSbr``L_=}#T_E#u4@ z7^C+C#w9@E_R2wTZ-4jg?m=&Q&_C$!K-pLN;k!31cj8lI21G3jZBBSBC#g*I#D+!^ z8J0}ZE;AgO289qAc&!2$)Y-QA3zj=EOr&k{AkA5qBG!#{Og})znby+JT1#|nZ=J_- zXE7VO7X>XQf{Co}RKwH{h0V$R+u7_4zF!GnV_wmf8wZB&hMrqF>&Q zMUq(z?23Uli?Ln#Cth~((8-Sc;eJdm1s{lLaZ1aktCtkcUolgKphV8G zDRT883s5^@6#cBuBaNNWTFV|fcr}`R;+&a7+6OzCPFvffinG0FA?M;LS65#PPslK{ z=L^e6DU|R6lPzxH_6uFcHq_J6+6jd^p-0&Mikaf@Agr$~aSeBZ+sL~N?<>aawE0+Q zuoVM5zob(+x8<|wr)={F1hhqW)CgB=jMtV7c+yLXKg`08UNCjXi3(6o!RQ_U@sDZ0 za3JD5%@k7)piGU)Am;&CuHD5qszKcR6#4gigFZ~kfDq)Q<2!E8Re1)BI0^t=`)5q` zNdeQbfXBtQWC&EMhd`~Ub606TXpmr30?)To?z4}h0ZcrP5=I}j-da9{4Wj@K8MO5- z@@Z2d2!Ei@sAc(vH)&r6c)F{Nl`wD0G%fHAD#mSX-)f&?pIMNZIxPGH-VtumZjJIU zYXO#znUr?wPB=V!&u<$L=|}Mtyd9!Do!?*-@ypk?LJT_xs$bFXDc~vrhI`Y>?9!=Y zkXib@y?BYlxN!MoD@G>Yj-3!M;X^`=Wbmx? zlA;9gom3rVC|shux+vp*RsnG}WhajcEsw=T@w`5?a)$IC@>odO^WY zboD&#qlq&fbSJh|(i>Z1bFjFo3T59Gi!gf$`ERvQ+uUL7(surp%>!pE{0d*Of_;+1 z@AE-?qXsk=w9DZH1LL#6k@{J_t5!wXx5XlJr7Z1<4t z9lp(;zYQptpMvq6CYt4-5-q8q{mR@v=xl$*vRlyvWZNl%`$Su;!ocf2Xa7bMoOz*6WFD!mK zy)F-@e?<4i+S|DEDBWZ+V^iNX$E)V@N2FDA=)&)x6uA5z%f`7k zq+BLxr5P;zw;?t^)jT|s@8&+ zWEwhsFoqb%HZ~C3iBLGD?vhld)unWm1Q_WY$AN5)Awik!lRXnp;>l_fOdvVuhdpp+ zK80EzKwshaEO)KCRo%i)-pqU6j)SUh-TglIxzBypfmtRFj8f>5L{YP0JDl{qrV;-1 zQx+ralI0VP^$+k0A?B8VoOB55B~Gh_9;eI*gy@8MT*_7>t{ZLYg=umpO(}Mxw<^L< zHp2z-+8iD1MT=RpF^j*|3kPYu&BtcoaRnNV`;9DFZQ_^Ju#0{hn==O&l0g^H$&45D zN~@Q#M-K|4=q4FrL(vP3G=2r^;aVDyauB)ji@oH0GbL}2qUC0|mL;+=vj=8B|M?*G z@1MQkDT~Tmvx&Z*U^T&(E$&zN*l&4I2dlg#7(adX0G_23g#!D6&MWF_xC8WU(ej{m z4w_OKb_QrXQ}ufXplTT3xuDG#F}`NkLGs z19VMqVv>@4iO45I zwU%V-BQ?PdKBIu7Brp0_CfMe_mh~{!Rh}L^5yKj!G0OY%@;jEMC@~RHq#^MQ3o9tN z?j*^}e;Sa$yaXDey`m1Wp*t|ja5asZX#{|Xk$~Wg%vEKe0b{|9y%tHjvRY_c9ft`Th?axdnfj!W%H2PmtnxAA z{L1cdR0bm0dEYzI!N+YB`o{HegL!Vs46GetL{kcv?+LEr{dOou4 zHTrCh0s#9wnvzdub!tIrvThPJ5Ha$C6LI=8KDy}GAZP~SuF;u`!uk5tWPLiwveqR9 zn+9fGkJES|?!|DY^p@jpH|l$VJdFf&0I3ay;Ywd zJky0sW)V#-;n_wz>K?QS6$6Ff!*y-$zN79y?Kto{>G?s@`N)g!fFr`+Os5tToaGx+21r57s7o zdbN`r0KFvcPd-w*g`*6;$oJ7VlqQ#K4^gUwhcc!CdM%3qSqa*HfENGb^%{XnlhsU| z_9ZNZ2LT|F9`j_}(~{oq-yd&m;5XMf=GTQM3OagVCs2(oqW>ohss*WfFYfo^GIv-! zREi#gxSI6ePDY(9^)>6-k6YtU8v2i70X|(=$WalQsam}v#TvO=0WZd`?H8ak&agg- z+gz`DXzXzvg#vDAp`pS`VStT%rsxHF&fX0#C5Wg1soA#)snD!E9ufq2BC}$5k!z=Z z+ne>8eO9)XZo8V7!hXC$dXvWi9nu3?p`e;yh}`?^Bqov`B8~d^O1KoALhxZ-#@^bB zF0t5)E_{5DoR`n1mIrbF9KC7eidGJTxO*6mE%|(esY+qsrx|A`*GM*TnC6M_$Z`*d< z?4kLb=0u`kPC9(3)7BNoYQIilo@VFS_a!5>7?GUUC#XdVmbkNM;>kyk{DNj_8yh&N z{vB8 z;njfx`Jm*l-NO`ZM}zuvR9&9}5OoTU&MmipVo@dSp;y*iN`KT^)~$sz*K39XVyXeK zyH|C#kh`_PO4t*wU@@w9jf_3w7FiDoS8_0a{WiK^(a1DLB~tzrr^gWQq5GCLEZ9sF z9bB6X&^eFkZ6I}-CbGgot`VbBjb?4WRX~h^@ZBucP$OZy?(nlHeL%X;6#DcyE<3=j z&H_28V{JOy*Ki3xNpqA1#e1I0gYtkXul!6HBrQBmt;-`GqnggesaKo@^u(9!iDHP6 zLg=?+(JKHcn11CsJS1nke%fd`$)L3&L9u3#LFRhH!qgk06?tlM`$Q)pv(PuFX&eB% zkTj`gG9zNPC#*AS$*EzjA>o<G zIzAonBe_LQ@@H*dpS5tVtqlrXtrpY5tKyiF9abO{2?Wdz^n`wcSw{6=e+S@QE5;>5 z;nj%7%o&*Kt}#6+Gm9lY|VPDQ`L(hNx zp=?sW+4ZGav?^qxW|CH7WP^BFKZ_d!@{IvIt=(5<7-h4nzH>~f%{pCJ4A?X;GeCA2 zm9#D?8;#uYETacVCtXCyVn+>K3K^RmljkB{DCtj3Wad*rd~4fTF_wzlcRUCD0oC>B zEX8Z+1O=o)+?=;~M&xsWrc%{kOu_&*&c08WXsxR6$daSa^?d({vOnL{sKgoseVnA| z%!@KX$|RFQo=tn#cV_hb2mV*^l5fj-kFaL(6wjT2fv#E zQELS;>&iZpwaI$etBdz6?qGyX%{y4mj8ML1;qOvuF@VkqvX-`=)%7f8w#R!^7`()! zbu(g-bjHlag9A9r2a~M>4GixjkLgLczdVn6g!3&(RGhj#K!PD5_v0yXy#~6J#iw|n z>Tawn2AHV_>t6(-9FIHnMUu^Ph$A@aIzV)ppS*`W42s%9r_-@Kqmx6S)F5PyS)sv< zHW-Q@I?!FXh#^Rfxd_E(KVt#4ENfDGC8O-xs5$W?6|;_J#|7f&=9dT+wik#ok*-j?st#pC(Ubr%5+$?DL4n=I;}zk z7!g-7WS^R69`xqXP6f52Td9gWzz#GL47;$J zHZ2nYyw|K|W+L1)F9{9Nql8M31;R+BS)@-k(SlqW7K^)c9HC*FOgzB{U=wZwaz2}C z#^nq)Gc}n3PZYY&6;4I*-5E+m(q%C49v-x8-NcVm))+{dB0lg4)cmUz6A@fcnushT zhi?ZY!lQO>iJL^khNkb1gRJj7F$0u%pD1y){24F*tk&vo`{OTe5Y5-?&D4xTER!W6 z5OmPH3@$YFV!|6 zfIP4dASqCR%KGyKmdAit9DLOwE=OH;0)5f*2XyDEDjA>~Q|=`Sz_?ZD8@jV;#X^%B zBi^;*O~2z@{kqzQB(AY=3vNh4Q9YOvSzKYNb-z!h>~+2rnZZ|jeDsU<=tG_Iwzvqn zTce0T$~Uzz%jg8_8Tyf0_hn~^oZgOud%^eAdv_1q?^5fgT|Pn#&DKBWRRmHTD^P5SfOhKqW*}hJ)1=79(BX1|h0GdoFzSjt$nSwNXR>Jl@IU{Q)1W0LktW*fc*tLz@Bix=l*$tw<) zY*sVfnAeq$Q*ZGC(pMf2mlXB;yk^LXCAyclryX310%X-;B$SHY8$4nieDtV*Od4^*dgl1XHM z)ZQZGg7;&O$x&kA1sM3xUuvVMI)ZC5Pa&1#XJnGVZDQT<5VMYm4Fykee=Rz=gpN_V zh?3U#?_Vdky$17PP)A?P{#wfwd9lvd6g#LE&fmaUKHySl@8+Ab zMpzYoYp{v{rtx)cqSbQ;=~+b1ATcM`$Ri|SM+2Cab!3pux|oI@1)EV{pyRq?WRrBD zU%H&#B}DFOVxb;A%Ppno-~wtRpDs_9m3qm{FSF*CPnlm1%x_Y3mWkP*TgO4Kw`I!! zEa;|m30?Y9O1-&mhOv{_A-E)UF>q3l$t(-BCYI{K(*FI%vKHr5LFUrNhFHnKbV(_3 z5cJR71Oe`kI(HuKAxmxCC(Rl7unG`?^{wM*a1*Tw7RwTu9U^y2rij0-8Mvg)Yjm3r zy4SXE6B0#7^``xSD8NXnd;rqAj0 z`DRHTMfgi;-+(bP^qOMps^djGQG`6SZ%le!_$ntP(2wSsvF=kw7(D&e{4%UTwA0DO zp%WjFzqpy>PA`UlB9n5T2t;*ATM4vpPcgQjkkbb9xG!Y1&S)4 z3WmZd{@w}$JiItaD$Se`Ycv!LP@Z1#JqYXh8&M3SQ|eJJ1%Avfb)@+%zyKMtH-&fx zF`2R>v4+R53d<*WsN9`cM-X)TUf>x+cR|8V2u00S+&*?nL^N)yB7YKmv1R9gLcij_ z)aU*CLw`W_P0CX*304QijH{VeeV2upjU!Fy4`z+V!8)qr6D>O-or$Qf(kJRH6Bs@v zAY}1sCK#s>t=FZa<1Co1*AGs>EG0x>Slc45vol9rbG>k(4oWe>imGI|%A2%&Qmw!M z$N0-&+|N+n~I4}FlM*DEz`6}Xhd}tE6!y|>x-VB#mw?w!~TDQ0yZj+ zQ-sqR!?DBi6`oeqF^I%$ws@eFpl1_niRDa2G?Un|s5NsiI+PrYNPHF{e;CVgZ><*t zIVo!Z@oBSe3(W;_88G=6Fkxwl&P_zI*vIhg@}Y15S*pgU7vTsr7Q3w$cymiUwuAxJ zXfipfvnkL_d(g!v&|wke5)^PiiJx4hBpQN9I?XZAFj5EbcfqPoq^+*~>Ap{&WV#yPMD$UsQ}{uGn9fOi9C_NeUanA&9KB5TL=Nez&L z`?c;1o0|z*9KBcJ_A-ku(BzFpa>)S{iA^k6#^yEL!mO$*l1fp0_HaOs2yGU2YxZF? zgE_!8R3u)@aO)vkT@@wXg_V!390K$FZvki|=bMks%)pAJS@QrqDAB+pGc)oCh8+Ra zvf)imiysC|P;iI~O?#kJS_fhc48$J=E|!7Ke@C!5m=(ql3q>NCtsJ%5L?qmo)PX(7d(QlC^6J#O3yCS3($M*nwvy%y@M^QKMEBaaI z;w>-pbaNaX538i77i5l>ZjS^qD_L-X<)#=>0>i97Nrw0bZTbm6REqZ@JLV~so(J0h z&R*gS>r$m5zYATnwF~t17!P(-(Mwn}5B?m$KlMULla>`LPB|Pwq8{0)Qft5$v5RaM z7pQ{T60;%X*f|4TmcbhlJP>V5nxVZSW38J;Y;bB4l7|OMvu6gE1LJ~7^|shl^c%qW zDAn7tdc8ep`ngz$Fqld7k<#Z%mQ*FeT@zIy1EXUFf@#3J7bDYzvKMvk-b|AyVL1a$ zj(u_|uUN(U%od13`wY1p#F`b8C7g@x9trT(v4vxk+;=nuWBV=m>0m2O{roK zBJU{AYN-p8iB>!}Kp*`@|5AL)tQ5q$=IKPVH#wWJRM4(mIGGRVUycJta1)AJ+6e)S_#UIl zm#`CF5CULY-wnof8`2HShVYn=u}aU2jNt};!6YpYK5ZD>`H>lLWxg(~Y-^q&a6Mug z=-C@wsIr)$M0;UM(JVYeZTy^BgDn?{>g}lMGUm5CmJ2_-YI&@8BUjccs79`~=lc=J z)i7I~6ZId9FOYOBnlB*PLKhzl$=1qHCLKYt4+xzZ-x~~Vpm_@)j*splQrsOAwMFD! zU$qLDD_meLbGL>}9tEOlA1NdozAW0x;Eb%(nhWBB7%A^XFazg{iR58%5G}T6nvGe+ zU1ENkmpq_BJ)oDfmEJLU3Iv=s`7ajsaQ$q0f{z_T^F-1aB_oSWKMJO?z2#EG^d}-~ zqzMa{V$AEbIO<0Ige+Hh+*b0}E3sM_9ykiSC;GjMXp0wKc$#(!&Q#Rv39B;k_MFg} zfFj9x_|(Vrq$i%%(&(9R6&@B*W#n<8BP%USj&?bAf_a4_xa8eST*7%R3@2?m+7U0TZ>(k)%N&5?7scMh{v? z^o76RRtGj#&6@-~Jg8$R5gCXC-AyQ28YzO1TPbwuEH(C_SWHF8DF<2v(A&YVbvh%% zPv%UpZk+=$BR^`B@3ImHexQ?RR9Q8Td4$~lJ5TH-o>^hW*_b`#n&NuD)mJVbRB}Lv z;{(jMU?3pYlOH`#MM2N6f;=rExeCg)Dw@J+lap{`Bd-Izm-R9lFIg|5qj1fNyb>T6 z({^9^dKR?^PKgBxdgr(qWy&=p@^wYKF={yLWs70i1}$#jPP>dO3V0msvBNh&iXw?9FW%nSv+8s>d)5mE(mlUL0F^KOK(LB4l!TegX1iXZ zm2g*}V=*f$pB7X(E79<>yK9%?sN+Zms)$ClDwNTF0iA^7gD1xBC{9 zDnN!_`Sp4eh-Y+*rNlcrAaFaI#1Hw+LLN_rZb{~HNhf%PxP~z89tz#~9tSNNTGt{B zTOr-;Zjlsu1Ti)+h_Qi&zAW(QB1V>3R2ARLG6I!m*3S3B*@de1mx}HC=z&{=(h;q@ z=yUX5#@#{p!4gHD$`GM7%?XpyNo~?tb`P1AB*q()QWQNh9Y#!$w)1H+f+BZ;5!stD z#ZywRaOo(cuBSwe+r(7Z5^Sr6kY)=f%V{elzCx4YoQ3UVa<-|M>1=tC9GYpbHQ^KK zpRP&GDW7k?Du@_Tmjeo&zJLEjUj-#YCEdPByU7oLOBPX;M}I=ASdJi%?rz!JWCw52 zycYtkRd-PEJu~IcH7(j~8TxJ3)X?5I7s>r%>Z>vW3LA~OPYSD{F}ju=m)rnKQ8$4Z z8hVosL?45Vns?;fia>Sf(PYymUIoiea|-iBrL`C5i;M-Dwt@|fy6Q>?sQIy=0}h^K zR8=?FlYC>aTP0serHG~A+FJm5+e`Yefq0jpP7a~uqv)+`s+V+F+w)}%w2TpO4L#}L zFrw}DG-7SKM!}`AC}s@$pG|r& z(f5w`VIlyPz+jp+RN-z5oZUA(PrJ~!l8lw?pAhU45nYA;Y{x3#7ss|wfa!dH7U3YN`} z%Kty*&@n4@@LRxFxZX)?u@$z+`Pq>Gc@8F}@X_4+#1rCz-JO(U(Lt(l&%&-7u z6ZOUhbQ#EQ44W+A06L3a4|y0q{w2UPqJXQN4&5nR0*nCd2wnaxN)n(kzg}6=6)uMh zJ31k@RVaHKk}q5pomR%Hax+{Fm1+~201mz+(5V#&!l33wHrTpPsba5%_*G*Z&bLgx*($V6xqR}!S zZ%NVRh1IYRJ}dANT7((xp zCy%4QHn?$6RM<(c1vmZT7d}Dyc)#ic#epEeH!dlb^;~m|80F>9u0?~3crMVs?1gb( zXws?V6KRq zJeE2+oG_CdHBiBvOKVnflOkzm#YBP_^$eRL>sXEiv$QUC9Saqz>%V1ljZ;Q5E%+00 z3Z#y_%ps|CLMpwPTmr<;PiESQHGl2M*bx)wm4jDLuG z?VzDA;aHj(LxG5QtS-uIslq{7 zGhe($5oZatGO_N1w!MtSjIjir=j*Nt%bMsD} zqs-?f%G6l<MV>tOx$_EYJBsHI$db3#XzigU+Q>i$D_yBTOX1wbfr%*F0tDG7?lVc0FpM zQ|$rFAkdZlc@7+}(4iSZ7$dMEPdVCrDI=+6>nQ)VRCPM&ez-Xk^uiRQ5XOr!kSM4j zpM_*xYWB8yX>HJJ%36rD@n9=>K;Ar^z-6(?Dgg^{r`-Tr5&z$SJL~`t`l-nVwTT|? z=)A|Hf8%`Ir8vm@rWx-X6$a~_1ZYJLb40;d2MO9mP!tt%vv#rH5rNb3+D&l;(d#?F zEYX3}7aHf!pKriqt~8*_e8_bV)-Zr9dQ17_>0^zLdI4HnpnWZwzP*xhJQ3zHtm5J2 zaUcRt!ACE+fbUjIE4`qm7!$$EDS6j4GGL0x@p8Bxir6rlvhUD3);WD<0sfp>nC2$o z75`3ieei~V;Va72QaGp6=vW-}x}vZr6JL7fX-|woCZQ);*)5s&)TtBCau3#{K_-m< zsEb~cxh>3VsnM7z7B9VGEnX8#Gj~QL){ew?_mW->*C!2}(32~g?d$W4UA(}S=N10Q6Vcvd9l8g||K1$vbV?^!FO zEsC3&7%4#f!c{6*4weYHts9$rZB>{8Tx_jRiIHz?tOqOl73#le_`kR)s3$xr{fp!P zhuJ$9Y`gkk0pE{=y&gJOLz9SpC#tQ$U1xyiTIZpGGz+t}6vHCZy*@;2D^RY-ft-Ot z2u`;yp+NrPsSNKmGXdH}6OSqBscg3=?w6%>Zq~25~ofCSKu4sHKeCWwP~J5&2q?tU<4? zdx6MYe7SyFTDC=Vrv*e5OeLcFdDO(2!++`WVY&4I$XUQmlT?{M!I3jX8Oc#1 zdKQ!B?%10P%Fn^+daynPxS-`@7-f3g*brw)9km@59k(wFjB{Ypo1XTtEb%U~sg)>O zPJmX;L_oWBmBLvdr#hZnzJ4J>re01Nd7iYrge^Kq;Iv6r;0(YRj838r8P@|oS7|VT zc;P>RRY~im+;}GONKVoWO|0-Fx^Q zCly5;xVmAlUJqVCq#3Nk6$@5tSzi24tJoU;lHwj><9tBFHDZSBJeii5oMa-zVikCV z7g5<=FD3u6{o=tl6j6)tLleiuRfV%+=sTKf1t}*V#d;g=xJ|F^ z)hET;32i}vm2>u&`F81-NxU~ux6R}> z9%qxUWRu>(+GkrcQ!}$3GM$>b8us!7CJmKsVS1vyxsRo1#_+J z;4<9m$l|U`ezPpYm@ZD3;83r&ki7`xn>k%Ghobf)O}zRan3*|5A=nN*JTtSg@$k$e zC>$Wg`?Oq{oIK=4668~gXQUue(0BlAP!+l|t*I6JeQSmQ9* zQ~I(qM{0KDly$y-DQU%`#*pGF#q~{cIuT+EN=Z7I;Gyr|ue*|<6e5}5^w(jhpevb) znAD*RNxqB(YT^iv*sF5Toyz)7nwRTlhxwW%>Y6uAsL+d9ZdqO61+;(1TvBm7(foIS zBIg*eL=qb9)_Zedp2oE%GMqn{v^o+P1e_$eh$K2O?x}MkN~j~9h~tU1{rd+fyTUFW zqZ=IGzW|j$YQKyGG}~4~ASrJW7|mm|45JAGgyP0CW`+9KNb8+|0@k@Vw?<%)pzkR_ zr1WS62=9?nP1=eL|E(C>kG18E3J8I#I_M1`mb^BHZOj(WH_80IM}Unk^icz$qu?mT z1u(#xGKbhaoNW;-KBAfw5PjAPQTvj8Dv{a*zH7uJxTz^!=q#Owfc`W?lv)6G;w3~* zOl=XUbKDFtlq|tH*xcN->k&BI3vlY2*(Sn!3J@RHgShSI$OAYQPP_K~({S)Bf`Gk} z6v=_s8XW2+72vV2$_W~vh0cr*Fopx1hzwbejxr>r+T8)k#Me5Q9lOtJt`+Hp9_8(@fsX z=4POAe%`?>*L4)-PRedPFZeq@2v;#^XK@M*<_4YRKKpw?ogl6Biv&)cT&4>r#pt}< zQaq_oMW6L&>PCQ0na#G4v4Z)^s)NieHYC@Ce1b+C-B@rNILI+}v5=~R&#SPmtY$7) zMK}}3`_)_@!Vi z!jf%E09xH^s=IAj96*<;fwjKfM9wOY*AO)@;h^xng`|7YD~1F&3{q5NSSd`E>Vmkt zl;cNX9lDxEYuzN3KAei3n8@d(_*^1fYRNZOH4^|vMx;a}fz1GF74aLm9ZO1eVR>Lu zoy7Xmv3cOS^3pR;Kbd8#;_7LJA0~GBr?S?i8FEK3d*Hys@bJiH@O)MfhCwp`C8+J1 z4AR!b#PeuPaUN#&$RL8*%Hpt>qDJ}i8LGr$(H7K#`DBmPy-Tl^Pz*skBMkP*m2Yfd z-4n6J>63Ji74Y2ByNE>>@!CQWZvB{fjxlinW4?*v8|-|NQO5vJX?i{xbkU;;lxDhD zJJvK42jn$VC&24LBcr@qkpre2AK8`W>mt~=F;rOnIq#*0SgxqspuooSnrpvY@r1&umf3LKlufS-iO;IIW6xy(M5%R_!~PP7 z8xI5%f@r&eg3JlB@&t088-tmp(si?{5shts98-=Nk2EYaz+zh zjyy1oL&V&-^(ur-=iD2MiFEbAU`7!8!p(O{(ESqO-~>CsOD8$$#A%5wRvru5*$b1+ zfJr0+X0srrpk@+Z1ve?Dt0Hqtn6wi4fCsvy#iD;(tfz#=oJUB9wP-h}S<>H<^r*Aq zOux|3Uo0W9Xl?q;g5Pdpts9uJ&dDSh9)r4yEJE6#rBF-2IbVvdv#2S_^@$X}Sv=v4 z1;u$~2PjA}8uO`fb+Hl6oFe@*8+Y}^@}N;eT7k7G=(=}^Gk**n#GsvzRT>4Pb=KFq zB$NZ1GQ$ym57I#g(g43hPN>?$y;T!ez}Uug(z7BO7qZ$m(1E^zjreN%$jl>j81gGl z$q^#VEe|#r1*YzRZuFbR&`n3{Q(5qd3>5-Djp|IT`kA)hZtdULSKm0(7FHSt@ZvRV zwdr+)_?Q&~R;4t#7;5Ab87uqpwU2e?C%v)udFUBHSQ8u{ zf^q`%d|H{|!xGfn9{lS$96AVD0Eu~`_bcYnZ3o?@tl(iW7$yJHu$381dbRUmS_AU9hJb`q7ND>3&A^_HmSAqit(e?3)4yirKm$kv z&ds3jaK)-4s-ady97+3cRQX0rT&^(=@DELaJ?mL+LJ^u#ISoUyC8)9Qjru=MxI)8rk4`rGpTr%;(MMotMP5I{LH`Ure@hd>a7a~Qw1yh8|cA3HS7 zf6Nyzz%b`eWyUo^$q=QA4b|bksu#5c+jH|xzi3*WaiqY2&bR>0NSxzrqv4%D_DJh_ zLHR|MyP~_Bu|0ps48SdS4)(g80P)*p4yl_ z#Npb|A&y|VPLIxf7@091Ug;g~kwz3>x&vnd8y0 z3Y*~L)^pB+BWphf;S}cf2W>h-yYc$Rl!rCn1VmgGvZBTPh-aDH#;|<$aU2#d(S6es zBA^&UJU~QshOrYi)it_s{S{6GjTN#vg@824ZkIh>x-R@J8C+;n-hQbSzA2MA=Lvc& zceJBqEFB%3SwtE1*xJe`#f3|o7|0W#ze5h+bcj9`l(6LuqF#thR`lK2>WE(W!Wpfo zocOH4nvv3@_-@Go(-7{%9*tcEd;vN&8iIG!@r`96=<+ld9Wm%mJbrx)% z^5BDbZ>02R5(8eNDdiG*;BRMB^dcKxtT#I}KZ_#plEEKLax2P4x&;?bR*X9GvY?%8 zICxKDwWbuvNGtnD+SZcCle`CmL3>cfhiOY=c~`WRN2IhU7wD5x## z+TX;MHT))_;GM&*6v6&UgCl`7=I=wv#Zl)BKI^InSS zUp>(rn+huDdTCk2hT=8~c`0lsTX(^I-I&!qS;H7h#-;TFj5D`ZNy+Wr*m!C)=Mh(h zY(u%Hf@v>MA>KG$>;g01XC^Jjl9rVPiB93?*K)%*RuD}DcXB-kH-YBASP{76d}jqC-7p7u-OlicE33=_jq0SSKCD76F8%08t%CeBKQcg?ky2o8VTuLoyUu;n&y0DaIvwG^!tsS$HIMFesc&zK;+ zDZ;N9YX?U!+d5Jy72TBxZErG^+>>S+pvRU3jz&y2Dj0}huZyV2;WVhrPaiIy;nvx3 zYJdkOkkKUg$9RT(X2_s$O&QEr2{9_+N8}+GnjvrS>e%LC!2NMf4HN)H;jTOqoAWw^ zNhzBRifx8OJAa^}tVM(y>23(HhvkET^(HgOFvpz1e$$QDrL|2<#CsL-T``by$BO=n z29Q8h_1n_Di;(k~aI5u611*0Ja^h=K5N?Uc1FcY&wXKM8R6WP$XAiaZ#0k{L-X;M9hRl2ROhsN=m6Rcv2PoC>hOr4?W}wX&)v))u>7R zkVivUMwvs^2>QOalB}f>+LxosL|rGr23kkAuyFcXNXbKg7&UT^Q4{_$YSL9k4ekf= zD^ZQ1um;f8Ialj0^!S0Q?E+1}Piw3E7cYMNguN9{P?zplO?Rlq9PS$19@p4rxppqP zNcFgN%Rn5UV7_t3VSx<0QxITL0pP@!_sSB8yI zzcu}txijgRwPQz*9XoU3@XY+=23jqeDfL{2ee82-H6U?^dI6$F&8q3iOOG2 zdfk&KiLf21usdH!eld)*$;qaCr5GHnmqFTiEz4?E@mo-frDa$>b+kv&)?&ovkBRnL z>-^4+Ct6fV2Qv0hBcpYUeB2{5`~ufazy*aimUaxiY?qzXIa&ma2wp?@m=o{d))dUT4ysW&Y|SLyW0h@C&D)ADwbPQRQ^ zVFZoSBH1VO@Lp5Vz z)7tFR!&9@Ex}0UJX>)pdDbAMH7EnWex|0kdEfh2XBE=F%lGTd?qKar5n6EjHk$^WZbAM>F&P2N&>ps~&;<2;Xq(XB>wdk|Bh6oylphqrd#h$7- zeI|{grn{b8$!UKD@@{0P^wH1i)3I=660XNU@g)ONLpi*J-)ileBU!qpr+R7|gY{C?}hzyY&~rB9tK@8fC>0q+t{d01HJN) zv;oH=m2E|7CtQull@`fp$8HY3sv~WB?o0!H)ts3=bLq_H8UIZE%tL1;&$Q1>ojG&n zGiUal*_fYR3Tob&GyC>?)%}Un!mt5cEBYbe8!|C)i=%r)BhS)t|G9J&-O`q{66rY^Z`C%T;g^+c0&^rm;uoZ{82Y%YIJrK zG(1IUW9+7|owyIjW50uA+gDk8mH@2js`=edE2=*`WlS{Yg#DJ%K#<-8yx@7T!_(R% zJXAJKmsMC&x;Er?B;4DK@pj;D7BOJdIt#A8?GrIGjEv}n3`o_(gQYY#!T3`HHnRD| z6A5bUGsw}3F$cF1X%W5(D>o{A=yS(XGIJIM4BhRg4nyf?*v?L|H{Kr|7aaZIYY(ZAy3o#ug%tgzg zQd0WO%uRHm0@GcnY>Bk>$41JsLq6`spmu4Kr?0Ywr6@bz{W$s=L@H|p2}fQ;k~QK! zwQ4h^vshV)kx$e$Iq871>JueeSw*q);zjdVQHdkxNmBuwwM_?FQ&!=Cq)8cs0W9T6iuo1Ay=Ysyo0dCC7o|7%P@xGTgT z;l|3@um>$ME%ZUK2F2ibRF0*Wzam4dx}OKPt}NHd5~mT&%F=IQJ&G)Aio!a8v3q{lQjvq#XiXl zZlpOjARE=73Ck0Ng+?uCIlMo}vN+&#FFU_aFswU|bBOxUfGHsz*Pzy@`IxJrMq4sM z8;Q8{6 zwmJ@7FKYL)j4Hw5)x}?=FkR2pli5#_ReLgZqXGanWfeGIFTVKV-nf%kNNA}Xk2irslbQ{5wBi;h4CjKYheuyf>o;8NR;j;`K^Sjd;a`+pbK$rqZ~RHiLlyd zr|5=;+M7jafICqRNTJFCh){)T+T^YrNmDqhiW#`YrhF*oAitPg$CId;EHXOk;zdga zvdL5OU6rvnmOTU~S6+<)28fC)W!=Ni_*5}Ks-bL{@^&qT}nFrc~4l=ukGAND?WXc{wo?8A=H5(4-z z>Y>*LNiS-7y*SM&7YE@ex(V z{a)OU8VkLobIvP5p<_$Ykub6YO6}d<0n~{FTA<`BDZ-Y2W~IF&NssY0SuBz=YH9up zrHL@-YbM0m`F_^|&Ano{WFCgogpMcFnRAaL?3}~UU;VCY z>|=Ks&Bvcjo*Zu-AE5K&bc9jI2Lna3Gc*7EV1V=rhb*QlM(z}XoN>n1%Sw0Xi2e)& zc|k@X<1{tMdLx>ms;XP7%{bbsI*jp-h1U<1iTh6GwLIPckxdcI1tq=IAblJok3etM z20fpQp(qr|G+bg1qP^N?}_~R!JAO1+)F}yq(??U9z`8*1@h<6Gn^ElmT_ejC3@KZ>>!Nr*E@16;bON+{a zr;noEn?^-;$-;R7IH5~d0Dg$_lt0tBtXB!S%-4KY5m&M1$>4ms?+9bk&!hl3`Py|- z$LbW6Q&=RFScZdQ(TQX#a$bb@$uMzhA>h)UafFa=4Ly|L1wZN)6a}m|QsLYe^n_~aK2HZYe=6xdCnO^!y60JL^L)mE+2uyj@ z!PEfi6HI5Azq$ExY0$oE{So#)nj1;k7?^jMuMvNOOEovo29|kU)Pn3De>5XBptH)Q z8F$AM(^AR}Qe$%l)2im4I@hjj#Bv8l6n?B^l~nh+&lQv47z*wJyA_xfd*jbh5VNv- zhTR3bs=an*vt$>U$W+X|+$Ii|2YouaLTrh>V@^`%=91HA(#h$d){ib^r%}(mg`&P^ z#hYL3lRZI6{}g&c6Mu7jg8t!De58lm*Tuyq{!;=u;-M1l!Eo68NRLy zK~{h-!jEn>4nx(y67gZnxXIY}DCx<|>CLTvX94m_esr63PLA-KZ*{y0Iqi}Rf6}u> zs`j)_0SuMDt&uSrD;(PQI4RMqLzXyv)->&8A1 zj8yDyV9S@w)Xq{-))pk2XHCw<4L9_QiL?GO{h9> zYU0`<%y|$VCQ-ArpjZqLXVZt_|c`R~O^iAl^`~s`}hs>{EDUAo|3UZxDOcLgRjZACzM1nLN5Ghy<(~ zgp$0O*N1M>8Se%mD zYUA#eyFY5&{rS7EHr~B*?~Qv`@4wo(|M~m>e*YKSZ@;yDx$Rru-M;ms z#`dkB4qyA)@bas}%by!w{`2tq_lMX2INbW$&KtjL?7Z>z&ec~NJ6A97T>a9{)i3W{ z{SSEg&Ca#gcCLM8=h_c(_SP`2Efse}aj6XXom-cCP*>PtO$?((dh_ z?cTYZZ|NwubTqpArN-UY@4nf%`>S`aH{Si;{mYH}U%db3{r}j0`*+(nzPx?&+tB9s zwr|~p)wwf#?d!wKKOSEG&G7PXhgZHhy#Ax%^;^TOZ|r>eYdf#MvGe-X-P=Fky>lhs z(lKo5*y8pdf3$t`2irG)IK2Gj;pN}a3jcU`{m;X#f8DwI73l6)cdmYC_pMhOyKi0I zz5VaIcfOFX=;K(?$Cuvye&gMr-uw4^zqt4Iy&Kza|6%*a8{0RbZs^%phSz^GyncJQ z_065vzlwc=Wxe_a)O~H|>ekNHw|1_5VdvVHcdlJ0c=^TdoiFCwcoN%qa{1k#z5Da~ zKe+$H|Niav+i!2*{0Yp$ueNV}b9njn#_;mh;q{*muiqJNeG6N8<99n(zXnZwgCOzs zoonCPz5V9yoiF8UK8`gXkMDl9arfHYw;FeU^X{9CcYpit@8A8yy=(WrcK=I_`>$`m zePjE^PquHqwSDtHxBvX5#`d3IAASyI3N{7I{5!)dUm9NdQDb=Jr^72hhd*x)ul#a& zl{`c><-~Qw9%9n@Ne?Gka*WuQ8hQGVLd;6EW zcfOJ@{0S`liF5D%@!db&d-EOu&Y!k#T-(0+TbQyN!^^)MUjO&u)~my<@6z7ALOTIg zEz|Zeo{ld=Gt2$y3wR80kJ6Hd- za}{#j*}3}Hook;X1a=kr19+!Fo%#08weRd)`vKsz-P`}Ud*_XOf1btuJlntf^}D}& z@AHlKzI^X1xL!B!y|exHt?hR%L-zn?{yMz;ufxmV9A5vA;nwGeTYz~!w{!LNovW}2 z0IfH6uKt;T;_JJ&f4zI>YQBjR*u;tC|J=HJy>a)OcYoiw`^Wdb+Ia8l|MjE)`tiN5 z-@AVAm-l{k|ErDr*Y5xN{%^M5zP)|p`u3l{3eb9O_}Xjyh; z+yHz>o9>&tw|}#H=UTqO=di)&R=3~&%l3_LZol&l7{s@Rm%lT-{;T2EmEqP85y8MV zLsa@I;0i|mZ|z+D?ao!e-nV$y!SsE1_x5jh?|dy^{qtD;^Pe4F{_gPlTf?m{47Yv+ z$bR?s?{@EeJ)id^<~=!h?;DNxzH|R;jr&{w4e0l;+c$o?{SKhQcfPm%&JVWV`Qh-j zH;0$M2dDr}k^dZSeQ~(;W5hOimI%cA-JNUS+r9n!-8IY6weRn~^@ZKrf7rdV zm9O|TR(v{p?)SV=%Rk?K=QdRFS3q)r&3*xR4gUOTc>Q<7t=ETJKOg??4xBRxQCHt?;6}Rk zeb_9!xBs|%=bQOzU&Lx(JpbO?@7?%sz)7!d-+C2Ju`h4m`u6bp?}uAo9c}^Qxz(VJ z2q*rZcJF*EU&TvU#Y-3d=cn7Z;PAcm#_+W*Jh!gA*&w`ovq7l#55uiDhFiY?jIw+C z=I)(u=WF>C*7B)~cmM6~ox6X1?~jf5Zr=a>{XhKo&Fx!Pw{KnBzV)5$Kf|>B`JLhQ zw})F-hg)yL8MS-+o!vX%$=CF0tm)IQya&kdFH9Qz@z2}0z6M=`?f$djvhhblYXEk?Ov*V_#TeD8GP2)vG1>iD61le`%aZsAGbCpI@);f=ru;EWx?a{ER z_Lsrz74VCKUbaw^JP(iJtQ{ntS=1{!NQN(y zlcgLqnH%b`3eUy!?%5`T9GT6w0JnQx#eN~So@1}7iV+#j0uplAve3krv6AFZErBtq zBe968eFRt(G|KU(R-fC*G9bt z;&q~3$AQI8B)ZRuDv7-xFq%7+xM(4*%zV1bUNjIS*S5muvRBZ z9%qE|XE$fOX+IcePNAQR++vP}F>+JL(nh0=5lnubX|z?6tB0l+XU;76sCSXCoa4K1 zcw~rChg|5jz#Aj0mp{^3ec17N*|elRP>)$t)fNqB=yuCTQ<(gCXm2PTvB~OPm(%dr8*bo zsKse*B~HngbS225Mn03X6#C1dey|T!mW6s3K05Qn0vs?CchQxLG}$>5KISRrt`r<{ zbsXBni@P5A_c%*#@$#I1U9rv{U{$b9&Psjy(qVC#;$(W^APyTG&&+F*?+SYk%O|0_ zN`RLXD$MoIp_!VHwN58lSxDSDxIR-^&_jTS8cQ>CtP_k7nqzdA4v9QVy+kw zaXIQAL%)`hTFm7zr4%2@0;ATZ!{U+KL64S;z2y9pQE!!Wl}OwFgq7+WU2^s2Y-c&@ zoO?R#FRg`3(G&3?5@@Qps|;}9Q;+B&r;#UR#dvePCFpg@ekJ=)XTtHt<9(RCm=8&` zb*mKRv%gHz6S34wy+Dj`Z51vn(G!6BP(`)xR{kLT1C0$lo3G^3u%xG1Nazg|>n+XwrYYw`RHq;smF}j3#9e zptjfK1NT?D?)hzu;l$Gmq zE!PEr;R#e$7csX7zH`~}N5RMse#r4naPh`$ZfrG_TuA`+edwUrn(`5=XzdDP`O0@o znS&P2`o0znX>a!&iQ50>YoXh5yAvzr06B-BpKSL=GiJSPCzdI=$JkSoQX&8FURRc6 z!q)3$1FvpJxppH>stIeI00IU6R$@kO9sVt0yyb{s?3EW#trZ2-0o8+9fEhRqI!(Zq*pys+rE!lOeY)p297IPyyB0%E^zmN_+8*oR z^r(Klj+J9Jy@cpi-7_&>>*rPeal23nQF)r!fUNu{pYSl=6-&={>mJJYtq$^5x?D+! zCbL++60NX{$&r53vgJ^FykaspkVIyniMl{iB*mHGLUg$xRWqg@WL1vqJr|-Dils!u zrNu;liUn0iON&b0QLf-|wsb5hW-bVZTR_5nD#Hcf5poa)qMKzh4S~}|tONN)^sxlZ zPH5{)W<033kJbLA60D8>@snupxZ|3Nze-kkzD7L;6|w=JJJd{VHB7UJ+tZGmD?OCq zP{$_!N4q*JN-(XFmVP-qMGozJ1r1?lK|`4FEue(mzZW@>Lw!Ey`ZRaRTdcm~iNz7Q zsKho3nvzz zq@*}~0ZSJF3mw8~9&a^Makhzk@VAS z5E@G*+NL0UP^?iqP)2y#GKnd&{}_|uXAL%2k8Js4Eu(jp!;jM=Bn&v59UbdlLEHFg zx@ZQ%6$NCcFmpj|fTxucOl29D@JA{K6nRNj^>$IzDYC!2iSM&hGAe{`XD{UgTaKf2 z<9x@KZ9*Wo~4?+@6t9&&#qe z7dE(hD@YdisW{-HPSeA1{XZ%MsP?I9ei@JQF&GL;CM!cel*t4gZX$Ag0NXiQPF%Xr zsW>2gefS?f1oz3BA@y!~2pQ;d4nBPB!*$|Z7DqLnv#IqsjThn`dj}Iz^&3+|d( z64M(oeJCq-lAI|O+N6>L`K_$*Y4p~%m<(1Ng){lh%lW~?*zjpI$PO=NdKb6^{c%CpmyQqLQWB5 zO^;mn&FV6-Bkf=p<_V)#M@&3CM1MFnS(7&5qN+&~cGoAeQ z+O-MAF%I2WsW~PT#%i3kT5rrSZy2ji%s9G6s8A>c$g2p-Bt^2505sIzShq$15v?wI z=bNmF(p7Db)`BywrY9y6{qD%yXVnU+KqCePD`i1k;jTbsdohOQ#l_|)DD|i#o7ezk zbPrJbgnacA`H3MzyujvnHDJ@^tkJS!9rMNtl%TeoDV(cJi?v!$u?N%vNF6{`! z1<8hLc|fTlb&|rd5V8<=D(rU2fwV6!&EzI`N&&mh80v+e^An*=G@WC4czMB3P zjAXy)?vH)s@qnT{dldH_`ohEhpcX(nRTfjJ)EhGX6jHbAl9RxE;1VyWh~e#G#P_Hu zLa4sjYuaRMyhzP{GF3>qn`(Cf8tW?KL35&ky3vWGt#QpV)+f;l|zR_{aE+ z+FHgN`6hJVp^a?Pj;GSW9g|*qN2IRKRooAhs5#q#@LA!+3RG=Q@Xc0O2B2}m-xtc%I_&FN z7pXfPlrp-^PWj!W>ybk}>A5%w_B1AY4KYT5(|Nlky`5 zw29HmG4Xl4)pD&69)z+HHk*T?AYT)5mGhP0w81b4zA9QrWj@+vs+&(nAxw#@XLVsH zsq-F7lB^`}ID6f_CS&cQQEL*^aufEqUZf9XeR8`nALL9H4$d-}=NPmsWtR0T>?|Q!#VT~8qtCKbo>#D%=u_yVh^9tCvyJWwQ<%ep zd!9pybN|0Ri6V55z7H@tQp$&h&X-awW6w*z6K)J(3%SQc5#uPym7gF6Zc>687SB8( zURB$U@r!6DHZ|rP0+~JQd{v>n$gjBY<>nUdm;vih1uE_%=ZaZ|g&8Ul5Xnm()u8u) zE~os@)r)sDR<>fIz`j>mE!(#=QAn`|%;~UhzK}`Ye03JQ{MPvLYkpVkyOLq5v%&N| z0ArtMFO%wzRm32sV`H^L$@Pc-vOuL< zUp9Ai+URiAi0)<8`y9rwR!)P-gXfyO;f6e9ZV#@xV#)O><~R#VhRJ+nwZF+fG;^AZ z1tyG{hCY!4d1sUmtt5b1Mj#FR5fejIUZrwfrEcw3wYI>cd}VA-klASw427N0V*F5= zXOdEss;emIE3#%Pmiufalhj?1gY=5_4jFw@U?T(v<#Xx)u9FdTAkD^wF8q!1KZ8Gg zTOSuP_ROG@b26d!Bg}(yf<{isSo;)z?9T#yi%|^Qa3R%8(ijac_*3~OTUb?jMh28p zCZ~o{sHMzyK-E))Urt7y2u*%II0(pVxzhAD#q2sXVDn0^6}HILce)X%UX7bt8EJeT zr$=*_PLVQN;}dS5r0&U4W~-Zd5dAZ83o23VQg05GDk0+0=_V1VrL5w*lkb5Py|!wG z5caGNCvA7cph1o)Kisn7wyL68QS;Om^oTN)R`?W#&kh7Gx}774pm zREquRD<+RalL5BhSxFXS=xqnvyhzioO2%7(X;x96lt&e-TNb2$fodS-yq3 z>Ci_y|EbjC(Dc@x`fVsd>QKDND#`Xy^U>7}Rsh!6+Wwsi-JIY73FK)HsE) ze|9Z)9YNOH7{06e>>W|*aX9iw`|1*JMB>IQ;)aK-s9__L0wZFgI5_GhyQz@TPh^Rb zog{ir#0CvxY7xyNWig?avKSBCA`vSejt*-Og2^^l-ZYL#!AU!v_`1Pzwi9}g%a6kq ziQ5JK@`8;pwg*2zrxZ`{2vBzCEDtTYZzX20HjR_oW!PbikBXG&52&A=4hL}Vjbghe z{gZ-VwK^mdMbJXUU$t1urS}mHxl>uPw1hn@C=U_kBppG)txhb0B)~?Jc%n-uwT!r` zlcOf#2osFf9Eh|ED(&ww!XsnRvS$GhSHmTnC!^BJ#~|Z}a;O&O%&5pLqolaGF_}W# z!f>ltSkb!jKBO^|u%Ykxl^ok6vUKzitU|-D=z$bJjt?T zC7^@oR0l{d{(!GfMn$z+{83pv%i;DY%}#uDo8#a}$OgzUG8UVpV#yjDE?hr5r7o7V zI;8A|2ozG8?3#1kbGy(ow}x(8SHnRX9q$XfLHz<$ zOmZ1Ucr~HfKo=h!%*;+aN^y>(i=!)ENr2)dUzj_lhy_ll+xZP4#W>jwp5ut@hLWFj zoFZwud{)WT(>VogBr=XSnd5p=iPIBsp|F^Pm@ww4yBwyDGb(`!s!yoIZZj!s(TRjy zc+{k6oLc;&`_$I&m6 zb3s?=g2Y%SBjlm2N2iklkyW0_??$~W9E0ovEU_=?b-5Iv-Ch^X9xq_f^z-!OAiY%n z2dCL|{MNtu-pO7xnO}DM;*qMZ{zoUe@G3%gV#ITTyBkP^4(QH*__SN$whI{?z znr}5PxDNEKQLAoOJsyG{=Eor_YEW>A@-@&*3Q=pT#g!q42e}?*ozZ7i??=MD1IE-r zXxs@(r8A=rFS5k3sQwB{UT}WOjx95*8*@1+e!Igty1r5`tCA4202wc$W!Ew?U@Eyl zD9hI#yHf3GewM>Jifb7|lf|(??cNo)@Ax;i!WM>g>t)h?xhBHIVwCgqi`t*K>`nMm<18LF-&if}REA-#xf6Ki+t&){j9LZKLsSJN^!c_RFbn=sF z0?MY->RYi~-VvtY-;PQCTGP76-9Nr^vU^5|axI^b5nOzgrHYJ;O88Q?OyXuNZLY}Njzj`a-U@7i57MN`X`5M(3IYLi)zC^hI zD|aZ<>BXxU><865XKM7nx~oZYJVPE&XxjS;#+=Jfdrs2H@Sq&}EUGhoU%|jyY$;iU zV%3x~>Z^7PxvH|*5#ur~3^swusA8nUpm$B3nu>eK&a#IFI=$P5EWuf8)cPQp>5Tz8S!Q+P#>vw81gnY+IY;~0ryigbeRZ!wUHG_ZmXQ}AAE>eoT$at*Eq z?CQY>1U9&orn6dF+3JD0R^JgF$n=5Bi#&S1Jmo&E<}LJ+&bhs*NNY^)IIb|BaELmw z4|v~F(|mFM429Dg48VRdKb%lowC2tH*t$G~HHJ zlmTOOGE-Cdj?)RQ+{A5mhZ)m7Hlu1vBu^ztUCmL7qd^%Jm_Z^O`OhwgopS||lbR5| z`f1^^OP#Vr7ed_Kt^04*6SM7=Nn3_|-D--{^M#7qlCszn_Lq`^M-0)s zRqlv&ZO&m4BXDF#oIsvjV?^CZvEtveDrbK4DeP!g(T&VX&Z<1c!Wy5N<>QnEA|5@T z(4ElPi&aTvJXS?Av!h1>kC#<*R%a;|7Kp#BtTCM;XR!)(V2n|T%3G{P9W`T3hss^7 zNFP&U)ugi*t1{0xv$C@|q~nX$9GiKIH5E?BQPmX+I0H6|m^e1xk#SN3lPIwFpp5Wp z5es&fNJDO(j<7Rk5;AQ9BUhV*K%4TgGp()aJc=U8ArA#WIaGh-qhjoA1HJZn z0>{pniwBpde(cPy@NJF-E%Z4bJy7Dsr>zeKyjbKbD0;D+i@-;j6)S>{wldLX%#o+| z70-M8*&gK?C`B52TdokT$nfX-5M_bPsA8^|XJdr;q6mq!%`nEvVetfX13$XCy^8u! zesehGXfJZR+QFZ!9i<>Nt~m9%SP4&AbwZVZ6j?+&b9J~ZpyouB2oaMF$RA(z0OnFv zUV6QzSsfLLHJ3TflGWoYD^WLwgY!9|j#uIV&>1Km`CZw`+XT4 zY7I;s7jF!p8f)6}jTV_G1(LAJo=4fyl<0*RsuX@v`ciD%roF6|?N1dvI~FyJ5gDgQ zBf1*Q84MLoaFl({gLDah+DWUrd{iM0)<+>hxx`p`WtFLPZ2|7_{%n;Bkw$ZFOA5oS zl+YH@0(zqlV{xvm`(xe@X5I^CZdOOFp?wpvmeBr`H~A{nLn-Mk^=rVjX_o_g>ZZK< z6niPZd?1}jv~S=d zkmAVh2)fnkj!3I!IxA*DRdm8iHgs`jJ5-A#+D43p#xr7cn%=essFM}`A446@jrtt= zYP2d&^}Z_iJl0`jC`5kHw8j`DhU2u)JLDdT>+?ghW+tZ!_zyD15x^vGWfmyO#D5S# zDgz?cYaNHedZ2}_=zD&tD}4fq20O{hYA?#72O9znWACU!T&HbBAri|mvk<|KLbKu` zZdESQ%Ih|Cx*K^~$UzLsYrIVc%G9x%nH=4WVgp#ssMP91L&?(ySH%rEDkvS620YFY6?_8;I3%&SlSFAJT#dTV^V{Me>1WS`S!elVv~=`B zP+P%g2N!4T!@O9w%h7|ZLU|jUN@E`*G_soi>Hx`7ca>s$;i5j?3;XB9%2Ko+6{J|* zS#&_(vfU)1#2IJL9SI(P=8O}JaRN;^Z1+K0YUhBz+zPSPT8*ApeeW}VyNL>kRvVKw zukKGx?yHkX#>M5uAFVV>e(eUPq6<-nCU2^INL!ked7wH`w*N|l2vaxmadONBmxPXDFDyih$sqDs!X0^| znsm&n(PkAnCIt^w-ih5DCDAi?q3Wrqgs#Z3LOQW@jV3c_mC<>F zvvL#{jJy6pFV};5HV~4r6Qe1oan+tpAkYe*6Yg~+&4lWkiaIr{h}I>Ja#SgnCOJlB zU?0ASAcSQ9Me>DZC zN;o*eJmNj9(Zu+R1RZ+;14Npd!jQm3W7&;GPA^k}G7>8mscvj3-xw#1+}!zF$cPak zXw`hkv0bDLWYtuz4aR)yiS#_6Aj>`thKr z#U4<*>Rw_)QWZ#>?qWaX&1Veg!{7Ud8}5kk28ht3jppSdyP-{% zEC)DqhCW!Z+Z(`**N?w1P&pk48oc02Up4}i_I2QRiP_YX!Agt5l}Hrb5X-P4&m^QY z^!~w4w`>95NZ&jU2EeK@NBPtYFGH2J)dD;HOvpyX)Z|KuFQp}Erx>Ge8!y_SwA()k z{*3w6r!38olD@`W$1wH!DYqPB2&K!o9Yz2NsWwCX788nG(bhD^Pep!pJ{thCqn zxh(KhE-_7%4{i1^(Cw5+EGvT(%I=v@44ws|#>Y-N<1SNnp$uYM3_(qDoa0OTJq&fyS4rEZKJZe9O=SZ-0NcMu|cvzr?fBO3=LPSM?!s}+T=v& ziKclVOI=Jt%VkQboOo2b!3U&CimoSAUb*}jxV+fq3OdV}1K8rmAS#u@1jtxpsRkq6 zOE&E`+HKcl6+DWj{r+N{EkBz)Sq^eW)z}AL_O3p)8V)EHu!`qyH_J23q`C^@Zmwfn zfV0T57s@M#HSn5YRcyNdXc``_@;}3F7NwC##cN3%ODcge$7nkCgh3<(VJi$l?wo=1XlQy;wL^~sBE)3oz0&##pvv4DQt z`+^B9(p7=5A?u#<8)Soe{M(DvDFTB_l#ahFJE|Q22~!M%Iw{pFHKgdKe0Mb6k3T`| zecvzWSoNH?4uac3M^T!S;Hu$_U!b@B@P>EuuH1+j|=2-#{y3 z&+Aj>j$uUCM}yS^s0-{JxT3#R_xB<`r&~RI{Jv`g%F(5}`@tp#e@b{bCABK{#=J6BxE*s@scg146h=j+grbSm9uafJI38yj|P$(H0o+t>92cFC|L*8%{vvcUGp44dQwz{hn9rn_yK6bu$LN7- zMF1J#a|E(N;BQQ42KPuARh|)TT!f48O8FW!cMdd;1UhIx)oZ=(-E3kouSyD zbT#VrI?E9T>-DHfhtKFNT%hPg7?5Z$OXTKX=fN=#DI~0O`Q`7%1IbV`LQy#avD;Lb zRl?F9a>Z~r=EEweKRAow>gP*fnpZEKFk|peIAll~XW?9+Vz-mQkzTB0qBxl(qR6MB zOFNjig4f7ehwNE=)RNmQ-)@yK;@m_<5?NGO9K(Vte3&GRh_IU!cZi&*>d%c(eRr*( z&Ul0Z61Zx>Pz58(COxEdorUpJb?M_P;Zo!-9pk6!(kBM-QrveJPv~29`R7z@3Rev> zaz%9=CnLb=CG$U^Z`I{bktE$!I)yL!%~T0kHm&5)?I3or6ffD3&4O?j13ABc4H+!w zR#GYvLJD`ZcBSJMs|k6t8xxv@JL%}cC)at6dIFyWEWH@_qb}=Rw`He{V}nZDmfXm3!iYl3W?aHeM}XRp4~8cMUXvvZ?kQHzq*^vMC`mYTqqN*Y5LZA}0EROi{DzBg#+ly#bm8AA7ooxtoY7jsj0vJOMcVS zwWn}VYmM4+maV4E>FK37TV7k30s?m$E*iZRUiA+_&Lhd{MRG1$JBc4^$NQZrOh5J9 z6E8KMhTAkC%f|68Kuf$BV|1x!j-UR}hxQp)L_}_MC$z44{)gxAywd7(^B*Q`ML8Ff z|I6OHZnupqX~XlouR_uEBvM%_Nbn@d?nDGV+iO`8K^&ec6bc2P062KLdys2l@6gb};@W0W%)gKG-EQLj7`O#{$=IgoLHsg>nddWK%Ms z7mfp%XL#Uefp$(>(KK9d70r>+s^O6#yKm;km=q75F&*j^Rxks&<)5T~#r zgMz1L{1P&r8oN0jfw8HL@%&yTC36;)mQgVE4lzR|Ng2fpypus!@nlo}Ld-PyjFV~* z2hPvv*_Y1}?gQtQCx$c6Ok2mB%ytF6Kln5W$a$C#0-_`8h0!A}c^#$F^O{qFUlKY&=E6G_RjWk|WJ$!|Zi+r?*Sn$Qm^* z*F@mjn5TypEEHq7Bjy@qJWCrl+x^!}N67;aSxxacQk&xYEV$C+Q5X>33XuaH5FXZn`I?PQ zQf3xlX?fPbID{B8k_&@FcW&Blt`ss(lPgKYAApnd3 z@aesaBLE0%7CHuWcg6=&XxXMyDRjnOVK|1K&mHQfNgR6PqGfvp-7R$3@L;vjSX*EF z8FLQC45hc2p`b8zlVHSuH`xG!4jKwSReyLQ4I8LGqb9B9(hx^O zw^g$C99MCOvnQ%w zR#-(^nsa4bS6q!;S=W0|D&4E(?^$xoWe;9xF7FJ>d$=Tv=)~sECmP@S={|j0wCDv< z;V`guV4!75fn{%i_k#+@=VNxu73D#}aH&A|2od**5*Ff)M7coP=G zcXua7J;>D)90**H8;PYA59H@7I~maK;yVcP2MxGWO7mDin^8u0gKCbP-P(H_3&bTcc}luWm}Qe9Fjg2dZ_o&R9}}W{uVj&__{$6>wAFeBPt;k&vCR zN}x4Z{-cA(m2wWSmMO|ASrwz=l|y9sw|Mx%s7Wn8BEd19JbhY<^C`^Al^Crn66ect zJ|nyq@uE$D?NDPgscxd66JDoGt~DYAJZK)ZJ#Sx%vgd*5hw{B5SKjrt_M~=4-3{dI zY8=;^Saa0A8hBu~ivy~JRu6QHEgbg5*@@ZSRY0Y9x?#ET2vEEzjGpD0SW+anNLe8q zGfJxaB?W>Yq9^FGCr={mx{fFJvBp~fh@S=e<%((-50zMmqh;AIA{2wN!GFCc)yuxe zfBXW?hdO&e!zl0K1OB2)+6rkv$A@3`MZ*Tsu=gz?7q(D|x@KM3*L!-wunLBs?&(u^ zZ8UZVCB1wXYG?oz)MT6`v~oi15TwL-@Jsk{H^PHokfPn7G?}na)s(RsVK5Pn5xg!_ zm_{$G7lo#(`J6G3bW$$1spFM>bQ@)VD8#ywlDF!ttZkO7CHf^4(r>yq zfKg7rR9~S#^^RMz7?w->1F<4#C`q6ju;(ilD}39yr{hGW=H1?Yz4KEprpZKxNy*q| z{-ho}fKd`Z!&sOaOUg9Toy%1Z_>TmAf zRUsDV?R5FNAD+{Ky3UGr1K5!-9mAN+VXUgTXW`+aK$5DYhH+2EcEO~L_4>=3qNh5 z?L{+r`jr2eMcAHmdmAQAyb?C4MAc`*8x;JZPT>;rEDZH&p{wJ;37`mIWIuEZp9cgz z=pA%Uq&K*F1F&%E_7 zKh!NG6oC|AAevl@9_V#CL^Gg8SDX+DfeM5OvH&wvjA@)8Qu4_e$)qhN1Q4?#H5S%F zk&Om`O|$Bm((A0X)#Gi^ z4%sf3MY-7f>HD@QL5C77CffFue$B?@1rbudBbs#=7#3-~h>ciLWEhnpTLgmlWRnPz zmZns@d->K(UNN)IvUwYp% zym60!brK$?g4xO_U}+`%!lF2_9l8V+9qx+Jw#Z7D*PMi!JgTiYiE*n97y&t}9*8Ej zwQo!t(iqi78RRrPj%)mcGd>5rPlx_|qJiL+MSkAOLOBXs2PeEB zU>7oE-~0GovR3NlT_*pDJYsHNNkfA12;b0|oRHw)#7S?A%^w#R*^ou9ypXjY%iNz8 zl512}h|x-;`X@xTagDS_!dB|nnp27g0y(?kijx#1;Wj}Gcz{hJT}+S!$jhPj;0OD1 zLxnX_Za|#sT;XXAp$Ed~o$Ecaq8UFKcgdwNfpb4%9VJuIv%M4z924gXnlb)^r8&Wn zz#kp(fk9;q|0Y!0c;9;Z)ZBOX%C_cQjj!RQaRrvUy|4c=2C{bT1N|41{?IfX1%3tN zL8bfz@vv?%Rs~}ODld@`*BBb64rcE(b>s-NLQs_r*aVA8Ft$h*d(Wm?U#{Mu(oi4s zQCeb?2b~2rgA+`3MPlrENEdcx1Zpu-t)AaxNeZ%AN>^la7tH8K?LMM?rR$rzxm%C%n<=Z=L?eA<}LU-G(b26GFkHh6pD9)J;t0nKYdTzv-`H#U8u( z3%)QpEtKcLf79Y|#3g=$T|Q*_8J~znTo>ZwRfacXlRd!?nlF2zIYT1P5Q*qdnxtc} zaEjBk`|uM!i(qcwLI*6a1vvd?7rWF3YBiKan%|3rfaltYFB-(TZ1p*NI_| zuOS*d(BD&dfYz}h-c7H6DqWiio0S#!-#~e6ifIGk3SZn zJw@MQ8Z#7XRJxjUBL@t32lDf{TneKg$IcOM*eB`{la) zx4+eYES4*8LQ(#X)EPc2KToFD80iBqQgFXKh0I$%4ldib{0qhT7UlRB1sKr46A0}s zmDgL4)LSa0w_HAN#i#AuQfa*9f_TeC@RkeTEfu?4Dsi_=)^1VCkkVrx3>CCnDr2`) zz;3B*-J)1wj<=W2P?YT7=6jX}SqNcgjwsAqJy+x;SHsiD+U9($;)-rodGJ1~Rj?ekD>Q zWOm1|kSOWV%yd69L&H3v$eRj}WiWIGgiWAbe}-24rlJRwt!SV(cgKD}O5wYvOe{?V zhyaYOeV9cZ2jrkWGKwrgYk>q7d^K?9&u5MxWChnLdC|vzE+;R@=_T-|vp{aPHi%|( zkBV8LP;|&ckLE#9yj~E2uJxcUUsXyzl-pY=$0uX)+s|H{t)X4g;_aX|WhqXs`)I?F zrfS0t$GH=RMB=EBAA@{`>*zD5BZIa7N|FC4VuC*CMF+BIg**uoCJivl-WUi74;kQyK)j@s0$bZc~|m4_WB8~$OO;+I{e*T%(p>HgIc;O>cvV?rxpTy*<%mC zyN>O;_yeb*@Y^)$=g@ZPd(*Y?Ye+wAtB>Cn{piupDSkRMOPUQP>Ja)t=OgJaf+;$* zzz!zp(k!}k0tbKCV-s`h5gj4)4EkWx4}!T8!y8a^gzhmd;_fW|h1r3vil2^+DEkDn z?9+?~dXIj(^b_r*;(&cP?32DQhV+yEhS41T6vJWATtBAL4tjjP4;%DgU**ELXGZ#eVgpr zW}id)g~fh0s3hZLIeu{pr?hgW_LzM-#q0UnAmln!3_nxd!2OJpMq|F_Nqi@CUG?vO z`|C;-6s8`GD_Z?7AsB{&QXsa;$k5UY#+Hse*N4%$Ll^oBQTGzzFSKt_pCO0O z&y+lz0u0=~fFQ#il+Z!Tv2E`zir~;hO_Z=CS|mNgI|6pnK_9Nq{1QoeGXC;qDi#^3 zb9KdAlT(#8dZDp<06L54a|Z1s1Y3Uq(F-re<{ z??}M9Ay>23M)s&gXMX8gE`Kl99l?UtSU6wCtd*J1fxCu9F`4+q*5t=4{dyO==?J<= z3=IZjbxo7Y#Liukx>~uyXNwtCc9bf2EgV3JWErvr&N{XUoUweOMdQ*AwD?moLP?n| z+J>+~tZU{_#$JZ$+Ka{2#&>L%G(y{W25sYcw5`?y>h8*wP*v5RJ`H8Y5Zxz7iC+no z!tx8F4*}5Xv)F0QVy8Kuo#tH}k~xEy<^w6ei#CBeUwW?$qD`RE3y0Lpd%akr=!WU; zL8Iu-Y!tm~t((OE?hInP3lck6k;!c!x&DH`5mP=1eu8Pb7$@>U^VD#fUFa5T-`%r< z1tuKAfEuxYu+{n=6BJxbayZ@gHDuugMCvnIo79N(ij=_^#suROiWZ!|yt=MkI0@AZbLXuSz{$hQbkzJiZ|uJ6@{(d zS)paSD;HrgS>T|9Jeh|T=vYdG3=6o0l`qexCUPq7sN~P&gCLb7Yg&#pdmpkMeksc?{`2o)F!;o-(kNHC-h)$lvhpxR`bjWwE+kPbU=($ORFWFZ>E2%Sg6O;}fwC?RKZF61r?nX1hdZ#kdLg22t*A-|blDLli z-<2Wf4O4l>8e(2KtXx%ScqqkX6f# ztl6B9G;pgiwxA1b=96KMU9{FU;md~xViX%&;Irs~IHZTgQ`axHdIH*ZXnYaDlKY=j z^o$k6z!4Q?A6nXe3|ri_;nmo~-J$S~IEByfRbbiDBUF4T1nmqe+4DOTE1tFgj{2!< zvG>^6P@_YG+zXLgGO*!_CE+k{g!`+{&)tMbSLq2?>(`(hfpHQghD1rw$GFj&Vx7*O z)IqpOwI{SE-M|bDyNJ5D2$m)-cGpGMAv zXJxqhPCtu0}$SEP^M7!^Hn7 zrS#MA*uuLGg2hiCpS%)Fw+TeL;c+Qspkw`Ui}M}c?@0q$_$j8w@`p#G$ZS64uzef8;D=HFch zD)_^l$g2-|_4fsqy}o3zOtk4$|GM&7i?`XU$#vz8_IZuD^jGc!sPaMk43H|VkSX<{ zTshVzE5&MYH}@Sc1o09mMi`~H)H{wv+z0LZx<<7f~=p! zvwnT?>c!dfvrFVYy4*ny!g1&gq@)|~E6M8uD;{)8Pu#2H>!9K~z^BfBOE9P-81%Yw zskN>;*L)FE+HQ4O`Gl*MAFeL1_k4OvuVGN}>bm?3e)1H*p`SWES8G!FR5>f}zNTKa z?BNb!;Fct|y5wi1Gsfr<5dm$0Av&d&bMx*lQVlZ%_2F`gA5ya!K(QjTi%8W~PGrcl zH5D%|tgiOBSX^iqQjr)~W(?J*FmgncJ>>T&<3(6-v3(nI=GjIC3=V6XV*(y$ID*Vo(=J+eVJE>v^!4OJ1; z2qU6Y7Wwm;`LBG7^sc{Iy23kGsby8<%)nF+VTQrE=&5(Z{kAAFFdNf$FnqlOBM3fl zJt1TkrkOil#J<$iRw>3>WdB6T^8w;U0!}pc6Z~g%|H|(yxG*$aDsybl20u{5-@8G2 zeA`ChaO|LUUf|i`7?JMae^y-a%UCHs3-&FuTzN)cL`E3jlj2KbN;VbYPkxx9wS#HJ zrX#vnwd+a`zUtSYI0j)OuGA~vg>$kKa0} zbx+8S6Sn(}iW3v_VH`c%?Jn9>K9B$q+P)iau8%(%m zK(2#rp>a%|5D8?z_KVL>{iph__?1E&Fg4B$2uz6{+5shPuJEpWHeN?|Da%v| z8hsh2gLot}K?qi~dUQfNVLOV2n^ANv#5?XXH}1j;9f1(;%175MuW2G#Q$Ehp!Ywe;Amv(PmbWFF+|w%y z%azq?UPPCE#0*0)6 z3*d%mv!O!-&}2z^U5>&m$O&4I$?dkQo82*p%`?bo|hOF5!2%5dOK54_BN+r=-uGGsveJ)r1=buXTRo?He@b8~W<7$dH;cmzB%I9+B(@)wB zevB%8w(W?XGGD5b^`AbKtMFAZg+2SG(l6g(ho+f#@ri10mVBl;aLH5IaYw88`5cKO z$8w6ff+1XL*Y_DM8BQ|qdpZP4HxhC{Z znnebh6x}q?660rV-G%zi#B%%z7ymRSzc(d`eRw4r3B90=Fs-5Efap9;%BooC92n_z z6258L_skH4qS5O_jolz2btMd00MeTnee-OTx%O`=2&jT|9Ply$3Rc}rG;HopPgpn6 zaYl1SY0#_wk{ql>QA5~nO4Q_F;l+}WkuZ#sq#`t=;q3vBk|>d2HB$&f$c<&5a3ULG zVvG{X&PaPw@?r%*1iy?~$z$!6wM=ZPxOQ(Otaux^!0jfL2zmaJ5C(FkB?k*eQ)^;3 zB`Ln7Jbx2jUlfB(zP{!=M1Vp&;Y+4|D*u3BjooifZJ6Ru)DJmwg7EpP^J5r9#ll}6 zH;>NFPpSKG%AvzrqY_<2(7wKUeR=lky!mpsUJ(llyNyb)5VN~}C#4F`NJ{evW*r0d z1qN%@^QW9bq?ap2YV`!s=%a=ky`;6q;I$M;ef^4pxFCwp!bFzg!2lxQX&UqJs2LpJ z1+HgLV!5FjVe6AnKP%izd1mH<{eJGOqgbua&Rt}_Lgk<+YAhhwufy2Nkf>8(Iq=nA zew>Pb@Kv-@{dJRMYu?|V99d1qBl(02oLEfut`}V96NlRE`RC{*0AtI+(F3y5Pryn# zfyN)aL;CpPR(xI`Kl$kawD%V-@&54bZ#v9v;sVEUMohT`iG^t zE*OX6fJ;1P*As_Z6066~w2UMTc%}JXP$Je#G9d{^V3-g*l++SEE3Lv`g-&DS)1I~~ z=581yad3v))kowI8jQHY%H=bXLFsA7xX98KiVxr}$;8|9_R2szGxSokq|GVrl^Jnh z4Umh&3VV=bXH zJeISBdt1_&LWYKyTIt-q3nT6lwgrOX2^b0TO?kB|u?>W8SHQe0hon=4rlRqwq0_*z z5m^$o0iPgeP?kQ6_{N#Uf^ZK_l4~v`JJ2NI_ICiv*&M%W?MaSfk{`QYJE6057?z5c zisrM?^9E_7L8L0+VQL;m-wK@#<)5&KjQ2S&j9UijewBmwyp2b3?@z!tgVTDqOGe(2 z(Koz{aGRzqtT=l;TW}I(#7kv*4$+)~kz3_Z!5*zMX+Q2lK#rx|W6AVO1%$;k1zD(;7Ujot zYO#Kk@~H?cS}qD}$guJ2poSJ^3g097pgGg>53o!;)-n-J%zbiC+W5hmIX@OV+Q8E4 z7?m!h__^^!bHdtz?VZ{!YMPUln6?4BbLRh(qlE-<5$?>CF`ED1zis|hcxc8enDNu6 zbq$oc$SWu(o}W+%$>Kt@T>a)*I{vw=X)-jU4Ld`AGZ_oOqOMh!V-?%_+N|4HRvM-rrUJ+SNf+6Pw3wSix#uoEmG} zVNNAhQb;7D_4L)RDBNa8>j^a7t``=K8M7k6tivAl$)-#P{dj~5OtPZYKqn@d1`i*^ z&%%Vv;UqFUcDWSIAvCvM_m7iKtw}>(xG8v29}n?(g%}G}NH}d8lje1*^K(g4K%sHp z3@HhX2IAS!;oFSl%-ElASj;EHw=*Il`_}UNerA~!ko_pL#-cK7aG5n`$!zM-dokH% zl0|bmvpl8;EA<*Xq})B%&+*hVUrj(+cxNdstbm6+6*{C~LGF&xy{DRpioARPjb<#M zyXH&$Vk+pL693&L{@ZHl_$<$N5Ouov`He-KEvWuew*M*HOt!;r{YCLu)WpSp00Jz4 zr%&1Unm+9P!hWJld6C`N7sLjHw&S_K4DH_71ck~THLrx{dEuTK{K>9dti)$5&^4@- z>l<{Vsp~7kV}7_U2~V{jat4&BkWr{@3-5+QvWce_h63wOaTKRw}>z z)!nUD`-V3dchLE+>JZ%=vReNEVg`4)Uf_$unblpx@Yd_2cdIYi^{uOCJ&+ayMpe!( zy~_0me!(=&rJxnQK4Zf6Y`1Wun=ZNg!MG`ucyr`&d%8O)JkbizV8lY(Ztoepu39+x z`rf|B?BsWxW^-M1k1ni0vI1uC><9mHYbLj>T!29Dpl9V;`X{50(;7H@aGHJ0i_H;N zCtbTos?fdNt7MvLZqYvoT~hGue%~Z#9vPN?grUoaO5w*YYlW;_)TO#*4Cx8oM`K4^ z(!E}*;ho$x%^J&u-$PE6tub*IkARMpg4eabXrs_Vr3^;-runH{DH6s>3Bx+D3 z#u6-`tfR*c!S@j}q-Z1J^>v86b_>ub5T`2$;l^?WDh?}`aR|&QXi5-+HZXeK8#b#S zOGSOxvb~@diz)RORH1-e&@{GULMh|)q&813x*Yni`XzY>H4eHQTNc&3#Sg%)NfF&! zxd78Ve=MPlfo2+jh!OOCE0o%m0>9s*T+j}9(KPuQ%d^B^uX$*wGP&^6RCs~{3i8O* zr@!GTVo;FC6Dxyj&f#hY=>71lT;WNmar(-l)+q0;{8tWG4!caBx2M2M2`vRTiJ6rTX0=rdD*lsY%=cAzqOV3AG}&+-lc#i&Q6S#kDnj;^Pe(UVV5j z129=lG+VuZg*dI6N7i$xVmn~i_-Eex=!_NyZ~J5eM9 zvr5NI#h{FYk=C0rbitfq5Yrg;{ThPb)&5{@Wc7;$-So8Lso}jCcZ$`6-wpB^EdmyR zz`{5r;=@S%C=lt!c7_GVMt(C9fKsRxKnwS!!nQ)mAfaK6#-7yjiUoRN{lKQjW)xdA zrOza4MSy7Op1$e}YY0dckx1yP0N=02;DL#vsNzK`80y35X+>P??sc8gKfB^3 zU8YNkuzoPlE_w|WLsdnCq}nQ0gLI1uv`_U&&>WDz2*EI_6>(e`^L6x)w2w{k65_4) z9eX@-!!ltSu^6k^)T1IG@s3*uoO}E!#I&@sS3TYR;6}1e0fA9tF%yAQn=U^o^$6@f z9MN+NrFf9=CI%FFZW`YW(*^0$LtUeYMEG*>(9-|4`dsgwSupAy(`J7>K~GO?tOqGC zmc%SRvcP77OTm|p-u>WnEcxYcARh9I1 zx!5jr!zI4%O9Yr0WqBysRwo&h2w5J6zv_l0*!Z-pvS-ak6jO()OGTFsEDKC6IC<@-Q6u# zo%IHvxjiDLr?+~aM#Td;HhVt7LRc`SVSXr^WYZ)osRuq0VI%QSHq3f7=5jUl>E5$BU` zhV;MuVkvko?bf*4C8QU!MI)ivwfBifESGMZ7Lp?ZGHLRD>D8t+ZLtH?giuQ%-@E1{ z81$?N4gh~IuV{J-4=WjeF12716ud-cAKBxMufy2G@(MpOZCx}^`g?grgF@m3!>^?l zTi*%_u5T^1==DZW^m=2dMQ?2cMQ?2^wdkFobhkp-=Nd0x-+F{{HH82z0lpkCA}j2Kzdka717fk@kC2eO(Gymw*01#e6EP! z%Vf&=c-RSM5cp%341xMUAj_;4U;~@p^4Y*1mj@tJ{IUyA7)mU25D@@*8<+`imue@x zl?{crOSTl=%BI5GCEE&bWn`F+|tnod5pPfy#;<5u5my}0<&dUMfsYHjnRc<@9kwRhXQq7hm##xBapGvDW@rZ+~pGKd!eu89%Ze{%iPA$Bzbnthb$wTvUZj+B~|P z^?Z>ugC3`mBT|y-aO!y>A%;H>YHA>28AQy2Fo`qh%YlU;n+FnI$wcMAOz>?4K}?L292g4BN}v>Y`LYwH0DJ0r zN}=3py0eFif9T2%7?ZF|BSt{3TqltNIc?C$NXSj+umE-QNmH(0m`Bx2l9cNeW>S+z zigMjTIu!{dkViNnhrS`v{FX1)vwKFIt-R{-d`MP`hK-*gSbNh0oKA z7H^eL_2FobeyBm*wnSF*7%d=`P}a?Pv+3||{rtD*hxQQf`+y|Oym)GQYD1^17K$OA zWn-$(=NUGqGOTWxbJkpDusLgOI1jqaWo59Y3q>9{y_iU64R?kCGSe+8^ZtDn@C3Ig z)$#rbx2QakwxC;7Zb+K%7L^ZDX1Yb?fP^%+D5aq%xJBg#uQbn^3(WcAaBldE7R`>h zSD@YMZT9eB1rJQ&Mhy%!woUWUwm#tr2ELt^ABrY|pw>w~py$No3Hhig4fLD&sO5&r z`}?TngS5qc)N(-2d>=K{iAeWRQyF>SqoxkZ`}?S=jXlvvO?k+F%113%)Gh3zmLIAX z@lneOHFJE_@<2tpkDA)(6MfY31X;;Z=Yl?J`2n04E~gFdas4G9!~3~JO#+(K8{seF zHmE$>++h8NZiD$D^dWA8Iic=8Zi9IsX%V+U<>{E^HmEds*=;aupzCB|w?R!ItP8je zW)8RBf2hw|KWq1-InVL z{IQMuuO`%;%GVEc4_3?cCj$H&fDV?0s^m;gC+${mj<;LB$eH-AZYts4?vUf*$O{R- zZ%~^ip{d%V(<#MGqn4Bc+iEF{&8|1(qwWt?hPur!C{P;YjyMKgVU&~8sW8e^#^=^+ zE#fuJKIu5R+Hh5b3JRZJg}dPq*OL*uTkL+RSIkum`sQw{-}cSFA+C!S!Sm^J+ct@Ay)-=H=%$bonmRlD z_4N)pb%+j_E(f|5p<~kOr%YajQe|o-&m%z0UnzsQ(Fj3#*l5XFy8yg^FdN# zZ74wl3es5*MkPi!20c7YAjQfQaIHgLf_AxQyA?^)g&xR=5?Fr@a6F`~#?t11n0O5+ zfqt_?&J8ot)iRtAo~fxt@9lKmxu(`6#nR&GGq$w0I^@zBCmUM$B0CoEPypWG;f5AV zo*f0i+uv=Y7wT3#&RcwuDR2KuXL+J?`RDlIs{$4$%l4lN)KUy6D1^RYA&$tr6`d`7 z<@AU{dg19SHuua^DTuw*I&HNS$2d6+R-SMMq4lPDdhy0o5A_yks~cky#{RL5T?55^ ziOzk3mW$Ds=8HGecJu6_<@XnY9F~znG&MTY1hV8cK_CRE@wz^#X+(9VOQ)-gxS#7i zTv2hx^i`>2+T9Pk<>JANmzhmJbZyJiBMK4Mlc_06Ul9k?OG}?lN3H%Tu$iaGbmeGeF}Z(aIq z&mk2c-4S1}{GrY_+fjZ_RhOQ|1_vQP>z?7>OhG}W_&nAQYv|L~ZG#>aOOa_=Wb80D zi?r=HQ8^%~-sq7VeQbJ1xB+r96oHCfP14 zgrKw+86Uk!93MqV%3ydDC@y04?mfN1(`2e}lW>cv4OQ`_PirWEc$37MsW^g$eZ#0T zas~~_x=kiw)~6Fd3WE=^XIWL0@zZAT42K2wCg*{m+0^iD$jTFvN(J9^tTq8j==m;V zg@H#g~EzPV3bZQQ5t7ICny!?C$9c0-2XA>1eF2Cdgp|rL~`0!M>^{0 z=^^>+v*ivubYMuXI&Qz$4$cV4OV`c%ZGJ3>YCZQBJ1T19#xTi-X;`G4vLPL}JdQyx zO@DpYq}MR9ge6S4iwU!w?0Enc-RZku^G-*;shE0u_ifCJ{F#^R`Fk}jFW{uJZD8o|$*^X&+EZ>G#d9f%Ty}Xbc_#7?{oOI^(v&8&vB}`!-fF|@f1658$m}ta9Iaxt z$^LnueM=g0gTe_LK($LzWmxaq2r_|P5k?&^!l*_q z%nHsXpBIS?$WCZ#BZqk2G#HUxPDeOzH4!78r1zO_xJgB}>E9I8y>dLnw)L%S$+@wBQLdEi# zpj28$%QK;DIenh=`d&`|J4hA&Lyw%=e9*eXk?G%}YJD#xk?A9+SMu$7^c3fgUiTYY zPwrzTHELEoT4EnDsq<|p1xc+pTz0-i(=_Q_H3>Jg$qTSZ+JvpoUU+W%-RoYPR;HXw zrjr))>7lL)vq(BsnxOEsp6cw6oR8ByR+PEc^jkn6 z-BWO9U%xK;I30Ct+qP}nPC9lvzu30fv2EKnJGO0S=UxA`*50*iSM53%=iHpPYR-#U z^LEy#nxFBE=SxnWLkU?>paA0B(8+?7NDgEdU_><7hN4>gC3B6O0x=I}IYLTRN%am} zmr_>gFrZD&GnP&w2c-ZX?6BY<9=EgbK?&W#ga;>Em$H&iBz23YoK$t;umEfY+y_!! z=P-d!J?%WY`KwGhnQNIv9fpdd{2nMh&s{;V%=@zfdsF-SxVFtS29gKO1z>B=0t-jG zKj#feFFW^YfqcVL^yx*mc>WUKJ>|mx=8p2lv!K(5Ci@-f?*ksM-`KKYe(*B?+ukI4 z+ahxq@dY1h6EV^%ufNzx>06SGoU|0~YEF9V!LtE$ZS$VTtfN4o&6?PlZRv~{Wk(Ee zn|#^Eg1*ke>Ll{IIJogX+7{bykBpny^*<%oGJ5T!Xs7jJ>gAPdxVS)aE-Rl7b5_mn z8N58YYuekF&tETg57+XZ&%L@g(A(#~A$^_F9ccu)OF<49zVN?Z@Hz9OR3h}r-F&}( zSQ6;Ji|Icug*lsaxsM>rZ%f*C`y9K)XSW8*g0wB5l%YW5iSzEqo^9o@Ua1ck;UGoD zNnqKchsKg6JgnC8wp(RHR_ywH;RrYIvn6024RJgv;JpQ@=Pz-Jqr-hp{ifU7Ib>zm z_2SvtF5HPDi4=|#N)9G+rhphmgx01*a)@h=6bYn7hw4UDgy;)M4kIqw0p+PxA0I$% zwW{dWk zdB)m*@@Sy^E~SS&UyC5xs4+J_U0;z(Sa<@&OL`wk(z$Pv{F{PUD5 zR)~vHYG9h?V8Hg%oS{UP1~9ZPq6AzOa`s-*V_P-RiE(mGPjm{Yr1u2EQgmd%Z(>Ay z=@V_V;1v*4E*D}1O#>GMpJZyaAgzsS!B91XpCbsXzjRg?5F003{_u*7{CfIxyY@k4 z@PzM-0qr77G=g;++!&rhFC0UQ*mzYZ>8k+6BSUf!Gn?hAz;BS)1ktqD$vx29&TsL9 zK0omxQl4lS&ksL3E7ppos8su-b~7d&_?({59N*eC&c)y!lI-2%y9?U^ROJeAfycQ5 z5O0%T3(>nVV7W{c19XS)KnAT?y)wVh?x#)p2ZH7A_S#y?`M9SiA9d)PnyC4qLh=u^ zYJ)!x4bq{t@N=1`<2lfj6v-Db7#yJ3S{L`2>rw0cgl*1&A@NQ`glG-Ib~%O}V6Z9w z3NS;*2!PJC5Pafc!f~5vMJK?~8f=k<-t-L>2_lRf$XSJ{x(TWPrX&>doe3&z@~uo| zKSmKu9-s}yX@=^bjD>`7?*|G;Ds<-e+j@tqEZJ9g2d>nwq^R^~IpcQV+N$MJI>QJA&6 zY2!B6()HzUr%;4{gfv2R^LSo1z3Cx0`EnZOL|B-C%qDqFY)BoDEGb&FFltA>-6^N> ze+@si;7ZA)P}m_MUK3#F;*_;ij5vKvBb}V!|08tOl9dnWTsSXHce8ppzr+ZMFF?0B z%`J&Q<8Jr3QHEvv8SS4sV`eiE+F_oJGIPM(%j#~j$jpPR)KIgdKx9Vxap<)&xgzCl zvGJo8y;HoPn~F3DRC{gouNTr^#b~m_)J;&nW*cTwMbbu&O_?j*)b$O#^oH@W;6<=2 z%YHvc@pcBWT;49Ik(ynk?-tb_OoH(UO{gxKDQhR@dl@BkUUJ<$L%k@M_Syj`QBrWI zL9=hajI!}SJb-pTwphlKeS(hCG8R4!m+5~caL@BQidx^WY_xL?a4@U1f-kol5_=L( zdXN)kVEe;&(_qvNDg_eHIj|6JA~Z=+Z}9gqQ~_>s7u|j`KFi0F+nJ$8%{={AZ|~!! zke0c4wuD`!f_rJeUlzOvgZ-JcLLhaksKp^M&OAxqP-PmRz1*}$2GpOCM!}0uuPOBN zgJC(dFkjErUvDvAuRcNYjg7BEs}M?xl*dj|MT3=?kGrP22GA27436hd3Q1OkbH=DY z75_emfIkb>>tC#Np7g@!T;y)xykFCQy(>S)z%%!7*oUd}ni#A9DFT$%IhBjATictR z4E;4-ux$J$a}aMkJDWK>>(Bf4C39=*<+GsIp~I!6!|ybmSG|IjwT-pihjeZeEJUQP zIUbOyWsKQSfH^xm^QN+qCHNONxzC$?wBGk5p_|v1p4C%6Z`7Gr5Y%3p_7C7$kB%^9 z80tAhv=Rdpx)C^s(8Zw5j6owx1y;tWJ$L1V7EmD`1<85DNEaRjp~b2*w1A%&S*hVV z`8$gtN4wg;cm4zqfHrc@;Kl+j{;srZZnzEUx9SdK_#qxUTaaA=j}9|B6j=%PYk9!C z-N%ZY-&+jatDyL3`8TK>t~g$5BQXgKpK9(&Tt&^1w$0-f6o7(Hm3wDfIH#+=Y9v7m ziSSS0WeWXL(P-GUPK!?b@enAc&2S4|Bu3t;>YoUFebq9q z)C2l0UKuE4QGa6>WH5o!1mf=p`R(PCP@{=|%m#4IvHQF9v9H@#@hhS#ylZnZW|XtB zHX|I0HF%#l2(n>%exmir$YF|`Yfux%!6jp_VWQz+w@#E{OXcEn(ypiYJ{Ls&hm((m z2gQ{FMtj(DNlKW~=gg3*Z5eXzRrMMA#Yl+a;Gjpx67f=3!l?8L{B!wc_RoDM=g+wI z48`?q|0v(YZ^j>Dn|~N&>Eg7Z{ZAyXA6zN^jl!6QMlwJ5!NIY8aZHFQui*hl-_B&*i^}+VeILY+GX4-)gJE-qA zey1Lfgj+4iFWhKcb6C77TD()bR_FUm$ZX?L`jkNH-qJ8q0?w}sw{?C}od1??^_6Do z9~xZ#u_5X#t|#UzZDz2ON=xgcEY)0B@YxB%^TBG?!(~(_7ml^MftUFb{}^|gSv0Iv zAPs!K{%>Iz&5)?X1is*yhZ3p@C$bW3t6A14@P9DCBwIKa5R8J`Sya zVQ=no;kAo6{?Lq@zaQ!=lis24-e@7Ky}yS+ZZ?q0`{QMkmAuy;$BPPR`|1GItH6Vc z{(mZVy>5P<`D;x_pS+AV`eeeVp5Cn4=Vg5TRTny~jFKOT^*e(ff`Wc+TCHYiOM#7k3YZyO5$Tui;$mYyXaj5APTeNjrw&^rU{ zOXpE3P7Kpjor9?vXm{nQo`E&%4%of+okZXD$dsps`{ft{dhqK_ek?$OX#Q#h!d|&g zo(?WNmq`E$4A*zrff5cg{YeBuUt%(H*M>djMk*2=U0=(NZuK2H zfLv?nD0vFxAFDo>U|PIs;@?HA!#}%-iFzDSeZ|e7f<3D|#?TLA4s*j5(iFBu3p3VjiogidM>3T|4~gb)jVIwuikt+>+}n%@#>gn;Xh6Y0?WeSTFfNx0 za$b5w8N{?Bb8u~c1F!oR*ci#hV&KO}(iw>oK`|T_CRFPQ4qA>apT*b%%w0*kWV~Z% zpN!?4gkqJpL@|+HpbkZqpo9Y@yHP5<=BVEk%}VQ@Q&!8wa02H^z#uD9YtR2xs|(Z_ zf5AC#5HXAOU&#o(PJ#VYE;%)j-L(Wtc4D)_oO!VG2{};q;#kecw?s(sOev(II6Lh4 z>+IT$*G3VNhAuBFZ*%OtD8yJ$Z!Poi!qb1K61)iKG?hLM%Vt&ycO;n7S^>MH+5Dqy z`eaaq%c_MLHa5*xG41K9-uD}nOQWCUzgan~0emCRQFzX?xx_Q}UnC7lQqU?&3CG(@ zOU3S5=(eO|@Xy9T15C4-{@ow^@b`?S!Kmpn;pwnZkr$JG8~c?Qqg7R+y&_J_uR^<l9P~PJ*z0?*(tN>BPGRX_ET!yy`U5r!ZVj!yuW%a> zcf!ZQ>kv*t8(!-WcLH-nwgF@FjN>*67T0xa21^3VqkXmk=|URl_Sh3Rww+%J*^S;y zmy%97kaT>f1YV)j>9@zGkl7QxY_IV5nrCKL=`8;!{pOY#E&eg8(PNWsdNpCU$kpZH ztn=FniEI7e4Eo|q>EQHYiqi15MJR!<+^2D>@(kUPA)#3RsvA>8MuzNsc}`w zJAv0Svb64Y#b;BjjbxO`X!6;$g^i1ZDN`JOXZq0p*1Cp(TtmRKH)!0RQvhv#+G2Mq zH19fW?ta%9y{U7JBWI5D55w!D)^KPxeW~Om8wm&!-owE-h#XcPTklX8i{s3}$m`d( znq^4|o>wkeloxUgjat;)1~UJsWS^XmU@vknX%^7lz(`=&iR@z0 z??`LPFhi&9?ncC~7Pq`OZdRa~yA+f~6e%4iEY}pD~=|C9n)j+~hc<@$+3=bBf~f@T2fK4UJM3l$J5Ieh0$a)x#sqwi)dW`Xmf&T+2uiE3hOg}XPe@uH;eN5 zEXO;FENRL8x^bsb<~X0@t7y%XB9`1JSqS(iHEgx7H5E&tUomm}=BVYekJF$Z$eazs zOYig2S`ah);?vFvLQLkzn^9<6(uH7C54n6&_jGS7Svg+VZKs_}UG{6U?VBH^iX)VJ z`Hq;hhSfPxGc!DWP6<4Gr0JYflY}6VZ&Nc~v-i498R3**ZS_onvz53@IZ?Aow9Rf4 zfgGXbEQf}hK-3`sF!#sGhrhGp@hALHaQHr=9fCZpupciYC(k6=D<_@|p8II;iC9FI zyVa1P_bedCJjP&ML{0)QJ4biwr^?%OWxr9<^fiDy;x`q+yo}9E+Bf5N+@ohPJqiG} z9z#*RV%N4FdqcG$8OeMkw)+Zu$oItM%W^#x7qcS|!GG?b=I33;tNeC0bV!&8 zxCkj@a}L}U^@g51a`m~Dhhf~1bWS_>%TgJk&MvXzY}k+96iAC<__6hDCJQ?+H@OTk z%<$LSS~CJ8@XEI>+OdBjahD+7BLpr^YkOCPY^Y^JYqZoL(ORdVHc>;5dpmB+GY(eS zNhK5-hvMci&$)3|PXAmiaiLS!ky(2^_BpLx={>DBFdgVHWj3VB!~a%I z6`d=c0}CpCP%-n__xy8Mn>W!|v?cV)h(37Inte|#J|lCYj%B0sS|9vYFD>8CY+K|! z*CAgUmLn6R>~N!DGZ)dKZ=<(L`{<89B^zUS=)lbLYTl2{@o2X7K)aK3XCDZgyF`Ix z`MaRkqzhk4z?ytA-^V&zZgt%boP2oW@MIAE(vlQ$M$Lf9lTqo~+AW5Q6Ihm$fHVjx zC;y@_E{6x$6&nSaa;dN+{KL#YyM-l{OhK4V(L!~{EVfg{CW?5IYe#X3#6il}ogp$m znmZh}_)=bRJL$&UJic=P4^=V#DYeYmCMN%<1`Gn4Yf_Z)r-oaR^dp;cX5B(-QLC0h zuVx|S49a2vw9>Y|;IeEH}Tsf(5aWa{UVHRm^vCNZmGV$Cc^w zHPdd59+@p4c0_#fVf?b6GE(()45iZb6Z?DW`d@szu9?a#NgRu((i+^jnM*_#A-Roe zYbPzG(;0}x3EE-E@1keit%zh$Dw{PnB^T)+HmM!2^I0#Yi=xlnyd~SLZ9Xat;^yb3 z(zUh7n8QPnAhX+5*(QZ-);2Ahjmu*o`?~(em;}A{#kKRDlhsWS!0^|!PkD&XZa@5G zxH^zoH8;?o`9x!=RY_Eake9FL>8}w))jX|tu2Il;aRtzqUG~?yX1N05yG7wFR}gu} zw-4dzg!c(jYowXNB85VQYmQUG5S=fGO1Ewowo1fqvd(j5MDPW z!%!0@Ba`wLt$TH;!sfZfd8|wW`!Le6tqYQZ%J2G_E1hcKWP1S3*~Njy1O=A+of|AH zye?UC;HEVvujY@Sed%w8@J|U8iw||`j|5a8wD6D^5^A=228tTDD)mYmcj*~|(O64z z=n1ofg@1-_)E{Mx?97lF?o|5G1vwBn&crJ;AT3%@BipP>so+*Znnz#FGUsPU*~%rR!@#={aH;ot_W-KqI2w@qNhT(!@W8rLehS|XKr0-F z3s~A`KI2q3EPJ6!;@1a)yL8Y<-WmtjxR~HnV2Al?OKsIL44_fW*JAsPfYb*(*Xz_$ zEu03!3pM!L3k1)w?adWMm)Hy)oD&MMwI3yJU8)1Of93Qm)L0=2E-A2AsCIZ_x?6{p zc%{gK1WIii5>fg@J`M!D3O@J5eNcgko}6H2i}3M+@Z<0jR-4NxH@_Np;$OV~)fbxK z)3_wM=sAX$d47VvG~0tP-?&=kb*#CHcFxX&@7(P*UuTTE^hWK6hpt^_4=&6owL6*K zZ&ol$q=lLl8w}W3xIe1=&hhm);~933QIvored{u&I{4J!0mZ*`+4Vo{G>UC5;9Mw8 z&=4j<2si`6j+AnaaPb!cr>%LAX$B-j)a>;LgW``zWb;Eiiu!o{6L1#F#=MFRqL4!c z`V_S@WCL0AtXa>pS96niwvqsQeMjnuz1kgZ7mn3!N6uag!_(poA;G1nKQy@V(q<1Rbh zSEZzXtT!Qrx0%=0FJ@;O)i~Ir41i^}F%sYAaWUtNoB3PakCd6Y5)?twChAJlX@j*HKI<+(Ge3`kKGIC!s8<>F3Cft{Vc9Cl%(I&M554-fJyvbIJO`UvF zj|J9ve~<@%`MxAjNRW>_s79L2mi)yE4gpV35fyvjJ<&aos>sk+lNqUlVn#+{1V^b724%}s3V%~od_L0ZNz zpPz*a9t5&auh{JhPX8A+9x%u6hF+=myRYMO`VM5{rSPo+a79RS1Vr=g1#LrxE9mZd zY4D^2E`nJhmow4_a1nL|J<_6kX6|x=RNAYwVadLi$i^+!|Hxu{$6!ubNbs1?gKhwa zEoVh_W-Ml!y`!FOL08QergcD);13U^Rl&hoUGVPD3L`m81&GPWi{2EIN=TbV(;jt^ z5`sEcApam~* zAFnusZmH%_|46aGDO61)?}VuqBNOOEem4AHIcvO&A?U)%p>9-=43>3S@L=3;G=Af@ zpt8}U_o%Uhee;g$xw7=BVXJ!`^tTmKceHe+AIda(*aif6(h0;&gRE3!L=v-D$HtBD zoIgm z5X5YKK!DUboG?Lf;un_nPq-S?Chw>7SZ5V8o{Py*A}1>S37rLx_!;Eg`R+^(Mi~_r z$)Z{^De1qAG7}LT(Gr35knq_ZK2=XsG%0O`z+hix(Yu0U5u}V~_U8h|*E4n> z3g1Oz`2hZB9BJ=X5|j6_n61#WzU?exXh=FJD2n(Neq#;>WD>(Ak}hq$sv3HGgc@fs z!kBII>$zEp{CcAa6aD{;NRQ@P2vaxxS4LXs37r%~CbEtv(fU#bf>bCuWT(1~5Q>eD zw%pn>yU}1|`+GO>lAz;&>Ec0Ywh(k2MA`L1=s8n-y^P6`o1gU}+V)dB|FQiNqvb~N znEWws8`8{Bv&a{Q6aLNyRlKFWYq7u4;XhN+tZl>G9WbqbD}G-CDT0j~i5i=b{TyC$ zr62+FL2d#{ki1Z)SyaI`JAsgcl`r9s38KfJT#(s@gVTdfCZRSg?ugX7vWEO~vZ_;_$Efv_5tV|Ih#-ONDn-vmYaZ?8TLUl|f58iN0VX9GaKy8r zfu6sE&iE%;Q_@4((zK~y;Pi2S&l7n#a}LJ*I9q#!uGn#ad%b?iZ9m$+IbX7DJ-OApsH4EgJ*!Cf%Z(D>XK>U5YhjN0RKn z!qBLjV?*CzXl)ofQm37ZzQ?{N4AS6fCa^mVp6?K}3_sl}Q7L3WQ*=?ncP8UIP=`^i z;O=l!_;8pvS>555XX-iiK(qboyxZ^HA6=t@YxhQs$N5>i`MF~5qhsg6e@ zjSu&(VaJW#S^}Nc;O5ME_CjOXmmYu91;%y+ z<z;mDz%h&q!ZCj+u4wjcs> zJ_%$nNIen-xL((JAZ1UMdzKOf^3*mwJo?v65-tOoVTxF!uTHBR5xC=OPF!4U#*`uO z>0v^VPB%kLSsDrDGWA3OSrp1aTaYsqlEg^RE><8)iX(CGOKcL(@q~XSH{Vg%xF=6q z0-uHscOpzhL=@GX9oGb|#^GvUDr3_`Ic^+B$3!kEBBtTtcsKLHW-d7S|<#gmR9ZYoYTg~3^IS8RlNSulPRbV=I#ed zJ3&iw`{ILf_18{3b^Qv|R>_jkp82L?l1V_s7$hb0Hzo@RrE4e7%^bwn@xfr zdOC2hzl%ov3YkIp&(MfQFQ{^hqI4T3mmP{Mm|$gsr@;UJJh}P*1y4pt`2W0Bu|C;iaIX2T$mxwnOXUG8q*nvPIQ#>5T_NNc6n3?LCGt16C_rwooTD4+Lkr^=n0Qqoj1)RjrW8scMhrNm4VG~t^tXp`A{L88hIS(Rel-PD z4*M*g{^WpCDV^4*Ns<=F6srE;;JjbD+tZ-gosAdz6Nde78S!MiIU1S;yr-`$RQQKVhXSk)-`t%ZK6%73^ypc#!B?iCA=E zS{N!j3`N5h2_*sXV{hVZRw`@M8a6CT)KR`gs)2jFOu`bg*)vb)gLIBujYKroEV1H- zus^a@5TP3tGRqpxl^Yd)mpskj#2BVI{DG^H+3qdb+D0jqPdKfa))Xlf5X*DeB3_2U zzXbwT?se!RX1BmwO|uX@{l)4&`ZQ)}AEyBYP4J`O=X@Cb4fTa!1<~j$XbF?1jWmIfAzYLCoTVZ}B)wy9!~ zKXM0Xi2FODq?ia^cm4h6>Hu0jSzre7tY7!~f^&?w8~Gi|PE3t6KKeIZX~qMO8UWZ8 z?#Dxd!}~?^`=KJZ8Ea7Tr^NL|H-a8EzdTT8{!?H$_^j#KL9?5Sffce)Do`Uk&R#s^eZ zGKu1b`(bw(n<~Z6s)B41rzHvwG0#DKr`kd}c%~jeL zj!76tsV*MmqnQ%ZE-C9BRd}+lgF@Fbptf&CcDXoIm&1Ykbrpc+c50ULkm4576l`9Y z*PxVh?W%s|q}Hw~+NCAx?;bAyLfOs&4|K{k)R%D2l+`5Dc4Lm2c6-nGcLb^g`f89) zO$lH5)smSg=#M9b+!MX-+58s}eEFF8-(@{n1 z=28|cruj$fLd&8QV^v!q%_^#Mm)_#4FJp8|ofPw5l%R~1v&$6IUmGQ>$8#Ghm7E^G z+>6fK~gK77`(Gk*F-R{ z?X}#cQ0!LbIg>!XKgGwXRsc&aC@8T~if-~4U2yoB zA7>d}Q~`%Oc2dQQCywruOc&L0S{bjO>)e)X>h-toE>4TR=_Qxzi6glv@ACGsTAP z7y-i?78z!X`UDvIgm8=$M;LvTi^q0u%|fjru*CM}ea3$iMF^iV+df*y2){I==+Z4} z;7^{u3g%_({o#jn*hYl2B=a#bI43yW=`;N&((~R$e|L>^)@8cWepCw=dhv6b0`O9WSkT_)^Oy$mr5b zGSMV?a|v+@Wt4F<_7asjD?OH_b5l>fNF>1+ScIeLI$e*o=lx5!u`276 zzqv5&k>|SAVOil2ZDwboRza2?i)s`TCQMElWuM3IqNThDS0XYHK*j-|@FvJ@v@meS z!e9x1ZW|rjZG3FYfPF)bT4C-gm*AjmILFr_gF9V@Ra!(Osbj^OF4@KU<|N~ub(68Q zZx!&2$3uzjr(#CW(M{;(-0$@>&L9gI8ShPX_%C8y#9WM=0~h1047Hc5!sQsTo!yjS z9=Y@ZqUg!uwxM>VKFD6uMO?lVLg0MR&m(8a+L$P8yAT8X(l$__Q$s{0oONuh%uO2s0k3Dn{V zTG?a#FeT8kCp>kEY{MmJYorXk7-wBVzCq0@A@Nz4{Q==hW&PIx14mr!ud*`R-J()+ zkR2Z^1E*NN;O2A3!s9W&ML$W>axOa@-rsauRJBd{Bf-hcAWQU_Y7LO|bMp88NaV{q zn#sP>xD-}H3(ir8|fQ0^px}(rMH$y-h$%$!s#c;v@3l^>AgIay z4Gq=^387?KPrx{HP^kf%^v8A*SVC3*_W`(a7!^4pRP5P+Y)jRGe9Iwj&{;TdkkzJY zOVx^c%VFmCV`q@nlx~aOn!anKrqSz%%Ls3@_cEh6jZaVwoV0#=X;xqawhhO^Yw_uT z`ZRraIX)e0v*@PRdoem|_nRxGJp!H43jVPboak`*#`dzpRzqV(v`c;Y3y(LA%YAnc z|LSvo0KW@sGqtGl^@7@sBj6yfAuwhwE>wyU{xQo5iemqIJg2DWPdZnMfb5Oy76IdU zpe7xZG_n3Wlb&P+jTdAKtbkLOZ?bg!7V}68xJ9`1v*b46^(F9dd1@k4>N zi9Je5iU7v5;|mm_KkjRn0tL+GcvcpjH$dz zmC!2ACaDepxN34Vg)W526SSre#L&elNbX2!m_<6#U>PRf5FkJsjXUvwugPHuKTHUr zkV|$AXyYwGk|moi`GA0gB6?hYXrNg})BcST3*OumHvqpDF41-0diz*%a>R}%;Ih!Q z^s@K1Q-{Xm zRPWvL#YmW3o)%2FZDJTje@fa@&QN5dR*lC=ljyLmafj--BQdB~Ym?F>_TF8$&9+4v zC$`W~v2pFmvW*PC>UP4A$CO^q~?c_?Hl) zg#x2ym&kOUils2cguuyg3|35y#Nm>#s4fOES+WtKDX!&6#RSM28YQ}n^}Qo{N0}@2 zcrB7Y0~tHj$ZQlmS{5~Y1}ix{B3Iu}Q0?u3aAN`%nKgntZZt61C|ErBY#Qt{x-Bj% z+c17LRfudF-0P3~U5r){45rz&U#~g z2Av)g={U#WNRPlZ6;CA{eaDxdlCJiag74w=@LM6LsG^gO)?wjVxTHD!0n2TvE$}1> zcYSnjd-#gez~o z4Ig$z{H!*3*HOVw`m_=psulPncr=UQ=pegD2=H2gCC+I5K}A^9c^mtA^`XKWB7I&A z{>AmJ*{AQd!Zw=stWT?+7)a~;OSHK?Wo11pe_TTNPrV747C;~UL2?E0#D;TVA{`lF ziHl`SJoVZOg}Uuzw@1K@`cV<7l%CI3TXgZ=`C?Yqimy`K#f1lBZI%|p4m~`ItIk^f zu>JzK-T|>>1vcxsHLxs*T6rc?x4b~W5Ul$07Wim(vTsXmpSi0Mzh?40;Xng>#GVhK ztI5+7a$FAS?&S6tMh6Kzv4lQ{jS1qS)a;NtC|i`)6D82i8ziw7> zcq=79wgn=TvxVIYGe4H96^>lEd}Y?>U?0Nt(7>(AYkR1vS z1?1!IBOdXqItDoYLVTD->DQoH-5|PU(#6&&mAnh>7l_Y5neV3Z(K9``B@6@#Wnh?v zF;3cV>N>6GDb^gAsQX(~U5{U_U;|ZU!m6k^dq$}|Zhh20PD4JgZv#m2PQAW+SPqGz zKE(Qq{IGTz5eJ5rjmu06#0(EQ zoFm^z8Lp90*$Gmb#FF!Uc-@zdX@x)4MlaGvwnArjx`aCw>_XmRF?tR!N@Vu;4W zOE?XzF&hJTD4{4Cxgl@@dT!;fAx1UO~Fs}Q-`~&?5WxA(`N3y7B8ov!h_D;>vrU~W`TC@HpLKyjiMDR6d8a6+o zd+U_io*w2BQ8m_m5d^SD9RpEh!+kj#M64qbq(uL5Wd0BImCxC2usGnu3a4I0qWIO* z$lR$cJfiH$LpYby9)wa@fOTU6vychn#)56Vv7ku(`rCa;$>mCe!7`IgNs_h1ur?lO zK}z3p_Uk^Y49gzc_eg5yrPdWEcr^Ftlg4wN{a=W$iDDz>BRzT7Kz=RCaUbJK4MUcA zJH^T;r4sTam_&%ky`eY?4BOG2Fln*V1QsX+teANnSsZxC;Hz@E+fCLWZpW`v`x-_%@lw4>2m5Fqn%Ki8jlJi&sD^@TPZ zqGE)97X(f4j-}M0COHmB#ii|=U7sYTvwRPUc%xr1K?e`TC5tCwqz9KdT@0XF`5|KyE2uHl$%& zcsDdOtUHqc#1w3V%NU}Iz)HYs$Lvgfm-%{Wk;}h=zQV6l;_8QgmlFqo=WF2Ja~TJm zkA)6r3n#-F;>u#9_H5$Onjt{%P+^Z5M|{aPldyS-fW4X9b19}jw}^{&zolGfr}`1n zybO55k84o;1Xr)bGYduq4&zlt?jYydA5Q4Eh{EE^B_xK4Ukj5zm#(-%rkWOtj7%*J zG`NC(vBjkB@tYwNaXa*p>xL!bq-%K9a@$T3N^Pk5nl5@O9*^#^eY70`=*$X$@EYfh zK>+zf{c$A>4XEx&vK+bct9e~8Ndi8%;V}p+g==OJ>crq=tVzODyrC|?r0x|R(p!Q; z&LhTH4h3#g#NR}fretYLt1irJnG}Zq9IUSq&03i=P@|RCen-}zjiEOGq6yEniN0oKksQz3GB$Jd6OO|x3E*+yy0b2pMCuZj}vYhC&Xmd zQ>aE%vJtO%cgMIfHx8tfD#sADx!`BO+%7W||Rwq`*kM2qvHa zur#@iOhu%m8xxKjMI-re6m(uPs_Fm&Y~MzRT9PuFkwN3piHI0B-i8>b*?w|> z-hl(_TE~`7p9UN^$=q=^M{GoRwg3UE3#%eQu+?S17E&$PKGD&Pob^ zWq{>H)?O#3k=5{Ho@CFQ15Uk3vx;RtiZ{N8OLpQC9zHAn z!(;GdHw(o-XSR5+{ zGShG-3s777qV|35@qY;usVUYE*bsrflh1%Sj$#kjm7A@{z3dXw^Y|6JzI#J3J!B^h zph3|ya;riG6wm%dlKKD^yK`W!c}_gX4O+N%@q=Z}TJl)F!QH5(s1&3B%oKLU(HQi< zbBu4Vj@%o|(7gJSJ5I*$m~rQt>M^Oaj3Lj}%EY4sZ>-RgIHpkWbI^c8>09x`^!6u- z!{*9F`!+*IKn*2TcSkIq!Q?NMl3EK}=v0Hxpxr;)d$J+lSKgY3BGk@8AW`K?PMBrhpEeJixv|!Sht6FI2g%Vq{$#wYEh)p zx!Xn-ZX`O6qUJ4l4u)E8{ozRE!ts|RNl!7(%Oy?fHLKR7rU zh{k9C?i2Fn*-CiMX6@tJcTixC2UZWW(ZtRRPqf%JC72s{CEz>4Rtr?S7$V41jFl@v zT-EDp4x3+my!|-m%d~Di*ssQ8M|^yS6i^o2@JFn~WVo<-zcn?fD7iSY)b!PQDeK_UMxb)kPWX^39WUjb8@TkE(Rl?yoKr+ zRaGG?EiHd0Xe7@Tc$>b~`xs+V+wTp_6zXY?;f6JC$x9Ke*7p6w->kNM)M)-@SoUk| zUN8p=4l!gTDW;w6!DPCr7VX(r1>M-4+6ons7i$IW%B*e4Wn$<};Y-U%4aIbrnWAVWqFqAzm1&L8trOs?sHCE& zeJpw`L(zL?Do9wJ-KSGL@3JQiT)J|9wTeDi=Ngr_vOUBn55XP^4I1*f>kmVE7P{F= zA8iPcdrI1 z5E@2$>}^@JE&dL*R~}M!gJ7C?SJ|yX=!ndFoPzup5wqEPB+2}*n}1{ghmQrhKros+xhL6>|AW1^3W`Hv*EMms;O_3hgF|q4hoHgT z-95N_aCdii2=49{T!T)Nto84I@3ZSnol`TXYHHR+Q}hKlUC`A$-}^pqu1M|uRKN!6 zF6|Up%WKz;nDmVcX&W<>(`w2#r&?Q`uRL9!Slq}C+e9Ts@^3^u_g@k5k4V&ATmT}b zDZmo~AYyb5#8?0#*7zF{%S1-={XxXCNh&Pdg~d%+9Hs>q~@;~TsBs&feOS#j(=x}vz%ZA_t zXdERyeTLcxyQf=goM-3pWKMO_Z-JiirYVf->v+4TX>V<*oo(z~ z6z;f_ba+xHsiWb=E5IaUk`(j9Kg&-7_Y>sB{zZmmkRtT$W{Phk?gJ4m8P;{e+-2hB zMx&$5t?y3d0@;Ce(nI%uijNpH;zIU13Sa_vZIqTif<5@med|=w_$WnPA-Bk)L|BsA z53i*B?__vg_~Ll#9yh<#@|*&#@t&sKtuaoieWkeW_{B=$)~j*41TiiZv9$C-aPJoL zN!jQ&T_T&0x-|XM?xQ^J&iA5{n$whpBLw9pONZY?V^Dr?z)7^Y_Q0n+UsHca>EFu2>d0FB{U4l5=x&!#eB3V zta=>ty?R*BDYaC8QfXaR^f>l+0G`qUp3-UApY_}>zxEi6AuOrdhuE4Qs`H&fDW?KqL zeobKd-Nwnvt>pm=ic62S=f^na2fM9rLeRT4;w1Tm5w>dn zYi4FWOM%K|i3-R+sA-K9MT9wO<$mP&_@RcGrz&XmjAN>NMz_nUg==uIOB5fm;H3(M zkJP~+1fReCnsC*MKtqwJ(269vpIGzwA#g?#nkRG&PLW>JPnv0%=KdI>#k`lSc1spr z@NrlWnOv^FTZ42Cj5f|<%@fEc*jsh0QkU&5!XreW;vpk2=lkD$cNSK@2ymj<3y06( zu1A79Vj@uV_{4DeDe!~ipvL8xQE2kXd{F84YXx+OlbXiW z^HCp+0O8Qcd&r&~!<>e%YVj=bD#60T0!F54@nEPUJvjkEI!Neb@H$o*$}nSg;%eBx z*3bJ7uNX(#QMDcZf5vVl{$F6X7XL@tZT;;(?Dija`wzSQhu!|eZvSDo|FGMC*zG^; z_8)fp{}FcUvigjdEH-rLo*1IHE&`5;IIQ9MSV?$<+5A&}z4%j# z#$jir%f{G8V%IV*h@W`w_DG7q%vjv6bq!M5|VJh{#@F7z0Lt3Ma`}fsU{>wtSUu#&NQwf!f&p{aY z@ukH_Q_E;3C%TaXxX0^FjHB4VFDDHEg7%E1t7?4A*?{5#6L}`^Rl7Ppw3sH-e+0Zk z|8WE^019{*79O0yC&ACBy0ppEIeJk+@Ux(HD-Ml|TI~m&>Dp$5_fRgK%y!!OQENbBTeNfyL1}^E_SS%~CDUptN>Epmer;j4J06 zcB(FKp(|<_^d@ z)kxekJ}VtZnv{@JqQA4_>Zc!ZxMLzlFdNIE5Q!2-TvraO zfmLH0R~fH-zmuiBwbbczH=S#pcoq%>f^$Z!hi|81xAQUhHl|~!0OH1uFC+9$GKum2wP2sc?j3$O01?DdV|*9`nPWe6Ysq>!gc&Gs9NXX$AJ`cgFK{a=4h+6HG^cX z6d&Z~3&{nFSOx!aviKm3(`mAUVe7WHF~gv5oU@tSO0Z~l{}`;D#}dZrkq?<51f3D_ zR##FG@pfaq$Cp1iJP@;bk zwy>!nqLAc!VJ{!GrsTLmD{_<%TEQN#$aSO$?eqXL_r5v6(M`;*Gd&==Ov}y#&L^gp z^mQkrtmH_qJ?`<*m2JD8&|W}USUg5bdPmscCx=(TS~Tcg>DgHCM!Zbv%w7xrvDTN| zO!nKCX6IQ887XhE1 zkw(a#t6uOLUHwoTBm?gHE1}KsKP0r9gG9kLol0xhj(A6#VQs@7EK+Bgt-M+0@y&CAlA9ea!i)uoih#_GN+WhcE2lhcXU0hrbfq z*wJ28S!{2wmakI+js9QN@o&;VvEL#aA6<8~Q*^Ea#yi{g zf$p`%8YZr}m{k|1%S%l_TC?OqDGGOm{hIZl^2mq0M9&k0Y82!P<+u)pe^(A`ipm3tVvP<}QD|mW+?dWG6 zTHba@VYbDoqnCUvcwrqyOxdy=<4PadR>5H@ZuWZhr?kFupAL44nT$`Vtu$SN^Ij&8 z2i-+eKRsEt*ug&;vH1Sjcg3ZuOcU+l;xQP^psMgElS;#y6HEtIa9zFn)s9!dgXm%9 zz#88S?!e(lt27fHBw;rom;-AHW7pH=v`RD+Nh#99MV4MT^74I+&TQKe8?zqLNmF#l zn#qAZIpV=`ga$ivMs?L8qz;i@aqz_J-rbpCF6V;aSF*r1n^l#`6+3_2?i=q%hU7jrC zw8z4tL7O8rnJ_*){LBHq*hEWJ^^PD@@u(&?{8@i)oqgad?l7RhSxrnT7Pvc6Cq^;v zM@pC4V?MVfkp&q?suW4+NG-+IY{%kI>3|?j_H^@!+Fdwk&aiL~&X>pp%SL#&qhb)Li+`OnY+Ey*97CT)> zU4>zoaU4ildrf=Mc*S&a|2Yew8{u{%K(ds*V!+k_pN`Y~#&A*+xZxV0LWbzZm>~3T8V#z6Y~U9R8;8=3_#?gV{gU|CfTtdocT;@_#p&-JAYTF#Dfi_W$W%w#xtWaNj!k|0LXx-ksj>jou`0w1Ng#Q3fB_ zuj6`_zXy%U#;?Lag@V6guObNV=W z?b^4_>)AQWg-sn~QClIyva!PDs6Dt>_K`*x7DKKSngcWuQjx^6ZvdlN!92JN%I@VJ z^tdy_f2MymFf*9PFKJ71u$r)HBbnF17wr}~ww3q!bnOFf3lgD}s-mv33+=4<@U}9w zYPrr8HOSOs0%HhQ25P+X*^x9*8O?!LO;qiuKyejoz@`t^G!5vugcJ`XPrFptnljDi zJXD9k@?PW)+XylJO=ex71i*z#+hrC z7L9OZ+3>x}rI}@dZW?wNgi#Hh+ z*BbL*7!M>W;5V6^gWgnfnvCDYh@_-&c81C{W9E9CD}c34@{%eKmzhV&2%VJiN=h~{ zF?x50QFH|4_-=xe2xu?m&Pgm;*)U9hvSYKsgWaPcoP{@O{ph@(;0w@ro6E;u2@gS_ z6C;$#kXPdm_a+YsA!O^oSEM6hg`qjfH&|ux_01}30&cEjt-*acnW`1B9`0XGBybqK z6A&TVJ{aypBTM=oJ{u0xV^bj$BsNAXS}xnMAQVA_lghwol7rSC40TaBg!#+y`ZZ+} zWUrfe>TW^^oz5Bs{;Q6DEhY5f*j0Y~ZxtsNwBPOH| zCYx#N96~TPr2EyZCR@pD+MnH6+)&k3gvNmlMvL%v#l`uH*FJ7yf+c$UvGddSP#*is zmS6j#=51dM`5AN@=C}m0^fBjMy9C8k=dBOIP*E;(Uguu-{E|;pfS<_~vK3fqy1s%K zRV?kH>%pV53<<0BQ2z|n=g!D3l}loB_=V+UEL{Nf1V2tVS)hquY-*Qext5lCaEMF+x|$Lq3O~ZC0}z^2C=zG=&`A!8 z*zc%XnGZ*uU3XCs6d`bo#u>1Y$T71j#&C{zH%PxM*sQA*A%nz>nhZ)a(mxP~9~C&I z;lUE8?yVP!3Of!KfVU=^el9os%(;GrN!X6s@j6RUsh5M*Xfr^PUj3s#)4gi4SGLmV zfQUVOvXDhk#DENaGL*=!j~}q}Pwk-q4+!yG zpyFYqy<5~nZfK?@qU+SmHZo$Y^L3ph3Wlg}gTz!QORn*cI(`?2k-ny;(BVkA%5y-V z{YjJYRNduN=}w%X?kcwCc3=qP_uDg0ooUaZTK?WV)!@NIv*L7o#z-(E3a%aen{PH|Q=axV_( zYUTpH?m4W%vGjdenJrz{T+S~v+PKAMh{%aG~>a6(Dm)}XHfYGg705;;|mEq_~*0fCeDh-SX?c-=~8| z28Efy1x#zZEX>GPvt2_kVhX1k{BOK@-~`B`LQ>DCU>_(+_~)^hFTmA7HDLKPJCU<| z8!P5N7<%f#{}gr;MY_r8ZQl7sQES1TipiCW5G>@!ChRI9k9zuzb8&rNh z!)(*6Z-tB)q@-$tFf~_B0-kWfTqnoHXF=O#cU=1%lM8ZW(o%ha`q%kbY3^2f^#?r) zq>6gov=O4dkyBq-Ymk}1P&~`V+pg;jtQ5?CSwi|FOP6rbXVQN2jBMxx&aEul>TM3q z(FB!~nS@|sY(8$cWu+|Isl!Y4zIgX<L6xH5S#;-dgcN<^Ak<`1NQmPMxrE%n&uo;-`9|=naiRc2~%2I{YZ_iU+m? zRK^-YCT}D_k1zRE$D=Oga7NQ$_KoR>Y}gj2NKF(PAXRGM#pq2W1Y zUQi>fVbNvXdTZqQVWhArtJ~!{Zq7~@HF|nd+^VM$uIl=j+X0+5+pn0F^ugX$^Zk|q zm+9eztt~f9|DJrMAYw;Kh~5~9QgrbfVrzWycojP2I}ss#D9I9JQJG!}7rUgAz6AFT zDL)$LVkRxs$?Fa9SMH0YG!T1zO*>J`V@Cep9^ucY&qDuVvTS% zWmx54H^lKv%tWlgC7@9-{BMu&GV+fs#RyO7!tpSMq}ca7cI_8Lh)9fRxD?!War@aB zDd>4tD!EA>mADWXp$XrC{P>RD>7K$Z(X7!uz%7=y{hP_SkE!)e5(7#2cns&=Au)dmL?XJ85npYh%ksbuxs&G91T6-@vNFQ>+p=Q! zFU!jFAIr+}f3~b#|7}_MdJV9w>~{|_-R_XfoKrQA?wVgJcg7HF+l;nNaZyi{cHnpl zY#XxUvQu@CZ%;mbVn`&9mFx)KMUFaXH(#;20ctfsl72q;9l~a>@#Eq-c_TahQLk)g zzaA)YuaTGx$2=2U+e6Mvzd2Tcq=)te1jY&d3yX_0v1w6v_cyPjlb88X&k}5i7q8X? zsYl+R5_`=03Ec;c1rN`%T>5x|yd}=GKTusT?xuBL6L3GsHC-;~>^I|en-3WTxhU|| z%;G$|nkFIQ`jWk-%Xu(?D9adl^{_H@ipE2uSCndGDYvMad-rXSqR-!6Gb+&xmW%&4 zPmjm^&C`_^{)4B3tTE7e?M+IpwOG}UI+~^%ET3kOIunDhY1>`5z;JA#!FDslH=U++ z1lkofJ)y*o*6~Wo(PvuTv|>1CB|Gicix*f>bV^I#!Ks-#Qc?jI7Ogk>J{gdA?c3djMGcP zByDnj%U>hJmFd^|BGfO-0I!>;&C_$Gioe6_lBh?CyzUURCpyUxYyGv0ID{52Ra+K^x0V=jMA!+GXp2 z)yh-Fb|%h?K|W-h;7sy3A(}TmP%!t=3%2B10h$R+B(_$H+TF^pmtzBWYvXqrKlZ(b z6uc(4FNH0Y&Gx5BYsA=`EDQz#U()d~jZ`d{;fux55VfHuquWzKo_y!4ugFx|zbOwD zgDrlYub!I6u^cx&d8RD(-oFGDO^lzt?PP-}^zy&{U4>1cMdL}|8%Ed8g{IbRhB+Rf zwEQ+bK#7Kv|I=nktuVsTjpO8Igde+SmSB={PqJ(o9nFp!xS^UGXSBAO8}O4+v4Hm& zr?g)KZczF>>--b$T?utkw#q9J+-ZQLLwI#HCQf*_`nNHp;tef}eG1u$9`2iIb@gV) zrSu-*S~5a*6%&I%HkG0-7|TRJAOF)xCYEZl>zaRCO{1P-wbBgPz9CrUYFAcJrvrlb z5%(J)`kQYb#4CCMr-m;{SB)xZ5i4PYn$&SCWlCK()+*$3IhMSt8n<(*N*!mk`~^kx z4s@(KXoapMN8rh^GTFIID0OBnM@M1OH4Md^v&oX~L^hO9N>{g}%!~w-nZ-_x&1z&o zdZ~$OXLV>13{s@n@6bTs9bW|RT3ER>V&?tTZ*j>DXK!%Hti z{ff3>XWTG_(@~YmvG<|#53mNA88bO|2T90IDbdYh|CI3mkt7HdBC5pJb$!gzHQHC zx69(&!hnnAH&u(a=^caGyhN7m0VcVKFm`+1Z`zv@C5zN~pA3C0XnO{TEocSxKQv9r zck;NTV+{>Z?lP?PQ%e2*-{O=nL~kfjrQDWsQvt}tfRs%{-+)w~BnFR&7&9#YJZu>= zOal&Fz19PXq&rEe+;_-k2xtj2C_--$GiZ_VBKI>`?)OKlt6c*F)Br{pdPW|XmdP#L zIJXcUv_LYI=H{FL1?Y;1`bD+yhfKzgASezq=8bzxfGVO?E4+XB5Cmk~rJTc#|KHJ2mRW z=?5cPC^Uhbe55iJ>91lVH!@IQBPTOfXcDOTNHv`t&l-uv@a{TNp!v&nl-n{%`Su^K zqmfiT2lwMA`}3lu^yF6-%+tdkWxt3RZ!4us+Hk@USD|mdu+)9P_M=RLEysXw;!jxW zQm`0I`JD51_%Z@yDg>yScKAOb9iCDSUCV26r*g+H_@B|SIK`KpwS^?#GM?!U- zsu;JM{`(;fs!aVF_TiOBD+{by``1p^+autSzuMrmyp}=#^->kQtSCjP(SY-0 z!7wO;(2N1F#B&_I>DD44s-T{u&Q#ErAI>$OgS?$G~Y$jq-V~#?sAB$S3z*hO?Ai z>(Uw1T*LgewUrG3iZVGpqbmQ=eRkF@D{+#Ues;rfAva3&KldE9PQ81MYQx__D+IQX0nLM~n=0@g6uQ9)81q8%ks5aRFGw3_%p zuPLIo&(mr53}g*QM}WCY(Ox$gt=Xe5&tw;aE5Y7+N!)9!2SeaCjtWB<0lVZrR!z*z zrx^@IaG;8Pl7|1yJ&kSo-|uODdZ*q}tO!&k9t8rNf-$jbyuM?U;4Q#4uu&Ud}wQp!9Sj(R5tFCz+_y&K@GzW z;icLX;1$HNhBvYT#*@K=ox91&j!mzQK1}BqD8RQE)Mhz7(Z>b&8YoeK(<~QL1>qYG;U5(|4CHb#0{*z5rr(c2Bj^MnMPsw2dFZN(+%8G;-gjZS z<{|4Q7OEwWx@!85)=M*FhBXb|jd-951e%%`0;F^WZbVor$%UPXiJha#h2lYyjqWEC zRIb2@yjs=L{yP%H@lpYCgANxtc?n0%R|KgFgPkwRbJA^8XwtaP&sU#!yZ0DW!zysq z@RF5k!mbCVT+?D?v|z=ZZkgN%J==!zb(OXLke1A~jTqm1WyY|V~ zz$g9}be+d{?8a-6C|TECbRGDrIqUPmALJ)afKwcciK#tY;(9`RZo`=k!2MPPxp^MV zOH-163!V7&zgH!NwWU*Q z5-`X^AyH&BG+596*wTv>l{t_BV+Nes+KSY zC7r11FUl$t#i)f%e1J?iAk9VVWukxn68Jc9Wx`~T!Dt5Q#$A|F(Po5~z40m>_>Y`O9) z7D|W<0UL7MCf8CurqH^M1hir@0j(HnKr4nu>-q=a>3R?A0lik`DFgQa?ImqhXv8=2 z(93hq{SZ^eRRzt#ph&Es7cX~Nc*_h;&|jD(6kFROI0*Hx#hjOO*Q4jh!II;art|8# z_k|dm%P~$$sJpMx((Zhlgj#)7d|F;fz?Dw9Yjt&L4NfytR!*#0gHipFuZKg<4My3~y$t@Tsdi?^S|F_bJD&c1v?zZ>Js6)Y zi9!?l<@Wx!N;AzH_ldF?e4u(1--H*Nu}B2z(_<)owb)GaQ1d<_m{(~^OLMeVh0Q5Q z^r#2sTZ|Mz8KaM=qsm1K+Da>iNj72inhgocI3#u_%KTswPZ_5mtL`?Gpo0Cs?ac6j z0{fgT+YDPg#05rs)kFtCE7?||i?afcl4?2=00CtS>vDn7!mYFC_m}V9`?VFdo7fxrTD( z(xb!Wv;LJNP-8Yo`a~W_2CsUL>g>2ebUz~PeS5Hgx5ks?TN(32UHG|7>N5|VucsH}F zR~G_RY;4D$)VC+zUjz+*(+w~q>AkCxJ{6S{iKC2?N5OJM&Lu|}X?>R@ zwF4wcE<=2%x#VcA^#-%Mdi65jQb{dT`ih3Ta=1mLEp7ronlTBW+s!wB1xS{BjAHDT zcJcYVV+`CnV`quCNY~-K-(^Wt68^Wqy%2juZdp|V;)`o!7IF|0Cjsy<69(#w-zPVJ zRdu)cp7qrCLVSS=aEz$xUfyb;xQ|dzo5jnl193y%CPA2f>MMhe%0#><#_E3uuzCCm4kpF9Q5{&A%h#XhU+dq?74Q$Z>84konfGJF?5@(;h$^WKi9f{u66%h>;Adc{d2AR=UVsAweFv5-9Oj5|8HFD z&g2WSAY9h*D=~6zXsG}vI~eBQCp(bZzlITRfet(U@(gx6L|qH_4b8IOI<`HT2SYBZ z&oHZ;e~t@Cos>=;j{CFEgG&>G zY0tX$vm_qg=hCFVbXhmhX=KWGq%;^*rkumuGc$9836bk-9J7rr{C4z_`4C~Wnj-A{ zSt_vBUoM}KXw2N13mow?8?mGt@q%e=+O>?f8*X)<;bt0dI@(?R4#-qBjnIC7l8@io z0tWoqN0H9}q#6pb z{L%Wu=t^?wLp6c=VP8gruh&_hC=P1tD9?hu4=JcszS@J|7$6L8h*&WY3wrfg3{~bB z^TT=8mXX0i%FNQ}JAzhMEY0VV9rjrL*;RNM_`R!;(Dt8q6)4=ce>qFYKsbfnzT8-3`xnV#-2j6{U>Uijptp8Nx*;pz8h~nFFUQn^G7TjMJ|9G(fYVkKQ z0a*MASYr(&@sb`c{&Ym5oDuhgcMj39xkl!3Hh)PlvPbt?<9_g2DgWVA_(Yp4juc8% z0kl#0t>;#~$>i#zxfk$8XYffJVIz(A^Ys_NqceVGUZ%Bmrl0n;#0QNv?$}An_@#y3 z7D20t$r%7}shkyN?cpP>@@LThRxjYPnApyD zk1|oHbnWp#W>9HM8O*U@s?Up5DXrf)rG7Z?e#QS4?g;y9<=ElQS=0T$nEPeS?xn<+ZKy}^JtF~(Qd|8E4`CK(Gt!CutCD!{$je?B+@{wWtiMAFJ zw4@ZJ!oDc+{>?8wduUHs=FWZeeT8EQgbp#ktQ^2djnbRchFTJgg1|8 zC%a!qYoUT@-9!LbzJPE+OK6S5A`H{BEm$*d9FtCy5Np0kfFD^;} z5jc*ZiakOeFzG>O``BP*9*U+wEV}eo{k~1UL1%2hz=u5IuA1S9-0X8f| zzS|y}z0N%b_IKiqlWZmvX)Sbxq!*+(ngV>n;J*&Jnd*`)`G;~_y;JTa7<2=Mo2W}O ziMfZCW86zBM6KR5;JcyJ4hP*{m({c__#H+yH&yw=&otv(eF%y2uw5HOo`_2lrzo^* z3Iv6=kQBibMicf&mwgysRac$?FIIK#LWRSq0T^S1X0OdL-V@E1dsuHZasiY#Gn5&u z3-lzPwt#If7Iopu3rS40fjAgj!8H9}@MZeNLK|tQBd%5HWXw=MjnhB`Zhd`O)ak_F z9NcKoKa5(C>MG(oFIJVL9s<=V_u725Q-!l=SO!Kk*?0-iS7 z^f$w**1rS>W0DozR|uZj-n2%1)c zf)vYT@J0dxue`sY^3A5 zWUIa^teR-h4C=+{VRdq<+RHprHV)3Of-q&bBJaW{9LRU!6Pkgf`b$X9R(?RH(ANN} zB$953l-;6%2H&&ADt(scDM2wl4Y3}u5)QTSyi^~fSj$#;Ae%R1tyj3j(l5ion7d&U zEvVo|8_O(dkrk(T2-DeT{S%1{Yz|lRf{b~}yaf+-6&C>C({0!C#gBZ!F-!Aa=}A{A zSpWLtc!5hY?Mm@R_{JXKVz_X#wGLHafTtfB?;J5ecvz_Xx9*AUUH6pF^j}2&>=S>B z{6`UXD|jI^@I@}gSEoWJb3XrzG_U_A%}?*7c`iym&SzpDlXXh`-NFBjJ5(M8a_`h& zwr@ZOGnbrummo|&E=>Crlhsvi?zgW$=)d~@i=ZsCypGmIdUF08CQYDbxeXZwj3A*O{2Q=4-t4whh3G3_2l<7C+U^wR#=|7 zojy)Rjo5|}j_**sv9WZlvSuPK(oS^d0E%B*t{J8iyjq>egCydaj z5eAAwOL{?45;gjT$WL#l_u8kt_un})ME4KKnY)gZ*Pc4pE_Q4k?|SkrrD`ui^C~5p zOsEiher^-=oN0C0g;X<(5U05CADjq|DA4yN5VDChd~**5!OJy-t`eHkpZ(HSTgXt= zl+iHLW(Y1c*JOo)IQ1a`r4T#5<@Zv^iRqtG$RiKhqk%bs@xMwTqFV@_hrhV>t)ns- zZWDvTh*rupIlv zH2;sXeigw?D@1Q^V~9d}FsPY5kVPzfb4MK}*95l`Wd>IiUz1k}%szhsm=VqUU2>rL ze0%n#!Kn9A2pgajf&(apMEov=@JM&9%~5Zz!@ZY65?|QdgtQLDaXx^YT!Rg2KboDX zLl5nm^F!UVGP_u5U@1!4=G>@g)7e=S9#}fm&y!`MyLTALnp;CKtbJdc>cLn>x#R`j zWH>uBnHpR%@G*Sq{umLjewku%8K`3Pgvc}+modsWNKj4v{l0GLP11MS4_FvR&uSS{ z^y_-q7!im$1VncZ{d*f&_^4TggDVc}9ugfEFeo~f8b zyw*KDsGIm*tHkPd6k~)(SA_gik`@7f{+!J1^eA4pOz5ovv~nju`rL+tHLR+4?wHZq zZ{dRAgut*L3Y_tX!PSwk7t?NRq|z#gc(B{UXh(DQe5$F$($lB{tzUqKY^<+ca78NI;kLV~#T>u-K0n5uD8KlU)r@h9ABnReVrjc?g-O4G&}L zT!CBf%^p|=*!q=g^+uxuDHKNh=s3~S_&>NcjHu~uV$BklV%LyBfw+@b<%BZYaV0`U z*waHxbnk_3yuw<%nb`OZ0ol(t>(YD>w{#qkGj>LdnfQ7Q!Bwvpq7=l{usn=URFiCF z*0|I_n4^Bi)1o|kv0S$~`EKi{6&sZNW9ugv+{Gk++(h@f0ODKRH=MvzJKP#vsJV_# z6FyYLCdwrO4ex;m+ZGX?XONV~NplS#kj*P3=84G*7m@-aVan0%qSM4+BFf@dpyD@U z5_08%;EeKWKn!h=($uyK3{%9n9zqAl-N9eT3g%mrp%kZJcsRIWMI z+!AZVWw0Sa5c+)T`qR|~7G|)+r)3A5px{^vHpM-D!iZ*M&u5RAd02LH2b$GX5C!k2 zf{Tk~z3Iexp#m(E`?vU7Wm>k=1K0~Rne?vpHuq37Vwua+a(V?yh={S);+lFT!Oc~5 zKV?0KrHF=sSIgs~`%I@T)1}(=onrZT#Zk>awtm)aM&5xZfURGm&N01J^0%#j9$@P~ zrGK~ekG$LZ*^jb$Mb<4`cTko?-fjJD@$a^NRe-I3X+x`OTkFly?BQ=)|HilUZ|}DL z{eQFdXZa$j zEs*1NyDwiXJ0`ZWsR=UF7GF|DlAPSj#AupFr#*qbP9e?|7jW{t+xqt_@5oJxfY(A> zx-^eYvr3I`Pq!*64_4h-S?H|X*rY} zsOCw$)ZX&>epTeRt^c(d`+#$5?vttRQBQ-I9%NmWe^J#P#cx}`chbA9U+0gle|^Ip zVCx?wL*cW4?9o7JD5eNVZpLfAAZOH0UYzp!g2=t09_uUr46*IE9+c$LXRXk-PK7O3 zZ2yXfF&bH0uVq!R8~{ooEA@aZp%KKRh0?QsfSaShH?1cY0l|Hht7*f z)yxMff{^+V4MChiF{QWgEr@r{mTAo$ja!u+tr5q{i121 zKgt{`OmopuZB&jB(reu0_*Eu4foD2vJZG?f?IUvnH?DgkMjKx&V#BvEOzo+1I33ee zt;ah4mi7C{sCM`LvZ(fGs`q9gc$f9(0%ZMo2yPD#2QF={5Ei|D^o@@!S9l-gUoag7 z2hLcv(^YO9%zVvGGIuiGW&QJi%lhk;%(78=qj*|nByjv|!!y}<`%j7{G1ZMm3toRs zBsT7U&6{R+T~6*Ovc}P_Y}^?G0%=+=JQ>W+E*_}xbzZnLPse-fd?Uesb%f*lM56NaAT!hnC(gXa?VbWTC2 z__QQuk#T`sE1$sVf_qDtJ$s(bPT&L@E<3y~F9y$mF(kKR+HQ}xF@+aCeT>`RX&-_B zTB>HFBV*^BV5{ZAev-lLu(S(VVULe!Uzu`(y(3P+9u#b@2M3chjTtsufC(o`U9L_# zC9uvNO9}Yqr_g&R#O&`*NNQgKmo<5JLhCGMh2-HcYfx{rho5;}>5J57Chx9(t-q#s zHUFC4mH9Kh+obc?^zQ!q^zNr$+>k-}Y@zvGsjLRW3Y1N18u-vjt4P=t!s%%$>s2{@ z`_Xwg;yb4#Yb>djXk{$eCkZ0_GuSX9UWt`>O6GYlg7>8rDT(S z(WRUk>|~}9-J+h6yX(Hg*d$g4295+a?Q_(Z^dRPrR4R5=E3GyZb)bp-Rx7Ob#EoDk z!nBE9O;=A;B9;Q713@fpfw*nop)XuCrw2!T41N@Vo_)HnnZ_Y)$-eR9YwVT7_aZI`Zq6GOLh{@GL)>z|6rn+CQb6mo(?2snKC{? z75s@C6OraBwwb6hTolOK%ZYe&Wz}AlM5Pq(M`*@t4~#=E)4RG8P4weo#)axmfiksj z7+E*$5n7?*B7@fIX-zZ}+(c7tpE(sGFa3|)oHA!Z1z*){?X?wS#R$=pjIl3LtRKqs!cGyrg9h4rwSG$nO>$t_znt6WawaUS+31)wvu_sP>Uj-x@P5!;I9HRH)q) zV!#(Kv|>OPJ0J*T1z$8e(+XbUA7KX%QyY$~U#0^hBfF-Nvu-YUj<;yu3p=u90z2ZZ z>#a`pm8PY1@|sN_`Htw^iZj=jb0NfWJ_cv5B-n{KHDh>m6sjETq z3GC9loFr1#X+S26MLgIXr-hh41HV-Sh@Tt8rt;l~S(ZMtxm zJT`2HrA8Y33W2m%H!dIWZ*war7gZY8fhJV_5`d$FxCw!>ZXqThdcQEGg2g0ngIsvJ zWPWFRU$tF&fdj1C{>I^*Zzr8zZwuZuU))z-w(gK>AJRbB;-$h?*fJiCv^Obi_D4n> zd2>rvW#lK6Ia(5AI%Wczrf{8%BR}B31k~{yvy1Y*935?FzfG~VMOZXKzMKVgEOZg! z;!g?d+$XC$GN@<+AmT1Dr3jj`0E`+tN)g+=n=YLUa-@Y0e%~tiMjxC}DQV-GsGDyu}7pbnE=l>Zp=pm=BND}}N$ zX=rJ=47+QEig_eeCDXc$bOT$+dAGqFmKf`;Uvj%c)4DbYWQyqj#ok*5)zvThmN>!P z3GVLh?iSoNxVyW%ClK7--5r8^f@^TsVCe<{-tM}WQRr6^*%v$R= z$A64&ks+T3BznvivWxtgn(#sK1HX%vWJq}P5rYV_)(Aad*5J_K#r8L8(pfQL(ETtT zix++8R9rO~ASe+SyI3XT2T8A!?Hm3oO(HaAHATY~NLU~n3CRD^o5mgsR_lkIs^B3j zkTAs&F!$BZ%3<5gtX&&kmbfMjH?65|GBMT8kh2(ryQP$>b%~}ia*p%kYpK8-P%7B} z0VoxW8{9)Ow1hTp)GG0cClSqs}COv#d=HH9ee zg7v`nv)lroiucLINaARLo2&)Xwm<^b(shn<{jLCqs|n~7*umLCd?WVc%?A}2+FpaT zC5d_yB-JnA${p)tHN18T*gY%e0G$Hb8++_Ooq{!<-<<-R*G|D~{%fZIe!zC@(`%ru!Z5flO0p|VG*#J)kPbQ9k!HIUzoa7C-czD28a zGX-4QZbmp_R9Za3ATUbFoS8?gZ120`81-LTZ(FOkD%N`7R@&AdDC1;pu276*r?^^7{a={$FXU8kW z4RXxsH+_Ds*P@h3y<*o=Y$nP<%rLt&&=e9m&FGW^q$^mbnvI;g^={OQi0|C!R(fFt8StVj!iJA5*GS=t9KR1Ylnbq4Ij{%4c8p6 zrZA_lhL21Llrs6(P(kLOP=R6WNBjg-Gqchf%Z+F>uN`Ov4^i^|(LuBKNJ{d%estlZ zi4lq@*!vv=#gcuOw~Q7J3T1D^^!UFJ)64%#OfNB7TvnH&Q}lN$J-z( zO(rfF*LmSjcNS-5`;OiL_KZD2ll)6R&gLQ%4k}&+i~1R(l>%O_D-=#r(5iJWgh{qC zxs`$&o{B-BP~cu4#4spxp-H)OO1E@=T@kSb?J z`&dABwpgS$_iIzOPO)aA`MvwGVK#p9HagsmKEwyV8XT#11u#2^Wh=NzQ@f|7`sk)b zO25)N-^$L6&A`v(mf?sXW5bc`NDpOM^2p)yO`UXSyfVDzdO-5JgXaRo!@xrY1m8}HJ{Rp zA@~N9>Ar)8c@~o9kqRv#e-#z~8qR0nuK8yX<6>eL0skq2yFBYDaIu!mkoXT|Ong=A zA9DB`f7ty1so9Kpheqk;f_gd?nmI{)d%OQr$=19Wvv$0dYthU0uHX56YTY29;`~Lh zjBEo{9Z%+_9_vVNN2&}Cgm}1N{jT^KUX1)G8HN|Z6O6tuHO5F#zl+g(AB5V1bm!pq z{Lb~G-Jy^lgAScv#%7J`9%-UlNs;DF0y|RJkE$R+9?bmgc4v7T5Pcmk*F^89X51ub zOW}9$&4e9HQ^oyrj#IOZ^rEKTtiS_{1Sur(B9YA$aGZdhgt&vMA(er6$frMdp%&9(D&!;nD2%o@{!uY(wW+n} zN5?WVtLAk2nfKLhl<{geTAbY(N68daSdT5jIHLvFjR>ustt)50*|Jz+zdM!2UBR$# zQTN8r>Og1!)Y4fSF_7M;#S46asH^rv|0RcrBxvQuTc{~!fzCD|J=ClR0@|f$59(lU z`H}M>HBgUB91TM&-Dm3kG9*@T*g83iT9S4Eof19OyS`+uEF#7_a!v0m9Te6OE3?k- z>~K|7e4_3wBBPzX@u8vsm?X$Z5pF&-jrw+3mQU{CH@XE=M^LHHH>2@#YKz~qr`v*hHoLwpvJ~cY#}L8CA#QQ=VzNa4~m-x zZ|BhzpofTuZv`~kA05Em%9KGjy>n%0Af)QNG=~F5JnPkFk8aG)@trPau7iZLYLiDd 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 S^0y4=eg;ohKbLh*2~7a!Pg}VF diff --git a/docs/img/dash.png b/docs/img/dash.png deleted file mode 100755 index 6f694c7a012b417908da3687a0a39aa182e91c74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1338 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 diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 937b39709..000000000 --- a/docs/index.html +++ /dev/null @@ -1,3146 +0,0 @@ - - - - Nimble Reference - - - - - - - - - - - - -

-
-

Nimble 13.2.1 Docs (52% documented)

-

GitHubView on GitHub

-
-
- -
-
-
-
-
- -
-
- -
-
-
- -

Nimble

- -

Build Status -CocoaPods -Carthage Compatible -Platforms

- -

Use Nimble to express the expected outcomes of Swift -or Objective-C expressions. Inspired by -Cedar.

-
// 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

- - - - -

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
-
-XCTAssertEqual(1 + 1, 2, "expected one plus one to equal two")
-
- -

Or, in Objective-C:

-
// 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. -
  3. It’s hard to write asynchronous tests. XCTest forces you to write -a lot of boilerplate code.
  4. -
- -

Nimble addresses these concerns.

-

Nimble: Expectations Using expect(...).to

- -

Nimble allows you to express expectations using a natural, -easily understood language:

-
// Swift
-
-import Nimble
-
-expect(seagull.squawk).to(equal("Squee!"))
-
-
// 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
-
-import Nimble
-
-expect(seagull.squawk).toNot(equal("Oh, hello there!"))
-expect(seagull.squawk).notTo(equal("Oh, hello there!"))
-
-
// 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
-
-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:

-
// 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 Safety

- -

Nimble makes sure you don’t compare two types that don’t match:

-
// 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
-
-// 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
-
-// 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:

-
// 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
-
-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
-
-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:

-
-
expect(@(1 + 1)).to(equal(@2));
-
-

Async/Await Support

- -

Nimble makes it easy to await for an async function to complete. Simply pass -the async function in to expect:

-
// Swift
-await expect { await aFunctionReturning1() }.to(equal(1))
-
- -

The async function is awaited on first, before passing it to the matcher. This -enables the matcher to run synchronous code like before, without caring about -whether the value it’s processing was abtained async or not.

- -

Async support is Swift-only, and it requires that you execute the test in an -async context. For XCTest, this is as simple as marking your test function with -async. If you use Quick, all tests in Quick 6 are executed in an async context. -In Quick 7 and later, only tests that are in an AsyncSpec subclass will be -executed in an async context.

- -

To avoid a compiler errors when using synchronous expect in asynchronous contexts, -expect with async expressions does not support autoclosures. However, the expecta -(expect async) function is provided as an alternative, which does support autoclosures.

-
// Swift
-await expecta(await aFunctionReturning1()).to(equal(1)))
-
- -

Similarly, if you’re ever in a situation where you want to force the compiler to -produce a SyncExpectation, you can use the expects (expect sync) function to -produce a SyncExpectation. Like so:

-
// Swift
-expects(someNonAsyncFunction()).to(equal(1)))
-
-expects(await someAsyncFunction()).to(equal(1)) // Compiler error: 'async' call in an autoclosure that does not support concurrency
-
-

Async Matchers

- -

In addition to asserting on async functions prior to passing them to a -synchronous matcher, you can also write matchers that directly take in an -async value. These are called AsyncMatchers. This is most obviously useful -when directly asserting against an actor. In addition to writing your own -async matchers, Nimble currently ships with async versions of the following -matchers:

- -
    -
  • allPass
  • -
  • containElementSatisfying
  • -
  • satisfyAllOf and the && operator overload accept both AsyncMatcher and -synchronous Matchers.
  • -
  • satisfyAnyOf and the || operator overload accept both AsyncMatcher and -synchronous Matchers.
  • -
- -

Note: Async/Await support is different than the toEventually/toEventuallyNot -feature described below.

-

Polling Expectations

- -

In Nimble, it’s easy to make expectations on values that are updated -asynchronously. Just use toEventually or toEventuallyNot:

-
// Swift
-DispatchQueue.main.async {
-    ocean.add("dolphins")
-    ocean.add("whales")
-}
-expect(ocean).toEventually(contain("dolphins", "whales"))
-
-
// 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.

-

Using Polling Expectations in Async Tests

- -

You can easily use toEventually or toEventuallyNot in async contexts as -well. You only need to add an await statement to the beginning of the line:

-
// Swift
-DispatchQueue.main.async {
-    ocean.add("dolphins")
-    ocean.add("whales")
-}
-await expect(ocean).toEventually(contain("dolphens", "whiles"))
-
- -

Starting in Nimble 12, toEventually et. al. now also supports async -expectations. For example, the following test is now supported:

-
actor MyActor {
-    private var counter = 0
-
-    func access() -> Int {
-        counter += 1
-        return counter
-    }
-}
-
-let subject = MyActor()
-await expect { await subject.access() }.toEventually(equal(2))
-
-

Verifying a Matcher will Never or Always Match

- -

You can also test that a value always or never matches throughout the length of the timeout. Use toNever and toAlways for this:

-
// Swift
-ocean.add("dolphins")
-expect(ocean).toAlways(contain("dolphins"))
-expect(ocean).toNever(contain("hares"))
-
-
// Objective-C
-[ocean add:@"dolphins"]
-expect(ocean).toAlways(contain(@"dolphins"))
-expect(ocean).toNever(contain(@"hares"))
-
-

Waiting for a Callback to be Called

- -

You can also provide a callback by using the waitUntil function:

-
// Swift
-
-waitUntil { done in
-    ocean.goFish { success in
-        expect(success).to(beTrue())
-        done()
-    }
-}
-
-
// Objective-C
-
-waitUntil(^(void (^done)(void)){
-    [ocean goFishWithHandler:^(BOOL success){
-        expect(success).to(beTrue());
-        done();
-    }];
-});
-
- -

waitUntil also optionally takes a timeout parameter:

-
// Swift
-
-waitUntil(timeout: .seconds(10)) { done in
-    ocean.goFish { success in
-        expect(success).to(beTrue())
-        done()
-    }
-}
-
-
// Objective-C
-
-waitUntilTimeout(10, ^(void (^done)(void)){
-    [ocean goFishWithHandler:^(BOOL success){
-        expect(success).to(beTrue());
-        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.

-

Changing the Timeout and Polling Intervals

- -

Sometimes it takes more than a second for a value to update. In those -cases, use the timeout parameter:

-
// Swift
-
-// Waits three seconds for ocean to contain "starfish":
-expect(ocean).toEventually(contain("starfish"), timeout: .seconds(3))
-
-// Evaluate someValue every 0.2 seconds repeatedly until it equals 100, or fails if it timeouts after 5.5 seconds.
-expect(someValue).toEventually(equal(100), timeout: .milliseconds(5500), pollInterval: .milliseconds(200))
-
-
// Objective-C
-
-// Waits three seconds for ocean to contain "starfish":
-expect(ocean).withTimeout(3).toEventually(contain(@"starfish"));
-
-

Changing default Timeout and Poll Intervals

- -

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
-
-// Increase the global timeout to 5 seconds:
-Nimble.PollingDefaults.timeout = .seconds(5)
-
-// Slow the polling interval to 0.1 seconds:
-Nimble.PollingDefaults.pollInterval = .milliseconds(100)
-
- -

You can set these globally at test startup in two ways:

-

Quick

- -

If you use Quick, add a QuickConfiguration subclass which sets your desired PollingDefaults.

-
import Quick
-import Nimble
-
-class PollingConfiguration: QuickConfiguration {
-    override class func configure(_ configuration: QCKConfiguration) {
-        Nimble.PollingDefaults.timeout = .seconds(5)
-        Nimble.PollingDefaults.pollInterval = .milliseconds(100)
-    }
-}
-
-

XCTest

- -

If you use XCTest, add an object that conforms to XCTestObservation and implement testBundleWillStart(_:).

- -

Additionally, you will need to register this observer with the XCTestObservationCenter at test startup. To do this, set the NSPrincipalClass key in your test bundle’s Info.plist and implement a class with that same name.

- -

For example

-
<!-- Info.plist -->
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-    <!-- ... -->
-    <key>NSPrincipalClass</key>
-    <string>MyTests.TestSetup</string>
-</dict>
-</plist>
-
-
// TestSetup.swift
-import XCTest
-import Nimble
-
-@objc
-class TestSetup: NSObject {
-    override init() {
-        XCTestObservationCenter.shared.register(PollingConfigurationTestObserver())
-    }
-}
-
-class PollingConfigurationTestObserver: NSObject, XCTestObserver {
-    func testBundleWillStart(_ testBundle: Bundle) {
-        Nimble.PollingDefaults.timeout = .seconds(5)
-        Nimble.PollingDefaults.pollInterval = .milliseconds(100)
-    }
-}
-
- -

In Linux, you can implement LinuxMain to set the PollingDefaults before calling XCTMain.

-

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 or can be converted into -an NSObject equivalent:
  2. -
-
   // Objective-C
-
-   @import Nimble;
-
-   expect(@(1 + 1)).to(equal(@2));
-   expect(@"Hello world").to(contain(@"world"));
-
-   // Boxed as NSNumber *
-   expect(2).to(equal(2));
-   expect(1.2).to(beLessThan(2.0));
-   expect(true).to(beTruthy());
-
-   // Boxed as NSString *
-   expect("Hello world").to(equal("Hello world"));
-
-   // Boxed as NSRange
-   expect(NSMakeRange(1, 10)).to(equal(NSMakeRange(1, 10)));
-
- -
    -
  1. To make an expectation on an expression that does not return a value, -such as -[NSException raise], use expectAction instead of -expect:
  2. -
-
   // Objective-C
-
-   expectAction(^{ [exception raise]; }).to(raiseException());
-
- -

The following types are currently converted to an NSObject type:

- -
    -
  • C Numeric types are converted to NSNumber *
  • -
  • NSRange is converted to NSValue *
  • -
  • char * is converted to NSString *
  • -
- -

For the following matchers:

- -
    -
  • equal
  • -
  • beGreaterThan
  • -
  • beGreaterThanOrEqual
  • -
  • beLessThan
  • -
  • beLessThanOrEqual
  • -
  • beCloseTo
  • -
  • beTrue
  • -
  • beFalse
  • -
  • beTruthy
  • -
  • beFalsy
  • -
  • haveCount
  • -
- -

If you would like to see more, file an issue.

-

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:

-
#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.

-
-

Using require to demand that a matcher pass before continuing

- -

Nimble 13.1 added the require dsl to complement expect. require -looks similar to expect and works with matchers just like expect does. The -difference is that require requires that the matcher passes - if the matcher -doesn’t pass, then require will throw an error. Additionally, if require -does pass, then it’ll return the result of running the expression.

- -

For example, in testing a function that returns an array, you might need to -first guarantee that there are exactly 3 items in the array before continuing -to assert on it. Instead of writing code that needlessly duplicates an assertion -and a conditional like so:

-
let collection = myFunction()
-expect(collection).to(haveCount(3))
-guard collection.count == 3 else { return }
-// ...
-
- -

You can replace that with:

-
let collection = try require(myFunction()).to(haveCount(3))
-// ...
-
-

Polling with require.

- -

Because require does everything you can do with expect, you can also use -require to poll matchers using toEventually, -eventuallyTo, toEventuallyNot, toNotEventually, toNever, neverTo, -toAlways, and alwaysTo. These work exactly the same as they do when using -expect, except that they throw if they fail, and they return the value of the -expression when they pass.

-

Using require with Async expressions and Async matchers

- -

require also works with both async expressions -(require { await someExpression() }.to(...)), and async matchers -(require().to(someAsyncMatcher())).

- -

Note that to prevent compiler confusion, -you cannot use require with async autoclosures. That is, -require(await someExpression()) will not compile. You can instead either -make the closure explicit (require { await someExpression() }), or use the -requirea function, which does accept autoclosures. -Similarly, if you ever wish to use the sync version of require when the -compiler is trying to force you to use the async version, you can use the -requires function, which only allows synchronous expressions.

-

Using unwrap to replace require(...).toNot(beNil())

- -

It’s very common to require that a value not be nil. Instead of writing -try require(...).toNot(beNil()), Nimble provides the unwrap function. This -expression throws an error if the expression evaluates to nil, or returns the -non-nil result when it passes. For example:

-
let value = try unwrap(nil as Int?) // throws
-let value = try unwrap(1 as Int?) // returns 1
-
- -

Additionally, there is also the pollUnwrap function, which aliases to -require(...).toEventuallyNot(beNil()). This is extremely useful for verifying -that a value that is updated on a background thread was eventually set to a -non-nil value.

- -

Note: As with require, there are unwraps, unwrapa, pollUnwraps, and -pollUnwrapa variants for allowing you to use autoclosures specifically with -synchronous or asynchronous code.

-

Throwing a Custom Error from Require

- -

By default, if the matcher fails in a require, then a RequireError will be -thrown. You can override this behavior and throw a custom error by passing a -non-nil Error value to the customError parameter:

-
try require(1).to(equal(2)) // throws a `RequireError`
-try require(customError: MyCustomError(), 1).to(equal(2)) // throws a `MyCustomError`
-
-

Built-in Matcher Functions

- -

Nimble includes a wide variety of matcher functions.

-

Type Checking

- -

Nimble supports checking the type membership of any kind of object, whether -Objective-C conformant or not:

-
// Swift
-
-protocol SomeProtocol{}
-class SomeClassConformingToProtocol: SomeProtocol{}
-struct SomeStructConformingToProtocol: SomeProtocol{}
-
-// The following tests pass
-expect(1).to(beAKindOf(Int.self))
-expect("turtle").to(beAKindOf(String.self))
-
-let classObject = SomeClassConformingToProtocol()
-expect(classObject).to(beAKindOf(SomeProtocol.self))
-expect(classObject).to(beAKindOf(SomeClassConformingToProtocol.self))
-expect(classObject).toNot(beAKindOf(SomeStructConformingToProtocol.self))
-
-let structObject = SomeStructConformingToProtocol()
-expect(structObject).to(beAKindOf(SomeProtocol.self))
-expect(structObject).to(beAKindOf(SomeStructConformingToProtocol.self))
-expect(structObject).toNot(beAKindOf(SomeClassConformingToProtocol.self))
-
-
// Objective-C
-
-// The following tests pass
-NSMutableArray *array = [NSMutableArray array];
-expect(array).to(beAKindOf([NSArray class]));
-expect(@1).toNot(beAKindOf([NSNull class]));
-
- -

Objects can be tested for their exact types using the beAnInstanceOf matcher:

-
// Swift
-
-protocol SomeProtocol{}
-class SomeClassConformingToProtocol: SomeProtocol{}
-struct SomeStructConformingToProtocol: SomeProtocol{}
-
-// Unlike the 'beKindOf' matcher, the 'beAnInstanceOf' matcher only
-// passes if the object is the EXACT type requested. The following
-// tests pass -- note its behavior when working in an inheritance hierarchy.
-expect(1).to(beAnInstanceOf(Int.self))
-expect("turtle").to(beAnInstanceOf(String.self))
-
-let classObject = SomeClassConformingToProtocol()
-expect(classObject).toNot(beAnInstanceOf(SomeProtocol.self))
-expect(classObject).to(beAnInstanceOf(SomeClassConformingToProtocol.self))
-expect(classObject).toNot(beAnInstanceOf(SomeStructConformingToProtocol.self))
-
-let structObject = SomeStructConformingToProtocol()
-expect(structObject).toNot(beAnInstanceOf(SomeProtocol.self))
-expect(structObject).to(beAnInstanceOf(SomeStructConformingToProtocol.self))
-expect(structObject).toNot(beAnInstanceOf(SomeClassConformingToProtocol.self))
-
-

Equivalence

-
// 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
-
-
// 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
-
-// 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
-
- -

It is important to remember that beIdenticalTo only makes sense when comparing -types with reference semantics, which have a notion of identity. In Swift, -that means types that are defined as a class.

- -

This matcher will not work when comparing types with value semantics such as -those defined as a struct or enum. If you need to compare two value types, -consider what it means for instances of your type to be identical. This may mean -comparing individual properties or, if it makes sense to do so, conforming your type -to Equatable and using Nimble’s equivalence matchers instead.

-
// 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
-
-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
-
-
// 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
-
-expect(actual).to(beCloseTo(expected, within: delta))
-
-
// Objective-C
-
-expect(actual).to(beCloseTo(expected).within(delta));
-
- -

For example, to assert that 10.01 is close to 10, you can write:

-
// Swift
-
-expect(10.01).to(beCloseTo(10, within: 0.1))
-
-
// Objective-C
-
-expect(@(10.01)).to(beCloseTo(@10).within(0.1));
-
- -

There is also an operator shortcut available in 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
-
-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
-
-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 conform to FloatingPoint.

-
-

Types/Classes

-
// 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))
-
-
// 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
-
-expect(dolphin).to(beAKindOf(Mammal))
-
-
// Objective-C
-
-expect(dolphin).to(beAKindOf([Mammal class]));
-
- -
-

beAnInstanceOf uses the -[NSObject isMemberOfClass:] method to - test membership. beAKindOf uses -[NSObject isKindOfClass:].

-
-

Truthiness

-
// 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 Boolean 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 Boolean false):
-expect(actual).to(beFalse())
-
-// Passes if 'actual' is nil:
-expect(actual).to(beNil())
-
-
// 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 Boolean 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 Boolean false):
-expect(actual).to(beFalse());
-
-// Passes if 'actual' is nil:
-expect(actual).to(beNil());
-
-

Swift Assertions

- -

If you’re using Swift, you can use the throwAssertion matcher to check if an assertion is thrown (e.g. fatalError()). This is made possible by @mattgallagher’s CwlPreconditionTesting library.

-
// Swift
-
-// Passes if 'somethingThatThrows()' throws an assertion, 
-// such as by calling 'fatalError()' or if a precondition fails:
-expect { try somethingThatThrows() }.to(throwAssertion())
-expect { () -> Void in fatalError() }.to(throwAssertion())
-expect { precondition(false) }.to(throwAssertion())
-
-// Passes if throwing an NSError is not equal to throwing an assertion:
-expect { throw NSError(domain: "test", code: 0, userInfo: nil) }.toNot(throwAssertion())
-
-// Passes if the code after the precondition check is not run:
-var reachedPoint1 = false
-var reachedPoint2 = false
-expect {
-    reachedPoint1 = true
-    precondition(false, "condition message")
-    reachedPoint2 = true
-}.to(throwAssertion())
-
-expect(reachedPoint1) == true
-expect(reachedPoint2) == false
-
- -

Notes:

- -
    -
  • This feature is only available in Swift.
  • -
  • The tvOS simulator is supported, but using a different mechanism, requiring you to turn off the Debug executable scheme setting for your tvOS scheme’s Test configuration.
  • -
-

Swift Error Handling

- -

You can use the throwError matcher to check if an error is thrown.

-
// Swift
-
-// Passes if 'somethingThatThrows()' throws an 'Error':
-expect { try somethingThatThrows() }.to(throwError())
-
-// Passes if 'somethingThatThrows()' throws an error within a particular domain:
-expect { try somethingThatThrows() }.to(throwError { (error: Error) in
-    expect(error._domain).to(equal(NSCocoaErrorDomain))
-})
-
-// Passes if 'somethingThatThrows()' throws a particular error enum case:
-expect { try somethingThatThrows() }.to(throwError(NSCocoaError.PropertyListReadCorruptError))
-
-// Passes if 'somethingThatThrows()' throws an error of a particular type:
-expect { try somethingThatThrows() }.to(throwError(errorType: NimbleError.self))
-
- -

When working directly with Error values, using the matchError matcher -allows you to perform certain checks on the error itself without having to -explicitly cast the error.

- -

The matchError matcher allows you to check whether or not the error:

- -
    -
  • is the same type of error you are expecting.
  • -
  • represents a particular error value that you are expecting.
  • -
- -

This can be useful when using Result or Promise types, for example.

-
// Swift
-
-let actual: Error = ...
-
-// Passes if 'actual' represents any error value from the NimbleErrorEnum type:
-expect(actual).to(matchError(NimbleErrorEnum.self))
-
-// Passes if 'actual' represents the case 'timeout' from the NimbleErrorEnum type:
-expect(actual).to(matchError(NimbleErrorEnum.timeout))
-
-// Passes if 'actual' contains an NSError equal to the one provided:
-expect(actual).to(matchError(NSError(domain: "err", code: 123, userInfo: nil)))
-
- -

Note: This feature is only available in Swift.

-

Exceptions

-
// 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 which passes expectations defined in the given closure:
-// (in this case, if the exception's name begins with "a r")
-expect { exception.raise() }.to(raiseException { (exception: NSException) in
-    expect(exception.name).to(beginWith("a r"))
-})
-
-
// 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 defined in the given 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). -Only Objective-C code can raise exceptions that Nimble will catch.

-

Collection Membership

-
// Swift
-
-// Passes if all of the expected values are members of 'actual':
-expect(actual).to(contain(expected...))
-
-// Passes if 'actual' is empty (i.e. it contains no elements):
-expect(actual).to(beEmpty())
-
-
// Objective-C
-
-// Passes if expected is a member of 'actual':
-expect(actual).to(contain(expected));
-
-// Passes if 'actual' is empty (i.e. 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.

-
- -

For example, to assert that a list of sea creature names contains -“dolphin” and “starfish”:

-
// Swift
-
-expect(["whale", "dolphin", "starfish"]).to(contain("dolphin", "starfish"))
-
-
// 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
-
-// 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...))
-
-
// 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.

- -

For code that returns collections of complex objects without a strict -ordering, there is the containElementSatisfying matcher:

-
// Swift
-
-struct Turtle {
-    let color: String
-}
-
-let turtles: [Turtle] = functionThatReturnsSomeTurtlesInAnyOrder()
-
-// This set of matchers passes regardless of whether the array is 
-// [{color: "blue"}, {color: "green"}] or [{color: "green"}, {color: "blue"}]:
-
-expect(turtles).to(containElementSatisfying({ turtle in
-    return turtle.color == "green"
-}))
-expect(turtles).to(containElementSatisfying({ turtle in
-    return turtle.color == "blue"
-}, "that is a turtle with color 'blue'"))
-
-// The second matcher will incorporate the provided string in the error message
-// should it fail
-
- -

Note: in Swift, containElementSatisfying also has a variant that takes in an -async function.

-
// Objective-C
-
-@interface Turtle : NSObject
-@property (nonatomic, readonly, nonnull) NSString *color;
-@end
-
-@implementation Turtle 
-@end
-
-NSArray<Turtle *> * __nonnull turtles = functionThatReturnsSomeTurtlesInAnyOrder();
-
-// This set of matchers passes regardless of whether the array is 
-// [{color: "blue"}, {color: "green"}] or [{color: "green"}, {color: "blue"}]:
-
-expect(turtles).to(containElementSatisfying(^BOOL(id __nonnull object) {
-    return [[turtle color] isEqualToString:@"green"];
-}));
-expect(turtles).to(containElementSatisfying(^BOOL(id __nonnull object) {
-    return [[turtle color] isEqualToString:@"blue"];
-}));
-
- -

For asserting on if the given Comparable value is inside of a Range, use the beWithin matcher.

-
// Swift
-
-// Passes if 5 is within the range 1 through 10, inclusive
-expect(5).to(beWithin(1...10))
-
-// Passes if 5 is not within the range 2 through 4.
-expect(5).toNot(beWithin(2..<5))
-
-

Strings

-
// Swift
-
-// Passes if 'actual' contains 'substring':
-expect(actual).to(contain(substring))
-
-// Passes if 'actual' begins with 'prefix':
-expect(actual).to(beginWith(prefix))
-
-// Passes if 'actual' ends with 'suffix':
-expect(actual).to(endWith(suffix))
-
-// Passes if 'actual' represents the empty string, "":
-expect(actual).to(beEmpty())
-
-// Passes if 'actual' matches the regular expression defined in 'expected':
-expect(actual).to(match(expected))
-
-
// Objective-C
-
-// Passes if 'actual' contains 'substring':
-expect(actual).to(contain(expected));
-
-// Passes if 'actual' begins with 'prefix':
-expect(actual).to(beginWith(prefix));
-
-// Passes if 'actual' ends with 'suffix':
-expect(actual).to(endWith(suffix));
-
-// Passes if 'actual' represents the empty string, "":
-expect(actual).to(beEmpty());
-
-// Passes if 'actual' matches the regular expression defined in 'expected':
-expect(actual).to(match(expected))
-
-

Collection Elements

- -

Nimble provides a means to check that all elements of a collection pass a given expectation.

-

Swift

- -

In Swift, the collection must be an instance of a type conforming to -Sequence.

-
// Swift
-
-// Providing a custom function:
-expect([1, 2, 3, 4]).to(allPass { $0 < 5 })
-
-// Composing the expectation with another matcher:
-expect([1, 2, 3, 4]).to(allPass(beLessThan(5)))
-
- -

There are also variants of allPass that check against async matchers, and -that take in async functions:

-
// Swift
-
-// Providing a custom function:
-expect([1, 2, 3, 4]).to(allPass { await asyncFunctionReturningBool($0) })
-
-// Composing the expectation with another matcher:
-expect([1, 2, 3, 4]).to(allPass(someAsyncMatcher()))
-
-

Objective-C

- -

In Objective-C, the collection must be an instance of a type which implements -the NSFastEnumeration protocol, and whose elements are instances of a type -which subclasses NSObject.

- -

Additionally, unlike in Swift, there is no override to specify a custom -matcher function.

-
// Objective-C
-
-expect(@[@1, @2, @3, @4]).to(allPass(beLessThan(@5)));
-
-

Collection Count

-
// Swift
-
-// Passes if 'actual' contains the 'expected' number of elements:
-expect(actual).to(haveCount(expected))
-
-// Passes if 'actual' does _not_ contain the 'expected' number of elements:
-expect(actual).notTo(haveCount(expected))
-
-
// Objective-C
-
-// Passes if 'actual' contains the 'expected' number of elements:
-expect(actual).to(haveCount(expected))
-
-// Passes if 'actual' does _not_ contain the 'expected' number of elements:
-expect(actual).notTo(haveCount(expected))
-
- -

For Swift, the actual value must be an instance of a type conforming to Collection. -For example, instances of Array, Dictionary, or Set.

- -

For Objective-C, the actual value must be one of the following classes, or their subclasses:

- -
    -
  • NSArray,
  • -
  • NSDictionary,
  • -
  • NSSet, or
  • -
  • NSHashTable.
  • -
-

Notifications

-
// Swift
-let testNotification = Notification(name: Notification.Name("Foo"), object: nil)
-
-// Passes if the closure in expect { ... } posts a notification to the default
-// notification center.
-expect {
-    NotificationCenter.default.post(testNotification)
-}.to(postNotifications(equal([testNotification])))
-
-// Passes if the closure in expect { ... } posts a notification to a given
-// notification center
-let notificationCenter = NotificationCenter()
-expect {
-    notificationCenter.post(testNotification)
-}.to(postNotifications(equal([testNotification]), from: notificationCenter))
-
-// Passes if the closure in expect { ... } posts a notification with the provided names to a given
-// notification center. Make sure to use this when running tests on Catalina, 
-// using DistributedNotificationCenter as there is currently no way 
-// of observing notifications without providing specific names.
-let distributedNotificationCenter = DistributedNotificationCenter()
-expect {
-    distributedNotificationCenter.post(testNotification)
-}.toEventually(postDistributedNotifications(equal([testNotification]),
-                                  from: distributedNotificationCenter,
-                                  names: [testNotification.name]))
-
- -
-

This matcher is only available in Swift.

-
-

Result

-
// Swift
-let aResult: Result<String, Error> = .success("Hooray") 
-
-// passes if result is .success
-expect(aResult).to(beSuccess()) 
-
-// passes if result value is .success and validates Success value
-expect(aResult).to(beSuccess { value in
-    expect(value).to(equal("Hooray"))
-})
-
-
-enum AnError: Error {
-    case somethingHappened
-}
-let otherResult: Result<String, AnError> = .failure(.somethingHappened) 
-
-// passes if result is .failure
-expect(otherResult).to(beFailure()) 
-
-// passes if result value is .failure and validates error
-expect(otherResult).to(beFailure { error in
-    expect(error).to(matchError(AnError.somethingHappened))
-}) 
-
- -
-

This matcher is only available in Swift.

-
-

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))
-
- -

Note: In swift, you can mix and match synchronous and asynchronous matchers -using by satisfyAnyOf/||.

-
// Objective-C
-
-// 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.

-

Custom Validation

-
// Swift
-
-// passes if .succeeded is returned from the closure
-expect {
-    guard case .enumCaseWithAssociatedValueThatIDontCareAbout = actual else {
-        return .failed(reason: "wrong enum case")
-    }
-
-    return .succeeded
-}.to(succeed())
-
-// passes if .failed is returned from the closure
-expect {
-    guard case .enumCaseWithAssociatedValueThatIDontCareAbout = actual else {
-        return .failed(reason: "wrong enum case")
-    }
-
-    return .succeeded
-}.notTo(succeed())
-
- -

The String provided with .failed() is shown when the test fails.

- -

When using toEventually() be careful not to make state changes or run process intensive code since this closure will be ran many times.

-

Mapping a Value to Another Value

- -

Sometimes, you only want to match against a property or group of properties. -For example, if you wanted to check that only one or a few properties of a value -are equal to something else. For this, use the map matcher to convert a value -to another value and check it with a matcher.

-
// Swift
-
-expect(someValue).to(map(\.someProperty, equal(expectedProperty)))
-
-// or, for checking multiple different properties:
-
-expect(someValue).to(satisfyAllOf(
-    map(\.firstProperty, equal(expectedFirstProperty)),
-    map({ $0.secondProperty }, equal(expectedSecondProperty))
-))
-
- -

The map matcher takes in either a closure or a keypath literal, and a matcher -to compose with. It also works with async closures and async matchers.

- -

In most cases, it is simpler and easier to not use map (that is, prefer -expect(someValue.property).to(equal(1)) to -expect(someValue).to(map(\.property, equal(1)))). But map is incredibly -useful when combined with satisfyAllOf/satisfyAnyOf, especially for checking -a value that cannot conform to Equatable (or you don’t want to make it -conform to Equatable). However, if you find yourself reusing map many times -to do a fuzzy-equals of a given type, you will find writing a custom matcher to -be much easier to use and maintain.

-

Writing Your Own Matchers

- -

In Nimble, matchers are Swift functions that take an expected -value and return a Matcher closure. Take equal, for example:

-
// Swift
-
-public func equal<T: Equatable>(expectedValue: T?) -> Matcher<T> {
-    // Can be shortened to:
-    //   Matcher { actual in  ... }
-    //
-    // But shown with types here for clarity.
-    return Matcher { (actualExpression: Expression<T>) throws -> MatcherResult in
-        let msg = ExpectationMessage.expectedActualValueTo("equal <\(expectedValue)>")
-        if let actualValue = try actualExpression.evaluate() {
-            return MatcherResult(
-                bool: actualValue == expectedValue!,
-                message: msg
-            )
-        } else {
-            return MatcherResult(
-                status: .fail,
-                message: msg.appendedBeNilHint()
-            )
-        }
-    }
-}
-
- -

The return value of a Matcher closure is a MatcherResult that indicates -whether the actual value matches the expectation and what error message to -display on failure.

- -
-

The actual equal matcher function does not match when - 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 -to see how Nimble’s built-in set of matchers are implemented. You can -also check out the tips below.

-

MatcherResult

- -

MatcherResult is the return struct that Matcher return to indicate -success and failure. A MatcherResult is made up of two values: -MatcherStatus and ExpectationMessage.

- -

Instead of a boolean, MatcherStatus captures a trinary set of values:

-
// Swift
-
-public enum MatcherStatus {
-// The matcher "passes" with the given expression
-// eg - expect(1).to(equal(1))
-case matches
-
-// The matcher "fails" with the given expression
-// eg - expect(1).toNot(equal(1))
-case doesNotMatch
-
-// The matcher never "passes" with the given expression, even if negated
-// eg - expect(nil as Int?).toNot(equal(1))
-case fail
-
-// ...
-}
-
- -

Meanwhile, ExpectationMessage provides messaging semantics for error reporting.

-
// Swift
-
-public indirect enum ExpectationMessage {
-// Emits standard error message:
-// eg - "expected to <string>, got <actual>"
-case expectedActualValueTo(/* message: */ String)
-
-// Allows any free-form message
-// eg - "<string>"
-case fail(/* message: */ String)
-
-// ...
-}
-
- -

Matchers should usually depend on either .expectedActualValueTo(..) or -.fail(..) when reporting errors. Special cases can be used for the other enum -cases.

- -

Finally, if your Matcher utilizes other Matchers, you can utilize -.appended(details:) and .appended(message:) methods to annotate an existing -error with more details.

- -

A common message to append is failing on nils. For that, .appendedBeNilHint() -can be used.

-

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
-
-public func beNil<T>() -> Matcher<T> {
-    // Matcher.simpleNilable(..) automatically generates ExpectationMessage for
-    // us based on the string we provide to it. Also, the 'Nilable' postfix indicates
-    // that this Matcher supports matching against nil actualExpressions, instead of
-    // always resulting in a MatcherStatus.fail result -- which is true for
-    // Matcher.simple(..)
-    return Matcher.simpleNilable("be nil") { actualExpression in
-        let actualValue = try actualExpression.evaluate()
-        return MatcherStatus(bool: actualValue == 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.

-

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
-
-public func haveDescription(description: String) -> Matcher<Printable?> {
-    return Matcher.simple("have description") { actual in
-        return MatcherStatus(bool: actual.evaluate().description == description)
-    }
-}
-
-

Customizing Failure Messages

- -

When using Matcher.simple(..) or Matcher.simpleNilable(..), Nimble -outputs the following failure message when an expectation fails:

-
// where `message` is the first string argument and
-// `actual` is the actual value received in `expect(..)`
-"expected to \(message), got <\(actual)>"
-
- -

You can customize this message by modifying the way you create a Matcher.

-

Basic Customization

- -

For slightly more complex error messaging, receive the created failure message -with Matcher.define(..):

-
// Swift
-
-public func equal<T: Equatable>(_ expectedValue: T?) -> Matcher<T> {
-    return Matcher.define("equal <\(stringify(expectedValue))>") { actualExpression, msg in
-        let actualValue = try actualExpression.evaluate()
-        let matches = actualValue == expectedValue && expectedValue != nil
-        if expectedValue == nil || actualValue == nil {
-            if expectedValue == nil && actualValue != nil {
-                return MatcherResult(
-                    status: .fail,
-                    message: msg.appendedBeNilHint()
-                )
-            }
-            return MatcherResult(status: .fail, message: msg)
-        }
-        return MatcherResult(bool: matches, message: msg)
-    }
-}
-
- -

In the example above, msg is defined based on the string given to -Matcher.define. The code looks akin to:

-
// Swift
-
-let msg = ExpectationMessage.expectedActualValueTo("equal <\(stringify(expectedValue))>")
-
-

Full Customization

- -

To fully customize the behavior of the Matcher, use the overload that expects -a MatcherResult to be returned.

- -

Along with MatcherResult, there are other ExpectationMessage enum values you can use:

-
public indirect enum ExpectationMessage {
-// Emits standard error message:
-// eg - "expected to <message>, got <actual>"
-case expectedActualValueTo(/* message: */ String)
-
-// Allows any free-form message
-// eg - "<message>"
-case fail(/* message: */ String)
-
-// Emits standard error message with a custom actual value instead of the default.
-// eg - "expected to <message>, got <actual>"
-case expectedCustomValueTo(/* message: */ String, /* actual: */ String)
-
-// Emits standard error message without mentioning the actual value
-// eg - "expected to <message>"
-case expectedTo(/* message: */ String)
-
-// ...
-}
-
- -

For matchers that compose other matchers, there are a handful of helper -functions to annotate messages.

- -

appended(message: String) is used to append to the original failure message:

-
// produces "expected to be true, got <actual> (use beFalse() for inverse)"
-// appended message do show up inline in Xcode.
-.expectedActualValueTo("be true").appended(message: " (use beFalse() for inverse)")
-
- -

For a more comprehensive message that spans multiple lines, use -appended(details: String) instead:

-
// produces "expected to be true, got <actual>\n\nuse beFalse() for inverse\nor use beNil()"
-// details do not show inline in Xcode, but do show up in test logs.
-.expectedActualValueTo("be true").appended(details: "use beFalse() for inverse\nor use beNil()")
-
-

Asynchronous Matchers

- -

To write matchers against async expressions, return an instance of -AsyncMatcher. The closure passed to AsyncMatcher is async, and the -expression you evaluate is also asynchronous and needs to be awaited on.

-
// Swift
-
-actor CallRecorder<Arguments> {
-    private(set) var calls: [Arguments] = []
-
-    func record(call: Arguments) {
-        calls.append(call)
-    }
-}
-
-func beCalled<Argument: Equatable>(with arguments: Argument) -> AsyncMatcher<CallRecorder<Argument>> {
-    AsyncMatcher { (expression: AsyncExpression<CallRecorder<Argument>>) in
-        let message = ExpectationMessage.expectedActualValueTo("be called with \(arguments)")
-        guard let calls = try await expression.evaluate()?.calls else {
-            return MatcherResult(status: .fail, message: message.appendedBeNilHint())
-        }
-
-        return MatcherResult(bool: calls.contains(args), message: message.appended(details: "called with \(calls)"))
-    }
-}
-
- -

In this example, we created an actor to act as an object to record calls to an -async function. Then, we created the beCalled(with:) matcher to check if the -actor has received a call with the given arguments.

-

Supporting Objective-C

- -

To use a custom matcher written in Swift from Objective-C, you’ll have -to extend the NMBMatcher class, adding a new class method for your -custom matcher. The example below defines the class method -+[NMBMatcher beNilMatcher]:

-
// Swift
-
-extension NMBMatcher {
-    @objc public class func beNilMatcher() -> NMBMatcher {
-        return NMBMatcher { actualExpression in
-            return try beNil().satisfies(actualExpression).toObjectiveC()
-        }
-    }
-}
-
- -

The above allows you to use the matcher from Objective-C:

-
// Objective-C
-
-expect(actual).to([NMBMatcher beNilMatcher]());
-
- -

To make the syntax easier to use, define a C function that calls the -class method:

-
// Objective-C
-
-FOUNDATION_EXPORT NMBMatcher *beNil() {
-    return [NMBMatcher beNilMatcher];
-}
-
-

Properly Handling nil in Objective-C Matchers

- -

When supporting Objective-C, make sure you handle nil appropriately. -Like Cedar, -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:

-
// 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 Matcher.define or Matcher.simple. -Using those factory methods will automatically generate expected value failure messages when they’re nil.

-
public func beginWith<S: Sequence>(_ startingElement: S.Element) -> Matcher<S> where S.Element: Equatable {
-    return Matcher.simple("begin with <\(startingElement)>") { actualExpression in
-        guard let actualValue = try actualExpression.evaluate() else { return .fail }
-
-        var actualGenerator = actualValue.makeIterator()
-        return MatcherStatus(bool: actualGenerator.next() == startingElement)
-    }
-}
-
-extension NMBMatcher {
-    @objc public class func beginWithMatcher(_ expected: Any) -> NMBMatcher {
-        return NMBMatcher { actualExpression in
-            let actual = try actualExpression.evaluate()
-            let expr = actualExpression.cast { $0 as? NMBOrderedCollection }
-            return try beginWith(expected).satisfies(expr).toObjectiveC()
-        }
-    }
-}
-
-

Installing Nimble

- -
-

Nimble can be used on its own, or in conjunction with its sister - project, Quick. To install both - Quick and Nimble, follow the installation instructions in the Quick - Documentation.

-
- -

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 macOS, iOS or tvOS applications, follow -these 4 easy steps:

- -
    -
  1. Clone the Nimble repository
  2. -
  3. Add Nimble.xcodeproj to the Xcode workspace for your project
  4. -
  5. Link Nimble.framework to your test target
  6. -
  7. Start writing expectations!
  8. -
- -

For more detailed instructions on each of these steps, -read 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 macOS, iOS, tvOS or watchOS applications, add -Nimble to your podfile and add the use_frameworks! line to enable Swift -support for CocoaPods.

-
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'
-end
-
- -

Finally run pod install.

-

Installing Nimble via Swift Package Manager

-

Xcode

- -

To install Nimble via Xcode’s Swift Package Manager Integration: -Select your project configuration, then the project tab, then the Package -Dependencies tab. Click on the “plus” button at the bottom of the list, -then follow the wizard to add Quick to your project. Specify -https://github.com/Quick/Nimble.git as the url, and be sure to add -Nimble as a dependency of your unit test target, not your app target.

-

Package.Swift

- -

To use Nimble with Swift Package Manager to test your applications, add Nimble -to your Package.Swift and link it with your test target:

-
// swift-tools-version:5.5
-
-import PackageDescription
-
-let package = Package(
-    name: "MyAwesomeLibrary",
-    products: [
-        // ...
-    ],
-    dependencies: [
-        // ...
-        .package(url:  "https://github.com/Quick/Nimble.git", from: "12.0.0"),
-    ],
-    targets: [
-        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
-        // Targets can depend on other targets in this package, and on products in packages this package depends on.
-        .target(
-            name: "MyAwesomeLibrary",
-            dependencies: ...),
-        .testTarget(
-            name: "MyAwesomeLibraryTests",
-            dependencies: ["MyAwesomeLibrary", "Nimble"]),
-    ]
-)
-
- -

Please note that if you install Nimble using Swift Package Manager, then raiseException is not available.

-

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:
  2. -
-
class MyAssertionHandler : AssertionHandler {
-    func assert(assertion: Bool, message: FailureMessage, location: SourceLocation) {
-        if (!assertion) {
-            print("Expectation failed: \(message.stringValue)")
-        }
-    }
-}
-
-
// Somewhere before you use any assertions
-NimbleAssertionHandler = MyAssertionHandler()
-
- -
    -
  1. 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" -
    • -
  2. -
- -

You can now use Nimble assertions in your code and handle failures as you see -fit.

-

Privacy Statement

- -

Nimble is a library that is only used for testing and should never be included -in the binary submitted to App Store Connect.

- -

Despite not being shipped to Apple, Nimble does not and will never collect any -kind of analytics or tracking.

- -
-
- -
-
- - diff --git a/docs/js/jazzy.js b/docs/js/jazzy.js deleted file mode 100755 index 198441660..000000000 --- a/docs/js/jazzy.js +++ /dev/null @@ -1,74 +0,0 @@ -// Jazzy - https://github.com/realm/jazzy -// Copyright Realm Inc. -// SPDX-License-Identifier: MIT - -window.jazzy = {'docset': false} -if (typeof window.dash != 'undefined') { - document.documentElement.className += ' dash' - window.jazzy.docset = true -} -if (navigator.userAgent.match(/xcode/i)) { - document.documentElement.className += ' xcode' - window.jazzy.docset = true -} - -function toggleItem($link, $content) { - var animationDuration = 300; - $link.toggleClass('token-open'); - $content.slideToggle(animationDuration); -} - -function itemLinkToContent($link) { - return $link.parent().parent().next(); -} - -// On doc load + hash-change, open any targetted item -function openCurrentItemIfClosed() { - if (window.jazzy.docset) { - return; - } - var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); - $content = itemLinkToContent($link); - if ($content.is(':hidden')) { - toggleItem($link, $content); - } -} - -$(openCurrentItemIfClosed); -$(window).on('hashchange', openCurrentItemIfClosed); - -// On item link ('token') click, toggle its discussion -$('.token').on('click', function(event) { - if (window.jazzy.docset) { - return; - } - var $link = $(this); - toggleItem($link, itemLinkToContent($link)); - - // Keeps the document from jumping to the hash. - var href = $link.attr('href'); - if (history.pushState) { - history.pushState({}, '', href); - } else { - location.hash = href; - } - event.preventDefault(); -}); - -// Clicks on links to the current, closed, item need to open the item -$("a:not('.token')").on('click', function() { - if (location == this.href) { - openCurrentItemIfClosed(); - } -}); - -// KaTeX rendering -if ("katex" in window) { - $($('.math').each( (_, element) => { - katex.render(element.textContent, element, { - displayMode: $(element).hasClass('m-block'), - throwOnError: false, - trust: true - }); - })) -} diff --git a/docs/js/jazzy.search.js b/docs/js/jazzy.search.js deleted file mode 100644 index 359cdbb8b..000000000 --- a/docs/js/jazzy.search.js +++ /dev/null @@ -1,74 +0,0 @@ -// Jazzy - https://github.com/realm/jazzy -// Copyright Realm Inc. -// SPDX-License-Identifier: MIT - -$(function(){ - var $typeahead = $('[data-typeahead]'); - var $form = $typeahead.parents('form'); - var searchURL = $form.attr('action'); - - function displayTemplate(result) { - return result.name; - } - - function suggestionTemplate(result) { - var t = '
'; - t += '' + result.name + ''; - if (result.parent_name) { - t += '' + result.parent_name + ''; - } - t += '
'; - return t; - } - - $typeahead.one('focus', function() { - $form.addClass('loading'); - - $.getJSON(searchURL).then(function(searchData) { - const searchIndex = lunr(function() { - this.ref('url'); - this.field('name'); - this.field('abstract'); - for (const [url, doc] of Object.entries(searchData)) { - this.add({url: url, name: doc.name, abstract: doc.abstract}); - } - }); - - $typeahead.typeahead( - { - highlight: true, - minLength: 3, - autoselect: true - }, - { - limit: 10, - display: displayTemplate, - templates: { suggestion: suggestionTemplate }, - source: function(query, sync) { - const lcSearch = query.toLowerCase(); - const results = searchIndex.query(function(q) { - q.term(lcSearch, { boost: 100 }); - q.term(lcSearch, { - boost: 10, - wildcard: lunr.Query.wildcard.TRAILING - }); - }).map(function(result) { - var doc = searchData[result.ref]; - doc.url = result.ref; - return doc; - }); - sync(results); - } - } - ); - $form.removeClass('loading'); - $typeahead.trigger('focus'); - }); - }); - - var baseURL = searchURL.slice(0, -"search.json".length); - - $typeahead.on('typeahead:select', function(e, result) { - window.location = baseURL + result.url; - }); -}); diff --git a/docs/js/jquery.min.js b/docs/js/jquery.min.js deleted file mode 100644 index 7f37b5d99..000000000 --- a/docs/js/jquery.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 00){var c=e.utils.clone(r)||{};c.position=[a,l],c.index=s.length,s.push(new e.Token(i.slice(a,o),c))}a=o+1}}return s},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load unregistered function: "+t);r.add(i)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var i=this._stack.indexOf(t);if(i==-1)throw new Error("Cannot find existingFn");this._stack.splice(i,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(se&&(r=n),s!=e);)i=r-t,n=t+Math.floor(i/2),s=this.elements[2*n];return s==e?2*n:s>e?2*n:sa?l+=2:o==a&&(t+=r[u+1]*i[l+1],u+=2,l+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,a=s.str.charAt(0);a in s.node.edges?o=s.node.edges[a]:(o=new e.TokenSet,s.node.edges[a]=o),1==s.str.length&&(o["final"]=!0),n.push({node:o,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(0!=s.editsRemaining){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new e.TokenSet;s.node.edges["*"]=u}if(0==s.str.length&&(u["final"]=!0),n.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&n.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),1==s.str.length&&(s.node["final"]=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new e.TokenSet;s.node.edges["*"]=l}1==s.str.length&&(l["final"]=!0),n.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var c,h=s.str.charAt(0),d=s.str.charAt(1);d in s.node.edges?c=s.node.edges[d]:(c=new e.TokenSet,s.node.edges[d]=c),1==s.str.length&&(c["final"]=!0),n.push({node:c,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return i},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,i=r,n=0,s=t.length;n=e;t--){var r=this.uncheckedNodes[t],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var i=new e.QueryParser(t,r);i.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),i=Object.create(null),n=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var i=t[this._ref],n=Object.keys(this._fields);this._documents[i]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(i+=" with value '"+r.str+"'"),new e.QueryParseError(i,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var i="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(i,r.start,r.end)}var n=t.peekLexeme();if(void 0==n){var i="expecting term or field, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(n.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term or field, found '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var i=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+r.str+"', possible fields: "+i;throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.fields=[r.str];var s=t.peekLexeme();if(void 0==s){var n="expecting term, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(s.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term, found '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var i=t.peekLexeme();if(void 0==i)return void t.nextClause();switch(i.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="edit distance must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.editDistance=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var i=parseInt(r.str,10);if(isNaN(i)){var n="boost must be numeric";throw new e.QueryParseError(n,r.start,r.end)}t.currentClause.boost=i;var s=t.peekLexeme();if(void 0==s)return void t.nextClause();switch(s.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+s.type+"'";throw new e.QueryParseError(n,s.start,s.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(); diff --git a/docs/js/typeahead.jquery.js b/docs/js/typeahead.jquery.js deleted file mode 100644 index 3a2d2ab03..000000000 --- a/docs/js/typeahead.jquery.js +++ /dev/null @@ -1,1694 +0,0 @@ -/*! - * typeahead.js 1.3.1 - * https://github.com/corejavascript/typeahead.js - * Copyright 2013-2020 Twitter, Inc. and other contributors; Licensed MIT - */ - - -(function(root, factory) { - if (typeof define === "function" && define.amd) { - define([ "jquery" ], function(a0) { - return factory(a0); - }); - } else if (typeof module === "object" && module.exports) { - module.exports = factory(require("jquery")); - } else { - factory(root["jQuery"]); - } -})(this, function($) { - var _ = function() { - "use strict"; - return { - isMsie: function() { - return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false; - }, - isBlankString: function(str) { - return !str || /^\s*$/.test(str); - }, - escapeRegExChars: function(str) { - return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); - }, - isString: function(obj) { - return typeof obj === "string"; - }, - isNumber: function(obj) { - return typeof obj === "number"; - }, - isArray: $.isArray, - isFunction: $.isFunction, - isObject: $.isPlainObject, - isUndefined: function(obj) { - return typeof obj === "undefined"; - }, - isElement: function(obj) { - return !!(obj && obj.nodeType === 1); - }, - isJQuery: function(obj) { - return obj instanceof $; - }, - toStr: function toStr(s) { - return _.isUndefined(s) || s === null ? "" : s + ""; - }, - bind: $.proxy, - each: function(collection, cb) { - $.each(collection, reverseArgs); - function reverseArgs(index, value) { - return cb(value, index); - } - }, - map: $.map, - filter: $.grep, - every: function(obj, test) { - var result = true; - if (!obj) { - return result; - } - $.each(obj, function(key, val) { - if (!(result = test.call(null, val, key, obj))) { - return false; - } - }); - return !!result; - }, - some: function(obj, test) { - var result = false; - if (!obj) { - return result; - } - $.each(obj, function(key, val) { - if (result = test.call(null, val, key, obj)) { - return false; - } - }); - return !!result; - }, - mixin: $.extend, - identity: function(x) { - return x; - }, - clone: function(obj) { - return $.extend(true, {}, obj); - }, - getIdGenerator: function() { - var counter = 0; - return function() { - return counter++; - }; - }, - templatify: function templatify(obj) { - return $.isFunction(obj) ? obj : template; - function template() { - return String(obj); - } - }, - defer: function(fn) { - setTimeout(fn, 0); - }, - debounce: function(func, wait, immediate) { - var timeout, result; - return function() { - var context = this, args = arguments, later, callNow; - later = function() { - timeout = null; - if (!immediate) { - result = func.apply(context, args); - } - }; - callNow = immediate && !timeout; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - if (callNow) { - result = func.apply(context, args); - } - return result; - }; - }, - throttle: function(func, wait) { - var context, args, timeout, result, previous, later; - previous = 0; - later = function() { - previous = new Date(); - timeout = null; - result = func.apply(context, args); - }; - return function() { - var now = new Date(), remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0) { - clearTimeout(timeout); - timeout = null; - previous = now; - result = func.apply(context, args); - } else if (!timeout) { - timeout = setTimeout(later, remaining); - } - return result; - }; - }, - stringify: function(val) { - return _.isString(val) ? val : JSON.stringify(val); - }, - guid: function() { - function _p8(s) { - var p = (Math.random().toString(16) + "000000000").substr(2, 8); - return s ? "-" + p.substr(0, 4) + "-" + p.substr(4, 4) : p; - } - return "tt-" + _p8() + _p8(true) + _p8(true) + _p8(); - }, - noop: function() {} - }; - }(); - var WWW = function() { - "use strict"; - var defaultClassNames = { - wrapper: "twitter-typeahead", - input: "tt-input", - hint: "tt-hint", - menu: "tt-menu", - dataset: "tt-dataset", - suggestion: "tt-suggestion", - selectable: "tt-selectable", - empty: "tt-empty", - open: "tt-open", - cursor: "tt-cursor", - highlight: "tt-highlight" - }; - return build; - function build(o) { - var www, classes; - classes = _.mixin({}, defaultClassNames, o); - www = { - css: buildCss(), - classes: classes, - html: buildHtml(classes), - selectors: buildSelectors(classes) - }; - return { - css: www.css, - html: www.html, - classes: www.classes, - selectors: www.selectors, - mixin: function(o) { - _.mixin(o, www); - } - }; - } - function buildHtml(c) { - return { - wrapper: '', - menu: '
' - }; - } - function buildSelectors(classes) { - var selectors = {}; - _.each(classes, function(v, k) { - selectors[k] = "." + v; - }); - return selectors; - } - function buildCss() { - var css = { - wrapper: { - position: "relative", - display: "inline-block" - }, - hint: { - position: "absolute", - top: "0", - left: "0", - borderColor: "transparent", - boxShadow: "none", - opacity: "1" - }, - input: { - position: "relative", - verticalAlign: "top", - backgroundColor: "transparent" - }, - inputWithNoHint: { - position: "relative", - verticalAlign: "top" - }, - menu: { - position: "absolute", - top: "100%", - left: "0", - zIndex: "100", - display: "none" - }, - ltr: { - left: "0", - right: "auto" - }, - rtl: { - left: "auto", - right: " 0" - } - }; - if (_.isMsie()) { - _.mixin(css.input, { - backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" - }); - } - return css; - } - }(); - var EventBus = function() { - "use strict"; - var namespace, deprecationMap; - namespace = "typeahead:"; - deprecationMap = { - render: "rendered", - cursorchange: "cursorchanged", - select: "selected", - autocomplete: "autocompleted" - }; - function EventBus(o) { - if (!o || !o.el) { - $.error("EventBus initialized without el"); - } - this.$el = $(o.el); - } - _.mixin(EventBus.prototype, { - _trigger: function(type, args) { - var $e = $.Event(namespace + type); - this.$el.trigger.call(this.$el, $e, args || []); - return $e; - }, - before: function(type) { - var args, $e; - args = [].slice.call(arguments, 1); - $e = this._trigger("before" + type, args); - return $e.isDefaultPrevented(); - }, - trigger: function(type) { - var deprecatedType; - this._trigger(type, [].slice.call(arguments, 1)); - if (deprecatedType = deprecationMap[type]) { - this._trigger(deprecatedType, [].slice.call(arguments, 1)); - } - } - }); - return EventBus; - }(); - var EventEmitter = function() { - "use strict"; - var splitter = /\s+/, nextTick = getNextTick(); - return { - onSync: onSync, - onAsync: onAsync, - off: off, - trigger: trigger - }; - function on(method, types, cb, context) { - var type; - if (!cb) { - return this; - } - types = types.split(splitter); - cb = context ? bindContext(cb, context) : cb; - this._callbacks = this._callbacks || {}; - while (type = types.shift()) { - this._callbacks[type] = this._callbacks[type] || { - sync: [], - async: [] - }; - this._callbacks[type][method].push(cb); - } - return this; - } - function onAsync(types, cb, context) { - return on.call(this, "async", types, cb, context); - } - function onSync(types, cb, context) { - return on.call(this, "sync", types, cb, context); - } - function off(types) { - var type; - if (!this._callbacks) { - return this; - } - types = types.split(splitter); - while (type = types.shift()) { - delete this._callbacks[type]; - } - return this; - } - function trigger(types) { - var type, callbacks, args, syncFlush, asyncFlush; - if (!this._callbacks) { - return this; - } - types = types.split(splitter); - args = [].slice.call(arguments, 1); - while ((type = types.shift()) && (callbacks = this._callbacks[type])) { - syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args)); - asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args)); - syncFlush() && nextTick(asyncFlush); - } - return this; - } - function getFlush(callbacks, context, args) { - return flush; - function flush() { - var cancelled; - for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) { - cancelled = callbacks[i].apply(context, args) === false; - } - return !cancelled; - } - } - function getNextTick() { - var nextTickFn; - if (window.setImmediate) { - nextTickFn = function nextTickSetImmediate(fn) { - setImmediate(function() { - fn(); - }); - }; - } else { - nextTickFn = function nextTickSetTimeout(fn) { - setTimeout(function() { - fn(); - }, 0); - }; - } - return nextTickFn; - } - function bindContext(fn, context) { - return fn.bind ? fn.bind(context) : function() { - fn.apply(context, [].slice.call(arguments, 0)); - }; - } - }(); - var highlight = function(doc) { - "use strict"; - var defaults = { - node: null, - pattern: null, - tagName: "strong", - className: null, - wordsOnly: false, - caseSensitive: false, - diacriticInsensitive: false - }; - var accented = { - A: "[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]", - B: "[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]", - C: "[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]", - D: "[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]", - E: "[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]", - F: "[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]", - G: "[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]", - H: "[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]", - I: "[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]", - J: "[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]", - K: "[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]", - L: "[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]", - M: "[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]", - N: "[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]", - O: "[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]", - P: "[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]", - Q: "[Qqℚ⒬Ⓠⓠ㏃Qq]", - R: "[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]", - S: "[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]", - T: "[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]", - U: "[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]", - V: "[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]", - W: "[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]", - X: "[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]", - Y: "[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]", - Z: "[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]" - }; - return function hightlight(o) { - var regex; - o = _.mixin({}, defaults, o); - if (!o.node || !o.pattern) { - return; - } - o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ]; - regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive); - traverse(o.node, hightlightTextNode); - function hightlightTextNode(textNode) { - var match, patternNode, wrapperNode; - if (match = regex.exec(textNode.data)) { - wrapperNode = doc.createElement(o.tagName); - o.className && (wrapperNode.className = o.className); - patternNode = textNode.splitText(match.index); - patternNode.splitText(match[0].length); - wrapperNode.appendChild(patternNode.cloneNode(true)); - textNode.parentNode.replaceChild(wrapperNode, patternNode); - } - return !!match; - } - function traverse(el, hightlightTextNode) { - var childNode, TEXT_NODE_TYPE = 3; - for (var i = 0; i < el.childNodes.length; i++) { - childNode = el.childNodes[i]; - if (childNode.nodeType === TEXT_NODE_TYPE) { - i += hightlightTextNode(childNode) ? 1 : 0; - } else { - traverse(childNode, hightlightTextNode); - } - } - } - }; - function accent_replacer(chr) { - return accented[chr.toUpperCase()] || chr; - } - function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) { - var escapedPatterns = [], regexStr; - for (var i = 0, len = patterns.length; i < len; i++) { - var escapedWord = _.escapeRegExChars(patterns[i]); - if (diacriticInsensitive) { - escapedWord = escapedWord.replace(/\S/g, accent_replacer); - } - escapedPatterns.push(escapedWord); - } - regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")"; - return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i"); - } - }(window.document); - var Input = function() { - "use strict"; - var specialKeyCodeMap; - specialKeyCodeMap = { - 9: "tab", - 27: "esc", - 37: "left", - 39: "right", - 13: "enter", - 38: "up", - 40: "down" - }; - function Input(o, www) { - var id; - o = o || {}; - if (!o.input) { - $.error("input is missing"); - } - www.mixin(this); - this.$hint = $(o.hint); - this.$input = $(o.input); - this.$menu = $(o.menu); - id = this.$input.attr("id") || _.guid(); - this.$menu.attr("id", id + "_listbox"); - this.$hint.attr({ - "aria-hidden": true - }); - this.$input.attr({ - "aria-owns": id + "_listbox", - role: "combobox", - "aria-autocomplete": "list", - "aria-expanded": false - }); - this.query = this.$input.val(); - this.queryWhenFocused = this.hasFocus() ? this.query : null; - this.$overflowHelper = buildOverflowHelper(this.$input); - this._checkLanguageDirection(); - if (this.$hint.length === 0) { - this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop; - } - this.onSync("cursorchange", this._updateDescendent); - } - Input.normalizeQuery = function(str) { - return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " "); - }; - _.mixin(Input.prototype, EventEmitter, { - _onBlur: function onBlur() { - this.resetInputValue(); - this.trigger("blurred"); - }, - _onFocus: function onFocus() { - this.queryWhenFocused = this.query; - this.trigger("focused"); - }, - _onKeydown: function onKeydown($e) { - var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; - this._managePreventDefault(keyName, $e); - if (keyName && this._shouldTrigger(keyName, $e)) { - this.trigger(keyName + "Keyed", $e); - } - }, - _onInput: function onInput() { - this._setQuery(this.getInputValue()); - this.clearHintIfInvalid(); - this._checkLanguageDirection(); - }, - _managePreventDefault: function managePreventDefault(keyName, $e) { - var preventDefault; - switch (keyName) { - case "up": - case "down": - preventDefault = !withModifier($e); - break; - - default: - preventDefault = false; - } - preventDefault && $e.preventDefault(); - }, - _shouldTrigger: function shouldTrigger(keyName, $e) { - var trigger; - switch (keyName) { - case "tab": - trigger = !withModifier($e); - break; - - default: - trigger = true; - } - return trigger; - }, - _checkLanguageDirection: function checkLanguageDirection() { - var dir = (this.$input.css("direction") || "ltr").toLowerCase(); - if (this.dir !== dir) { - this.dir = dir; - this.$hint.attr("dir", dir); - this.trigger("langDirChanged", dir); - } - }, - _setQuery: function setQuery(val, silent) { - var areEquivalent, hasDifferentWhitespace; - areEquivalent = areQueriesEquivalent(val, this.query); - hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false; - this.query = val; - if (!silent && !areEquivalent) { - this.trigger("queryChanged", this.query); - } else if (!silent && hasDifferentWhitespace) { - this.trigger("whitespaceChanged", this.query); - } - }, - _updateDescendent: function updateDescendent(event, id) { - this.$input.attr("aria-activedescendant", id); - }, - bind: function() { - var that = this, onBlur, onFocus, onKeydown, onInput; - onBlur = _.bind(this._onBlur, this); - onFocus = _.bind(this._onFocus, this); - onKeydown = _.bind(this._onKeydown, this); - onInput = _.bind(this._onInput, this); - this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown); - if (!_.isMsie() || _.isMsie() > 9) { - this.$input.on("input.tt", onInput); - } else { - this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { - if (specialKeyCodeMap[$e.which || $e.keyCode]) { - return; - } - _.defer(_.bind(that._onInput, that, $e)); - }); - } - return this; - }, - focus: function focus() { - this.$input.focus(); - }, - blur: function blur() { - this.$input.blur(); - }, - getLangDir: function getLangDir() { - return this.dir; - }, - getQuery: function getQuery() { - return this.query || ""; - }, - setQuery: function setQuery(val, silent) { - this.setInputValue(val); - this._setQuery(val, silent); - }, - hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() { - return this.query !== this.queryWhenFocused; - }, - getInputValue: function getInputValue() { - return this.$input.val(); - }, - setInputValue: function setInputValue(value) { - this.$input.val(value); - this.clearHintIfInvalid(); - this._checkLanguageDirection(); - }, - resetInputValue: function resetInputValue() { - this.setInputValue(this.query); - }, - getHint: function getHint() { - return this.$hint.val(); - }, - setHint: function setHint(value) { - this.$hint.val(value); - }, - clearHint: function clearHint() { - this.setHint(""); - }, - clearHintIfInvalid: function clearHintIfInvalid() { - var val, hint, valIsPrefixOfHint, isValid; - val = this.getInputValue(); - hint = this.getHint(); - valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0; - isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow(); - !isValid && this.clearHint(); - }, - hasFocus: function hasFocus() { - return this.$input.is(":focus"); - }, - hasOverflow: function hasOverflow() { - var constraint = this.$input.width() - 2; - this.$overflowHelper.text(this.getInputValue()); - return this.$overflowHelper.width() >= constraint; - }, - isCursorAtEnd: function() { - var valueLength, selectionStart, range; - valueLength = this.$input.val().length; - selectionStart = this.$input[0].selectionStart; - if (_.isNumber(selectionStart)) { - return selectionStart === valueLength; - } else if (document.selection) { - range = document.selection.createRange(); - range.moveStart("character", -valueLength); - return valueLength === range.text.length; - } - return true; - }, - destroy: function destroy() { - this.$hint.off(".tt"); - this.$input.off(".tt"); - this.$overflowHelper.remove(); - this.$hint = this.$input = this.$overflowHelper = $("
"); - }, - setAriaExpanded: function setAriaExpanded(value) { - this.$input.attr("aria-expanded", value); - } - }); - return Input; - function buildOverflowHelper($input) { - return $('').css({ - position: "absolute", - visibility: "hidden", - whiteSpace: "pre", - fontFamily: $input.css("font-family"), - fontSize: $input.css("font-size"), - fontStyle: $input.css("font-style"), - fontVariant: $input.css("font-variant"), - fontWeight: $input.css("font-weight"), - wordSpacing: $input.css("word-spacing"), - letterSpacing: $input.css("letter-spacing"), - textIndent: $input.css("text-indent"), - textRendering: $input.css("text-rendering"), - textTransform: $input.css("text-transform") - }).insertAfter($input); - } - function areQueriesEquivalent(a, b) { - return Input.normalizeQuery(a) === Input.normalizeQuery(b); - } - function withModifier($e) { - return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey; - } - }(); - var Dataset = function() { - "use strict"; - var keys, nameGenerator; - keys = { - dataset: "tt-selectable-dataset", - val: "tt-selectable-display", - obj: "tt-selectable-object" - }; - nameGenerator = _.getIdGenerator(); - function Dataset(o, www) { - o = o || {}; - o.templates = o.templates || {}; - o.templates.notFound = o.templates.notFound || o.templates.empty; - if (!o.source) { - $.error("missing source"); - } - if (!o.node) { - $.error("missing node"); - } - if (o.name && !isValidName(o.name)) { - $.error("invalid dataset name: " + o.name); - } - www.mixin(this); - this.highlight = !!o.highlight; - this.name = _.toStr(o.name || nameGenerator()); - this.limit = o.limit || 5; - this.displayFn = getDisplayFn(o.display || o.displayKey); - this.templates = getTemplates(o.templates, this.displayFn); - this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; - this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async; - this._resetLastSuggestion(); - this.$el = $(o.node).attr("role", "presentation").addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); - } - Dataset.extractData = function extractData(el) { - var $el = $(el); - if ($el.data(keys.obj)) { - return { - dataset: $el.data(keys.dataset) || "", - val: $el.data(keys.val) || "", - obj: $el.data(keys.obj) || null - }; - } - return null; - }; - _.mixin(Dataset.prototype, EventEmitter, { - _overwrite: function overwrite(query, suggestions) { - suggestions = suggestions || []; - if (suggestions.length) { - this._renderSuggestions(query, suggestions); - } else if (this.async && this.templates.pending) { - this._renderPending(query); - } else if (!this.async && this.templates.notFound) { - this._renderNotFound(query); - } else { - this._empty(); - } - this.trigger("rendered", suggestions, false, this.name); - }, - _append: function append(query, suggestions) { - suggestions = suggestions || []; - if (suggestions.length && this.$lastSuggestion.length) { - this._appendSuggestions(query, suggestions); - } else if (suggestions.length) { - this._renderSuggestions(query, suggestions); - } else if (!this.$lastSuggestion.length && this.templates.notFound) { - this._renderNotFound(query); - } - this.trigger("rendered", suggestions, true, this.name); - }, - _renderSuggestions: function renderSuggestions(query, suggestions) { - var $fragment; - $fragment = this._getSuggestionsFragment(query, suggestions); - this.$lastSuggestion = $fragment.children().last(); - this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions)); - }, - _appendSuggestions: function appendSuggestions(query, suggestions) { - var $fragment, $lastSuggestion; - $fragment = this._getSuggestionsFragment(query, suggestions); - $lastSuggestion = $fragment.children().last(); - this.$lastSuggestion.after($fragment); - this.$lastSuggestion = $lastSuggestion; - }, - _renderPending: function renderPending(query) { - var template = this.templates.pending; - this._resetLastSuggestion(); - template && this.$el.html(template({ - query: query, - dataset: this.name - })); - }, - _renderNotFound: function renderNotFound(query) { - var template = this.templates.notFound; - this._resetLastSuggestion(); - template && this.$el.html(template({ - query: query, - dataset: this.name - })); - }, - _empty: function empty() { - this.$el.empty(); - this._resetLastSuggestion(); - }, - _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) { - var that = this, fragment; - fragment = document.createDocumentFragment(); - _.each(suggestions, function getSuggestionNode(suggestion) { - var $el, context; - context = that._injectQuery(query, suggestion); - $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable); - fragment.appendChild($el[0]); - }); - this.highlight && highlight({ - className: this.classes.highlight, - node: fragment, - pattern: query - }); - return $(fragment); - }, - _getFooter: function getFooter(query, suggestions) { - return this.templates.footer ? this.templates.footer({ - query: query, - suggestions: suggestions, - dataset: this.name - }) : null; - }, - _getHeader: function getHeader(query, suggestions) { - return this.templates.header ? this.templates.header({ - query: query, - suggestions: suggestions, - dataset: this.name - }) : null; - }, - _resetLastSuggestion: function resetLastSuggestion() { - this.$lastSuggestion = $(); - }, - _injectQuery: function injectQuery(query, obj) { - return _.isObject(obj) ? _.mixin({ - _query: query - }, obj) : obj; - }, - update: function update(query) { - var that = this, canceled = false, syncCalled = false, rendered = 0; - this.cancel(); - this.cancel = function cancel() { - canceled = true; - that.cancel = $.noop; - that.async && that.trigger("asyncCanceled", query, that.name); - }; - this.source(query, sync, async); - !syncCalled && sync([]); - function sync(suggestions) { - if (syncCalled) { - return; - } - syncCalled = true; - suggestions = (suggestions || []).slice(0, that.limit); - rendered = suggestions.length; - that._overwrite(query, suggestions); - if (rendered < that.limit && that.async) { - that.trigger("asyncRequested", query, that.name); - } - } - function async(suggestions) { - suggestions = suggestions || []; - if (!canceled && rendered < that.limit) { - that.cancel = $.noop; - var idx = Math.abs(rendered - that.limit); - rendered += idx; - that._append(query, suggestions.slice(0, idx)); - that.async && that.trigger("asyncReceived", query, that.name); - } - } - }, - cancel: $.noop, - clear: function clear() { - this._empty(); - this.cancel(); - this.trigger("cleared"); - }, - isEmpty: function isEmpty() { - return this.$el.is(":empty"); - }, - destroy: function destroy() { - this.$el = $("
"); - } - }); - return Dataset; - function getDisplayFn(display) { - display = display || _.stringify; - return _.isFunction(display) ? display : displayFn; - function displayFn(obj) { - return obj[display]; - } - } - function getTemplates(templates, displayFn) { - return { - notFound: templates.notFound && _.templatify(templates.notFound), - pending: templates.pending && _.templatify(templates.pending), - header: templates.header && _.templatify(templates.header), - footer: templates.footer && _.templatify(templates.footer), - suggestion: templates.suggestion ? userSuggestionTemplate : suggestionTemplate - }; - function userSuggestionTemplate(context) { - var template = templates.suggestion; - return $(template(context)).attr("id", _.guid()); - } - function suggestionTemplate(context) { - return $('
').attr("id", _.guid()).text(displayFn(context)); - } - } - function isValidName(str) { - return /^[_a-zA-Z0-9-]+$/.test(str); - } - }(); - var Menu = function() { - "use strict"; - function Menu(o, www) { - var that = this; - o = o || {}; - if (!o.node) { - $.error("node is required"); - } - www.mixin(this); - this.$node = $(o.node); - this.query = null; - this.datasets = _.map(o.datasets, initializeDataset); - function initializeDataset(oDataset) { - var node = that.$node.find(oDataset.node).first(); - oDataset.node = node.length ? node : $("
").appendTo(that.$node); - return new Dataset(oDataset, www); - } - } - _.mixin(Menu.prototype, EventEmitter, { - _onSelectableClick: function onSelectableClick($e) { - this.trigger("selectableClicked", $($e.currentTarget)); - }, - _onRendered: function onRendered(type, dataset, suggestions, async) { - this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); - this.trigger("datasetRendered", dataset, suggestions, async); - }, - _onCleared: function onCleared() { - this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); - this.trigger("datasetCleared"); - }, - _propagate: function propagate() { - this.trigger.apply(this, arguments); - }, - _allDatasetsEmpty: function allDatasetsEmpty() { - return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) { - var isEmpty = dataset.isEmpty(); - this.$node.attr("aria-expanded", !isEmpty); - return isEmpty; - }, this)); - }, - _getSelectables: function getSelectables() { - return this.$node.find(this.selectors.selectable); - }, - _removeCursor: function _removeCursor() { - var $selectable = this.getActiveSelectable(); - $selectable && $selectable.removeClass(this.classes.cursor); - }, - _ensureVisible: function ensureVisible($el) { - var elTop, elBottom, nodeScrollTop, nodeHeight; - elTop = $el.position().top; - elBottom = elTop + $el.outerHeight(true); - nodeScrollTop = this.$node.scrollTop(); - nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10); - if (elTop < 0) { - this.$node.scrollTop(nodeScrollTop + elTop); - } else if (nodeHeight < elBottom) { - this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight)); - } - }, - bind: function() { - var that = this, onSelectableClick; - onSelectableClick = _.bind(this._onSelectableClick, this); - this.$node.on("click.tt", this.selectors.selectable, onSelectableClick); - this.$node.on("mouseover", this.selectors.selectable, function() { - that.setCursor($(this)); - }); - this.$node.on("mouseleave", function() { - that._removeCursor(); - }); - _.each(this.datasets, function(dataset) { - dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that); - }); - return this; - }, - isOpen: function isOpen() { - return this.$node.hasClass(this.classes.open); - }, - open: function open() { - this.$node.scrollTop(0); - this.$node.addClass(this.classes.open); - }, - close: function close() { - this.$node.attr("aria-expanded", false); - this.$node.removeClass(this.classes.open); - this._removeCursor(); - }, - setLanguageDirection: function setLanguageDirection(dir) { - this.$node.attr("dir", dir); - }, - selectableRelativeToCursor: function selectableRelativeToCursor(delta) { - var $selectables, $oldCursor, oldIndex, newIndex; - $oldCursor = this.getActiveSelectable(); - $selectables = this._getSelectables(); - oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1; - newIndex = oldIndex + delta; - newIndex = (newIndex + 1) % ($selectables.length + 1) - 1; - newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex; - return newIndex === -1 ? null : $selectables.eq(newIndex); - }, - setCursor: function setCursor($selectable) { - this._removeCursor(); - if ($selectable = $selectable && $selectable.first()) { - $selectable.addClass(this.classes.cursor); - this._ensureVisible($selectable); - } - }, - getSelectableData: function getSelectableData($el) { - return $el && $el.length ? Dataset.extractData($el) : null; - }, - getActiveSelectable: function getActiveSelectable() { - var $selectable = this._getSelectables().filter(this.selectors.cursor).first(); - return $selectable.length ? $selectable : null; - }, - getTopSelectable: function getTopSelectable() { - var $selectable = this._getSelectables().first(); - return $selectable.length ? $selectable : null; - }, - update: function update(query) { - var isValidUpdate = query !== this.query; - if (isValidUpdate) { - this.query = query; - _.each(this.datasets, updateDataset); - } - return isValidUpdate; - function updateDataset(dataset) { - dataset.update(query); - } - }, - empty: function empty() { - _.each(this.datasets, clearDataset); - this.query = null; - this.$node.addClass(this.classes.empty); - function clearDataset(dataset) { - dataset.clear(); - } - }, - destroy: function destroy() { - this.$node.off(".tt"); - this.$node = $("
"); - _.each(this.datasets, destroyDataset); - function destroyDataset(dataset) { - dataset.destroy(); - } - } - }); - return Menu; - }(); - var Status = function() { - "use strict"; - function Status(options) { - this.$el = $("", { - role: "status", - "aria-live": "polite" - }).css({ - position: "absolute", - padding: "0", - border: "0", - height: "1px", - width: "1px", - "margin-bottom": "-1px", - "margin-right": "-1px", - overflow: "hidden", - clip: "rect(0 0 0 0)", - "white-space": "nowrap" - }); - options.$input.after(this.$el); - _.each(options.menu.datasets, _.bind(function(dataset) { - if (dataset.onSync) { - dataset.onSync("rendered", _.bind(this.update, this)); - dataset.onSync("cleared", _.bind(this.cleared, this)); - } - }, this)); - } - _.mixin(Status.prototype, { - update: function update(event, suggestions) { - var length = suggestions.length; - var words; - if (length === 1) { - words = { - result: "result", - is: "is" - }; - } else { - words = { - result: "results", - is: "are" - }; - } - this.$el.text(length + " " + words.result + " " + words.is + " available, use up and down arrow keys to navigate."); - }, - cleared: function() { - this.$el.text(""); - } - }); - return Status; - }(); - var DefaultMenu = function() { - "use strict"; - var s = Menu.prototype; - function DefaultMenu() { - Menu.apply(this, [].slice.call(arguments, 0)); - } - _.mixin(DefaultMenu.prototype, Menu.prototype, { - open: function open() { - !this._allDatasetsEmpty() && this._show(); - return s.open.apply(this, [].slice.call(arguments, 0)); - }, - close: function close() { - this._hide(); - return s.close.apply(this, [].slice.call(arguments, 0)); - }, - _onRendered: function onRendered() { - if (this._allDatasetsEmpty()) { - this._hide(); - } else { - this.isOpen() && this._show(); - } - return s._onRendered.apply(this, [].slice.call(arguments, 0)); - }, - _onCleared: function onCleared() { - if (this._allDatasetsEmpty()) { - this._hide(); - } else { - this.isOpen() && this._show(); - } - return s._onCleared.apply(this, [].slice.call(arguments, 0)); - }, - setLanguageDirection: function setLanguageDirection(dir) { - this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl); - return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0)); - }, - _hide: function hide() { - this.$node.hide(); - }, - _show: function show() { - this.$node.css("display", "block"); - } - }); - return DefaultMenu; - }(); - var Typeahead = function() { - "use strict"; - function Typeahead(o, www) { - var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged; - o = o || {}; - if (!o.input) { - $.error("missing input"); - } - if (!o.menu) { - $.error("missing menu"); - } - if (!o.eventBus) { - $.error("missing event bus"); - } - www.mixin(this); - this.eventBus = o.eventBus; - this.minLength = _.isNumber(o.minLength) ? o.minLength : 1; - this.input = o.input; - this.menu = o.menu; - this.enabled = true; - this.autoselect = !!o.autoselect; - this.active = false; - this.input.hasFocus() && this.activate(); - this.dir = this.input.getLangDir(); - this._hacks(); - this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this); - onFocused = c(this, "activate", "open", "_onFocused"); - onBlurred = c(this, "deactivate", "_onBlurred"); - onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed"); - onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed"); - onEscKeyed = c(this, "isActive", "_onEscKeyed"); - onUpKeyed = c(this, "isActive", "open", "_onUpKeyed"); - onDownKeyed = c(this, "isActive", "open", "_onDownKeyed"); - onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed"); - onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed"); - onQueryChanged = c(this, "_openIfActive", "_onQueryChanged"); - onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged"); - this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this); - } - _.mixin(Typeahead.prototype, { - _hacks: function hacks() { - var $input, $menu; - $input = this.input.$input || $("
"); - $menu = this.menu.$node || $("
"); - $input.on("blur.tt", function($e) { - var active, isActive, hasActive; - active = document.activeElement; - isActive = $menu.is(active); - hasActive = $menu.has(active).length > 0; - if (_.isMsie() && (isActive || hasActive)) { - $e.preventDefault(); - $e.stopImmediatePropagation(); - _.defer(function() { - $input.focus(); - }); - } - }); - $menu.on("mousedown.tt", function($e) { - $e.preventDefault(); - }); - }, - _onSelectableClicked: function onSelectableClicked(type, $el) { - this.select($el); - }, - _onDatasetCleared: function onDatasetCleared() { - this._updateHint(); - }, - _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) { - this._updateHint(); - if (this.autoselect) { - var cursorClass = this.selectors.cursor.substr(1); - this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass); - } - this.eventBus.trigger("render", suggestions, async, dataset); - }, - _onAsyncRequested: function onAsyncRequested(type, dataset, query) { - this.eventBus.trigger("asyncrequest", query, dataset); - }, - _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) { - this.eventBus.trigger("asynccancel", query, dataset); - }, - _onAsyncReceived: function onAsyncReceived(type, dataset, query) { - this.eventBus.trigger("asyncreceive", query, dataset); - }, - _onFocused: function onFocused() { - this._minLengthMet() && this.menu.update(this.input.getQuery()); - }, - _onBlurred: function onBlurred() { - if (this.input.hasQueryChangedSinceLastFocus()) { - this.eventBus.trigger("change", this.input.getQuery()); - } - }, - _onEnterKeyed: function onEnterKeyed(type, $e) { - var $selectable; - if ($selectable = this.menu.getActiveSelectable()) { - if (this.select($selectable)) { - $e.preventDefault(); - $e.stopPropagation(); - } - } else if (this.autoselect) { - if (this.select(this.menu.getTopSelectable())) { - $e.preventDefault(); - $e.stopPropagation(); - } - } - }, - _onTabKeyed: function onTabKeyed(type, $e) { - var $selectable; - if ($selectable = this.menu.getActiveSelectable()) { - this.select($selectable) && $e.preventDefault(); - } else if (this.autoselect) { - if ($selectable = this.menu.getTopSelectable()) { - this.autocomplete($selectable) && $e.preventDefault(); - } - } - }, - _onEscKeyed: function onEscKeyed() { - this.close(); - }, - _onUpKeyed: function onUpKeyed() { - this.moveCursor(-1); - }, - _onDownKeyed: function onDownKeyed() { - this.moveCursor(+1); - }, - _onLeftKeyed: function onLeftKeyed() { - if (this.dir === "rtl" && this.input.isCursorAtEnd()) { - this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); - } - }, - _onRightKeyed: function onRightKeyed() { - if (this.dir === "ltr" && this.input.isCursorAtEnd()) { - this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); - } - }, - _onQueryChanged: function onQueryChanged(e, query) { - this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty(); - }, - _onWhitespaceChanged: function onWhitespaceChanged() { - this._updateHint(); - }, - _onLangDirChanged: function onLangDirChanged(e, dir) { - if (this.dir !== dir) { - this.dir = dir; - this.menu.setLanguageDirection(dir); - } - }, - _openIfActive: function openIfActive() { - this.isActive() && this.open(); - }, - _minLengthMet: function minLengthMet(query) { - query = _.isString(query) ? query : this.input.getQuery() || ""; - return query.length >= this.minLength; - }, - _updateHint: function updateHint() { - var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match; - $selectable = this.menu.getTopSelectable(); - data = this.menu.getSelectableData($selectable); - val = this.input.getInputValue(); - if (data && !_.isBlankString(val) && !this.input.hasOverflow()) { - query = Input.normalizeQuery(val); - escapedQuery = _.escapeRegExChars(query); - frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i"); - match = frontMatchRegEx.exec(data.val); - match && this.input.setHint(val + match[1]); - } else { - this.input.clearHint(); - } - }, - isEnabled: function isEnabled() { - return this.enabled; - }, - enable: function enable() { - this.enabled = true; - }, - disable: function disable() { - this.enabled = false; - }, - isActive: function isActive() { - return this.active; - }, - activate: function activate() { - if (this.isActive()) { - return true; - } else if (!this.isEnabled() || this.eventBus.before("active")) { - return false; - } else { - this.active = true; - this.eventBus.trigger("active"); - return true; - } - }, - deactivate: function deactivate() { - if (!this.isActive()) { - return true; - } else if (this.eventBus.before("idle")) { - return false; - } else { - this.active = false; - this.close(); - this.eventBus.trigger("idle"); - return true; - } - }, - isOpen: function isOpen() { - return this.menu.isOpen(); - }, - open: function open() { - if (!this.isOpen() && !this.eventBus.before("open")) { - this.input.setAriaExpanded(true); - this.menu.open(); - this._updateHint(); - this.eventBus.trigger("open"); - } - return this.isOpen(); - }, - close: function close() { - if (this.isOpen() && !this.eventBus.before("close")) { - this.input.setAriaExpanded(false); - this.menu.close(); - this.input.clearHint(); - this.input.resetInputValue(); - this.eventBus.trigger("close"); - } - return !this.isOpen(); - }, - setVal: function setVal(val) { - this.input.setQuery(_.toStr(val)); - }, - getVal: function getVal() { - return this.input.getQuery(); - }, - select: function select($selectable) { - var data = this.menu.getSelectableData($selectable); - if (data && !this.eventBus.before("select", data.obj, data.dataset)) { - this.input.setQuery(data.val, true); - this.eventBus.trigger("select", data.obj, data.dataset); - this.close(); - return true; - } - return false; - }, - autocomplete: function autocomplete($selectable) { - var query, data, isValid; - query = this.input.getQuery(); - data = this.menu.getSelectableData($selectable); - isValid = data && query !== data.val; - if (isValid && !this.eventBus.before("autocomplete", data.obj, data.dataset)) { - this.input.setQuery(data.val); - this.eventBus.trigger("autocomplete", data.obj, data.dataset); - return true; - } - return false; - }, - moveCursor: function moveCursor(delta) { - var query, $candidate, data, suggestion, datasetName, cancelMove, id; - query = this.input.getQuery(); - $candidate = this.menu.selectableRelativeToCursor(delta); - data = this.menu.getSelectableData($candidate); - suggestion = data ? data.obj : null; - datasetName = data ? data.dataset : null; - id = $candidate ? $candidate.attr("id") : null; - this.input.trigger("cursorchange", id); - cancelMove = this._minLengthMet() && this.menu.update(query); - if (!cancelMove && !this.eventBus.before("cursorchange", suggestion, datasetName)) { - this.menu.setCursor($candidate); - if (data) { - if (typeof data.val === "string") { - this.input.setInputValue(data.val); - } - } else { - this.input.resetInputValue(); - this._updateHint(); - } - this.eventBus.trigger("cursorchange", suggestion, datasetName); - return true; - } - return false; - }, - destroy: function destroy() { - this.input.destroy(); - this.menu.destroy(); - } - }); - return Typeahead; - function c(ctx) { - var methods = [].slice.call(arguments, 1); - return function() { - var args = [].slice.call(arguments); - _.each(methods, function(method) { - return ctx[method].apply(ctx, args); - }); - }; - } - }(); - (function() { - "use strict"; - var old, keys, methods; - old = $.fn.typeahead; - keys = { - www: "tt-www", - attrs: "tt-attrs", - typeahead: "tt-typeahead" - }; - methods = { - initialize: function initialize(o, datasets) { - var www; - datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1); - o = o || {}; - www = WWW(o.classNames); - return this.each(attach); - function attach() { - var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor; - _.each(datasets, function(d) { - d.highlight = !!o.highlight; - }); - $input = $(this); - $wrapper = $(www.html.wrapper); - $hint = $elOrNull(o.hint); - $menu = $elOrNull(o.menu); - defaultHint = o.hint !== false && !$hint; - defaultMenu = o.menu !== false && !$menu; - defaultHint && ($hint = buildHintFromInput($input, www)); - defaultMenu && ($menu = $(www.html.menu).css(www.css.menu)); - $hint && $hint.val(""); - $input = prepInput($input, www); - if (defaultHint || defaultMenu) { - $wrapper.css(www.css.wrapper); - $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint); - $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null); - } - MenuConstructor = defaultMenu ? DefaultMenu : Menu; - eventBus = new EventBus({ - el: $input - }); - input = new Input({ - hint: $hint, - input: $input, - menu: $menu - }, www); - menu = new MenuConstructor({ - node: $menu, - datasets: datasets - }, www); - status = new Status({ - $input: $input, - menu: menu - }); - typeahead = new Typeahead({ - input: input, - menu: menu, - eventBus: eventBus, - minLength: o.minLength, - autoselect: o.autoselect - }, www); - $input.data(keys.www, www); - $input.data(keys.typeahead, typeahead); - } - }, - isEnabled: function isEnabled() { - var enabled; - ttEach(this.first(), function(t) { - enabled = t.isEnabled(); - }); - return enabled; - }, - enable: function enable() { - ttEach(this, function(t) { - t.enable(); - }); - return this; - }, - disable: function disable() { - ttEach(this, function(t) { - t.disable(); - }); - return this; - }, - isActive: function isActive() { - var active; - ttEach(this.first(), function(t) { - active = t.isActive(); - }); - return active; - }, - activate: function activate() { - ttEach(this, function(t) { - t.activate(); - }); - return this; - }, - deactivate: function deactivate() { - ttEach(this, function(t) { - t.deactivate(); - }); - return this; - }, - isOpen: function isOpen() { - var open; - ttEach(this.first(), function(t) { - open = t.isOpen(); - }); - return open; - }, - open: function open() { - ttEach(this, function(t) { - t.open(); - }); - return this; - }, - close: function close() { - ttEach(this, function(t) { - t.close(); - }); - return this; - }, - select: function select(el) { - var success = false, $el = $(el); - ttEach(this.first(), function(t) { - success = t.select($el); - }); - return success; - }, - autocomplete: function autocomplete(el) { - var success = false, $el = $(el); - ttEach(this.first(), function(t) { - success = t.autocomplete($el); - }); - return success; - }, - moveCursor: function moveCursoe(delta) { - var success = false; - ttEach(this.first(), function(t) { - success = t.moveCursor(delta); - }); - return success; - }, - val: function val(newVal) { - var query; - if (!arguments.length) { - ttEach(this.first(), function(t) { - query = t.getVal(); - }); - return query; - } else { - ttEach(this, function(t) { - t.setVal(_.toStr(newVal)); - }); - return this; - } - }, - destroy: function destroy() { - ttEach(this, function(typeahead, $input) { - revert($input); - typeahead.destroy(); - }); - return this; - } - }; - $.fn.typeahead = function(method) { - if (methods[method]) { - return methods[method].apply(this, [].slice.call(arguments, 1)); - } else { - return methods.initialize.apply(this, arguments); - } - }; - $.fn.typeahead.noConflict = function noConflict() { - $.fn.typeahead = old; - return this; - }; - function ttEach($els, fn) { - $els.each(function() { - var $input = $(this), typeahead; - (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input); - }); - } - function buildHintFromInput($input, www) { - return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({ - readonly: true, - required: false - }).removeAttr("id name placeholder").removeClass("required").attr({ - spellcheck: "false", - tabindex: -1 - }); - } - function prepInput($input, www) { - $input.data(keys.attrs, { - dir: $input.attr("dir"), - autocomplete: $input.attr("autocomplete"), - spellcheck: $input.attr("spellcheck"), - style: $input.attr("style") - }); - $input.addClass(www.classes.input).attr({ - spellcheck: false - }); - try { - !$input.attr("dir") && $input.attr("dir", "auto"); - } catch (e) {} - return $input; - } - function getBackgroundStyles($el) { - return { - backgroundAttachment: $el.css("background-attachment"), - backgroundClip: $el.css("background-clip"), - backgroundColor: $el.css("background-color"), - backgroundImage: $el.css("background-image"), - backgroundOrigin: $el.css("background-origin"), - backgroundPosition: $el.css("background-position"), - backgroundRepeat: $el.css("background-repeat"), - backgroundSize: $el.css("background-size") - }; - } - function revert($input) { - var www, $wrapper; - www = $input.data(keys.www); - $wrapper = $input.parent().filter(www.selectors.wrapper); - _.each($input.data(keys.attrs), function(val, key) { - _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); - }); - $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input); - if ($wrapper.length) { - $input.detach().insertAfter($wrapper); - $wrapper.remove(); - } - } - function $elOrNull(obj) { - var isValid, $el; - isValid = _.isJQuery(obj) || _.isElement(obj); - $el = isValid ? $(obj).first() : []; - return $el.length ? $el : null; - } - })(); -}); \ No newline at end of file diff --git a/docs/search.json b/docs/search.json deleted file mode 100644 index 1d2ba21a7..000000000 --- a/docs/search.json +++ /dev/null @@ -1 +0,0 @@ -{"Typealiases.html#/s:6Nimble14AsyncPredicatea":{"name":"AsyncPredicate","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Typealiases.html#/s:6Nimble9Predicatea":{"name":"Predicate","abstract":"\u003cp\u003eProvides an easy upgrade path for custom Matchers to be renamed to Matchers\u003c/p\u003e"},"Typealiases.html#/s:6Nimble15PredicateResulta":{"name":"PredicateResult","abstract":"\u003cp\u003eProvides an easy upgrade path for custom Matchers to be renamed to Matchers\u003c/p\u003e"},"Typealiases.html#/s:6Nimble15PredicateStatusa":{"name":"PredicateStatus","abstract":"\u003cp\u003eProvides an easy upgrade path for custom Matchers to be renamed to Matchers\u003c/p\u003e"},"Typealiases.html#/s:6Nimble12MatcherBlocka":{"name":"MatcherBlock","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Typealiases.html#/s:6Nimble14PredicateBlocka":{"name":"PredicateBlock","abstract":"\u003cp\u003eProvides an easy upgrade path for custom Matchers to be renamed to Matchers\u003c/p\u003e"},"Typealiases.html#/s:6Nimble12NMBPredicatea":{"name":"NMBPredicate","abstract":"\u003cp\u003eProvides an easy upgrade path for custom Matchers to be renamed to Matchers\u003c/p\u003e"},"Typealiases.html#/s:6Nimble18NMBPredicateResulta":{"name":"NMBPredicateResult","abstract":"\u003cp\u003eProvides an easy upgrade path for custom Matchers to be renamed to Matchers\u003c/p\u003e"},"Typealiases.html#/s:6Nimble18NMBPredicateStatusa":{"name":"NMBPredicateStatus","abstract":"\u003cp\u003eProvides an easy upgrade path for custom Matchers to be renamed to Matchers\u003c/p\u003e"},"Typealiases.html#/FileString":{"name":"FileString"},"Typealiases.html#/s:6Nimble10FileStringa":{"name":"FileString","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Structs/RequireError.html#/s:10Foundation13CustomNSErrorP13errorUserInfoSDySSypGvp":{"name":"errorUserInfo","parent_name":"RequireError"},"Structs/PollingDefaults.html#/s:6Nimble15PollingDefaultsV7timeoutAA0A12TimeIntervalOvpZ":{"name":"timeout","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"PollingDefaults"},"Structs/PollingDefaults.html#/s:6Nimble15PollingDefaultsV12pollIntervalAA0a4TimeE0OvpZ":{"name":"pollInterval","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"PollingDefaults"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV10expressionAA0B10ExpressionVyxGvp":{"name":"expression","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV11customErrors0E0_pSgvp":{"name":"customError","abstract":"\u003cp\u003eA custom error to throw.","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV10expression11customErrorACyxGAA0B10ExpressionVyxG_s0F0_pSgtcfc":{"name":"init(expression:customError:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV6verifyyxSb_AA14FailureMessageCxSgtKF":{"name":"verify(_:_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV2to_11descriptionxAA7MatcherVyxG_SSSgtYaKF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV5toNot_11descriptionxAA7MatcherVyxG_SSSgtYaKF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV5notTo_11descriptionxAA7MatcherVyxG_SSSgtYaKF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV2to_11descriptionxAA0B7MatcherVyxG_SSSgtYaKF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV5toNot_11descriptionxAA0B7MatcherVyxG_SSSgtYaKF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV5notTo_11descriptionxAA0B7MatcherVyxG_SSSgtYaKF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV12toEventually_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV15toEventuallyNot_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV15toNotEventually_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV7toNever_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV7neverTo_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV8toAlways_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV8alwaysTo_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV12toEventually_7timeout12pollInterval11descriptionxAA0B7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV15toEventuallyNot_7timeout12pollInterval11descriptionxAA0B7MatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV15toNotEventually_7timeout12pollInterval11descriptionxAA0B7MatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV7toNever_5until12pollInterval11descriptionxAA0B7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV7neverTo_5until12pollInterval11descriptionxAA0B7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV8toAlways_5until12pollInterval11descriptionxAA0B7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncRequirement"},"Structs/AsyncRequirement.html#/s:6Nimble16AsyncRequirementV8alwaysTo_5until12pollInterval11descriptionxAA0B7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV10expressionAA10ExpressionVyxGvp":{"name":"expression","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV11customErrors0E0_pSgvp":{"name":"customError","abstract":"\u003cp\u003eA custom error to throw.","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV10expression11customErrorACyxGAA10ExpressionVyxG_s0F0_pSgtcfc":{"name":"init(expression:customError:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV6verifyyxSb_AA14FailureMessageCxSgtKF":{"name":"verify(_:_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV2to_11descriptionxAA7MatcherVyxG_SSSgtKF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV5toNot_11descriptionxAA7MatcherVyxG_SSSgtKF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV5notTo_11descriptionxAA7MatcherVyxG_SSSgtKF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV2to_11descriptionxAA12AsyncMatcherVyxG_SSSgtYaKF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV5toNot_11descriptionxAA12AsyncMatcherVyxG_SSSgtYaKF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV5notTo_11descriptionxAA12AsyncMatcherVyxG_SSSgtYaKF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV12toEventually_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtKF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eRequire the actual value using a matcher to match by checking continuously","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV15toEventuallyNot_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeI0OALSSSgtKF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV15toNotEventually_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeI0OALSSSgtKF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV7toNever_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtKF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV7neverTo_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtKF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV8toAlways_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtKF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV8alwaysTo_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtKF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV12toEventually_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV15toEventuallyNot_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV15toNotEventually_7timeout12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV7toNever_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV7neverTo_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV8toAlways_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV8alwaysTo_5until12pollInterval11descriptionxAA7MatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV12toEventually_7timeout12pollInterval11descriptionxAA12AsyncMatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV15toEventuallyNot_7timeout12pollInterval11descriptionxAA12AsyncMatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV15toNotEventually_7timeout12pollInterval11descriptionxAA12AsyncMatcherVyxG_AA0a4TimeI0OALSSSgtYaKF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV7toNever_5until12pollInterval11descriptionxAA12AsyncMatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV7neverTo_5until12pollInterval11descriptionxAA12AsyncMatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV8toAlways_5until12pollInterval11descriptionxAA12AsyncMatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncRequirement"},"Structs/SyncRequirement.html#/s:6Nimble15SyncRequirementV8alwaysTo_5until12pollInterval11descriptionxAA12AsyncMatcherVyxG_AA0a4TimeH0OALSSSgtYaKF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncRequirement"},"Structs/MatcherResult.html#/s:6Nimble13MatcherResultV6statusAA0B6StatusOvp":{"name":"status","abstract":"\u003cp\u003eStatus indicates if the matcher matches, does not match, or fails.\u003c/p\u003e","parent_name":"MatcherResult"},"Structs/MatcherResult.html#/s:6Nimble13MatcherResultV7messageAA18ExpectationMessageOvp":{"name":"message","abstract":"\u003cp\u003eThe error message that can be displayed if it does not match\u003c/p\u003e","parent_name":"MatcherResult"},"Structs/MatcherResult.html#/s:6Nimble13MatcherResultV6status7messageAcA0B6StatusO_AA18ExpectationMessageOtcfc":{"name":"init(status:message:)","abstract":"\u003cp\u003eConstructs a new MatcherResult with a given status and error message\u003c/p\u003e","parent_name":"MatcherResult"},"Structs/MatcherResult.html#/s:6Nimble13MatcherResultV4bool7messageACSb_AA18ExpectationMessageOtcfc":{"name":"init(bool:message:)","abstract":"\u003cp\u003eShorthand to MatcherResult(status: MatcherStatus(bool: bool), message: message)\u003c/p\u003e","parent_name":"MatcherResult"},"Structs/MatcherResult.html#/s:6Nimble13MatcherResultV9toBoolean11expectationSbAA16ExpectationStyleO_tF":{"name":"toBoolean(expectation:)","abstract":"\u003cp\u003eConverts the result to a boolean based on what the expectation intended\u003c/p\u003e","parent_name":"MatcherResult"},"Structs/MatcherResult.html#/s:6Nimble13MatcherResultV12toObjectiveCAA010NMBMatcherC0CyF":{"name":"toObjectiveC()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"MatcherResult"},"Structs/ExpectationNil.html#/s:s23ExpressibleByNilLiteralP03nilD0xyt_tcfc":{"name":"init(nilLiteral:)","parent_name":"ExpectationNil"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherVyACyxGAA0C6ResultVAA0B10ExpressionVyxGYaKccfc":{"name":"init(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncMatcher"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherV9satisfiesyAA0C6ResultVAA0B10ExpressionVyxGYaKF":{"name":"satisfies(_:)","abstract":"\u003cp\u003eUses a matcher on a given value to see if it passes the matcher.\u003c/p\u003e","parent_name":"AsyncMatcher"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherV6define7matcherACyxGAA0C6ResultVAA0B10ExpressionVyxGYaKc_tFZ":{"name":"define(matcher:)","abstract":"\u003cp\u003eLike Matcher() constructor, but automatically guard against nil (actual) values\u003c/p\u003e","parent_name":"AsyncMatcher"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherV6define_7matcherACyxGSS_AA0C6ResultVAA0B10ExpressionVyxG_AA18ExpectationMessageOtYaKctFZ":{"name":"define(_:matcher:)","abstract":"\u003cp\u003eDefines a matcher with a default message that can be returned in the closure","parent_name":"AsyncMatcher"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherV13defineNilable_7matcherACyxGSS_AA0C6ResultVAA0B10ExpressionVyxG_AA18ExpectationMessageOtYaKctFZ":{"name":"defineNilable(_:matcher:)","abstract":"\u003cp\u003eDefines a matcher with a default message that can be returned in the closure","parent_name":"AsyncMatcher"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherV6simple_7matcherACyxGSS_AA0C6StatusOAA0B10ExpressionVyxGYaKctFZ":{"name":"simple(_:matcher:)","abstract":"\u003cp\u003eProvides a simple matcher definition that provides no control over the predefined","parent_name":"AsyncMatcher"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherV13simpleNilable_7matcherACyxGSS_AA0C6StatusOAA0B10ExpressionVyxGYaKctFZ":{"name":"simpleNilable(_:matcher:)","abstract":"\u003cp\u003eProvides a simple matcher definition that provides no control over the predefined","parent_name":"AsyncMatcher"},"Structs/AsyncMatcher.html#/s:6Nimble12AsyncMatcherV13requireNonNilACyxGvp":{"name":"requireNonNil","abstract":"\u003cp\u003eReturns a new Matcher based on the current one that always fails if nil is given as","parent_name":"AsyncMatcher"},"Structs/Matcher.html#/s:6Nimble7MatcherVyACyxGAA0B6ResultVAA10ExpressionVyxGKccfc":{"name":"init(_:)","abstract":"\u003cp\u003eConstructs a matcher that knows how take a given value\u003c/p\u003e","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV9satisfiesyAA0B6ResultVAA10ExpressionVyxGKF":{"name":"satisfies(_:)","abstract":"\u003cp\u003eUses a matcher on a given value to see if it passes the matcher.\u003c/p\u003e","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV9satisfiesyAA0B6ResultVAA15AsyncExpressionVyxGYaKF":{"name":"satisfies(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV6define7matcherACyxGAA0B6ResultVAA10ExpressionVyxGKc_tFZ":{"name":"define(matcher:)","abstract":"\u003cp\u003eLike Matcher() constructor, but automatically guard against nil (actual) values\u003c/p\u003e","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV6define_7matcherACyxGSS_AA0B6ResultVAA10ExpressionVyxG_AA18ExpectationMessageOtKctFZ":{"name":"define(_:matcher:)","abstract":"\u003cp\u003eDefines a matcher with a default message that can be returned in the closure","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV13defineNilable_7matcherACyxGSS_AA0B6ResultVAA10ExpressionVyxG_AA18ExpectationMessageOtKctFZ":{"name":"defineNilable(_:matcher:)","abstract":"\u003cp\u003eDefines a matcher with a default message that can be returned in the closure","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV6simple_7matcherACyxGSS_AA0B6StatusOAA10ExpressionVyxGKctFZ":{"name":"simple(_:matcher:)","abstract":"\u003cp\u003eProvides a simple matcher definition that provides no control over the predefined","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV13simpleNilable_7matcherACyxGSS_AA0B6StatusOAA10ExpressionVyxGKctFZ":{"name":"simpleNilable(_:matcher:)","abstract":"\u003cp\u003eProvides a simple matcher definition that provides no control over the predefined","parent_name":"Matcher"},"Structs/Matcher.html#/s:6Nimble7MatcherV13requireNonNilACyxGvp":{"name":"requireNonNil","abstract":"\u003cp\u003eReturns a new Matcher based on the current one that always fails if nil is given as","parent_name":"Matcher"},"Structs/Expression.html#/s:6Nimble10ExpressionV8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV9isClosureSbvp":{"name":"isClosure","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV10expression8location9isClosureACyxGxSgyKc_AA14SourceLocationCSbtcfc":{"name":"init(expression:location:isClosure:)","abstract":"\u003cp\u003eCreates a new expression struct. Normally, expect(\u0026hellip;) will manage this","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV08memoizedB08location14withoutCaching9isClosureACyxGxSgSbKc_AA14SourceLocationCS2btcfc":{"name":"init(memoizedExpression:location:withoutCaching:isClosure:)","abstract":"\u003cp\u003eCreates a new expression struct. Normally, expect(\u0026hellip;) will manage this","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV4castyACyqd__Gqd__SgxSgKclF":{"name":"cast(_:)","abstract":"\u003cp\u003eReturns a new Expression from the given expression. Identical to a map()","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV8evaluatexSgyKF":{"name":"evaluate()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV14withoutCachingACyxGyF":{"name":"withoutCaching()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV11withCachingACyxGyF":{"name":"withCaching()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Expression"},"Structs/Expression.html#/s:6Nimble10ExpressionV07toAsyncB0AA0dB0VyxGyF":{"name":"toAsyncExpression()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Expression"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV10expressionAA0B10ExpressionVyxGvp":{"name":"expression","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV6statusAA0C6StatusOvp":{"name":"status","abstract":"\u003cp\u003eThe status of the test after matchers have been evaluated.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV10expressionACyxGAA0B10ExpressionVyxG_tcfc":{"name":"init(expression:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV6verifyyACyxGSb_AA14FailureMessageCtF":{"name":"verify(_:_:)","abstract":"\u003cp\u003eTakes the result of a test and passes it to the assertion handler.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV2to_11descriptionACyxGAA7MatcherVyxG_SSSgtYaF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV5toNot_11descriptionACyxGAA7MatcherVyxG_SSSgtYaF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV5notTo_11descriptionACyxGAA7MatcherVyxG_SSSgtYaF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV2to_11descriptionACyxGAA0B7MatcherVyxG_SSSgtYaF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV5toNot_11descriptionACyxGAA0B7MatcherVyxG_SSSgtYaF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV5notTo_11descriptionACyxGAA0B7MatcherVyxG_SSSgtYaF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV2eeoiyyACyxG_AA0C3NilVtYaFZ":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV2neoiyyACyxG_AA0C3NilVtYaFZ":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV12toEventually_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV15toEventuallyNot_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV15toNotEventually_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV7toNever_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV7neverTo_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV8toAlways_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV8alwaysTo_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV12toEventually_7timeout12pollInterval11descriptionACyxGAA0B7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV15toEventuallyNot_7timeout12pollInterval11descriptionACyxGAA0B7MatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV15toNotEventually_7timeout12pollInterval11descriptionACyxGAA0B7MatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV7toNever_5until12pollInterval11descriptionACyxGAA0B7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV7neverTo_5until12pollInterval11descriptionACyxGAA0B7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV8toAlways_5until12pollInterval11descriptionACyxGAA0B7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncExpectation"},"Structs/AsyncExpectation.html#/s:6Nimble16AsyncExpectationV8alwaysTo_5until12pollInterval11descriptionACyxGAA0B7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"AsyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV10expressionAA10ExpressionVyxGvp":{"name":"expression","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV6statusAA0C6StatusOvp":{"name":"status","abstract":"\u003cp\u003eThe status of the test after matchers have been evaluated.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV10expressionACyxGAA10ExpressionVyxG_tcfc":{"name":"init(expression:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV6verifyyACyxGSb_AA14FailureMessageCtF":{"name":"verify(_:_:)","abstract":"\u003cp\u003eTakes the result of a test and passes it to the assertion handler.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV2to_11descriptionACyxGAA7MatcherVyxG_SSSgtF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV5toNot_11descriptionACyxGAA7MatcherVyxG_SSSgtF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV5notTo_11descriptionACyxGAA7MatcherVyxG_SSSgtF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV2to_11descriptionACyxGAA12AsyncMatcherVyxG_SSSgtYaF":{"name":"to(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV5toNot_11descriptionACyxGAA12AsyncMatcherVyxG_SSSgtYaF":{"name":"toNot(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV5notTo_11descriptionACyxGAA12AsyncMatcherVyxG_SSSgtYaF":{"name":"notTo(_:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match.\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV2eeoiyyACyxG_AA0C3NilVtFZ":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV2neoiyyACyxG_AA0C3NilVtFZ":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV12toEventually_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV15toEventuallyNot_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV15toNotEventually_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV7toNever_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV7neverTo_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV8toAlways_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV8alwaysTo_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV12toEventually_7timeout12pollInterval11descriptionACyxGAA12AsyncMatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV15toEventuallyNot_7timeout12pollInterval11descriptionACyxGAA12AsyncMatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV15toNotEventually_7timeout12pollInterval11descriptionACyxGAA12AsyncMatcherVyxG_AA0a4TimeI0OAMSSSgtYaF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV7toNever_5until12pollInterval11descriptionACyxGAA12AsyncMatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV7neverTo_5until12pollInterval11descriptionACyxGAA12AsyncMatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV8toAlways_5until12pollInterval11descriptionACyxGAA12AsyncMatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV8alwaysTo_5until12pollInterval11descriptionACyxGAA12AsyncMatcherVyxG_AA0a4TimeH0OAMSSSgtYaF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV12toEventually_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtF":{"name":"toEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to match by checking continuously","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV15toEventuallyNot_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeI0OAMSSSgtF":{"name":"toEventuallyNot(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV15toNotEventually_7timeout12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeI0OAMSSSgtF":{"name":"toNotEventually(_:timeout:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to not match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV7toNever_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtF":{"name":"toNever(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV7neverTo_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtF":{"name":"neverTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to never match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV8toAlways_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtF":{"name":"toAlways(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncExpectation"},"Structs/SyncExpectation.html#/s:6Nimble15SyncExpectationV8alwaysTo_5until12pollInterval11descriptionACyxGAA7MatcherVyxG_AA0a4TimeH0OAMSSSgtF":{"name":"alwaysTo(_:until:pollInterval:description:)","abstract":"\u003cp\u003eTests the actual value using a matcher to always match by checking","parent_name":"SyncExpectation"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV9isClosureSbvp":{"name":"isClosure","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV10expression8location9isClosureACyxGxSgyYaKc_AA14SourceLocationCSbtcfc":{"name":"init(expression:location:isClosure:)","abstract":"\u003cp\u003eCreates a new expression struct. Normally, expect(\u0026hellip;) will manage this","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV08memoizedC08location14withoutCaching9isClosureACyxGxSgSbYaKc_AA14SourceLocationCS2btcfc":{"name":"init(memoizedExpression:location:withoutCaching:isClosure:)","abstract":"\u003cp\u003eCreates a new expression struct. Normally, expect(\u0026hellip;) will manage this","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV013toSynchronousC0AA0C0VyxGyYaF":{"name":"toSynchronousExpression()","abstract":"\u003cp\u003eCreates a new synchronous expression, for use in Matchers.\u003c/p\u003e","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV4castyACyqd__Gqd__SgxSgKclF":{"name":"cast(_:)","abstract":"\u003cp\u003eReturns a new Expression from the given expression. Identical to a map()","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV4castyACyqd__Gqd__SgxSgYaKclF":{"name":"cast(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV8evaluatexSgyYaKF":{"name":"evaluate()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV14withoutCachingACyxGyF":{"name":"withoutCaching()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpression"},"Structs/AsyncExpression.html#/s:6Nimble15AsyncExpressionV11withCachingACyxGyF":{"name":"withCaching()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncExpression"},"Structs/AssertionRecord.html#/s:6Nimble15AssertionRecordV7successSbvp":{"name":"success","abstract":"\u003cp\u003eWhether the assertion succeeded or failed\u003c/p\u003e","parent_name":"AssertionRecord"},"Structs/AssertionRecord.html#/s:6Nimble15AssertionRecordV7messageAA14FailureMessageCvp":{"name":"message","abstract":"\u003cp\u003eThe failure message the assertion would display on failure.\u003c/p\u003e","parent_name":"AssertionRecord"},"Structs/AssertionRecord.html#/s:6Nimble15AssertionRecordV8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eThe source location the expectation occurred on.\u003c/p\u003e","parent_name":"AssertionRecord"},"Structs/AssertionRecord.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"AssertionRecord"},"Structs/AssertionRecord.html":{"name":"AssertionRecord","abstract":"\u003cp\u003eA data structure that stores information about an assertion when"},"Structs/AsyncExpression.html":{"name":"AsyncExpression","abstract":"\u003cp\u003eExpression represents the closure of the value inside expect(\u0026hellip;)."},"Structs/SyncExpectation.html":{"name":"SyncExpectation","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Structs/AsyncExpectation.html":{"name":"AsyncExpectation","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Structs/Expression.html":{"name":"Expression","abstract":"\u003cp\u003eExpression represents the closure of the value inside expect(\u0026hellip;)."},"Structs/Matcher.html":{"name":"Matcher","abstract":"\u003cp\u003eA Matcher is part of the new matcher API that provides assertions to expectations.\u003c/p\u003e"},"Structs/AsyncMatcher.html":{"name":"AsyncMatcher","abstract":"\u003cp\u003eAn AsyncMatcher is part of the new matcher API that provides assertions to expectations.\u003c/p\u003e"},"Structs/ExpectationNil.html":{"name":"ExpectationNil","abstract":"\u003cp\u003eRepresents \u003ccode\u003enil\u003c/code\u003e value to be used with the operator overloads for \u003ccode\u003ebeNil\u003c/code\u003e.\u003c/p\u003e"},"Structs/MatcherResult.html":{"name":"MatcherResult","abstract":"\u003cp\u003eThe value that a Matcher returns to describe if the given (actual) value matches the"},"Structs/SyncRequirement.html":{"name":"SyncRequirement","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Structs/AsyncRequirement.html":{"name":"AsyncRequirement","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Structs/PollingDefaults.html":{"name":"PollingDefaults","abstract":"\u003cp\u003eIf you are running on a slower machine, it could be useful to increase the default timeout value"},"Structs/RequireError.html":{"name":"RequireError","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Protocols/TestOutputStringConvertible.html#/s:6Nimble27TestOutputStringConvertibleP15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"TestOutputStringConvertible"},"Protocols/NMBComparable.html#/c:@M@Nimble@objc(pl)NMBComparable(im)NMB_compare:":{"name":"NMB_compare(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBComparable"},"Protocols/NMBDoubleConvertible.html#/s:6Nimble20NMBDoubleConvertibleP11doubleValueSdvp":{"name":"doubleValue","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBDoubleConvertible"},"Protocols/NMBOrderedCollection.html#/s:6Nimble20NMBOrderedCollectionP6object2atypSi_tF":{"name":"object(at:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBOrderedCollection"},"Protocols/NMBCollection.html#/s:6Nimble13NMBCollectionP5countSivp":{"name":"count","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBCollection"},"Protocols/NMBContainer.html#/s:6Nimble12NMBContainerP8containsySbypF":{"name":"contains(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBContainer"},"Protocols/AsyncableMatcher.html#/s:6Nimble16AsyncableMatcherP5ValueQa":{"name":"Value","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncableMatcher"},"Protocols/AsyncableMatcher.html#/s:6Nimble16AsyncableMatcherP9satisfiesyAA0C6ResultVAA15AsyncExpressionVy5ValueQzGYaKF":{"name":"satisfies(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AsyncableMatcher"},"Protocols/Expectation.html#/s:6Nimble11ExpectationP8locationAA14SourceLocationCvp":{"name":"location","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Expectation"},"Protocols/Expectation.html#/s:6Nimble11ExpectationP6statusAA0B6StatusOvp":{"name":"status","abstract":"\u003cp\u003eThe status of the test after matchers have been evaluated.\u003c/p\u003e","parent_name":"Expectation"},"Protocols/Expectation.html#/s:6Nimble11ExpectationP6verifyyxSb_AA14FailureMessageCtF":{"name":"verify(_:_:)","abstract":"\u003cp\u003eTakes the result of a test and passes it to the assertion handler.\u003c/p\u003e","parent_name":"Expectation"},"Protocols/Expectation.html#/s:6Nimble11ExpectationPAAE9onFailure5throwys5Error_p_tKF":{"name":"onFailure(throw:)","abstract":"\u003cp\u003eThrows the supplied error if the expectation has previously failed.\u003c/p\u003e","parent_name":"Expectation"},"Protocols/AssertionHandler.html#/s:6Nimble16AssertionHandlerP6assert_7message8locationySb_AA14FailureMessageCAA14SourceLocationCtF":{"name":"assert(_:message:location:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AssertionHandler"},"Protocols/AssertionHandler.html":{"name":"AssertionHandler","abstract":"\u003cp\u003eProtocol for the assertion handler that Nimble uses for all expectations.\u003c/p\u003e"},"Protocols/Expectation.html":{"name":"Expectation","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Protocols/AsyncableMatcher.html":{"name":"AsyncableMatcher","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Protocols/NMBContainer.html":{"name":"NMBContainer","abstract":"\u003cp\u003eProtocol for types that support contain() matcher.\u003c/p\u003e"},"Protocols/NMBCollection.html":{"name":"NMBCollection","abstract":"\u003cp\u003eProtocol for types that support only beEmpty(), haveCount() matchers\u003c/p\u003e"},"Protocols/NMBOrderedCollection.html":{"name":"NMBOrderedCollection","abstract":"\u003cp\u003eProtocol for types that support beginWith(), endWith(), beEmpty() matchers\u003c/p\u003e"},"Protocols/NMBDoubleConvertible.html":{"name":"NMBDoubleConvertible","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Protocols/NMBComparable.html":{"name":"NMBComparable","abstract":"\u003cp\u003eProtocol for types to support beLessThan(), beLessThanOrEqualTo(),"},"Protocols/TestOutputStringConvertible.html":{"name":"TestOutputStringConvertible","abstract":"\u003cp\u003eA type with a customized test output text representation.\u003c/p\u003e"},"Functions.html#/s:6Nimble20withAssertionHandler_4file4line7closureyAA0cD0_p_SSSuyyYaKXEtYaF":{"name":"withAssertionHandler(_:file:line:closure:)","abstract":"\u003cp\u003eAllows you to temporarily replace the current Nimble assertion handler with"},"Functions.html#/s:6Nimble18gatherExpectations8silently7closureSayAA15AssertionRecordVGSb_yyYaXEtYaF":{"name":"gatherExpectations(silently:closure:)","abstract":"\u003cp\u003eCaptures expectations that occur in the given closure. Note that all"},"Functions.html#/s:6Nimble25gatherFailingExpectations8silently7closureSayAA15AssertionRecordVGSb_yyYaXEtYaF":{"name":"gatherFailingExpectations(silently:closure:)","abstract":"\u003cp\u003eCaptures failed expectations that occur in the given closure. Note that all"},"Functions.html#/s:6Nimble20withAssertionHandler_4file4line7closureyAA0cD0_p_SSSuyyKXEtF":{"name":"withAssertionHandler(_:file:line:closure:)","abstract":"\u003cp\u003eAllows you to temporarily replace the current Nimble assertion handler with"},"Functions.html#/s:6Nimble18gatherExpectations8silently7closureSayAA15AssertionRecordVGSb_yyXEtF":{"name":"gatherExpectations(silently:closure:)","abstract":"\u003cp\u003eCaptures expectations that occur in the given closure. Note that all"},"Functions.html#/s:6Nimble25gatherFailingExpectations8silently7closureSayAA15AssertionRecordVGSb_yyXEtF":{"name":"gatherFailingExpectations(silently:closure:)","abstract":"\u003cp\u003eCaptures failed expectations that occur in the given closure. Note that all"},"Functions.html#/s:6Nimble13recordFailure_8locationySS_AA14SourceLocationCtF":{"name":"recordFailure(_:location:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA16AsyncExpectationVyxGSS_SuxSgyYaKctlF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated.\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA16AsyncExpectationVyxGSS_SuxyYaKcyXEtlF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA16AsyncExpectationVyxGSS_SuxSgyYaKcyXEtlF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA16AsyncExpectationVyytGSS_SuyyYaKcyXEtF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble7expecta4file4line_AA16AsyncExpectationVyxGSS_SuxSgyYaKXAtYalF":{"name":"expecta(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated."},"Functions.html#/s:6Nimble7expecta4file4line_AA16AsyncExpectationVyxGSS_SuxyYaKcyXKtYalF":{"name":"expecta(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked."},"Functions.html#/s:6Nimble7expecta4file4line_AA16AsyncExpectationVyxGSS_SuxSgyYaKcyXKtYalF":{"name":"expecta(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked."},"Functions.html#/s:6Nimble7expecta4file4line_AA16AsyncExpectationVyytGSS_SuyyYaKcyXKtYaF":{"name":"expecta(file:line:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncExpectation.html\"\u003eAsyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked."},"Functions.html#/s:6Nimble9waitUntil7timeout4file4line6actionyAA0A12TimeIntervalO_SSSuyyycYactYaF":{"name":"waitUntil(timeout:file:line:action:)","abstract":"\u003cp\u003eWait asynchronously until the done closure is called or the timeout has been reached.\u003c/p\u003e"},"Functions.html#/s:6Nimble9waitUntil7timeout4file4line6actionyAA0A12TimeIntervalO_SSSuyyycctYaF":{"name":"waitUntil(timeout:file:line:action:)","abstract":"\u003cp\u003eWait asynchronously until the done closure is called or the timeout has been reached.\u003c/p\u003e"},"Functions.html#/s:6Nimble7require4file4line11customError_AA15SyncRequirementVyxGSS_Sus0F0_pSgxSgyKXAtlF":{"name":"require(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated.\u003c/p\u003e"},"Functions.html#/s:6Nimble7require4file4line11customError_AA15SyncRequirementVyxGSS_Sus0F0_pSgxyKcyXKtlF":{"name":"require(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble7require4file4line11customError_AA15SyncRequirementVyxGSS_Sus0F0_pSgxSgyKcyXKtlF":{"name":"require(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble7require4file4line11customError_AA15SyncRequirementVyytGSS_Sus0F0_pSgyyKcyXKtF":{"name":"require(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble8requires4file4line11customError_AA15SyncRequirementVyxGSS_Sus0F0_pSgxSgyKXAtlF":{"name":"requires(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated.\u003c/p\u003e"},"Functions.html#/s:6Nimble8requires4file4line11customError_AA15SyncRequirementVyxGSS_Sus0F0_pSgxyKcyXKtlF":{"name":"requires(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble8requires4file4line11customError_AA15SyncRequirementVyxGSS_Sus0F0_pSgxSgyKcyXKtlF":{"name":"requires(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble8requires4file4line11customError_AA15SyncRequirementVyytGSS_Sus0F0_pSgyyKcyXKtF":{"name":"requires(file:line:customError:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncRequirement.html\"\u003eSyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble7require4file4line11customError_AA16AsyncRequirementVyxGSS_Sus0F0_pSgxSgyYaKctlF":{"name":"require(file:line:customError:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncRequirement.html\"\u003eAsyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated.\u003c/p\u003e"},"Functions.html#/s:6Nimble7require4file4line11customError_AA16AsyncRequirementVyxGSS_Sus0F0_pSgxyYaKcyXEtlF":{"name":"require(file:line:customError:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncRequirement.html\"\u003eAsyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble7require4file4line11customError_AA16AsyncRequirementVyxGSS_Sus0F0_pSgxSgyYaKcyXEtlF":{"name":"require(file:line:customError:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncRequirement.html\"\u003eAsyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble8requirea4file4line11customError_AA16AsyncRequirementVyxGSS_Sus0F0_pSgxSgyYaKXAtYalF":{"name":"requirea(file:line:customError:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncRequirement.html\"\u003eAsyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated.\u003c/p\u003e"},"Functions.html#/s:6Nimble8requirea4file4line11customError_AA16AsyncRequirementVyxGSS_Sus0F0_pSgxyYaKcyXKtYalF":{"name":"requirea(file:line:customError:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncRequirement.html\"\u003eAsyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble8requirea4file4line11customError_AA16AsyncRequirementVyxGSS_Sus0F0_pSgxSgyYaKcyXKtYalF":{"name":"requirea(file:line:customError:_:)","abstract":"\u003cp\u003eMake an \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/AsyncRequirement.html\"\u003eAsyncRequirement\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble6unwrap4file4line11customError_xSS_Sus0F0_pSgxSgyKXAtKlF":{"name":"unwrap(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble6unwrap4file4line11customError_xSS_Sus0F0_pSgxSgyKcyXKtKlF":{"name":"unwrap(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble7unwraps4file4line11customError_xSS_Sus0F0_pSgxSgyKXAtKlF":{"name":"unwraps(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble7unwraps4file4line11customError_xSS_Sus0F0_pSgxSgyKcyXKtKlF":{"name":"unwraps(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble6unwrap4file4line11customError_xSS_Sus0F0_pSgxSgyYaKctYaKlF":{"name":"unwrap(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble6unwrap4file4line11customError_xSS_Sus0F0_pSgxSgyYaKcyXEtYaKlF":{"name":"unwrap(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble7unwrapa4file4line11customError_xSS_Sus0F0_pSgxSgyYaKXAtYaKlF":{"name":"unwrapa(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble7unwrapa4file4line11customError_xSS_Sus0F0_pSgxSgyYaKcyXKtYaKlF":{"name":"unwrapa(file:line:customError:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble9waitUntil7timeout4file4line6actionyAA0A12TimeIntervalO_SSSuyyycctF":{"name":"waitUntil(timeout:file:line:action:)","abstract":"\u003cp\u003eWait asynchronously until the done closure is called or the timeout has been reached.\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA15SyncExpectationVyxGSS_SuxSgyKXAtlF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated.\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA15SyncExpectationVyxGSS_SuxyKcyXKtlF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA15SyncExpectationVyxGSS_SuxSgyKcyXKtlF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble6expect4file4line_AA15SyncExpectationVyytGSS_SuyyKcyXKtF":{"name":"expect(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked.\u003c/p\u003e"},"Functions.html#/s:6Nimble7expects4file4line_AA15SyncExpectationVyxGSS_SuxSgyKXAtlF":{"name":"expects(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The value given is lazily evaluated."},"Functions.html#/s:6Nimble7expects4file4line_AA15SyncExpectationVyxGSS_SuxyKcyXKtlF":{"name":"expects(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked."},"Functions.html#/s:6Nimble7expects4file4line_AA15SyncExpectationVyxGSS_SuxSgyKcyXKtlF":{"name":"expects(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked."},"Functions.html#/s:6Nimble7expects4file4line_AA15SyncExpectationVyytGSS_SuyyKcyXKtF":{"name":"expects(file:line:_:)","abstract":"\u003cp\u003eMake a \u003ccode\u003e\u003ca href=\"36f8f5912051ae747ef441d6511ca4cbStructs/SyncExpectation.html\"\u003eSyncExpectation\u003c/a\u003e\u003c/code\u003e on a given actual value. The closure is lazily invoked."},"Functions.html#/s:6Nimble4fail_8locationySS_AA14SourceLocationCtF":{"name":"fail(_:location:)","abstract":"\u003cp\u003eAlways fails the test with a message and a specified location.\u003c/p\u003e"},"Functions.html#/s:6Nimble4fail_4file4lineySS_SSSutF":{"name":"fail(_:file:line:)","abstract":"\u003cp\u003eAlways fails the test with a message.\u003c/p\u003e"},"Functions.html#/s:6Nimble4fail_4lineySS_SutF":{"name":"fail(_:line:)","abstract":"\u003cp\u003eAlways fails the test.\u003c/p\u003e"},"Functions.html#/s:6Nimble7allPassyAA7MatcherVyxGSb7ElementQzKcSTRzlF":{"name":"allPass(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7allPassyAA7MatcherVyxGSS_Sb7ElementQzKctSTRzlF":{"name":"allPass(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7allPassyAA7MatcherVyxGADy7ElementQzGSTRzlF":{"name":"allPass(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7allPassyAA12AsyncMatcherVyxGSb7ElementQzYaKcSTRzlF":{"name":"allPass(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7allPassyAA12AsyncMatcherVyxGSS_Sb7ElementQzYaKctSTRzlF":{"name":"allPass(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7allPassyAA12AsyncMatcherVyxGADy7ElementQzGSTRzlF":{"name":"allPass(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble9beAKindOfyAA7MatcherVyypGxmlF":{"name":"beAKindOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is an instance of the given class.\u003c/p\u003e"},"Functions.html#/s:6Nimble9beAKindOfyAA7MatcherVySo8NSObjectCGyXlXpF":{"name":"beAKindOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is an instance of the given class."},"Functions.html#/s:6Nimble14beAnInstanceOfyAA7MatcherVyypGxmlF":{"name":"beAnInstanceOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is an \u003cem\u003eexact\u003c/em\u003e instance of the given class.\u003c/p\u003e"},"Functions.html#/s:6Nimble14beAnInstanceOfyAA7MatcherVySo8NSObjectCGyXlXpF":{"name":"beAnInstanceOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is an instance of the given class."},"Functions.html#/s:6Nimble12defaultDeltaxySFRzlF":{"name":"defaultDelta()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble9beCloseTo_6withinAA7MatcherVyxGx_xtSFRzlF":{"name":"beCloseTo(_:within:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is close to another. This is used for floating"},"Functions.html#/s:6Nimble9beCloseTo_6withinAA7MatcherVyxGx_SdtAA20NMBDoubleConvertibleRzlF":{"name":"beCloseTo(_:within:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is close to another. This is used for floating"},"Functions.html#/s:6Nimble9beCloseTo_6withinAA7MatcherVyq_Gq__xtSFRz7ElementQy_RszSlR_r0_lF":{"name":"beCloseTo(_:within:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA15SyncExpectationVyxG_xtSlRzSF7ElementRpzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA16AsyncExpectationVyxG_xtYaSlRzSF7ElementRpzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA15SyncExpectationVyxG_xtSFRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA16AsyncExpectationVyxG_xtYaSFRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA15SyncExpectationVyxG_x8expected_x5deltattSFRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA16AsyncExpectationVyxG_x8expected_x5deltattYaSFRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyxG_x8expected_x5deltattSFRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyxG_x8expected_x5deltattYaSFRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA15SyncExpectationVyxG_xtAA20NMBDoubleConvertibleRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA16AsyncExpectationVyxG_xtYaAA20NMBDoubleConvertibleRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA15SyncExpectationVyxG_x8expected_Sd5deltattAA20NMBDoubleConvertibleRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003dchoiyyAA16AsyncExpectationVyxG_x8expected_Sd5deltattYaAA20NMBDoubleConvertibleRzlF":{"name":"≈(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyxG_x8expected_Sd5deltattAA20NMBDoubleConvertibleRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyxG_x8expected_Sd5deltattYaAA20NMBDoubleConvertibleRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003obaoiyx8expected_x5deltatx_xtSFRzlF":{"name":"±(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble003obaoiyx8expected_Sd5deltatx_SdtAA20NMBDoubleConvertibleRzlF":{"name":"±(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVyxGySTRzlF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVyxGys10SetAlgebraRzlF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVyxGySTRzs10SetAlgebraRzlF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVySSGyF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVySo8NSStringCGyF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVySo12NSDictionaryCGyF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVySo7NSArrayCGyF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble7beEmptyAA7MatcherVyAA13NMBCollection_pGyF":{"name":"beEmpty()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when a value is \u0026ldquo;empty\u0026rdquo;. For collections, this"},"Functions.html#/s:6Nimble13beGreaterThanyAA7MatcherVyxGxSgSLRzlF":{"name":"beGreaterThan(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is greater than the expected value.\u003c/p\u003e"},"Functions.html#/s:6Nimble1goiyyAA15SyncExpectationVyxG_xtSLRzlF":{"name":"\u003e(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble1goiyyAA16AsyncExpectationVyxG_xtYaSLRzlF":{"name":"\u003e(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble13beGreaterThanyAA7MatcherVyxGxSgAA13NMBComparableRzlF":{"name":"beGreaterThan(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is greater than the expected value.\u003c/p\u003e"},"Functions.html#/s:6Nimble1goiyyAA15SyncExpectationVyxG_xSgtAA13NMBComparableRzlF":{"name":"\u003e(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble1goiyyAA16AsyncExpectationVyxG_xSgtYaAA13NMBComparableRzlF":{"name":"\u003e(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble22beGreaterThanOrEqualToyAA7MatcherVyxGxSgSLRzlF":{"name":"beGreaterThanOrEqualTo(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is greater than"},"Functions.html#/s:6Nimble2geoiyyAA15SyncExpectationVyxG_xtSLRzlF":{"name":"\u003e=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2geoiyyAA16AsyncExpectationVyxG_xtYaSLRzlF":{"name":"\u003e=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble22beGreaterThanOrEqualToyAA7MatcherVyxGxSgAA13NMBComparableRzlF":{"name":"beGreaterThanOrEqualTo(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is greater than"},"Functions.html#/s:6Nimble2geoiyyAA15SyncExpectationVyxG_xtAA13NMBComparableRzlF":{"name":"\u003e=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2geoiyyAA16AsyncExpectationVyxG_xtYaAA13NMBComparableRzlF":{"name":"\u003e=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble13beIdenticalToyAA7MatcherVyyXlGyXlSgF":{"name":"beIdenticalTo(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is the same instance"},"Functions.html#/s:6Nimble3eeeoiyyAA15SyncExpectationVyyXlG_yXlSgtF":{"name":"===(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble3eeeoiyyAA16AsyncExpectationVyyXlG_yXlSgtYaF":{"name":"===(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble3neeoiyyAA15SyncExpectationVyyXlG_yXlSgtF":{"name":"!==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble3neeoiyyAA16AsyncExpectationVyyXlG_yXlSgtYaF":{"name":"!==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2beyAA7MatcherVyyXlGyXlSgF":{"name":"be(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is the same instance"},"Functions.html#/s:6Nimble10beLessThanyAA7MatcherVyxGxSgSLRzlF":{"name":"beLessThan(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is less than the expected value.\u003c/p\u003e"},"Functions.html#/s:6Nimble1loiyyAA15SyncExpectationVyxG_xtSLRzlF":{"name":"\u003c(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble1loiyyAA16AsyncExpectationVyxG_xtYaSLRzlF":{"name":"\u003c(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble10beLessThanyAA7MatcherVyxGxSgAA13NMBComparableRzlF":{"name":"beLessThan(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is less than the expected value.\u003c/p\u003e"},"Functions.html#/s:6Nimble1loiyyAA15SyncExpectationVyxG_xSgtAA13NMBComparableRzlF":{"name":"\u003c(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble1loiyyAA16AsyncExpectationVyxG_xSgtYaAA13NMBComparableRzlF":{"name":"\u003c(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble19beLessThanOrEqualToyAA7MatcherVyxGxSgSLRzlF":{"name":"beLessThanOrEqualTo(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is less than"},"Functions.html#/s:6Nimble2leoiyyAA15SyncExpectationVyxG_xtSLRzlF":{"name":"\u003c=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2leoiyyAA16AsyncExpectationVyxG_xtYaSLRzlF":{"name":"\u003c=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble19beLessThanOrEqualToyAA7MatcherVyxGxSgAA13NMBComparableRzlF":{"name":"beLessThanOrEqualTo(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is less than"},"Functions.html#/s:6Nimble2leoiyyAA15SyncExpectationVyxG_xtAA13NMBComparableRzlF":{"name":"\u003c=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2leoiyyAA16AsyncExpectationVyxG_xtYaAA13NMBComparableRzlF":{"name":"\u003c=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble6beTrueAA7MatcherVySbGyF":{"name":"beTrue()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is exactly true."},"Functions.html#/s:6Nimble7beFalseAA7MatcherVySbGyF":{"name":"beFalse()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is exactly false."},"Functions.html#/s:6Nimble8beTruthyAA7MatcherVyxGySQRzs27ExpressibleByBooleanLiteralRzlF":{"name":"beTruthy()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is not logically false.\u003c/p\u003e"},"Functions.html#/s:6Nimble7beFalsyAA7MatcherVyxGySQRzs27ExpressibleByBooleanLiteralRzlF":{"name":"beFalsy()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is logically false."},"Functions.html#/s:6Nimble5beNilAA7MatcherVyxGylF":{"name":"beNil()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is nil.\u003c/p\u003e"},"Functions.html#/s:6Nimble9beSuccess4testAA7MatcherVys6ResultOyxq_GGyxcSg_ts5ErrorR_r0_lF":{"name":"beSuccess(test:)","abstract":"\u003cp\u003eA Nimble matcher for Result that succeeds when the actual value is success.\u003c/p\u003e"},"Functions.html#/s:6Nimble9beFailure4testAA7MatcherVys6ResultOyxq_GGyq_cSg_ts5ErrorR_r0_lF":{"name":"beFailure(test:)","abstract":"\u003cp\u003eA Nimble matcher for Result that succeeds when the actual value is failure.\u003c/p\u003e"},"Functions.html#/s:6Nimble6beVoidAA7MatcherVyytGyF":{"name":"beVoid()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is Void.\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyytG_yttF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyytG_yttYaF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyytG_yttF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyytG_yttYaF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble8beWithinyAA7MatcherVyxGSnyxGSLRzlF":{"name":"beWithin(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is within given range.\u003c/p\u003e"},"Functions.html#/s:6Nimble8beWithinyAA7MatcherVyxGSNyxGSLRzlF":{"name":"beWithin(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is within given range.\u003c/p\u003e"},"Functions.html#/s:6Nimble9beginWithyAA7MatcherVyxG7ElementQzSTRzSQAGRQlF":{"name":"beginWith(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual sequence\u0026rsquo;s first element"},"Functions.html#/s:6Nimble9beginWithyAA7MatcherVyAA20NMBOrderedCollection_pGypF":{"name":"beginWith(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual collection\u0026rsquo;s first element"},"Functions.html#/s:6Nimble9beginWithyAA7MatcherVySSGSSF":{"name":"beginWith(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual string contains expected substring"},"Functions.html#/s:6Nimble9beginWith6prefixAA7MatcherVyxGq_Sg_tSTRzSTR_SQ7ElementRpzAHQy_AIRSr0_lF":{"name":"beginWith(prefix:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the exepected sequence is a prefix of the actual sequence.\u003c/p\u003e"},"Functions.html#/s:6Nimble9beginWith6prefix2byAA7MatcherVyxGq_Sg_Sb7ElementQz_AIQy_tctSTRzSTR_r0_lF":{"name":"beginWith(prefix:by:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the expected sequence is the prefix of the actual sequence, using the given matcher as the equivalence test.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyxG7ElementQzd_tSTRzSQAGRQlF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual sequence contains the expected values.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyxGSay7ElementQzGSTRzSQAGRQlF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual sequence contains the expected values.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyxG7ElementQzd_ts10SetAlgebraRzSQAGRQlF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set contains the expected values.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyxGSay7ElementQzGs10SetAlgebraRzSQAGRQlF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set contains the expected values.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyxG7ElementSTQzd_tSTRzs10SetAlgebraRzSQAGRQlF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set contains the expected values.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyxGSay7ElementSTQzGSTRzs10SetAlgebraRzSQAGRQlF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set contains the expected values.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVySSGSSd_tF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual string contains the expected substring.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVySSGSaySSGF":{"name":"contain(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVySo8NSStringCGAFd_tF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual string contains the expected substring.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVySo8NSStringCGSayAFGF":{"name":"contain(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyAA12NMBContainer_pGypSgd_tF":{"name":"contain(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual collection contains the expected object.\u003c/p\u003e"},"Functions.html#/s:6Nimble7containyAA7MatcherVyAA12NMBContainer_pGSayypSgGF":{"name":"contain(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble24containElementSatisfyingyAA7MatcherVyxGSb0C0Qzc_SStSTRzlF":{"name":"containElementSatisfying(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble24containElementSatisfyingyAA12AsyncMatcherVyxGSb0C0QzYac_SStSTRzlF":{"name":"containElementSatisfying(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble13elementsEqualyAA7MatcherVyxGq_SgSTRzSTR_SQ7ElementRpzAGQy_AHRSr0_lF":{"name":"elementsEqual(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual sequence and the exepected sequence contain the same elements in"},"Functions.html#/s:6Nimble13elementsEqual_2byAA7MatcherVyxGq_Sg_Sb7ElementQz_AHQy_tctSTRzSTR_r0_lF":{"name":"elementsEqual(_:by:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual sequence and the exepected sequence contain equivalent elements in"},"Functions.html#/s:6Nimble7endWithyAA7MatcherVyxG7ElementQzSTRzSQAGRQlF":{"name":"endWith(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual sequence\u0026rsquo;s last element"},"Functions.html#/s:6Nimble7endWithyAA7MatcherVyAA20NMBOrderedCollection_pGypF":{"name":"endWith(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual collection\u0026rsquo;s last element"},"Functions.html#/s:6Nimble7endWithyAA7MatcherVySSGSSF":{"name":"endWith(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual string contains the expected substring"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyx_q_tGx_q_tSgSQRzSQR_r0_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual tuple is equal to the expected tuple."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyx_q_tG_x_q_tSgtSQRzSQR_r0_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyx_q_tG_x_q_tSgtYaSQRzSQR_r0_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyx_q_tG_x_q_tSgtSQRzSQR_r0_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyx_q_tG_x_q_tSgtYaSQRzSQR_r0_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyx_q_q0_tGx_q_q0_tSgSQRzSQR_SQR0_r1_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual tuple is equal to the expected tuple."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyx_q_q0_tG_x_q_q0_tSgtSQRzSQR_SQR0_r1_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyx_q_q0_tG_x_q_q0_tSgtYaSQRzSQR_SQR0_r1_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyx_q_q0_tG_x_q_q0_tSgtSQRzSQR_SQR0_r1_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyx_q_q0_tG_x_q_q0_tSgtYaSQRzSQR_SQR0_r1_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyx_q_q0_q1_tGx_q_q0_q1_tSgSQRzSQR_SQR0_SQR1_r2_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual tuple is equal to the expected tuple."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyx_q_q0_q1_tG_x_q_q0_q1_tSgtSQRzSQR_SQR0_SQR1_r2_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyx_q_q0_q1_tG_x_q_q0_q1_tSgtYaSQRzSQR_SQR0_SQR1_r2_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyx_q_q0_q1_tG_x_q_q0_q1_tSgtSQRzSQR_SQR0_SQR1_r2_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyx_q_q0_q1_tG_x_q_q0_q1_tSgtYaSQRzSQR_SQR0_SQR1_r2_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyx_q_q0_q1_q2_tGx_q_q0_q1_q2_tSgSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual tuple is equal to the expected tuple."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyx_q_q0_q1_q2_tG_x_q_q0_q1_q2_tSgtSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyx_q_q0_q1_q2_tG_x_q_q0_q1_q2_tSgtYaSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyx_q_q0_q1_q2_tG_x_q_q0_q1_q2_tSgtSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyx_q_q0_q1_q2_tG_x_q_q0_q1_q2_tSgtYaSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyx_q_q0_q1_q2_q3_tGx_q_q0_q1_q2_q3_tSgSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual tuple is equal to the expected tuple."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyx_q_q0_q1_q2_q3_tG_x_q_q0_q1_q2_q3_tSgtSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyx_q_q0_q1_q2_q3_tG_x_q_q0_q1_q2_q3_tSgtYaSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyx_q_q0_q1_q2_q3_tG_x_q_q0_q1_q2_q3_tSgtSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyx_q_q0_q1_q2_q3_tG_x_q_q0_q1_q2_q3_tSgtYaSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVySayx_q_tGGAESgSQRzSQR_r0_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVySayx_q_tGG_AESgtSQRzSQR_r0_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVySayx_q_tGG_AESgtYaSQRzSQR_r0_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVySayx_q_tGG_AESgtSQRzSQR_r0_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVySayx_q_tGG_AESgtYaSQRzSQR_r0_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVySayx_q_q0_tGGAESgSQRzSQR_SQR0_r1_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVySayx_q_q0_tGG_AESgtSQRzSQR_SQR0_r1_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVySayx_q_q0_tGG_AESgtYaSQRzSQR_SQR0_r1_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVySayx_q_q0_tGG_AESgtSQRzSQR_SQR0_r1_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVySayx_q_q0_tGG_AESgtYaSQRzSQR_SQR0_r1_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVySayx_q_q0_q1_tGGAESgSQRzSQR_SQR0_SQR1_r2_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVySayx_q_q0_q1_tGG_AESgtSQRzSQR_SQR0_SQR1_r2_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVySayx_q_q0_q1_tGG_AESgtYaSQRzSQR_SQR0_SQR1_r2_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVySayx_q_q0_q1_tGG_AESgtSQRzSQR_SQR0_SQR1_r2_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVySayx_q_q0_q1_tGG_AESgtYaSQRzSQR_SQR0_SQR1_r2_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVySayx_q_q0_q1_q2_tGGAESgSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVySayx_q_q0_q1_q2_tGG_AESgtSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVySayx_q_q0_q1_q2_tGG_AESgtYaSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVySayx_q_q0_q1_q2_tGG_AESgtSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVySayx_q_q0_q1_q2_tGG_AESgtYaSQRzSQR_SQR0_SQR1_SQR2_r3_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVySayx_q_q0_q1_q2_q3_tGGAESgSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual array of tuples is equal to the expected array of tuples."},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVySayx_q_q0_q1_q2_q3_tGG_AESgtSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVySayx_q_q0_q1_q2_q3_tGG_AESgtYaSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVySayx_q_q0_q1_q2_q3_tGG_AESgtSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVySayx_q_q0_q1_q2_q3_tGG_AESgtYaSQRzSQR_SQR0_SQR1_SQR2_SQR3_r4_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyxGxSQRzlF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is equal to the expected value."},"Functions.html#/s:6Nimble5equalyAA7MatcherVySayxSgGGAFSQRzlF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher allowing comparison of collection with optional type\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyxGxSgSQRzlF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value is equal to the expected value."},"Functions.html#/s:6Nimble5equalyAA7MatcherVyShyxGGAESHRzlF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set is equal to the expected set.\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyShyxGGAESgSHRzlF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set is equal to the expected set.\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyShyxGGAESLRzSHRzlF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set is equal to the expected set.\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVyShyxGGAESgSLRzSHRzlF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual set is equal to the expected set.\u003c/p\u003e"},"Functions.html#/s:6Nimble5equalyAA7MatcherVySDyxq_GGSDyxq_SgGSHRzSQR_r0_lF":{"name":"equal(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual dictionary is equal to the expected dictionary\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyxG_xtSQRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyxG_xSgtSQRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyxG_xtSQRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyxG_xSgtSQRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVySayxGG_AESgtSQRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVySayxGG_AESgtSQRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyShyxGG_AEtSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyShyxGG_AESgtSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyShyxGG_AEtSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyShyxGG_AESgtSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyShyxGG_AEtSLRzSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVyShyxGG_AESgtSLRzSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyShyxGG_AEtSLRzSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVyShyxGG_AESgtSLRzSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA15SyncExpectationVySDyxq_GG_AESgtSHRzSQR_r0_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA15SyncExpectationVySDyxq_GG_AESgtSHRzSQR_r0_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyxG_xtYaSQRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyxG_xSgtYaSQRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyxG_xtYaSQRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyxG_xSgtYaSQRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVySayxGG_AESgtYaSQRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVySayxGG_AESgtYaSQRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyShyxGG_AEtYaSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyShyxGG_AESgtYaSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyShyxGG_AEtYaSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyShyxGG_AESgtYaSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyShyxGG_AEtYaSLRzSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVyShyxGG_AESgtYaSLRzSHRzlF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyShyxGG_AEtYaSLRzSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVyShyxGG_AESgtYaSLRzSHRzlF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2eeoiyyAA16AsyncExpectationVySDyxq_GG_AESgtYaSHRzSQR_r0_lF":{"name":"==(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble2neoiyyAA16AsyncExpectationVySDyxq_GG_AESgtYaSHRzSQR_r0_lF":{"name":"!=(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble9haveCountyAA7MatcherVyxGSiSlRzlF":{"name":"haveCount(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual Collection\u0026rsquo;s count equals"},"Functions.html#/s:6Nimble9haveCountyAA7MatcherVyAA13NMBCollection_pGSiF":{"name":"haveCount(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual collection\u0026rsquo;s count equals"},"Functions.html#/s:6Nimble3mapyAA7MatcherVyxGq_xKc_ADyq_Gtr0_lF":{"name":"map(_:_:)","abstract":"\u003cp\u003e\u003ccode\u003emap\u003c/code\u003e works by transforming the expression to a value that the given matcher uses.\u003c/p\u003e"},"Functions.html#/s:6Nimble3mapyAA12AsyncMatcherVyxGq_xYaKc_q0_t5ValueQy0_Rs_AA09AsyncableD0R0_r1_lF":{"name":"map(_:_:)","abstract":"\u003cp\u003e\u003ccode\u003emap\u003c/code\u003e works by transforming the expression to a value that the given matcher uses.\u003c/p\u003e"},"Functions.html#/s:6Nimble5matchyAA7MatcherVySSGSSSgF":{"name":"match(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual string satisfies the regular expression"},"Functions.html#/s:6Nimble10matchErroryAA7MatcherVys0C0_pGxsAERzlF":{"name":"matchError(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression evaluates to an"},"Functions.html#/s:6Nimble10matchErroryAA7MatcherVys0C0_pGxSQRzsAERzlF":{"name":"matchError(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression evaluates to an"},"Functions.html#/s:6Nimble10matchErroryAA7MatcherVys0C0_pGxmsAERzlF":{"name":"matchError(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression evaluates to an"},"Functions.html#/s:6Nimble17postNotifications_4fromAA7MatcherVyxGAEySay10Foundation12NotificationVGG_So20NSNotificationCenterCtlF":{"name":"postNotifications(_:from:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble28postDistributedNotifications_4from5namesAA7MatcherVyxGAFySay10Foundation12NotificationVGG_So013NSDistributedI6CenterCShySo18NSNotificationNameaGtlF":{"name":"postDistributedNotifications(_:from:names:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble14raiseException5named6reason8userInfo7closureAA7MatcherVyxGSo15NSExceptionNameaSg_SSSgSo12NSDictionaryCSgySo0J0CcSgtlF":{"name":"raiseException(named:reason:userInfo:closure:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression raises an"},"Functions.html#/s:6Nimble14raiseException5named6reason8userInfo7closureAA7MatcherVyxGSSSg_AJSo12NSDictionaryCSgySo11NSExceptionCcSgtlF":{"name":"raiseException(named:reason:userInfo:closure:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression raises an"},"Functions.html#/s:6Nimble12satisfyAllOfyAA7MatcherVyxGAEd_tlF":{"name":"satisfyAllOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with all of the matchers"},"Functions.html#/s:6Nimble12satisfyAllOfyAA7MatcherVyxGSayAEGlF":{"name":"satisfyAllOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with all of the matchers"},"Functions.html#/s:6Nimble2aaoiyAA7MatcherVyxGAE_AEtlF":{"name":"\u0026\u0026(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble12satisfyAllOfyAA12AsyncMatcherVyxGAA09AsyncableF0_px5ValueRts_XPd_tlF":{"name":"satisfyAllOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with all of the matchers"},"Functions.html#/s:6Nimble12satisfyAllOfyAA12AsyncMatcherVyxGSayAA09AsyncableF0_px5ValueRts_XPGlF":{"name":"satisfyAllOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with all of the matchers"},"Functions.html#/s:6Nimble2aaoiyAA12AsyncMatcherVyxGq__q0_t5ValueQy_RszAA09AsyncableD0R_AaHR0_AFQy0_AGRSr1_lF":{"name":"\u0026\u0026(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble12satisfyAnyOfyAA7MatcherVyxGAEd_tlF":{"name":"satisfyAnyOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with any of the matchers"},"Functions.html#/s:6Nimble12satisfyAnyOfyAA7MatcherVyxGSayAEGlF":{"name":"satisfyAnyOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with any of the matchers"},"Functions.html#/s:6Nimble2oooiyAA7MatcherVyxGAE_AEtlF":{"name":"||(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble12satisfyAnyOfyAA12AsyncMatcherVyxGAA09AsyncableF0_px5ValueRts_XPd_tlF":{"name":"satisfyAnyOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with any of the matchers"},"Functions.html#/s:6Nimble12satisfyAnyOfyAA12AsyncMatcherVyxGSayAA09AsyncableF0_px5ValueRts_XPGlF":{"name":"satisfyAnyOf(_:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual value matches with any of the matchers"},"Functions.html#/s:6Nimble2oooiyAA12AsyncMatcherVyxGq__q0_t5ValueQy_RszAA09AsyncableD0R_AaHR0_AFQy0_AGRSr1_lF":{"name":"||(_:_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/catchBadInstruction(block:)":{"name":"catchBadInstruction(block:)","abstract":"\u003cp\u003eRun the provided block. If a POSIX SIGILL is received, handle it and return a BadInstructionException (which is just an empty object in this POSIX signal version). Otherwise return nil."},"Functions.html#/s:6Nimble14throwAssertionAA7MatcherVyxGylF":{"name":"throwAssertion()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Functions.html#/s:6Nimble10throwErrorAA7MatcherVyxGylF":{"name":"throwError()","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression throws an"},"Functions.html#/s:6Nimble10throwError_7closureAA7MatcherVyq_Gx_ys0C0_pcSgtsAGRzr0_lF":{"name":"throwError(_:closure:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression throws an"},"Functions.html#/s:6Nimble10throwError_7closureAA7MatcherVyq_Gx_yxcSgtSQRzs0C0Rzr0_lF":{"name":"throwError(_:closure:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression throws an"},"Functions.html#/s:6Nimble10throwError9errorType7closureAA7MatcherVyq_Gxm_yxcSgts0C0Rzr0_lF":{"name":"throwError(errorType:closure:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression throws an"},"Functions.html#/s:6Nimble10throwError7closureAA7MatcherVyxGys0C0_pc_tlF":{"name":"throwError(closure:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression throws any"},"Functions.html#/s:6Nimble10throwError7closureAA7MatcherVyq_Gyxc_ts0C0Rzr0_lF":{"name":"throwError(closure:)","abstract":"\u003cp\u003eA Nimble matcher that succeeds when the actual expression throws any"},"Functions.html#/s:6Nimble7succeedAA7MatcherVyAA15ToSucceedResultOGyF":{"name":"succeed()","abstract":"\u003cp\u003eA Nimble matcher that takes in a closure for validation.\u003c/p\u003e"},"Functions.html#/s:6Nimble10pollUnwrap4file4line_xSS_SuxSgyKXAtKlF":{"name":"pollUnwrap(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble10pollUnwrap4file4line_xSS_SuxSgyKcyXKtKlF":{"name":"pollUnwrap(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble11pollUnwraps4file4line_xSS_SuxSgyKXAtKlF":{"name":"pollUnwraps(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble11pollUnwraps4file4line_xSS_SuxSgyKcyXKtKlF":{"name":"pollUnwraps(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble10pollUnwrap4file4line_xSS_SuxSgyYaKctYaKlF":{"name":"pollUnwrap(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble10pollUnwrap4file4line_xSS_SuxSgyYaKcyXEtYaKlF":{"name":"pollUnwrap(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble11pollUnwrapa4file4line_xSS_SuxSgyYaKXAtYaKlF":{"name":"pollUnwrapa(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble11pollUnwrapa4file4line_xSS_SuxSgyYaKcyXKtYaKlF":{"name":"pollUnwrapa(file:line:_:)","abstract":"\u003cp\u003eMakes sure that the async expression evaluates to a non-nil value, otherwise throw an error."},"Functions.html#/s:6Nimble9stringifyySSxSglF":{"name":"stringify(_:)","abstract":"\u003cp\u003eReturns a string appropriate for displaying in test output"},"Functions.html#/s:6Nimble20prettyCollectionTypeySSxlF":{"name":"prettyCollectionType(_:)","abstract":"\u003cp\u003eAttempts to generate a pretty type string for a given value. If the value is of a Objective-C"},"Functions.html#/s:6Nimble20prettyCollectionTypeySSxSlRzlF":{"name":"prettyCollectionType(_:)","abstract":"\u003cp\u003eReturns the type name for a given collection type. This overload is used by Swift"},"Extensions/Data.html#/s:10Foundation4DataV6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Data"},"Extensions/String.html#/s:SS6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"String"},"Extensions/AnySequence.html#/s:s11AnySequenceV6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AnySequence"},"Extensions/Array.html#/s:Sa6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Array"},"Extensions/TimeInterval.html#/s:Sd6NimbleE14nimbleIntervalAA0a4TimeC0Ovp":{"name":"nimbleInterval","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"TimeInterval"},"Extensions/NSString.html#/c:@CM@Nimble@@objc(cs)NSString(im)NMB_compare:":{"name":"NMB_compare(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NSString"},"Extensions/NSDate.html#/s:So6NSDateC6NimbleE11doubleValueSdvp":{"name":"doubleValue","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NSDate"},"Extensions/NSDate.html#/s:So6NSDateC6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NSDate"},"Extensions/Date.html#/s:10Foundation4DateV6NimbleE11doubleValueSdvp":{"name":"doubleValue","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Date"},"Extensions/Date.html#/s:10Foundation4DateV6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Date"},"Extensions/Date.html#/s:10Foundation4DateV6NimbleE8advanced2byAcD0C12TimeIntervalO_tF":{"name":"advanced(by:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Date"},"Extensions/NSNumber.html#/c:@CM@Nimble@@objc(cs)NSNumber(im)NMB_compare:":{"name":"NMB_compare(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NSNumber"},"Extensions/NSNumber.html#/s:So8NSNumberC6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NSNumber"},"Extensions/NSIndexSet.html#/s:So10NSIndexSetC6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NSIndexSet"},"Extensions/NSArray.html#/s:So7NSArrayC6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NSArray"},"Extensions/UInt.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"UInt"},"Extensions/Int.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"Int"},"Extensions/Double.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"Double"},"Extensions/Double.html#/s:Sd6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Double"},"Extensions/Float.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"Float"},"Extensions/Float.html#/s:Sf6NimbleE15testDescriptionSSvp":{"name":"testDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"Float"},"Extensions/UInt64.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"UInt64"},"Extensions/Int64.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"Int64"},"Extensions/UInt32.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"UInt32"},"Extensions/Int32.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"Int32"},"Extensions/UInt16.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"UInt16"},"Extensions/Int16.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"Int16"},"Extensions/UInt8.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"UInt8"},"Extensions/Int8.html#/s:s27ExpressibleByBooleanLiteralP07booleanD0x0cD4TypeQz_tcfc":{"name":"init(booleanLiteral:)","parent_name":"Int8"},"Extensions/Int8.html":{"name":"Int8"},"Extensions/UInt8.html":{"name":"UInt8"},"Extensions/Int16.html":{"name":"Int16"},"Extensions/UInt16.html":{"name":"UInt16"},"Extensions/Int32.html":{"name":"Int32"},"Extensions/UInt32.html":{"name":"UInt32"},"Extensions/Int64.html":{"name":"Int64"},"Extensions/UInt64.html":{"name":"UInt64"},"Extensions/Float.html":{"name":"Float"},"Extensions/Double.html":{"name":"Double"},"Extensions/Int.html":{"name":"Int"},"Extensions/UInt.html":{"name":"UInt"},"Extensions/NSArray.html":{"name":"NSArray"},"Extensions.html#/c:objc(cs)NSSet":{"name":"NSSet"},"Extensions.html#/c:objc(cs)NSHashTable":{"name":"NSHashTable"},"Extensions.html#/c:objc(cs)NSMapTable":{"name":"NSMapTable"},"Extensions/NSIndexSet.html":{"name":"NSIndexSet"},"Extensions.html#/c:objc(cs)NSDictionary":{"name":"NSDictionary"},"Extensions/NSNumber.html":{"name":"NSNumber"},"Extensions/Date.html":{"name":"Date"},"Extensions/NSDate.html":{"name":"NSDate"},"Extensions/NSString.html":{"name":"NSString"},"Extensions/TimeInterval.html":{"name":"TimeInterval"},"Extensions/Array.html":{"name":"Array"},"Extensions/AnySequence.html":{"name":"AnySequence"},"Extensions/String.html":{"name":"String"},"Extensions/Data.html":{"name":"Data"},"Enums/NimbleTimeInterval.html#/s:6Nimble0A12TimeIntervalO7secondsyACSicACmF":{"name":"seconds(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:6Nimble0A12TimeIntervalO12millisecondsyACSicACmF":{"name":"milliseconds(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:6Nimble0A12TimeIntervalO12microsecondsyACSicACmF":{"name":"microseconds(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:6Nimble0A12TimeIntervalO11nanosecondsyACSicACmF":{"name":"nanoseconds(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:SL1loiySbx_xtFZ":{"name":"\u003c(_:_:)","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:6Nimble0A12TimeIntervalO08dispatchbC08Dispatch0ebC0Ovp":{"name":"dispatchTimeInterval","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:6Nimble0A12TimeIntervalO11nanosecondss6UInt64Vvp":{"name":"nanoseconds","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"NimbleTimeInterval"},"Enums/NimbleTimeInterval.html#/s:6Nimble0A12TimeIntervalO04timeC0Sdvp":{"name":"timeInterval","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleTimeInterval"},"Enums/ToSucceedResult.html#/s:6Nimble15ToSucceedResultO9succeededyA2CmF":{"name":"succeeded","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"ToSucceedResult"},"Enums/ToSucceedResult.html#/s:6Nimble15ToSucceedResultO6failedyACSS_tcACmF":{"name":"failed(reason:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"ToSucceedResult"},"Enums/MatcherStatus.html#/s:6Nimble13MatcherStatusO7matchesyA2CmF":{"name":"matches","abstract":"\u003cp\u003eMatches indicates if the matcher / matcher passes with the given value\u003c/p\u003e","parent_name":"MatcherStatus"},"Enums/MatcherStatus.html#/s:6Nimble13MatcherStatusO12doesNotMatchyA2CmF":{"name":"doesNotMatch","abstract":"\u003cp\u003eDoesNotMatch indicates if the matcher fails with the given value, but \u003cem\u003ewould\u003c/em\u003e","parent_name":"MatcherStatus"},"Enums/MatcherStatus.html#/s:6Nimble13MatcherStatusO4failyA2CmF":{"name":"fail","abstract":"\u003cp\u003eFail indicates the matcher will never satisfy with the given value in any case.","parent_name":"MatcherStatus"},"Enums/MatcherStatus.html#/s:6Nimble13MatcherStatusO4boolACSb_tcfc":{"name":"init(bool:)","abstract":"\u003cp\u003eConverts a boolean to either .matches (if true) or .doesNotMatch (if false).\u003c/p\u003e","parent_name":"MatcherStatus"},"Enums/MatcherStatus.html#/s:6Nimble13MatcherStatusO12toObjectiveCAA010NMBMatcherC0CyF":{"name":"toObjectiveC()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"MatcherStatus"},"Enums/ExpectationStyle.html#/s:6Nimble16ExpectationStyleO7toMatchyA2CmF":{"name":"toMatch","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"ExpectationStyle"},"Enums/ExpectationStyle.html#/s:6Nimble16ExpectationStyleO10toNotMatchyA2CmF":{"name":"toNotMatch","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"ExpectationStyle"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO21expectedActualValueToyACSScACmF":{"name":"expectedActualValueTo(_:)","abstract":"\u003cp\u003eincludes actual value in output (\u0026ldquo;expected to \u003cmessage\u003e, got \u003cactual\u003e\u0026rdquo;)\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO21expectedCustomValueToyACSS_SStcACmF":{"name":"expectedCustomValueTo(_:actual:)","abstract":"\u003cp\u003euses a custom actual value string in output (\u0026ldquo;expected to \u003cmessage\u003e, got \u003cactual\u003e\u0026rdquo;)\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO10expectedToyACSScACmF":{"name":"expectedTo(_:)","abstract":"\u003cp\u003eexcludes actual value in output (\u0026ldquo;expected to \u003cmessage\u003e\u0026rdquo;)\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO4failyACSScACmF":{"name":"fail(_:)","abstract":"\u003cp\u003eallows any free-form message (\u0026ldquo;\u003cmessage\u003e\u0026rdquo;)\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO8prependsyACSS_ACtcACmF":{"name":"prepends(_:_:)","abstract":"\u003cp\u003eNot Fully Implemented Yet.\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO7appendsyA2C_SStcACmF":{"name":"appends(_:_:)","abstract":"\u003cp\u003eappends after an existing message (\u0026ldquo;\u003cexpectation\u003e (use beNil() to match nils)\u0026rdquo;)\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO7detailsyA2C_SStcACmF":{"name":"details(_:_:)","abstract":"\u003cp\u003eprovides long-form multi-line explainations (\u0026ldquo;\u003cexpectation\u003e\\n\\n\u003cstring\u003e\u0026rdquo;)\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO08expectedC0SSvp":{"name":"expectedMessage","abstract":"\u003cp\u003eReturns the smallest message after the \u0026ldquo;expected to\u0026rdquo; string that summarizes the error.\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO8appended7messageACSS_tF":{"name":"appended(message:)","abstract":"\u003cp\u003eAppends a message after the primary expectation message\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO17appendedBeNilHintACyF":{"name":"appendedBeNilHint()","abstract":"\u003cp\u003eAppends a message hinting to use beNil() for when the actual value given was nil.\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO8appended7detailsACSS_tF":{"name":"appended(details:)","abstract":"\u003cp\u003eAppends a detailed (aka - multiline) message after the primary expectation message","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO08replacedB0yA3CcF":{"name":"replacedExpectation(_:)","abstract":"\u003cp\u003eReplaces a primary expectation with one returned by f. Preserves all composite expectations","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO07wrappedB06before5afterACSS_SStF":{"name":"wrappedExpectation(before:after:)","abstract":"\u003cp\u003eWraps a primary expectation with text before and after it.","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO9prepended11expectationACSS_tF":{"name":"prepended(expectation:)","abstract":"\u003cp\u003ePrepends a message by modifying the primary expectation\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationMessage.html#/s:6Nimble18ExpectationMessageO8toString6actual8expected0D0S2S_S2StF":{"name":"toString(actual:expected:to:)","abstract":"\u003cp\u003eConverts the tree of ExpectationMessages into a final built string.\u003c/p\u003e","parent_name":"ExpectationMessage"},"Enums/ExpectationStatus.html#/s:6Nimble17ExpectationStatusO7pendingyA2CmF":{"name":"pending","abstract":"\u003cp\u003eNo matchers have been performed.\u003c/p\u003e","parent_name":"ExpectationStatus"},"Enums/ExpectationStatus.html#/s:6Nimble17ExpectationStatusO6passedyA2CmF":{"name":"passed","abstract":"\u003cp\u003eAll matchers have passed.\u003c/p\u003e","parent_name":"ExpectationStatus"},"Enums/ExpectationStatus.html#/s:6Nimble17ExpectationStatusO6failedyA2CmF":{"name":"failed","abstract":"\u003cp\u003eAll matchers have failed.\u003c/p\u003e","parent_name":"ExpectationStatus"},"Enums/ExpectationStatus.html#/s:6Nimble17ExpectationStatusO5mixedyA2CmF":{"name":"mixed","abstract":"\u003cp\u003eMultiple matchers have been peformed, with at least one passing and one failing.\u003c/p\u003e","parent_name":"ExpectationStatus"},"Enums/ExpectationStatus.html":{"name":"ExpectationStatus","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Enums/ExpectationMessage.html":{"name":"ExpectationMessage","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Enums/ExpectationStyle.html":{"name":"ExpectationStyle","abstract":"\u003cp\u003eThe Expectation style intended for comparison to a MatcherStatus.\u003c/p\u003e"},"Enums/MatcherStatus.html":{"name":"MatcherStatus","abstract":"\u003cp\u003eMatcherStatus is a trinary that indicates if a Matcher matches a given value or not\u003c/p\u003e"},"Enums/ToSucceedResult.html":{"name":"ToSucceedResult","abstract":"\u003cp\u003eUsed by the \u003ccode\u003esucceed\u003c/code\u003e matcher.\u003c/p\u003e"},"Enums/NimbleTimeInterval.html":{"name":"NimbleTimeInterval","abstract":"\u003cp\u003eA reimplementation of \u003ccode\u003eDispatchTimeInterval\u003c/code\u003e without the \u003ccode\u003enever\u003c/code\u003e case, and conforming to \u003ccode\u003eSendable\u003c/code\u003e.\u003c/p\u003e"},"Global%20Variables.html#/s:6Nimble0A16AssertionHandlerAA0bC0_pvp":{"name":"NimbleAssertionHandler","abstract":"\u003cp\u003eGlobal backing interface for assertions that Nimble creates."},"Global%20Variables.html#/s:6Nimble12DefaultDeltaSdvp":{"name":"DefaultDelta","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/NMBStringer.html#/c:@M@Nimble@objc(cs)NMBStringer(cm)stringify:":{"name":"stringify(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBStringer"},"Classes/SourceLocation.html#/s:6Nimble14SourceLocationC4fileSSvp":{"name":"file","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SourceLocation"},"Classes/SourceLocation.html#/s:6Nimble14SourceLocationC4lineSuvp":{"name":"line","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SourceLocation"},"Classes/SourceLocation.html#/c:@M@Nimble@objc(cs)SourceLocation(py)description":{"name":"description","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"SourceLocation"},"Classes/NMBObjCRaiseExceptionMatcher.html#/c:@M@Nimble@objc(cs)NMBObjCRaiseExceptionMatcher(py)named":{"name":"named","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBObjCRaiseExceptionMatcher"},"Classes/NMBObjCRaiseExceptionMatcher.html#/c:@M@Nimble@objc(cs)NMBObjCRaiseExceptionMatcher(py)reason":{"name":"reason","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBObjCRaiseExceptionMatcher"},"Classes/NMBObjCRaiseExceptionMatcher.html#/c:@M@Nimble@objc(cs)NMBObjCRaiseExceptionMatcher(py)userInfo":{"name":"userInfo","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBObjCRaiseExceptionMatcher"},"Classes/NMBObjCRaiseExceptionMatcher.html#/c:@M@Nimble@objc(cs)NMBObjCRaiseExceptionMatcher(py)satisfyingBlock":{"name":"satisfyingBlock","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBObjCRaiseExceptionMatcher"},"Classes/NMBMatcherStatus.html#/s:6Nimble16NMBMatcherStatusC7matchesACvpZ":{"name":"matches","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherStatus.html#/s:6Nimble16NMBMatcherStatusC12doesNotMatchACvpZ":{"name":"doesNotMatch","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherStatus.html#/s:6Nimble16NMBMatcherStatusC4failACvpZ":{"name":"fail","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherStatus.html#/c:@M@Nimble@objc(cs)NMBMatcherStatus(py)hash":{"name":"hash","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherStatus.html#/c:@M@Nimble@objc(cs)NMBMatcherStatus(im)isEqual:":{"name":"isEqual(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherStatus.html#/s:6Nimble16NMBMatcherStatusC4from6statusAcA07MatcherC0O_tFZ":{"name":"from(status:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherStatus.html#/s:6Nimble16NMBMatcherStatusC4from4boolACSb_tFZ":{"name":"from(bool:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherStatus.html#/s:6Nimble16NMBMatcherStatusC7toSwiftAA07MatcherC0OyF":{"name":"toSwift()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherStatus"},"Classes/NMBMatcherResult.html#/s:6Nimble16NMBMatcherResultC6statusAA0B6StatusCvp":{"name":"status","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherResult"},"Classes/NMBMatcherResult.html#/s:6Nimble16NMBMatcherResultC7messageAA21NMBExpectationMessageCvp":{"name":"message","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherResult"},"Classes/NMBMatcherResult.html#/s:6Nimble16NMBMatcherResultC6status7messageAcA0B6StatusC_AA21NMBExpectationMessageCtcfc":{"name":"init(status:message:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherResult"},"Classes/NMBMatcherResult.html#/s:6Nimble16NMBMatcherResultC4bool7messageACSb_AA21NMBExpectationMessageCtcfc":{"name":"init(bool:message:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherResult"},"Classes/NMBMatcherResult.html#/s:6Nimble16NMBMatcherResultC7toSwiftAA07MatcherC0VyF":{"name":"toSwift()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcherResult"},"Classes/NMBObjCBeCloseToMatcher.html#/c:@M@Nimble@objc(cs)NMBObjCBeCloseToMatcher(py)within":{"name":"within","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBObjCBeCloseToMatcher"},"Classes/NMBMatcher.html#/s:6Nimble10NMBMatcherC7matcherAcA0B6ResultCAA10ExpressionVySo8NSObjectCGKc_tcfc":{"name":"init(matcher:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/s:6Nimble10NMBMatcherC9predicateAcA0B6ResultCAA10ExpressionVySo8NSObjectCGKc_tcfc":{"name":"init(predicate:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)allPassMatcher:":{"name":"allPassMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beAKindOfMatcher:":{"name":"beAKindOfMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beAnInstanceOfMatcher:":{"name":"beAnInstanceOfMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beCloseToMatcher:within:":{"name":"beCloseToMatcher(_:within:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beEmptyMatcher":{"name":"beEmptyMatcher()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beGreaterThanMatcher:":{"name":"beGreaterThanMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beGreaterThanOrEqualToMatcher:":{"name":"beGreaterThanOrEqualToMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beIdenticalToMatcher:":{"name":"beIdenticalToMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beLessThanMatcher:":{"name":"beLessThanMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beLessThanOrEqualToMatcher:":{"name":"beLessThanOrEqualToMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beTruthyMatcher":{"name":"beTruthyMatcher()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beFalsyMatcher":{"name":"beFalsyMatcher()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beTrueMatcher":{"name":"beTrueMatcher()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beFalseMatcher":{"name":"beFalseMatcher()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beNilMatcher":{"name":"beNilMatcher()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)beginWithMatcher:":{"name":"beginWithMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)containMatcher:":{"name":"containMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)containElementSatisfyingMatcher:":{"name":"containElementSatisfyingMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)endWithMatcher:":{"name":"endWithMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)equalMatcher:":{"name":"equalMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)haveCountMatcher:":{"name":"haveCountMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)matchMatcher:":{"name":"matchMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)raiseExceptionMatcher":{"name":"raiseExceptionMatcher()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)satisfyAllOfMatcher:":{"name":"satisfyAllOfMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/NMBMatcher.html#/c:@CM@Nimble@objc(cs)NMBMatcher(cm)satisfyAnyOfMatcher:":{"name":"satisfyAnyOfMatcher(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBMatcher"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC8expectedSSvp":{"name":"expected","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC11actualValueSSSgvp":{"name":"actualValue","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC2toSSvp":{"name":"to","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC07postfixC0SSvp":{"name":"postfixMessage","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC13postfixActualSSvp":{"name":"postfixActual","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC08extendedC0SSSgvp":{"name":"extendedMessage","abstract":"\u003cp\u003eAn optional message that will be appended as a new line and provides additional details","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC15userDescriptionSSSgvp":{"name":"userDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC11stringValueSSvp":{"name":"stringValue","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/c:@M@Nimble@objc(cs)FailureMessage(im)init":{"name":"init()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/FailureMessage.html#/s:6Nimble14FailureMessageC11stringValueACSS_tcfc":{"name":"init(stringValue:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"FailureMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC10expectedToACSS_tcfc":{"name":"init(expectedTo:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC21expectedActualValueToACSS_tcfc":{"name":"init(expectedActualValueTo:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC21expectedActualValueTo06customeF0ACSS_SStcfc":{"name":"init(expectedActualValueTo:customActualValue:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC4failACSS_tcfc":{"name":"init(fail:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC7prepend5childACSS_ACtcfc":{"name":"init(prepend:child:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC08appendedC05childACSS_ACtcfc":{"name":"init(appendedMessage:child:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC09prependedC05childACSS_ACtcfc":{"name":"init(prependedMessage:child:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC7details5childACSS_ACtcfc":{"name":"init(details:child:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC17appendedBeNilHintACyF":{"name":"appendedBeNilHint()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBExpectationMessage.html#/s:6Nimble21NMBExpectationMessageC7toSwiftAA011ExpectationC0OyF":{"name":"toSwift()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectationMessage"},"Classes/NMBWait.html#/c:@M@Nimble@objc(cs)NMBWait(cm)untilTimeout:file:line:action:":{"name":"until(timeout:file:line:action:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBWait"},"Classes/NMBWait.html#/s:6Nimble7NMBWaitC5until7timeout4file4line6actionyAA0A12TimeIntervalO_SSSuyyycctFZ":{"name":"until(timeout:file:line:action:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBWait"},"Classes/NMBWait.html#/s:6Nimble7NMBWaitC14throwableUntil7timeout4file4line6actionyAA0A12TimeIntervalO_SSSuyyycKctFZ":{"name":"throwableUntil(timeout:file:line:action:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBWait"},"Classes/NMBWait.html#/c:@M@Nimble@objc(cs)NMBWait(cm)untilFile:line:action:":{"name":"until(_:line:action:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBWait"},"Classes/NMBWait.html#/until(_:line:action:)":{"name":"until(_:line:action:)","parent_name":"NMBWait"},"Classes/CurrentTestCaseTracker.html#/c:@M@Nimble@objc(cs)CurrentTestCaseTracker(cpy)sharedInstance":{"name":"sharedInstance","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"CurrentTestCaseTracker"},"Classes/CurrentTestCaseTracker.html#/c:@M@Nimble@objc(cs)CurrentTestCaseTracker(im)testCaseWillStart:":{"name":"testCaseWillStart(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"CurrentTestCaseTracker"},"Classes/CurrentTestCaseTracker.html#/c:@M@Nimble@objc(cs)CurrentTestCaseTracker(im)testCaseDidFinish:":{"name":"testCaseDidFinish(_:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"CurrentTestCaseTracker"},"Classes/NimbleShortXCTestHandler.html#/s:6Nimble0A18ShortXCTestHandlerC6assert_7message8locationySb_AA14FailureMessageCAA14SourceLocationCtF":{"name":"assert(_:message:location:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleShortXCTestHandler"},"Classes/NimbleXCTestHandler.html#/s:6Nimble0A13XCTestHandlerC6assert_7message8locationySb_AA14FailureMessageCAA14SourceLocationCtF":{"name":"assert(_:message:location:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NimbleXCTestHandler"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(im)initWithActualBlock:negative:file:line:":{"name":"init(actualBlock:negative:file:line:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)withTimeout":{"name":"withTimeout","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)to":{"name":"to","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toWithDescription":{"name":"toWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toNot":{"name":"toNot","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toNotWithDescription":{"name":"toNotWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)notTo":{"name":"notTo","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)notToWithDescription":{"name":"notToWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toEventually":{"name":"toEventually","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toEventuallyWithDescription":{"name":"toEventuallyWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toEventuallyNot":{"name":"toEventuallyNot","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toEventuallyNotWithDescription":{"name":"toEventuallyNotWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toNotEventually":{"name":"toNotEventually","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toNotEventuallyWithDescription":{"name":"toNotEventuallyWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toNever":{"name":"toNever","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toNeverWithDescription":{"name":"toNeverWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)neverTo":{"name":"neverTo","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)neverToWithDescription":{"name":"neverToWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toAlways":{"name":"toAlways","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)toAlwaysWithDescription":{"name":"toAlwaysWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)alwaysTo":{"name":"alwaysTo","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(py)alwaysToWithDescription":{"name":"alwaysToWithDescription","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/NMBExpectation.html#/c:@M@Nimble@objc(cs)NMBExpectation(cm)failWithMessage:file:line:":{"name":"failWithMessage(_:file:line:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"NMBExpectation"},"Classes/AssertionRecorder.html#/s:6Nimble17AssertionRecorderC10assertionsSayAA0B6RecordVGvp":{"name":"assertions","abstract":"\u003cp\u003eAll the assertions that were captured by this recorder\u003c/p\u003e","parent_name":"AssertionRecorder"},"Classes/AssertionRecorder.html#/s:6Nimble17AssertionRecorderCACycfc":{"name":"init()","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AssertionRecorder"},"Classes/AssertionRecorder.html#/s:6Nimble17AssertionRecorderC6assert_7message8locationySb_AA14FailureMessageCAA14SourceLocationCtF":{"name":"assert(_:message:location:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AssertionRecorder"},"Classes/AssertionDispatcher.html#/s:6Nimble19AssertionDispatcherC8handlersACSayAA0B7Handler_pG_tcfc":{"name":"init(handlers:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AssertionDispatcher"},"Classes/AssertionDispatcher.html#/s:6Nimble19AssertionDispatcherC6assert_7message8locationySb_AA14FailureMessageCAA14SourceLocationCtF":{"name":"assert(_:message:location:)","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e","parent_name":"AssertionDispatcher"},"Classes/AssertionDispatcher.html":{"name":"AssertionDispatcher","abstract":"\u003cp\u003eAssertionDispatcher allows multiple AssertionHandlers to receive"},"Classes/AssertionRecorder.html":{"name":"AssertionRecorder","abstract":"\u003cp\u003eAn AssertionHandler that silently records assertions that Nimble makes."},"Classes/NMBExpectation.html":{"name":"NMBExpectation","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/NimbleXCTestHandler.html":{"name":"NimbleXCTestHandler","abstract":"\u003cp\u003eDefault handler for Nimble. This assertion handler passes failures along to"},"Classes/NimbleShortXCTestHandler.html":{"name":"NimbleShortXCTestHandler","abstract":"\u003cp\u003eAlternative handler for Nimble. This assertion handler passes failures along"},"Classes/CurrentTestCaseTracker.html":{"name":"CurrentTestCaseTracker","abstract":"\u003cp\u003eHelper class providing access to the currently executing XCTestCase instance, if any\u003c/p\u003e"},"Classes/NMBWait.html":{"name":"NMBWait","abstract":"\u003cp\u003eOnly classes, protocols, methods, properties, and subscript declarations can be"},"Classes/NMBExpectationMessage.html":{"name":"NMBExpectationMessage","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/FailureMessage.html":{"name":"FailureMessage","abstract":"\u003cp\u003eEncapsulates the failure message that matchers can report to the end user.\u003c/p\u003e"},"Classes/NMBMatcher.html":{"name":"NMBMatcher","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/NMBObjCBeCloseToMatcher.html":{"name":"NMBObjCBeCloseToMatcher","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/NMBMatcherResult.html":{"name":"NMBMatcherResult","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/NMBMatcherStatus.html":{"name":"NMBMatcherStatus","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/NMBObjCRaiseExceptionMatcher.html":{"name":"NMBObjCRaiseExceptionMatcher","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes.html#/BadInstructionException":{"name":"BadInstructionException","abstract":"\u003cp\u003eWithout Mach exceptions or the Objective-C runtime, there\u0026rsquo;s nothing to put in the exception object. It\u0026rsquo;s really just a boolean – either a SIGILL was caught or not.\u003c/p\u003e"},"Classes/SourceLocation.html":{"name":"SourceLocation","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes/NMBStringer.html":{"name":"NMBStringer","abstract":"\u003cp\u003eUndocumented\u003c/p\u003e"},"Classes.html":{"name":"Classes","abstract":"\u003cp\u003eThe following classes are available globally.\u003c/p\u003e"},"Global%20Variables.html":{"name":"Global Variables","abstract":"\u003cp\u003eThe following global variables are available globally.\u003c/p\u003e"},"Enums.html":{"name":"Enumerations","abstract":"\u003cp\u003eThe following enumerations are available globally.\u003c/p\u003e"},"Extensions.html":{"name":"Extensions","abstract":"\u003cp\u003eThe following extensions are available globally.\u003c/p\u003e"},"Functions.html":{"name":"Functions","abstract":"\u003cp\u003eThe following functions are available globally.\u003c/p\u003e"},"Protocols.html":{"name":"Protocols","abstract":"\u003cp\u003eThe following protocols are available globally.\u003c/p\u003e"},"Structs.html":{"name":"Structures","abstract":"\u003cp\u003eThe following structures are available globally.\u003c/p\u003e"},"Typealiases.html":{"name":"Type Aliases","abstract":"\u003cp\u003eThe following type aliases are available globally.\u003c/p\u003e"}} \ No newline at end of file diff --git a/docs/undocumented.json b/docs/undocumented.json deleted file mode 100644 index 162e2c297..000000000 --- a/docs/undocumented.json +++ /dev/null @@ -1,2553 +0,0 @@ -{ - "warnings": [ - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/AdapterProtocols.swift", - "line": 3, - "symbol": "AssertionHandler.assert(_:message:location:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/AssertionDispatcher.swift", - "line": 10, - "symbol": "AssertionDispatcher.init(handlers:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/AssertionDispatcher.swift", - "line": 14, - "symbol": "AssertionDispatcher.assert(_:message:location:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift", - "line": 27, - "symbol": "AssertionRecorder.init()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/AssertionRecorder.swift", - "line": 29, - "symbol": "AssertionRecorder.assert(_:message:location:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 16, - "symbol": "NMBExpectation", - "symbol_kind": "source.lang.swift.decl.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 23, - "symbol": "NMBExpectation.init(actualBlock:negative:file:line:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 34, - "symbol": "NMBExpectation.withTimeout", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 40, - "symbol": "NMBExpectation.to", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 47, - "symbol": "NMBExpectation.toWithDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 54, - "symbol": "NMBExpectation.toNot", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 61, - "symbol": "NMBExpectation.toNotWithDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 68, - "symbol": "NMBExpectation.notTo", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 70, - "symbol": "NMBExpectation.notToWithDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 72, - "symbol": "NMBExpectation.toEventually", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 82, - "symbol": "NMBExpectation.toEventuallyWithDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 92, - "symbol": "NMBExpectation.toEventuallyNot", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 102, - "symbol": "NMBExpectation.toEventuallyNotWithDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 112, - "symbol": "NMBExpectation.toNotEventually", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 116, - "symbol": "NMBExpectation.toNotEventuallyWithDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 120, - "symbol": "NMBExpectation.toNever", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 130, - "symbol": "NMBExpectation.toNeverWithDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 140, - "symbol": "NMBExpectation.neverTo", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 144, - "symbol": "NMBExpectation.neverToWithDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 148, - "symbol": "NMBExpectation.toAlways", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 158, - "symbol": "NMBExpectation.toAlwaysWithDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 168, - "symbol": "NMBExpectation.alwaysTo", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 172, - "symbol": "NMBExpectation.alwaysToWithDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NMBExpectation.swift", - "line": 176, - "symbol": "NMBExpectation.failWithMessage(_:file:line:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift", - "line": 7, - "symbol": "NimbleXCTestHandler.assert(_:message:location:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift", - "line": 17, - "symbol": "NimbleShortXCTestHandler.assert(_:message:location:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift", - "line": 41, - "symbol": "CurrentTestCaseTracker.sharedInstance", - "symbol_kind": "source.lang.swift.decl.var.static", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift", - "line": 47, - "symbol": "CurrentTestCaseTracker.testCaseWillStart(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift", - "line": 56, - "symbol": "CurrentTestCaseTracker.testCaseDidFinish(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Adapters/NimbleXCTestHandler.swift", - "line": 75, - "symbol": "recordFailure(_:location:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/AsyncExpression.swift", - "line": 27, - "symbol": "AsyncExpression.location", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/AsyncExpression.swift", - "line": 28, - "symbol": "AsyncExpression.isClosure", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/AsyncExpression.swift", - "line": 101, - "symbol": "AsyncExpression.cast(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/AsyncExpression.swift", - "line": 109, - "symbol": "AsyncExpression.evaluate()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/AsyncExpression.swift", - "line": 113, - "symbol": "AsyncExpression.withoutCaching()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/AsyncExpression.swift", - "line": 122, - "symbol": "AsyncExpression.withCaching()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/DSL+Wait.swift", - "line": 20, - "symbol": "NMBWait.until(timeout:file:line:action:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/DSL+Wait.swift", - "line": 30, - "symbol": "NMBWait.until(timeout:file:line:action:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/DSL+Wait.swift", - "line": 41, - "symbol": "NMBWait.throwableUntil(timeout:file:line:action:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/DSL+Wait.swift", - "line": 90, - "symbol": "NMBWait.until(_:line:action:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 26, - "symbol": "SyncExpectation", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 36, - "symbol": "AsyncExpectation", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 53, - "symbol": "ExpectationStatus", - "symbol_kind": "source.lang.swift.decl.enum", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 81, - "symbol": "Expectation", - "symbol_kind": "source.lang.swift.decl.protocol", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 82, - "symbol": "Expectation.location", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 89, - "symbol": "SyncExpectation", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 109, - "symbol": "Expectation", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 140, - "symbol": "SyncExpectation", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 153, - "symbol": "SyncExpectation", - "symbol_kind": "source.lang.swift.decl.struct", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 154, - "symbol": "SyncExpectation.expression", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 178, - "symbol": "SyncExpectation.init(expression:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 194, - "symbol": "SyncExpectation.location", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 246, - "symbol": "AsyncExpectation", - "symbol_kind": "source.lang.swift.decl.struct", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 247, - "symbol": "AsyncExpectation.expression", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 271, - "symbol": "AsyncExpectation.init(expression:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 275, - "symbol": "AsyncExpectation.location", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expectation.swift", - "line": 351, - "symbol": "AsyncExpectation", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/ExpectationMessage.swift", - "line": 1, - "symbol": "ExpectationMessage", - "symbol_kind": "source.lang.swift.decl.enum", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/ExpectationMessage.swift", - "line": 207, - "symbol": "NMBExpectationMessage", - "symbol_kind": "source.lang.swift.decl.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/ExpectationMessage.swift", - "line": 214, - "symbol": "NMBExpectationMessage.init(expectedTo:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/ExpectationMessage.swift", - "line": 217, - "symbol": "NMBExpectationMessage.init(expectedActualValueTo:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/ExpectationMessage.swift", - "line": 221, - "symbol": "NMBExpectationMessage.init(expectedActualValueTo:customActualValue:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/ExpectationMessage.swift", - "line": 225, - "symbol": "NMBExpectationMessage.init(fail:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/ExpectationMessage.swift", - "line": 229, - "symbol": "NMBExpectationMessage.init(prepend:child:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/ExpectationMessage.swift", - "line": 233, - "symbol": "NMBExpectationMessage.init(appendedMessage:child:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/ExpectationMessage.swift", - "line": 237, - "symbol": "NMBExpectationMessage.init(prependedMessage:child:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/ExpectationMessage.swift", - "line": 241, - "symbol": "NMBExpectationMessage.init(details:child:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/ExpectationMessage.swift", - "line": 245, - "symbol": "NMBExpectationMessage.appendedBeNilHint()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/ExpectationMessage.swift", - "line": 249, - "symbol": "NMBExpectationMessage.toSwift()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expression.swift", - "line": 27, - "symbol": "Expression.location", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expression.swift", - "line": 28, - "symbol": "Expression.isClosure", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expression.swift", - "line": 85, - "symbol": "Expression.evaluate()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expression.swift", - "line": 89, - "symbol": "Expression.withoutCaching()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expression.swift", - "line": 98, - "symbol": "Expression.withCaching()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Expression.swift", - "line": 107, - "symbol": "Expression.toAsyncExpression()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/FailureMessage.swift", - "line": 7, - "symbol": "FailureMessage.expected", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/FailureMessage.swift", - "line": 8, - "symbol": "FailureMessage.actualValue", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/FailureMessage.swift", - "line": 9, - "symbol": "FailureMessage.to", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/FailureMessage.swift", - "line": 10, - "symbol": "FailureMessage.postfixMessage", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/FailureMessage.swift", - "line": 11, - "symbol": "FailureMessage.postfixActual", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/FailureMessage.swift", - "line": 16, - "symbol": "FailureMessage.userDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/FailureMessage.swift", - "line": 18, - "symbol": "FailureMessage.stringValue", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/FailureMessage.swift", - "line": 36, - "symbol": "FailureMessage.init()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/FailureMessage.swift", - "line": 39, - "symbol": "FailureMessage.init(stringValue:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/AllPass.swift", - "line": 1, - "symbol": "allPass(_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/AllPass.swift", - "line": 13, - "symbol": "allPass(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/AllPass.swift", - "line": 26, - "symbol": "allPass(_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/AllPass.swift", - "line": 72, - "symbol": "NMBMatcher.allPassMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/AsyncAllPass.swift", - "line": 1, - "symbol": "allPass(_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/AsyncAllPass.swift", - "line": 13, - "symbol": "allPass(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/AsyncAllPass.swift", - "line": 26, - "symbol": "allPass(_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/AsyncMatcher.swift", - "line": 1, - "symbol": "AsyncableMatcher", - "symbol_kind": "source.lang.swift.decl.protocol", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/AsyncMatcher.swift", - "line": 2, - "symbol": "AsyncableMatcher.Value", - "symbol_kind": "source.lang.swift.decl.associatedtype", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/AsyncMatcher.swift", - "line": 3, - "symbol": "AsyncableMatcher.satisfies(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/AsyncMatcher.swift", - "line": 7, - "symbol": "Matcher.satisfies(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/AsyncMatcher.swift", - "line": 33, - "symbol": "AsyncMatcher.init(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/AsyncMatcher.swift", - "line": 47, - "symbol": "AsyncPredicate", - "symbol_kind": "source.lang.swift.decl.typealias", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeAKindOf.swift", - "line": 60, - "symbol": "NMBMatcher.beAKindOfMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeAnInstanceOf.swift", - "line": 50, - "symbol": "NMBMatcher.beAnInstanceOfMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 4, - "symbol": "DefaultDelta", - "symbol_kind": "source.lang.swift.decl.var.global", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 6, - "symbol": "defaultDelta()", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 70, - "symbol": "NMBObjCBeCloseToMatcher", - "symbol_kind": "source.lang.swift.decl.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 84, - "symbol": "NMBObjCBeCloseToMatcher.within", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 93, - "symbol": "NMBMatcher.beCloseToMatcher(_:within:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 99, - "symbol": "beCloseTo(_:within:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 125, - "symbol": "≈(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 129, - "symbol": "≈(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 133, - "symbol": "≈(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 137, - "symbol": "≈(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 141, - "symbol": "≈(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 145, - "symbol": "≈(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 149, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 153, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 157, - "symbol": "≈(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 161, - "symbol": "≈(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 165, - "symbol": "≈(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 169, - "symbol": "≈(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 173, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 177, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 188, - "symbol": "±(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeCloseTo.swift", - "line": 191, - "symbol": "±(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeEmpty.swift", - "line": 82, - "symbol": "NMBMatcher.beEmptyMatcher()", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift", - "line": 11, - "symbol": ">(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift", - "line": 15, - "symbol": ">(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift", - "line": 33, - "symbol": ">(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift", - "line": 37, - "symbol": ">(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeGreaterThan.swift", - "line": 42, - "symbol": "NMBMatcher.beGreaterThanMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift", - "line": 12, - "symbol": ">=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift", - "line": 16, - "symbol": ">=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift", - "line": 34, - "symbol": ">=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift", - "line": 38, - "symbol": ">=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeGreaterThanOrEqualTo.swift", - "line": 43, - "symbol": "NMBMatcher.beGreaterThanOrEqualToMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift", - "line": 18, - "symbol": "===(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift", - "line": 22, - "symbol": "===(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift", - "line": 26, - "symbol": "!==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift", - "line": 30, - "symbol": "!==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeIdenticalTo.swift", - "line": 46, - "symbol": "NMBMatcher.beIdenticalToMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeLessThan.swift", - "line": 11, - "symbol": "<(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeLessThan.swift", - "line": 15, - "symbol": "<(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeLessThan.swift", - "line": 32, - "symbol": "<(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeLessThan.swift", - "line": 36, - "symbol": "<(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeLessThan.swift", - "line": 41, - "symbol": "NMBMatcher.beLessThanMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift", - "line": 11, - "symbol": "<=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift", - "line": 15, - "symbol": "<=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift", - "line": 32, - "symbol": "<=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift", - "line": 36, - "symbol": "<=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeLessThanOrEqual.swift", - "line": 41, - "symbol": "NMBMatcher.beLessThanOrEqualToMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeLogical.swift", - "line": 117, - "symbol": "NMBMatcher.beTruthyMatcher()", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeLogical.swift", - "line": 124, - "symbol": "NMBMatcher.beFalsyMatcher()", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeLogical.swift", - "line": 131, - "symbol": "NMBMatcher.beTrueMatcher()", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeLogical.swift", - "line": 138, - "symbol": "NMBMatcher.beFalseMatcher()", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeNil.swift", - "line": 27, - "symbol": "SyncExpectation.==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.method.static", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeNil.swift", - "line": 31, - "symbol": "SyncExpectation.!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.method.static", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeNil.swift", - "line": 37, - "symbol": "AsyncExpectation.==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.method.static", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeNil.swift", - "line": 41, - "symbol": "AsyncExpectation.!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.method.static", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeNil.swift", - "line": 50, - "symbol": "NMBMatcher.beNilMatcher()", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeVoid.swift", - "line": 9, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeVoid.swift", - "line": 13, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeVoid.swift", - "line": 17, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeVoid.swift", - "line": 21, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/BeginWith.swift", - "line": 43, - "symbol": "NMBMatcher.beginWithMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Contain.swift", - "line": 61, - "symbol": "contain(_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Contain.swift", - "line": 79, - "symbol": "contain(_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Contain.swift", - "line": 94, - "symbol": "contain(_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Contain.swift", - "line": 107, - "symbol": "NMBMatcher.containMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/ContainElementSatisfying.swift", - "line": 1, - "symbol": "containElementSatisfying(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/ContainElementSatisfying.swift", - "line": 24, - "symbol": "containElementSatisfying(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/ContainElementSatisfying.swift", - "line": 53, - "symbol": "NMBMatcher.containElementSatisfyingMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/EndWith.swift", - "line": 53, - "symbol": "NMBMatcher.endWithMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 13, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 20, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 27, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 34, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 51, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 58, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 66, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 73, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 91, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 98, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 105, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 112, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 130, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 137, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 145, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 152, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 170, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 177, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 184, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+Tuple.swift", - "line": 191, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 13, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 20, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 27, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 34, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 51, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 58, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 65, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 72, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 89, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 96, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 103, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 110, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 127, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 134, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 141, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 148, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 165, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 172, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 179, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal+TupleArray.swift", - "line": 186, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 134, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 138, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 142, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 146, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 150, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 154, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 158, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 162, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 166, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 170, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 174, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 178, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 182, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 186, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 190, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 194, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 198, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 202, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 206, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 210, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 214, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 218, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 222, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 226, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 230, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 234, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 238, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 242, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 246, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 250, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 254, - "symbol": "==(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 258, - "symbol": "!=(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Equal.swift", - "line": 266, - "symbol": "NMBMatcher.equalMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/HaveCount.swift", - "line": 49, - "symbol": "NMBMatcher.haveCountMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Match.swift", - "line": 16, - "symbol": "NMBMatcher.matchMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 15, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 40, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 40, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 41, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 42, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 42, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 45, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 48, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 49, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 49, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 52, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 52, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 59, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 71, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 81, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 92, - "symbol": "ExpectationStyle.toMatch", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 92, - "symbol": "ExpectationStyle.toNotMatch", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 92, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 98, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 98, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 106, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 116, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 210, - "symbol": "MatcherBlock", - "symbol_kind": "source.lang.swift.decl.typealias", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 216, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 217, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 219, - "symbol": "NMBMatcher.init(matcher:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 224, - "symbol": "NMBMatcher.init(predicate:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 242, - "symbol": "NMBMatcherResult", - "symbol_kind": "source.lang.swift.decl.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 243, - "symbol": "NMBMatcherResult.status", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 244, - "symbol": "NMBMatcherResult.message", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 246, - "symbol": "NMBMatcherResult.init(status:message:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 251, - "symbol": "NMBMatcherResult.init(bool:message:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 256, - "symbol": "NMBMatcherResult.toSwift()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 265, - "symbol": "NMBMatcher", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 267, - "symbol": "MatcherResult.toObjectiveC()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 272, - "symbol": "NMBMatcherStatus", - "symbol_kind": "source.lang.swift.decl.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 278, - "symbol": "NMBMatcherStatus.matches", - "symbol_kind": "source.lang.swift.decl.var.static", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 279, - "symbol": "NMBMatcherStatus.doesNotMatch", - "symbol_kind": "source.lang.swift.decl.var.static", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 280, - "symbol": "NMBMatcherStatus.fail", - "symbol_kind": "source.lang.swift.decl.var.static", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 282, - "symbol": "NMBMatcherStatus.hash", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 284, - "symbol": "NMBMatcherStatus.isEqual(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 291, - "symbol": "NMBMatcherStatus.from(status:)", - "symbol_kind": "source.lang.swift.decl.function.method.static", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 299, - "symbol": "NMBMatcherStatus.from(bool:)", - "symbol_kind": "source.lang.swift.decl.function.method.static", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 303, - "symbol": "NMBMatcherStatus.toSwift()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/Matcher.swift", - "line": 319, - "symbol": "MatcherStatus.toObjectiveC()", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift", - "line": 9, - "symbol": "NMBContainer.contains(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift", - "line": 23, - "symbol": "NMBCollection.count", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift", - "line": 37, - "symbol": "NMBOrderedCollection.object(at:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift", - "line": 42, - "symbol": "NMBDoubleConvertible", - "symbol_kind": "source.lang.swift.decl.protocol", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift", - "line": 43, - "symbol": "NMBDoubleConvertible.doubleValue", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift", - "line": 60, - "symbol": "Date.doubleValue", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift", - "line": 66, - "symbol": "NSDate.doubleValue", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift", - "line": 73, - "symbol": "Date.testDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift", - "line": 79, - "symbol": "NSDate.testDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift", - "line": 91, - "symbol": "NMBComparable.NMB_compare(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift", - "line": 95, - "symbol": "NSNumber.NMB_compare(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/MatcherProtocols.swift", - "line": 101, - "symbol": "NSString.NMB_compare(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/PostNotification.swift", - "line": 92, - "symbol": "postNotifications(_:from:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/PostNotification.swift", - "line": 100, - "symbol": "postDistributedNotifications(_:from:names:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/RaisesException.swift", - "line": 144, - "symbol": "NMBObjCRaiseExceptionMatcher", - "symbol_kind": "source.lang.swift.decl.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/RaisesException.swift", - "line": 168, - "symbol": "NMBObjCRaiseExceptionMatcher.named", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/RaisesException.swift", - "line": 180, - "symbol": "NMBObjCRaiseExceptionMatcher.reason", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/RaisesException.swift", - "line": 192, - "symbol": "NMBObjCRaiseExceptionMatcher.userInfo", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/RaisesException.swift", - "line": 204, - "symbol": "NMBObjCRaiseExceptionMatcher.satisfyingBlock", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/RaisesException.swift", - "line": 218, - "symbol": "NMBMatcher.raiseExceptionMatcher()", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/SatisfyAllOf.swift", - "line": 40, - "symbol": "&&(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/SatisfyAllOf.swift", - "line": 90, - "symbol": "&&(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/SatisfyAllOf.swift", - "line": 99, - "symbol": "NMBMatcher.satisfyAllOfMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift", - "line": 40, - "symbol": "||(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift", - "line": 90, - "symbol": "||(_:_:)", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/SatisfyAnyOf.swift", - "line": 99, - "symbol": "NMBMatcher.satisfyAnyOfMatcher(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/ThrowAssertion.swift", - "line": 84, - "symbol": "throwAssertion()", - "symbol_kind": "source.lang.swift.decl.function.free", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/ToSucceed.swift", - "line": 7, - "symbol": "ToSucceedResult.succeeded", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Matchers/ToSucceed.swift", - "line": 8, - "symbol": "ToSucceedResult.failed(reason:)", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Polling.swift", - "line": 38, - "symbol": "PollingDefaults.timeout", - "symbol_kind": "source.lang.swift.decl.var.static", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Polling.swift", - "line": 39, - "symbol": "PollingDefaults.pollInterval", - "symbol_kind": "source.lang.swift.decl.var.static", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Requirement.swift", - "line": 3, - "symbol": "RequireError", - "symbol_kind": "source.lang.swift.decl.struct", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Requirement.swift", - "line": 6, - "symbol": "SyncRequirement", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Requirement.swift", - "line": 74, - "symbol": "SyncRequirement", - "symbol_kind": "source.lang.swift.decl.struct", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Requirement.swift", - "line": 75, - "symbol": "SyncRequirement.expression", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Requirement.swift", - "line": 81, - "symbol": "SyncRequirement.location", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Requirement.swift", - "line": 83, - "symbol": "SyncRequirement.init(expression:customError:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Requirement.swift", - "line": 88, - "symbol": "SyncRequirement.verify(_:_:_:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Requirement.swift", - "line": 143, - "symbol": "AsyncRequirement", - "symbol_kind": "source.lang.swift.decl.struct", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Requirement.swift", - "line": 144, - "symbol": "AsyncRequirement.expression", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Requirement.swift", - "line": 150, - "symbol": "AsyncRequirement.location", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Requirement.swift", - "line": 152, - "symbol": "AsyncRequirement.init(expression:customError:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Requirement.swift", - "line": 157, - "symbol": "AsyncRequirement.verify(_:_:_:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Requirement.swift", - "line": 454, - "symbol": "AsyncRequirement", - "symbol_kind": "source.lang.swift.decl.extension", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/NimbleTimeInterval.swift", - "line": 11, - "symbol": "NimbleTimeInterval.seconds(_:)", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/NimbleTimeInterval.swift", - "line": 12, - "symbol": "NimbleTimeInterval.milliseconds(_:)", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/NimbleTimeInterval.swift", - "line": 13, - "symbol": "NimbleTimeInterval.microseconds(_:)", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/NimbleTimeInterval.swift", - "line": 14, - "symbol": "NimbleTimeInterval.nanoseconds(_:)", - "symbol_kind": "source.lang.swift.decl.enumelement", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/NimbleTimeInterval.swift", - "line": 18, - "symbol": "NimbleTimeInterval.dispatchTimeInterval", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/NimbleTimeInterval.swift", - "line": 41, - "symbol": "NimbleTimeInterval.nanoseconds", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/NimbleTimeInterval.swift", - "line": 64, - "symbol": "NimbleTimeInterval.timeInterval", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/NimbleTimeInterval.swift", - "line": 75, - "symbol": "TimeInterval.nimbleInterval", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/NimbleTimeInterval.swift", - "line": 83, - "symbol": "Date.advanced(by:)", - "symbol_kind": "source.lang.swift.decl.function.method.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/SourceLocation.swift", - "line": 11, - "symbol": "FileString", - "symbol_kind": "source.lang.swift.decl.typealias", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/SourceLocation.swift", - "line": 14, - "symbol": "SourceLocation", - "symbol_kind": "source.lang.swift.decl.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/SourceLocation.swift", - "line": 15, - "symbol": "SourceLocation.file", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/SourceLocation.swift", - "line": 16, - "symbol": "SourceLocation.line", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/SourceLocation.swift", - "line": 28, - "symbol": "SourceLocation.description", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/Stringers.swift", - "line": 27, - "symbol": "TestOutputStringConvertible.testDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/Stringers.swift", - "line": 31, - "symbol": "Double.testDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/Stringers.swift", - "line": 37, - "symbol": "Float.testDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/Stringers.swift", - "line": 43, - "symbol": "NSNumber.testDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/Stringers.swift", - "line": 65, - "symbol": "Array.testDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/Stringers.swift", - "line": 72, - "symbol": "AnySequence.testDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/Stringers.swift", - "line": 90, - "symbol": "NSArray.testDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/Stringers.swift", - "line": 97, - "symbol": "NSIndexSet.testDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/Stringers.swift", - "line": 104, - "symbol": "String.testDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/Stringers.swift", - "line": 110, - "symbol": "Data.testDescription", - "symbol_kind": "source.lang.swift.decl.var.instance", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/Stringers.swift", - "line": 144, - "symbol": "NMBStringer", - "symbol_kind": "source.lang.swift.decl.class", - "warning": "undocumented" - }, - { - "file": "/Users/you/workspace/Nimble/Sources/Nimble/Utils/Stringers.swift", - "line": 145, - "symbol": "NMBStringer.stringify(_:)", - "symbol_kind": "source.lang.swift.decl.function.method.class", - "warning": "undocumented" - } - ], - "source_directory": "/Users/you/workspace/Nimble" -} \ No newline at end of file diff --git a/script/build_docs b/script/build_docs new file mode 100755 index 000000000..88aa81a6f --- /dev/null +++ b/script/build_docs @@ -0,0 +1,12 @@ +#!/usr/bin/env sh + +export DOCC_JSON_PRETTYPRINT="YES" + +mkdir -p docs + +swift package --allow-writing-to-directory docs \ + generate-documentation --target Nimble \ + --disable-indexing \ + --transform-for-static-hosting \ + --hosting-base-path 'https://quick.github.io/Nimble' \ + --output-path docs diff --git a/script/build_docs.zsh b/script/build_docs.zsh deleted file mode 100755 index 7d73e1fa0..000000000 --- a/script/build_docs.zsh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/zsh - -# Created by Jesse Squires -# https://www.jessesquires.com -# -# Copyright © 2020-present Jesse Squires -# -# Jazzy: https://github.com/realm/jazzy/releases/latest -# Generates documentation using jazzy and checks for installation. - -bundle exec jazzy \ - --clean \ - --author "Nimble Contributors" \ - --author_url "https://github.com/Quick/Nimble" \ - --github_url "https://github.com/Quick/Nimble" \ - --module "Nimble" \ - --source-directory . \ - --readme "README.md" \ - -x -scheme,Nimble \ - --output docs/ diff --git a/script/release b/script/release index 742dbcfdb..ba0d03394 100755 --- a/script/release +++ b/script/release @@ -127,11 +127,7 @@ else git add ${PODSPEC} || { restore_podspec; die "Failed to add ${PODSPEC} to INDEX"; } - echo "--- Updating Docs ---" - ./script/build_docs.zsh - git add docs || { git co docs; die "Failed to add docs to INDEX"; } - - git commit -m "[$VERSION_TAG] Update docs and podspec" || { restore_podspec; die "Failed to push updated version: $VERSION"; } + git commit -m "[$VERSION_TAG] Update podspec" || { restore_podspec; die "Failed to push updated version: $VERSION"; } fi RELEASE_NOTES="Version ${VERSION}. Open https://github.com/Quick/Nimble/releases/tag/$VERSION_TAG for full release notes."