# Table of Contents - [Quick Reference](#quick-reference) - [AsyncBehavior Class Reference](#asyncbehavior-class-reference) - [Classes Reference](#classes-reference) - [AsyncExample Class Reference](#asyncexample-class-reference) - [AsyncSpec Class Reference](#asyncspec-class-reference) - [Quick Reference](#quick-reference) - [AsyncExampleGroup Class Reference](#asyncexamplegroup-class-reference) - [Behavior Class Reference](#behavior-class-reference) - [Callsite Class Reference](#callsite-class-reference) - [ExampleBase Class Reference](#examplebase-class-reference) - [Example Class Reference](#example-class-reference) - [ExampleGroup Class Reference](#examplegroup-class-reference) - [ExampleMetadata Class Reference](#examplemetadata-class-reference) - [Protocols Reference](#protocols-reference) - [Extensions Reference](#extensions-reference) - [QuickTestSuite Class Reference](#quicktestsuite-class-reference) - [QCKConfiguration Class Reference](#qckconfiguration-class-reference) - [QuickConfiguration Class Reference](#quickconfiguration-class-reference) - [Structures Reference](#structures-reference) - [Functions Reference](#functions-reference) - [AsyncDSLUser Protocol Reference](#asyncdsluser-protocol-reference) - [SyncDSLUser Protocol Reference](#syncdsluser-protocol-reference) - [StopTest Structure Reference](#stoptest-structure-reference) - [TestState Structure Reference](#teststate-structure-reference) - [Type Aliases Reference](#type-aliases-reference) - [Page not found · GitHub Pages](#page-not-found-github-pages) - [Page not found · GitHub Pages](#page-not-found-github-pages) - [Site not found · GitHub Pages](#site-not-found-github-pages) - [Page not found · GitHub Pages](#page-not-found-github-pages) - [Page not found · GitHub Pages](#page-not-found-github-pages) --- # Quick Reference ![](http://f.cl.ly/items/0r1E192C1R0b2g2Q3h2w/QuickLogo_Color.png) [![Build Status](https://github.com/Quick/Quick/actions/workflows/ci-xcode.yml/badge.svg)](https://github.com/Quick/Quick/actions/workflows/ci-xcode.yml) [![CocoaPods](https://img.shields.io/cocoapods/v/Quick.svg)](https://cocoapods.org/pods/Quick) [![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Platforms](https://img.shields.io/cocoapods/p/Quick.svg)](https://cocoapods.org/pods/Quick) Quick is a behavior-driven development framework for Swift and Objective-C. Inspired by [RSpec](https://github.com/rspec/rspec) , [Specta](https://github.com/specta/specta) , and [Ginkgo](https://github.com/onsi/ginkgo) . ![](https://raw.githubusercontent.com/Quick/Assets/master/Screenshots/QuickSpec%20screenshot.png) // Swift import Quick import Nimble class TableOfContentsSpec: QuickSpec { override class func spec() { describe("the 'Documentation' directory") { it("has everything you need to get started") { let sections = Directory("Documentation").sections expect(sections).to(contain("Organized Tests with Quick Examples and Example Groups")) expect(sections).to(contain("Installing Quick")) } context("if it doesn't have what you're looking for") { it("needs to be updated") { let you = You(awesome: true) expect{you.submittedAnIssue}.toEventually(beTruthy()) } } } } } #### Nimble Quick comes together with [Nimble](https://github.com/Quick/Nimble) — a matcher framework for your tests. You can learn why `XCTAssert()` statements make your expectations unclear and how to fix that using Nimble assertions [here](./Documentation/en-us/NimbleAssertions.md) . Swift Version ------------- Certain versions of Quick and Nimble only support certain versions of Swift. Depending on which version of Swift your project uses, you should use specific versions of Quick and Nimble. Use the table below to determine which versions of Quick and Nimble are compatible with your project. | Swift version | Quick version | Nimble version | | --- | --- | --- | | Swift 5.2 | v3.0.0 or later | v9.0.0 or later | | Swift 4.2 / Swift 5 | v1.3.2 or later | v7.3.2 or later | | Swift 3 / Swift 4 | v1.0.0 or later | v5.0.0 or later | | Swift 2.2 / Swift 2.3 | v0.9.3 | v4.1.0 | Documentation ------------- All documentation can be found in the [Documentation folder](./Documentation) , including [detailed installation instructions](./Documentation/en-us/InstallingQuick.md) for CocoaPods, Carthage, Git submodules, Swift Package Manager, and more. For example, you can install Quick and [Nimble](https://github.com/Quick/Nimble) using CocoaPods by adding the following to your `Podfile`: # Podfile use_frameworks! target "MyApp" do # Normal libraries target 'MyApp_Tests' do inherit! :search_paths pod 'Quick' pod 'Nimble' end end You can also install Quick and Nimble using Swift Package Manager by adding the following to the dependencies section your `Package.swift`: dependencies: [\ .package(url: "https://github.com/Quick/Quick.git", from: "7.0.0"),\ .package(url: "https://github.com/Quick/Nimble.git", from: "12.0.0"),\ ], Projects using Quick -------------------- Over ten-thousand apps use either Quick and Nimble however, as they are not included in the app binary, neither appear in “Top Used Libraries” blog posts. Therefore, it would be greatly appreciated to remind contributors that their efforts are valued by compiling a list of organizations and projects that use them. Does your organization or project use Quick and Nimble? If yes, [please add your project to the list](https://github.com/Quick/Quick/wiki/Projects-using-Quick) . Who uses Quick -------------- Similar to projects using Quick, it would be nice to hear why people use Quick and Nimble. Are there features you love? Are there features that are just okay? Are there some features we have that no one uses? Have something positive to say about Quick (or Nimble)? If yes, [provide a testimonial here](https://github.com/Quick/Quick/wiki/Who-uses-Quick) . Privacy Statement ----------------- Quick is a library that is only used for testing and should never be included in the binary submitted to App Store Connect. Your app will be rejected if you do include Quick in the submitted binary because Quick uses private APIs to better integrate with Xcode. Despite not being shipped to Apple, Quick does not and will never collect any kind of analytics or tracking. License ------- Apache 2.0 license. See the [`LICENSE`](LICENSE) file for details. --- # AsyncBehavior Class Reference AsyncBehavior ============= A `[Behavior](../Classes/Behavior.html) ` encapsulates a set of examples that can be re-used in several locations using the `itBehavesLike` function with a context instance of the generic type. * `[name](#/s:5Quick13AsyncBehaviorC4nameSSvpZ) ` Override this variable if you want to provide custom name for this example group. #### Declaration * `[spec(_:)](#/s:5Quick13AsyncBehaviorC4specyyxycFZ) ` Override this method in your behavior to define a set of reusable examples. This behaves just like an example group defines using `describe` or `context`–it may contain any number of `beforeEach` and `afterEach` closures, as well as any number of examples (defined using `it`). #### Declaration #### Parameters | | | | --- | --- | | `_aContext_` | A closure that, when evaluated, returns a `Context` instance that provide the information on the subject. | --- # Classes Reference Classes ======= The following classes are available globally. * `[AsyncBehavior](#/s:5Quick13AsyncBehaviorC) ` A `[Behavior](Classes/Behavior.html) ` encapsulates a set of examples that can be re-used in several locations using the `itBehavesLike` function with a context instance of the generic type. [See more](Classes/AsyncBehavior.html) #### Declaration * `[AsyncExampleGroup](#/s:5Quick17AsyncExampleGroupC) ` Example groups are logical groupings of examples, defined with the `describe` and `context` functions. Example groups can share setup and teardown code. [See more](Classes/AsyncExampleGroup.html) #### Declaration * `[AsyncSpec](#/c:@M@Quick@objc(cs)AsyncSpec) ` Undocumented [See more](Classes/AsyncSpec.html) #### Declaration * `[Behavior](#/s:5Quick8BehaviorC) ` A `Behavior` encapsulates a set of examples that can be re-used in several locations using the `itBehavesLike` function with a context instance of the generic type. [See more](Classes/Behavior.html) #### Declaration * `[_CallsiteBase](#/c:@M@Quick@objc(cs)_CallsiteBase) ` Undocumented #### Declaration * `[_CallsiteBase](#/) ` * `[Callsite](#/c:@M@Quick@objc(cs)Callsite) ` An object encapsulating the file and line number at which a particular example is defined. [See more](Classes/Callsite.html) #### Declaration * `[QCKConfiguration](#/c:@M@Quick@objc(cs)QCKConfiguration) ` A configuration encapsulates various options you can use to configure Quick’s behavior. [See more](Classes/QCKConfiguration.html) #### Declaration * `[QuickConfiguration](#/) ` Subclass QuickConfiguration and override the `configure(_:)` class method in order to configure how Quick behaves when running specs, or to define shared examples that are used across spec files. [See more](Classes/QuickConfiguration.html) * `[ExampleGroup](#/c:@M@Quick@objc(cs)ExampleGroup) ` Example groups are logical groupings of examples, defined with the `describe` and `context` functions. Example groups can share setup and teardown code. [See more](Classes/ExampleGroup.html) #### Declaration * `[AsyncExample](#/c:@M@Quick@objc(cs)AsyncExample) ` Undocumented [See more](Classes/AsyncExample.html) #### Declaration * `[_ExampleBase](#/c:@M@Quick@objc(cs)_ExampleBase) ` Undocumented #### Declaration * `[_ExampleBase](#/) ` * `[ExampleBase](#/c:@M@Quick@objc(cs)ExampleBase) ` The common superclass of both Example and AsyncExample. This is mostly used for determining filtering (focusing or pending) and other cases where we want to apply something to any kind of example. [See more](Classes/ExampleBase.html) #### Declaration * `[Example](#/c:@M@Quick@objc(cs)Example) ` Undocumented [See more](Classes/Example.html) #### Declaration * `[_ExampleMetadataBase](#/c:@M@Quick@objc(cs)_ExampleMetadataBase) ` Undocumented #### Declaration * `[_ExampleMetadataBase](#/) ` * `[ExampleMetadata](#/c:@M@Quick@objc(cs)ExampleMetadata) ` A class that encapsulates information about an example, including the index at which the example was executed, as well as the example itself. [See more](Classes/ExampleMetadata.html) #### Declaration * `[QuickTestSuite](#/c:@M@Quick@objc(cs)QuickTestSuite) ` A base class for a class cluster of Quick test suites, that should correctly build dynamic test suites for XCTest to execute. [See more](Classes/QuickTestSuite.html) #### Declaration --- # AsyncExample Class Reference AsyncExample ============ Undocumented * `[description](#/c:@M@Quick@objc(cs)AsyncExample(py)description) ` Undocumented #### Declaration * `[name](#/c:@M@Quick@objc(cs)AsyncExample(py)name) ` The example name. A name is a concatenation of the name of the example group the example belongs to, followed by the description of the example itself. The example name is used to generate a test method selector to be displayed in Xcode’s test navigator. #### Declaration * `[run()](#/c:@M@Quick@objc(cs)AsyncExample(im)runWithCompletionHandler:)` Asynchronous Undocumented #### Declaration * `[runSkippedTest()](#/c:@M@Quick@objc(cs)AsyncExample(im)runSkippedTestWithCompletionHandler:)` Asynchronous Undocumented #### Declaration * `[==(_:_:)](#/s:5Quick12AsyncExampleC2eeoiySbAC_ACtFZ) ` Returns a boolean indicating whether two Example objects are equal. If two examples are defined at the exact same callsite, they must be equal. #### Declaration --- # AsyncSpec Class Reference AsyncSpec ========= Undocumented * `[current](#/c:@M@Quick@objc(cs)AsyncSpec(cpy)current) ` Returns the currently executing spec. Use in specs that require XCTestCase methods, e.g. expectation(description:). If you’re using `beforeSuite`/`afterSuite`, you should consider the `[currentSpec()](../Functions.html#/s:5Quick11currentSpecSo10XCTestCaseCSgyF) ` helper. #### Declaration * `[spec()](#/c:@M@Quick@objc(cs)AsyncSpec(cm)spec) ` Undocumented #### Declaration * `[defaultTestSuite](#/c:@M@Quick@objc(cs)AsyncSpec(cpy)defaultTestSuite) ` This method is used as a hook for the following two purposes 1. Performing all configurations 2. Gathering examples for each spec classes On Linux, those are done in `LinuxMain.swift` and `Quick.QCKMain`. But SwiftPM on macOS does not have the mechanism (test cases are automatically discovered powered by Objective-C runtime), so we needed the alternative way. #### Declaration * `[instancesRespond(to:)](#/c:@M@Quick@objc(cs)AsyncSpec(cm)instancesRespondToSelector:) ` This method is used as a hook for injecting test methods into the Objective-C runtime on individual test runs. When `xctest` runs a test on a single method, it does not call `[defaultTestSuite](../Classes/AsyncSpec.html#/c:@M@Quick@objc(cs)AsyncSpec(cpy)defaultTestSuite) ` on the test class but rather calls `instancesRespondToSelector:` to build its own suite. In normal conditions, Quick uses the implicit call to `[defaultTestSuite](../Classes/AsyncSpec.html#/c:@M@Quick@objc(cs)AsyncSpec(cpy)defaultTestSuite) ` to both generate examples and inject them as methods by way of `testInvocations`. Under single test conditions, there’s no implicit call to `[defaultTestSuite](../Classes/AsyncSpec.html#/c:@M@Quick@objc(cs)AsyncSpec(cpy)defaultTestSuite) ` so we make it explicitly here. #### Declaration * `[_qck_testMethodSelectors()](#/) ` * `[init()](#/) ` * `[init(name:testClosure:)](#/) ` * `[allTests](#/) ` --- # Quick Reference ![](http://f.cl.ly/items/0r1E192C1R0b2g2Q3h2w/QuickLogo_Color.png) [![Build Status](https://github.com/Quick/Quick/actions/workflows/ci-xcode.yml/badge.svg)](https://github.com/Quick/Quick/actions/workflows/ci-xcode.yml) [![CocoaPods](https://img.shields.io/cocoapods/v/Quick.svg)](https://cocoapods.org/pods/Quick) [![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Platforms](https://img.shields.io/cocoapods/p/Quick.svg)](https://cocoapods.org/pods/Quick) Quick is a behavior-driven development framework for Swift and Objective-C. Inspired by [RSpec](https://github.com/rspec/rspec) , [Specta](https://github.com/specta/specta) , and [Ginkgo](https://github.com/onsi/ginkgo) . ![](https://raw.githubusercontent.com/Quick/Assets/master/Screenshots/QuickSpec%20screenshot.png) // Swift import Quick import Nimble class TableOfContentsSpec: QuickSpec { override class func spec() { describe("the 'Documentation' directory") { it("has everything you need to get started") { let sections = Directory("Documentation").sections expect(sections).to(contain("Organized Tests with Quick Examples and Example Groups")) expect(sections).to(contain("Installing Quick")) } context("if it doesn't have what you're looking for") { it("needs to be updated") { let you = You(awesome: true) expect{you.submittedAnIssue}.toEventually(beTruthy()) } } } } } #### Nimble Quick comes together with [Nimble](https://github.com/Quick/Nimble) — a matcher framework for your tests. You can learn why `XCTAssert()` statements make your expectations unclear and how to fix that using Nimble assertions [here](./Documentation/en-us/NimbleAssertions.md) . Swift Version ------------- Certain versions of Quick and Nimble only support certain versions of Swift. Depending on which version of Swift your project uses, you should use specific versions of Quick and Nimble. Use the table below to determine which versions of Quick and Nimble are compatible with your project. | Swift version | Quick version | Nimble version | | --- | --- | --- | | Swift 5.2 | v3.0.0 or later | v9.0.0 or later | | Swift 4.2 / Swift 5 | v1.3.2 or later | v7.3.2 or later | | Swift 3 / Swift 4 | v1.0.0 or later | v5.0.0 or later | | Swift 2.2 / Swift 2.3 | v0.9.3 | v4.1.0 | Documentation ------------- All documentation can be found in the [Documentation folder](./Documentation) , including [detailed installation instructions](./Documentation/en-us/InstallingQuick.md) for CocoaPods, Carthage, Git submodules, Swift Package Manager, and more. For example, you can install Quick and [Nimble](https://github.com/Quick/Nimble) using CocoaPods by adding the following to your `Podfile`: # Podfile use_frameworks! target "MyApp" do # Normal libraries target 'MyApp_Tests' do inherit! :search_paths pod 'Quick' pod 'Nimble' end end You can also install Quick and Nimble using Swift Package Manager by adding the following to the dependencies section your `Package.swift`: dependencies: [\ .package(url: "https://github.com/Quick/Quick.git", from: "7.0.0"),\ .package(url: "https://github.com/Quick/Nimble.git", from: "12.0.0"),\ ], Projects using Quick -------------------- Over ten-thousand apps use either Quick and Nimble however, as they are not included in the app binary, neither appear in “Top Used Libraries” blog posts. Therefore, it would be greatly appreciated to remind contributors that their efforts are valued by compiling a list of organizations and projects that use them. Does your organization or project use Quick and Nimble? If yes, [please add your project to the list](https://github.com/Quick/Quick/wiki/Projects-using-Quick) . Who uses Quick -------------- Similar to projects using Quick, it would be nice to hear why people use Quick and Nimble. Are there features you love? Are there features that are just okay? Are there some features we have that no one uses? Have something positive to say about Quick (or Nimble)? If yes, [provide a testimonial here](https://github.com/Quick/Quick/wiki/Who-uses-Quick) . Privacy Statement ----------------- Quick is a library that is only used for testing and should never be included in the binary submitted to App Store Connect. Your app will be rejected if you do include Quick in the submitted binary because Quick uses private APIs to better integrate with Xcode. Despite not being shipped to Apple, Quick does not and will never collect any kind of analytics or tracking. License ------- Apache 2.0 license. See the [`LICENSE`](LICENSE) file for details. --- # AsyncExampleGroup Class Reference AsyncExampleGroup ================= Example groups are logical groupings of examples, defined with the `describe` and `context` functions. Example groups can share setup and teardown code. * `[description](#/s:s23CustomStringConvertibleP11descriptionSSvp) ` #### Declaration * `[examples](#/s:5Quick17AsyncExampleGroupC8examplesSayAA0bC0CGvp) ` Returns a list of examples that belong to this example group, or to any of its descendant example groups. #### Declaration --- # Behavior Class Reference Behavior ======== A `Behavior` encapsulates a set of examples that can be re-used in several locations using the `itBehavesLike` function with a context instance of the generic type. * `[name](#/s:5Quick8BehaviorC4nameSSvpZ) ` Override this variable if you want to provide custom name for this example group. #### Declaration * `[spec(_:)](#/s:5Quick8BehaviorC4specyyxycFZ) ` Override this method in your behavior to define a set of reusable examples. This behaves just like an example group defines using `describe` or `context`–it may contain any number of `beforeEach` and `afterEach` closures, as well as any number of examples (defined using `it`). #### Declaration #### Parameters | | | | --- | --- | | `_aContext_` | A closure that, when evaluated, returns a `Context` instance that provide the information on the subject. | --- # Callsite Class Reference Callsite ======== An object encapsulating the file and line number at which a particular example is defined. * `[file](#/c:@M@Quick@objc(cs)Callsite(py)file) ` The absolute path of the file in which an example is defined. #### Declaration * `[line](#/c:@M@Quick@objc(cs)Callsite(py)line) ` The line number on which an example is defined. #### Declaration * `[==(_:_:)](#/s:5Quick8CallsiteC2eeoiySbAC_ACtFZ) ` Returns a boolean indicating whether two Callsite objects are equal. If two callsites are in the same file and on the same line, they must be equal. #### Declaration --- # ExampleBase Class Reference ExampleBase =========== The common superclass of both Example and AsyncExample. This is mostly used for determining filtering (focusing or pending) and other cases where we want to apply something to any kind of example. * `[isSharedExample](#/c:@M@Quick@objc(cs)ExampleBase(py)isSharedExample) ` A boolean indicating whether the example is a shared example; i.e.: whether it is an example defined with `itBehavesLike`. #### Declaration * `[callsite](#/c:@M@Quick@objc(cs)ExampleBase(py)callsite) ` The site at which the example is defined. This must be set correctly in order for Xcode to highlight the correct line in red when reporting a failure. #### Declaration * `[name](#/c:@M@Quick@objc(cs)ExampleBase(py)name) ` The example name. A name is a concatenation of the name of the example group the example belongs to, followed by the description of the example itself. The example name is used to generate a test method selector to be displayed in Xcode’s test navigator. #### Declaration --- # Example Class Reference Example ======= Undocumented * `[description](#/c:@M@Quick@objc(cs)Example(py)description) ` Undocumented #### Declaration * `[name](#/c:@M@Quick@objc(cs)Example(py)name) ` The example name. A name is a concatenation of the name of the example group the example belongs to, followed by the description of the example itself. The example name is used to generate a test method selector to be displayed in Xcode’s test navigator. #### Declaration * `[run()](#/c:@M@Quick@objc(cs)Example(im)run) ` Undocumented #### Declaration * `[runSkippedTest()](#/c:@M@Quick@objc(cs)Example(im)runSkippedTest) ` Undocumented #### Declaration * `[==(_:_:)](#/s:5Quick7ExampleC2eeoiySbAC_ACtFZ) ` Returns a boolean indicating whether two Example objects are equal. If two examples are defined at the exact same callsite, they must be equal. #### Declaration --- # ExampleGroup Class Reference ExampleGroup ============ Example groups are logical groupings of examples, defined with the `describe` and `context` functions. Example groups can share setup and teardown code. * `[description](#/c:@M@Quick@objc(cs)ExampleGroup(py)description) ` Undocumented #### Declaration * `[examples](#/c:@M@Quick@objc(cs)ExampleGroup(py)examples) ` Undocumented #### Declaration * `[examples](#/) ` --- # ExampleMetadata Class Reference ExampleMetadata =============== A class that encapsulates information about an example, including the index at which the example was executed, as well as the example itself. * `[example](#/c:@M@Quick@objc(cs)ExampleMetadata(py)example) ` The example for which this metadata was collected. #### Declaration * `[exampleIndex](#/c:@M@Quick@objc(cs)ExampleMetadata(py)exampleIndex) ` The index at which this example was executed in the test suite. #### Declaration --- # Protocols Reference Protocols ========= The following protocols are available globally. * `[AsyncDSLUser](#/s:5Quick12AsyncDSLUserP) ` A protocol for defining the synchronous DSL usable from Quick synchronous specs. [See more](Protocols/AsyncDSLUser.html) #### Declaration * `[SyncDSLUser](#/s:5Quick11SyncDSLUserP) ` A protocol for defining the synchronous DSL usable from Quick synchronous specs. [See more](Protocols/SyncDSLUser.html) #### Declaration --- # Extensions Reference Extensions ========== The following extensions are available globally. * `[QuickSpec](#/c:objc(cs)QuickSpec) ` #### Declaration * `[QuickConfiguration](#/c:objc(cs)QuickConfiguration) ` #### Declaration --- # QuickTestSuite Class Reference QuickTestSuite ============== A base class for a class cluster of Quick test suites, that should correctly build dynamic test suites for XCTest to execute. * `[selectedTestSuite(forTestCaseWithName:testName:)](#/c:@M@Quick@objc(cs)QuickTestSuite(cm)selectedTestSuiteForTestCaseWithName:testName:) ` Construct a test suite for a specific, selected subset of tests and test cases (rather than the default, which as all test cases). If this method is called multiple times for the same test case class, e.g.. FooSpec, testBar FooSpec, testBar It is expected that the first call should return a valid test suite, and all subsequent calls should return `nil`. #### Declaration #### Parameters | | | | --- | --- | | `_name_` | The name of the `XCTastCase`/`QuickSpec` subclass. | | `_testName_` | The name of the individual test to run (if specified). | #### Return Value A valid test case (if tests were added to the test suite to run), or nil (if tests were not added to the test suite to run) --- # QCKConfiguration Class Reference QCKConfiguration ================ A configuration encapsulates various options you can use to configure Quick’s behavior. * `[runAllWhenEverythingFiltered](#/s:5Quick16QCKConfigurationC28runAllWhenEverythingFilteredSbvp) ` Run all examples if none match the configured filters. True by default. #### Declaration * `[include(_:)](#/s:5Quick16QCKConfigurationC7includeyySbAA11ExampleBaseCcF) ` Registers an inclusion filter. All examples are filtered using all inclusion filters. The remaining examples are run. If no examples remain, all examples are run. #### Declaration #### Parameters | | | | --- | --- | | `_filter_` | A filter that, given an example, returns a value indicating whether that example should be included in the examples that are run. | * `[exclude(_:)](#/s:5Quick16QCKConfigurationC7excludeyySbAA11ExampleBaseCcF) ` Registers an exclusion filter. All examples that remain after being filtered by the inclusion filters are then filtered via all exclusion filters. #### Declaration #### Parameters | | | | --- | --- | | `_filter_` | A filter that, given an example, returns a value indicating whether that example should be excluded from the examples that are run. | * `[objc_beforeEach(_:)](#/c:@M@Quick@objc(cs)QCKConfiguration(im)beforeEachWithMetadata:) ` Undocumented #### Declaration * `[beforeEach(_:)](#/s:5Quick16QCKConfigurationC10beforeEachyyyAA15ExampleMetadataCKScMYccF) ` Undocumented #### Declaration * `[beforeEach(_:)](#/) ` * `[beforeEach(_:)](#/s:5Quick16QCKConfigurationC10beforeEachyyyyKScMYccF) ` Like Quick.DSL.beforeEach, this configures Quick to execute the given closure before each example that is run. The closure passed to this method is executed before each example Quick runs, globally across the test suite. You may call this method multiple times across multiple +\[QuickConfigure configure:\] methods in order to define several closures to run before each example. Note that, since Quick makes no guarantee as to the order in which +\[QuickConfiguration configure:\] methods are evaluated, there is no guarantee as to the order in which beforeEach closures are evaluated either. Multiple beforeEach defined on a single configuration, however, will be executed in the order they’re defined. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure to be executed before each example in the test suite. | * `[objc_afterEach(_:)](#/c:@M@Quick@objc(cs)QCKConfiguration(im)afterEachWithMetadata:) ` Undocumented #### Declaration * `[afterEach(_:)](#/s:5Quick16QCKConfigurationC9afterEachyyyAA15ExampleMetadataCKScMYccF) ` Undocumented #### Declaration * `[afterEach(_:)](#/) ` * `[afterEach(_:)](#/s:5Quick16QCKConfigurationC9afterEachyyyyKScMYccF) ` Like Quick.DSL.afterEach, this configures Quick to execute the given closure after each example that is run. The closure passed to this method is executed after each example Quick runs, globally across the test suite. You may call this method multiple times across multiple +\[QuickConfigure configure:\] methods in order to define several closures to run after each example. Note that, since Quick makes no guarantee as to the order in which +\[QuickConfiguration configure:\] methods are evaluated, there is no guarantee as to the order in which afterEach closures are evaluated either. Multiple afterEach defined on a single configuration, however, will be executed in the order they’re defined. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure to be executed before each example in the test suite. | * `[aroundEach(_:)](#/s:5Quick16QCKConfigurationC10aroundEachyyyyycKScMYccF) ` Like Quick.DSL.aroundEach, this configures Quick to wrap each example with the given closure. The closure passed to this method will wrap all examples globally across the test suite. You may call this method multiple times across multiple +\[QuickConfigure configure:\] methods in order to define several closures to wrap all examples. Note that, since Quick makes no guarantee as to the order in which +\[QuickConfiguration configure:\] methods are evaluated, there is no guarantee as to the order in which aroundEach closures are evaluated. However, aroundEach does always guarantee proper nesting of operations: cleanup within aroundEach closures will always happen in the reverse order of setup. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure to be executed before each example in the test suite. | * `[aroundEach(_:)](#/s:5Quick16QCKConfigurationC10aroundEachyyyyyYacYaKcF) ` Like Quick.DSL.aroundEach, this configures Quick to wrap each example with the given closure. The closure passed to this method will wrap all examples globally across the test suite. You may call this method multiple times across multiple +\[QuickConfigure configure:\] methods in order to define several closures to wrap all examples. Note that, since Quick makes no guarantee as to the order in which +\[QuickConfiguration configure:\] methods are evaluated, there is no guarantee as to the order in which aroundEach closures are evaluated. However, aroundEach does always guarantee proper nesting of operations: cleanup within aroundEach closures will always happen in the reverse order of setup. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure to be executed before each example in the test suite. | * `[aroundEach(_:)](#/s:5Quick16QCKConfigurationC10aroundEachyyyAA15ExampleMetadataC_yyctKScMYccF) ` Identical to `[aroundEach(_:)](../Classes/QCKConfiguration.html#/s:5Quick16QCKConfigurationC10aroundEachyyyyycKScMYccF) `, except the closure receives metadata about the example that the closure wraps. #### Declaration * `[aroundEach(_:)](#/s:5Quick16QCKConfigurationC10aroundEachyyyAA15ExampleMetadataC_yyYactYaKcF) ` Identical to `[aroundEach(_:)](../Classes/QCKConfiguration.html#/s:5Quick16QCKConfigurationC10aroundEachyyyyycKScMYccF) `, except the closure receives metadata about the example that the closure wraps. #### Declaration * `[beforeSuite(_:)](#/s:5Quick16QCKConfigurationC11beforeSuiteyyyyKScMYccF) ` Like Quick.DSL.beforeSuite, this configures Quick to execute the given closure prior to any and all examples that are run. The two methods are functionally equivalent. #### Declaration * `[afterSuite(_:)](#/s:5Quick16QCKConfigurationC10afterSuiteyyyyKScMYccF) ` Like Quick.DSL.afterSuite, this configures Quick to execute the given closure after all examples have been run. The two methods are functionally equivalent. #### Declaration --- # QuickConfiguration Class Reference QuickConfiguration ================== Subclass QuickConfiguration and override the `configure(_:)` class method in order to configure how Quick behaves when running specs, or to define shared examples that are used across spec files. * `[configure(_:)](#/) ` This method is executed on each subclass of this class before Quick runs any examples. You may override this method on as many subclasses as you like, but there is no guarantee as to the order in which these methods are executed. You can override this method in order to: 1. Configure how Quick behaves, by modifying properties on the Configuration object. Setting the same properties in several methods has undefined behavior. 2. Define shared examples using `sharedExamples`. --- # Structures Reference Structures ========== The following structures are available globally. * `[StopTest](#/s:5Quick8StopTestV) ` Stops execution of test when thrown inside an `it` block, emitting a failure message. Unlike other errors that can be thrown during a test, `StopTest` represents an expected failure, with the failure description tied to the file and line it is thrown on. Tests can also be stopped silently by throwing `[StopTest.silently](Structs/StopTest.html#/s:5Quick8StopTestV8silentlyACvpZ) `. The primary use case of `StopTest` as opposed to normal error logging is when a condition is critical for the remainder of the test. It serves as an alternative to force unwrapping or out-of-range subscripts that could be cause the test to crash. For example, guard let value = getValue() else { throw StopTest("Got a null value from `getValue()`) } When used with Nimble, any expectation can stop a test by adding `.onFailure(throw: StopTest.silently)`. For example, try expect(array).toEventually(haveCount(10)).onFailure(throw: StopTest.silently) [See more](Structs/StopTest.html) #### Declaration * `[TestState](#/s:5Quick9TestStateV) ` A property wrapper that will automatically reset the contained value after each test. [See more](Structs/TestState.html) #### Declaration --- # Functions Reference Functions ========= The following functions are available globally. * `[currentSpec()](#/s:5Quick11currentSpecSo10XCTestCaseCSgyF) ` A way to get either the current QuickSpec or AsyncSpec, whichever is relevant to the given context This is intended to be used inside of `beforeSuite` or `afterSuite` closures, in order to access `XCTestCase` APIs (e.g. `expectation(description:)` or `waitForExpectations()`) This does not work with standard XCTest APIs - this does not provide the currently executing `XCTestCase` instance for tests defined using `XCTest`. #### Declaration --- # AsyncDSLUser Protocol Reference AsyncDSLUser ============ A protocol for defining the synchronous DSL usable from Quick synchronous specs. [](#/beforeSuite) ### beforeSuite * `[beforeSuite(_:)](#/s:5Quick12AsyncDSLUserPAAE11beforeSuiteyyyyKScMYccFZ)` Extension method Defines a closure to be run prior to any examples in the test suite. You may define an unlimited number of these closures, but there is no guarantee as to the order in which they’re run. If the test suite crashes before the first example is run, this closure will not be executed. beforeSuite intentionally does not allow async methods to be called. This is to ensure that in a mixed synchronous & asynchronous environment, beforeSuite hooks are truly called before any tests in the the suite run. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure to be run prior to any examples in the test suite. | [](#/afterSuite) ### afterSuite * `[afterSuite(_:)](#/s:5Quick12AsyncDSLUserPAAE10afterSuiteyyyyKScMYccFZ)` Extension method Defines a closure to be run after all of the examples in the test suite. You may define an unlimited number of these closures, but there is no guarantee as to the order in which they’re run. If the test suite crashes before all examples are run, this closure will not be executed. afterSuite intentionally does not allow async methods to be called. This is to ensure that in a mixed synchronous & asynchronous environment, beforeSuite hooks are truly called after all tests in the the suite have run. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure to be run after all of the examples in the test suite. | [](#/Example%20groups) ### Example groups * `[describe(_:closure:)](#/s:5Quick12AsyncDSLUserPAAE8describe_7closureySS_yyXEtFZ)` Extension method Defines an example group. Example groups are logical groupings of examples. Example groups can share setup and teardown code. #### Declaration #### Parameters | | | | --- | --- | | `_description_` | An arbitrary string describing the example group. | | `_closure_` | A closure that can contain other examples. | * `[context(_:closure:)](#/s:5Quick12AsyncDSLUserPAAE7context_7closureySS_yyXEtFZ)` Extension method Defines an example group. Equivalent to `describe`. #### Declaration [](#/beforeEach) ### beforeEach * `[beforeEach(_:)](#/s:5Quick12AsyncDSLUserPAAE10beforeEachyyyyYaKcFZ)` Extension method Defines a closure to be run prior to each example in the current example group. This closure is not run for pending or otherwise disabled examples. An example group may contain an unlimited number of beforeEach. They’ll be run in the order they’re defined, but you shouldn’t rely on that behavior. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure to be run prior to each example. | * `[beforeEach(_:)](#/s:5Quick12AsyncDSLUserPAAE10beforeEachyyyAA15ExampleMetadataCYaKcFZ)` Extension method Identical to Quick.DSL.beforeEach, except the closure is provided with metadata on the example that the closure is being run prior to. #### Declaration [](#/AfterEach) ### AfterEach * `[afterEach(_:)](#/s:5Quick12AsyncDSLUserPAAE9afterEachyyyyYaKcFZ)` Extension method Defines a closure to be run after each example in the current example group. This closure is not run for pending or otherwise disabled examples. An example group may contain an unlimited number of afterEach. They’ll be run in the order they’re defined, but you shouldn’t rely on that behavior. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure to be run after each example. | * `[afterEach(_:)](#/s:5Quick12AsyncDSLUserPAAE9afterEachyyyAA15ExampleMetadataCYaKcFZ)` Extension method Identical to Quick.DSL.afterEach, except the closure is provided with metadata on the example that the closure is being run after. #### Declaration [](#/aroundEach) ### aroundEach * `[aroundEach(_:)](#/s:5Quick12AsyncDSLUserPAAE10aroundEachyyyyyYacYaKcFZ)` Extension method Defines a closure to that wraps each example in the current example group. This closure is not run for pending or otherwise disabled examples. The closure you pass to aroundEach receives a callback as its argument, which it MUST call exactly one for the example to run properly: aroundEach { runExample in doSomeSetup() runExample() doSomeCleanup() } This callback is particularly useful for test decartions that can’t split into a separate beforeEach and afterEach. For example, running each example in its own autorelease pool (provided by Task) requires aroundEach: aroundEach { runExample in autoreleasepool { runExample() } checkObjectsNoLongerRetained() } You can also use aroundEach to guarantee proper nesting of setup and cleanup operations in situations where their relative order matters. An example group may contain an unlimited number of aroundEach callbacks. They will nest inside each other, with the first declared in the group nested at the outermost level. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure that wraps around each example. | * `[aroundEach(_:)](#/s:5Quick12AsyncDSLUserPAAE10aroundEachyyyAA15ExampleMetadataC_yyYactYaKcFZ)` Extension method Identical to Quick.DSL.aroundEach, except the closure receives metadata about the example that the closure wraps. #### Declaration [](#/Examples) ### Examples * `[justBeforeEach(_:)](#/s:5Quick12AsyncDSLUserPAAE14justBeforeEachyyyyYaKcFZ)` Extension method Defines a closure to be run prior to each example but after any beforeEach blocks. This closure is not run for pending or otherwise disabled examples. An example group may contain an unlimited number of justBeforeEach. They’ll be run in the order they’re defined, but you shouldn’t rely on that behavior. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure to be run prior to each example and after any beforeEach blocks | * `[it(_:file:line:closure:)](#/s:5Quick12AsyncDSLUserPAAE2it_4file4line7closureySS_SSSuyyYaKctFZ)` Extension method Defines an example. Examples use assertions to demonstrate how code should behave. These are like “tests” in XCTest. #### Declaration #### Parameters | | | | --- | --- | | `_description_` | An arbitrary string describing what the example is meant to specify. | | `_closure_` | A closure that can contain assertions. | | `_file_` | The absolute path to the file containing the example. A sensible default is provided. | | `_line_` | The line containing the example. A sensible default is provided. | [](#/Shared%20Examples) ### Shared Examples * `[itBehavesLike(_:file:line:context:)](#/s:5Quick12AsyncDSLUserPAAE13itBehavesLike_4file4line7contextyAA0B8BehaviorCyqd__Gm_SSSuqd__yctlFZ)` Extension method Inserts the examples defined using a `[AsyncBehavior](../Classes/AsyncBehavior.html) ` into the current example group. The shared examples are executed at this location, as if they were written out manually. This function also passes a strongly-typed context that can be evaluated to give the shared examples extra information on the subject of the example. #### Declaration #### Parameters | | | | --- | --- | | `_behavior_` | The type of `[AsyncBehavior](../Classes/AsyncBehavior.html) ` class defining the example group to be executed. | | `_context_` | A closure that, when evaluated, returns an instance of `[Behavior](../Classes/Behavior.html) `‘s context type to provide its example group with extra information on the subject of the example. | | `_file_` | The absolute path to the file containing the current example group. A sensible default is provided. | | `_line_` | The line containing the current example group. A sensible default is provided. | [](#/Pending) ### Pending * `[pending(_:file:line:closure:)](#/s:5Quick12AsyncDSLUserPAAE7pending_4file4line7closureySS_SSSuyyYaKctFZ)` Extension method Defines an example or example group that should not be executed. Use `pending` to temporarily disable examples or groups that should not be run yet. #### Declaration #### Parameters | | | | --- | --- | | `_description_` | An arbitrary string describing the example or example group. | | `_closure_` | A closure that will not be evaluated. | [](#/Defocused) ### Defocused * `[xdescribe(_:closure:)](#/s:5Quick12AsyncDSLUserPAAE9xdescribe_7closureySS_yyXEtFZ)` Extension method Use this to quickly mark a `describe` closure as pending. This disables all examples within the closure. #### Declaration * `[xcontext(_:closure:)](#/s:5Quick12AsyncDSLUserPAAE8xcontext_7closureySS_yyXEtFZ)` Extension method Use this to quickly mark a `context` closure as pending. This disables all examples within the closure. #### Declaration * `[xit(_:file:line:closure:)](#/s:5Quick12AsyncDSLUserPAAE3xit_4file4line7closureySS_SSSuyyYaKctFZ)` Extension method Use this to quickly mark an `it` closure as pending. This disables the example and ensures the code within the closure is never run. #### Declaration * `[xitBehavesLike(_:file:line:context:)](#/s:5Quick12AsyncDSLUserPAAE14xitBehavesLike_4file4line7contextyAA0B8BehaviorCyqd__Gm_SSSuqd__yctlFZ)` Extension method Use this to quickly mark an `itBehavesLike` closure as pending. This disables the example group defined by this behavior and ensures the code within is never run. #### Declaration [](#/Focused) ### Focused * `[fdescribe(_:closure:)](#/s:5Quick12AsyncDSLUserPAAE9fdescribe_7closureySS_yyXEtFZ)` Extension method Use this to quickly focus a `describe` closure, focusing the examples in the closure. If any examples in the test suite are focused, only those examples are executed. This trumps any explicitly focused or unfocused examples within the closure–they are all treated as focused. #### Declaration * `[fcontext(_:closure:)](#/s:5Quick12AsyncDSLUserPAAE8fcontext_7closureySS_yyXEtFZ)` Extension method Use this to quickly focus a `context` closure. Equivalent to `fdescribe`. #### Declaration * `[fit(_:file:line:closure:)](#/s:5Quick12AsyncDSLUserPAAE3fit_4file4line7closureySS_SSSuyyYaKctFZ)` Extension method Use this to quickly focus an `it` closure, focusing the example. If any examples in the test suite are focused, only those examples are executed. #### Declaration * `[fitBehavesLike(_:file:line:context:)](#/s:5Quick12AsyncDSLUserPAAE14fitBehavesLike_4file4line7contextyAA0B8BehaviorCyqd__Gm_SSSuqd__yctlFZ)` Extension method Use this to quickly focus on `itBehavesLike` closure. #### Declaration --- # SyncDSLUser Protocol Reference SyncDSLUser =========== A protocol for defining the synchronous DSL usable from Quick synchronous specs. [](#/beforeSuite) ### beforeSuite * `[beforeSuite(_:)](#/s:5Quick11SyncDSLUserPAAE11beforeSuiteyyyyKScMYccFZ)` Extension method Defines a closure to be run prior to any examples in the test suite. You may define an unlimited number of these closures, but there is no guarantee as to the order in which they’re run. If the test suite crashes before the first example is run, this closure will not be executed. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure to be run prior to any examples in the test suite. | [](#/afterSuite) ### afterSuite * `[afterSuite(_:)](#/s:5Quick11SyncDSLUserPAAE10afterSuiteyyyyKScMYccFZ)` Extension method Defines a closure to be run after all of the examples in the test suite. You may define an unlimited number of these closures, but there is no guarantee as to the order in which they’re run. If the test suite crashes before all examples are run, this closure will not be executed. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure to be run after all of the examples in the test suite. | [](#/sharedExamples) ### sharedExamples * `[sharedExamples(_:closure:)](#/s:5Quick11SyncDSLUserPAAE14sharedExamples_7closureySS_yyctFZ)` Extension method Defines a group of shared examples. These examples can be re-used in several locations by using the `itBehavesLike` function. #### Declaration #### Parameters | | | | --- | --- | | `_name_` | The name of the shared example group. This must be unique across all shared example groups defined in a test suite. | | `_closure_` | A closure containing the examples. This behaves just like an example group defined using `describe` or `context`–the closure may contain any number of `beforeEach` and `afterEach` closures, as well as any number of examples (defined using `it`). | * `[sharedExamples(_:closure:)](#/s:5Quick11SyncDSLUserPAAE14sharedExamples_7closureySS_ySDySSypGycctFZ)` Extension method Defines a group of shared examples. These examples can be re-used in several locations by using the `itBehavesLike` function. The closure takes a `[SharedExampleContext](../Typealiases.html#/s:5Quick20SharedExampleContexta) ` as an argument. This context is a function that can be executed to retrieve parameters passed in via an `itBehavesLike` function. #### Declaration #### Parameters | | | | --- | --- | | `_name_` | The name of the shared example group. This must be unique across all shared example groups defined in a test suite. | | `_closure_` | A closure containing the examples. This behaves just like an example group defined using `describe` or `context`–the closure may contain any number of `beforeEach` and `afterEach` closures, as well as any number of examples (defined using `it`). | [](#/Example%20groups) ### Example groups * `[describe(_:closure:)](#/s:5Quick11SyncDSLUserPAAE8describe_7closureySS_yyXEtFZ)` Extension method Defines an example group. Example groups are logical groupings of examples. Example groups can share setup and teardown code. #### Declaration #### Parameters | | | | --- | --- | | `_description_` | An arbitrary string describing the example group. | | `_closure_` | A closure that can contain other examples. | * `[context(_:closure:)](#/s:5Quick11SyncDSLUserPAAE7context_7closureySS_yyXEtFZ)` Extension method Defines an example group. Equivalent to `describe`. #### Declaration [](#/beforeEach) ### beforeEach * `[beforeEach(_:)](#/s:5Quick11SyncDSLUserPAAE10beforeEachyyyyKScMYccFZ)` Extension method Defines a closure to be run prior to each example in the current example group. This closure is not run for pending or otherwise disabled examples. An example group may contain an unlimited number of beforeEach. They’ll be run in the order they’re defined, but you shouldn’t rely on that behavior. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure to be run prior to each example. | * `[beforeEach(_:)](#/s:5Quick11SyncDSLUserPAAE10beforeEachyyyAA15ExampleMetadataCKScMYccFZ)` Extension method Identical to Quick.DSL.beforeEach, except the closure is provided with metadata on the example that the closure is being run prior to. #### Declaration [](#/AfterEach) ### AfterEach * `[afterEach(_:)](#/s:5Quick11SyncDSLUserPAAE9afterEachyyyyKScMYccFZ)` Extension method Defines a closure to be run after each example in the current example group. This closure is not run for pending or otherwise disabled examples. An example group may contain an unlimited number of afterEach. They’ll be run in the order they’re defined, but you shouldn’t rely on that behavior. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure to be run after each example. | * `[afterEach(_:)](#/s:5Quick11SyncDSLUserPAAE9afterEachyyyAA15ExampleMetadataCKScMYccFZ)` Extension method Identical to Quick.DSL.afterEach, except the closure is provided with metadata on the example that the closure is being run after. #### Declaration [](#/aroundEach) ### aroundEach * `[aroundEach(_:)](#/s:5Quick11SyncDSLUserPAAE10aroundEachyyyyycKScMYccFZ)` Extension method Defines a closure to that wraps each example in the current example group. This closure is not run for pending or otherwise disabled examples. The closure you pass to aroundEach receives a callback as its argument, which it MUST call exactly one for the example to run properly: aroundEach { runExample in doSomeSetup() runExample() doSomeCleanup() } This callback is particularly useful for test decartions that can’t split into a separate beforeEach and afterEach. For example, running each example in its own autorelease pool (provided by Task) requires aroundEach: aroundEach { runExample in autoreleasepool { runExample() } checkObjectsNoLongerRetained() } You can also use aroundEach to guarantee proper nesting of setup and cleanup operations in situations where their relative order matters. An example group may contain an unlimited number of aroundEach callbacks. They will nest inside each other, with the first declared in the group nested at the outermost level. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure that wraps around each example. | * `[aroundEach(_:)](#/s:5Quick11SyncDSLUserPAAE10aroundEachyyyAA15ExampleMetadataC_yyctKScMYccFZ)` Extension method Identical to Quick.DSL.aroundEach, except the closure receives metadata about the example that the closure wraps. #### Declaration [](#/Examples) ### Examples * `[justBeforeEach(_:)](#/s:5Quick11SyncDSLUserPAAE14justBeforeEachyyyyKScMYccFZ)` Extension method Defines a closure to be run prior to each example but after any beforeEach blocks. This closure is not run for pending or otherwise disabled examples. An example group may contain an unlimited number of justBeforeEach. They’ll be run in the order they’re defined, but you shouldn’t rely on that behavior. #### Declaration #### Parameters | | | | --- | --- | | `_closure_` | The closure to be run prior to each example and after any beforeEach blocks | * `[it(_:file:line:closure:)](#/s:5Quick11SyncDSLUserPAAE2it_4file4line7closureySS_SSSuyyKScMYcctFZ)` Extension method Defines an example. Examples use assertions to demonstrate how code should behave. These are like “tests” in XCTest. #### Declaration #### Parameters | | | | --- | --- | | `_description_` | An arbitrary string describing what the example is meant to specify. | | `_closure_` | A closure that can contain assertions. | | `_file_` | The absolute path to the file containing the example. A sensible default is provided. | | `_line_` | The line containing the example. A sensible default is provided. | [](#/Shared%20Examples) ### Shared Examples * `[itBehavesLike(_:file:line:)](#/s:5Quick11SyncDSLUserPAAE13itBehavesLike_4file4lineySS_SSSutFZ)` Extension method Inserts the examples defined using a `sharedExamples` function into the current example group. The shared examples are executed at this location, as if they were written out manually. #### Declaration #### Parameters | | | | --- | --- | | `_name_` | The name of the shared examples group to be executed. This must be identical to the name of a shared examples group defined using `sharedExamples`. If there are no shared examples that match the name given, an exception is thrown and the test suite will crash. | | `_file_` | The absolute path to the file containing the current example group. A sensible default is provided. | | `_line_` | The line containing the current example group. A sensible default is provided. | * `[itBehavesLike(_:file:line:sharedExampleContext:)](#/s:5Quick11SyncDSLUserPAAE13itBehavesLike_4file4line20sharedExampleContextySS_SSSuSDySSypGyctFZ)` Extension method Inserts the examples defined using a `sharedExamples` function into the current example group. The shared examples are executed at this location, as if they were written out manually. This function also passes those shared examples a context that can be evaluated to give the shared examples extra information on the subject of the example. #### Declaration #### Parameters | | | | --- | --- | | `_name_` | The name of the shared examples group to be executed. This must be identical to the name of a shared examples group defined using `sharedExamples`. If there are no shared examples that match the name given, an exception is thrown and the test suite will crash. | | `_sharedExampleContext_` | A closure that, when evaluated, returns key-value pairs that provide the shared examples with extra information on the subject of the example. | | `_file_` | The absolute path to the file containing the current example group. A sensible default is provided. | | `_line_` | The line containing the current example group. A sensible default is provided. | * `[itBehavesLike(_:file:line:context:)](#/s:5Quick11SyncDSLUserPAAE13itBehavesLike_4file4line7contextyAA8BehaviorCyqd__Gm_SSSuqd__yctlFZ)` Extension method Inserts the examples defined using a `[Behavior](../Classes/Behavior.html) ` into the current example group. The shared examples are executed at this location, as if they were written out manually. This function also passes a strongly-typed context that can be evaluated to give the shared examples extra information on the subject of the example. #### Declaration #### Parameters | | | | --- | --- | | `_behavior_` | The type of `[Behavior](../Classes/Behavior.html) ` class defining the example group to be executed. | | `_context_` | A closure that, when evaluated, returns an instance of `[Behavior](../Classes/Behavior.html) `‘s context type to provide its example group with extra information on the subject of the example. | | `_file_` | The absolute path to the file containing the current example group. A sensible default is provided. | | `_line_` | The line containing the current example group. A sensible default is provided. | [](#/Pending) ### Pending * `[pending(_:file:line:closure:)](#/s:5Quick11SyncDSLUserPAAE7pending_4file4line7closureySS_SSSuyyKctFZ)` Extension method Defines an example or example group that should not be executed. Use `pending` to temporarily disable examples or groups that should not be run yet. #### Declaration #### Parameters | | | | --- | --- | | `_description_` | An arbitrary string describing the example or example group. | | `_closure_` | A closure that will not be evaluated. | [](#/Defocused) ### Defocused * `[xdescribe(_:closure:)](#/s:5Quick11SyncDSLUserPAAE9xdescribe_7closureySS_yyXEtFZ)` Extension method Use this to quickly mark a `describe` closure as pending. This disables all examples within the closure. #### Declaration * `[xcontext(_:closure:)](#/s:5Quick11SyncDSLUserPAAE8xcontext_7closureySS_yyXEtFZ)` Extension method Use this to quickly mark a `context` closure as pending. This disables all examples within the closure. #### Declaration * `[xit(_:file:line:closure:)](#/s:5Quick11SyncDSLUserPAAE3xit_4file4line7closureySS_SSSuyyKScMYcctFZ)` Extension method Use this to quickly mark an `it` closure as pending. This disables the example and ensures the code within the closure is never run. #### Declaration * `[xitBehavesLike(_:file:line:context:)](#/s:5Quick11SyncDSLUserPAAE14xitBehavesLike_4file4line7contextyAA8BehaviorCyqd__Gm_SSSuqd__yctlFZ)` Extension method Use this to quickly mark an `itBehavesLike` closure as pending. This disables the example group defined by this behavior and ensures the code within is never run. #### Declaration * `[xitBehavesLike(_:file:line:)](#/s:5Quick11SyncDSLUserPAAE14xitBehavesLike_4file4lineySS_SSSutFZ)` Extension method Use this to quickly mark an `itBehavesLike` closure as pending. This disables the example group defined by this behavior and ensures the code within is never run. #### Declaration * `[xitBehavesLike(_:file:line:sharedExampleContext:)](#/s:5Quick11SyncDSLUserPAAE14xitBehavesLike_4file4line20sharedExampleContextySS_SSSuSDySSypGyctFZ)` Extension method Use this to quickly mark an `itBehavesLike` closure as pending. This disables the example group defined by this behavior and ensures the code within is never run. #### Declaration [](#/Focused) ### Focused * `[fdescribe(_:closure:)](#/s:5Quick11SyncDSLUserPAAE9fdescribe_7closureySS_yyXEtFZ)` Extension method Use this to quickly focus a `describe` closure, focusing the examples in the closure. If any examples in the test suite are focused, only those examples are executed. This trumps any explicitly focused or unfocused examples within the closure–they are all treated as focused. #### Declaration * `[fcontext(_:closure:)](#/s:5Quick11SyncDSLUserPAAE8fcontext_7closureySS_yyXEtFZ)` Extension method Use this to quickly focus a `context` closure. Equivalent to `fdescribe`. #### Declaration * `[fit(_:file:line:closure:)](#/s:5Quick11SyncDSLUserPAAE3fit_4file4line7closureySS_SSSuyyKScMYcctFZ)` Extension method Use this to quickly focus an `it` closure, focusing the example. If any examples in the test suite are focused, only those examples are executed. #### Declaration * `[fitBehavesLike(_:file:line:)](#/s:5Quick11SyncDSLUserPAAE14fitBehavesLike_4file4lineySS_SSSutFZ)` Extension method Use this to quickly focus an `itBehavesLike` closure. #### Declaration * `[fitBehavesLike(_:file:line:sharedExampleContext:)](#/s:5Quick11SyncDSLUserPAAE14fitBehavesLike_4file4line20sharedExampleContextySS_SSSuSDySSypGyctFZ)` Extension method Use this to quickly focus an `itBehavesLike` closure. #### Declaration * `[fitBehavesLike(_:file:line:context:)](#/s:5Quick11SyncDSLUserPAAE14fitBehavesLike_4file4line7contextyAA8BehaviorCyqd__Gm_SSSuqd__yctlFZ)` Extension method Use this to quickly focus on `itBehavesLike` closure. #### Declaration --- # StopTest Structure Reference StopTest ======== Stops execution of test when thrown inside an `it` block, emitting a failure message. Unlike other errors that can be thrown during a test, `StopTest` represents an expected failure, with the failure description tied to the file and line it is thrown on. Tests can also be stopped silently by throwing `[StopTest.silently](../Structs/StopTest.html#/s:5Quick8StopTestV8silentlyACvpZ) `. The primary use case of `StopTest` as opposed to normal error logging is when a condition is critical for the remainder of the test. It serves as an alternative to force unwrapping or out-of-range subscripts that could be cause the test to crash. For example, guard let value = getValue() else { throw StopTest("Got a null value from `getValue()`) } When used with Nimble, any expectation can stop a test by adding `.onFailure(throw: StopTest.silently)`. For example, try expect(array).toEventually(haveCount(10)).onFailure(throw: StopTest.silently) * `[failureDescription](#/s:5Quick8StopTestV18failureDescriptionSSvp) ` Undocumented #### Declaration * `[reportError](#/s:5Quick8StopTestV11reportErrorSbvp) ` Undocumented #### Declaration * `[callsite](#/s:5Quick8StopTestV8callsiteAA8CallsiteCvp) ` Undocumented #### Declaration * `[init(_:file:line:)](#/s:5Quick8StopTestV_4file4lineACSS_SSSutcfc) ` Returns a new `StopTest` instance that, when thrown, stops the test and logs an error. #### Declaration #### Parameters | | | | --- | --- | | `_failureDescription_` | The message to display in the test results. | | `_file_` | The absolute path to the file containing the error. A sensible default is provided. | | `_line_` | The line containing the error. A sensible default is provided. | * `[silently](#/s:5Quick8StopTestV8silentlyACvpZ) ` An error that, when thrown, stops the test without logging an error. This is meant to be used alongside methods that have already logged a test failure. For example, func checkProperty() -> Bool { if property.isValid { return true } else { XCTFail("\(property) is not valid") return false } } guard checkProperty() else { throw StopTest.error } #### Declaration --- # TestState Structure Reference TestState ========= A property wrapper that will automatically reset the contained value after each test. * `[wrappedValue](#/s:5Quick9TestStateV12wrappedValuexSgvp) ` Undocumented #### Declaration * `[init()](#/s:5Quick9TestStateVACyxGycfc) ` Resets the property to nil after each test. #### Declaration * `[init(wrappedValue:)](#/s:5Quick9TestStateV12wrappedValueACyxGxSgyXA_tcfc) ` Undocumented #### Declaration * `[init(_:)](#/s:5Quick9TestStateVyACyxGxyXAcfc) ` Sets the property to an initial value before each test and resets it to nil after each test. #### Declaration #### Parameters | | | | --- | --- | | `_initialValue_` | An autoclosure to return the initial value to use before the test. | --- # Type Aliases Reference Type Aliases ============ The following type aliases are available globally. * `[AsyncSpecBase](#/) ` * `[AsyncSpecBase](#/s:5Quick13AsyncSpecBasea) ` Undocumented #### Declaration * `[FileString](#/) ` * `[FileString](#/s:5Quick10FileStringa) ` Undocumented #### Declaration * `[QuickConfigurer](#/s:5Quick0A10Configurera) ` A closure that temporarily exposes a QCKConfiguration object within the scope of the closure. #### Declaration * `[ExampleFilter](#/s:5Quick13ExampleFiltera) ` A closure that, given metadata about an example, returns a boolean value indicating whether that example should be run. #### Declaration [](#/Example%20Hooks) ### Example Hooks * `[BeforeExampleAsyncClosure](#/s:5Quick25BeforeExampleAsyncClosurea)` Asynchronous An async throwing closure executed before an example is run. #### Declaration * `[BeforeExampleClosure](#/s:5Quick20BeforeExampleClosurea) ` A throwing closure executed before an example is run. #### Declaration * `[BeforeExampleNonThrowingClosure](#/s:5Quick31BeforeExampleNonThrowingClosurea) ` A closure executed before an example is run. This is only used by ObjC. #### Declaration * `[BeforeExampleWithMetadataAsyncClosure](#/s:5Quick37BeforeExampleWithMetadataAsyncClosurea)` Asynchronous An async throwing closure executed before an example is run. The closure is given example metadata, which contains information about the example that is about to be run. #### Declaration * `[BeforeExampleWithMetadataClosure](#/s:5Quick32BeforeExampleWithMetadataClosurea) ` A throwing closure executed before an example is run. The closure is given example metadata, which contains information about the example that is about to be run. #### Declaration * `[BeforeExampleWithMetadataNonThrowingClosure](#/s:5Quick43BeforeExampleWithMetadataNonThrowingClosurea) ` A closure executed before an example is run. The closure is given example metadata, which contains information about the example that is about to be run. This is only used by ObjC #### Declaration * `[ExampleClosure](#/s:5Quick14ExampleClosurea) ` A closure for running an example. #### Declaration * `[AfterExampleAsyncClosure](#/s:5Quick24AfterExampleAsyncClosurea) ` An async throwing closure executed after an example is run. #### Declaration * `[AfterExampleClosure](#/s:5Quick19AfterExampleClosurea) ` A throwing closure executed after an example is run. #### Declaration * `[AfterExampleNonThrowingClosure](#/s:5Quick30AfterExampleNonThrowingClosurea) ` A closure executed after an example is run. This is only used by ObjC #### Declaration * `[AfterExampleWithMetadataAsyncClosure](#/s:5Quick36AfterExampleWithMetadataAsyncClosurea) ` An async throwing closure executed after an example is run. The closure is given example metadata, which contains information about the example that has just finished running. #### Declaration * `[AfterExampleWithMetadataClosure](#/s:5Quick31AfterExampleWithMetadataClosurea) ` A throwing closure executed after an example is run. The closure is given example metadata, which contains information about the example that has just finished running. #### Declaration * `[AfterExampleWithMetadataNonThrowingClosure](#/s:5Quick42AfterExampleWithMetadataNonThrowingClosurea) ` A closure executed after an example is run. The closure is given example metadata, which contains information about the example that has just finished running. #### Declaration * `[AroundExampleClosure](#/s:5Quick20AroundExampleClosurea) ` A throwing closure which wraps an example. The closure must call runExample() exactly once. #### Declaration * `[AroundExampleNonThrowingClosure](#/s:5Quick31AroundExampleNonThrowingClosurea) ` A closure which wraps an example. The closure must call runExample() exactly once. #### Declaration * `[AroundExampleWithMetadataClosure](#/s:5Quick32AroundExampleWithMetadataClosurea) ` A throwing closure which wraps an example. The closure is given example metadata, which contains information about the example that the wrapper will run. The closure must call runExample() exactly once. #### Declaration * `[AroundExampleWithMetadataNonThrowingClosure](#/s:5Quick43AroundExampleWithMetadataNonThrowingClosurea) ` A throwing closure which wraps an example. The closure is given example metadata, which contains information about the example that the wrapper will run. The closure must call runExample() exactly once. #### Declaration * `[AroundExampleAsyncClosure](#/s:5Quick25AroundExampleAsyncClosurea)` Asynchronous An async throwing closure which wraps an example. The closure must call runExample() exactly once. #### Declaration * `[AroundExampleWithMetadataAsyncClosure](#/s:5Quick37AroundExampleWithMetadataAsyncClosurea)` Asynchronous An async throwing closure which wraps an example. The closure is given example metadata, which contains information about the example that the wrapper will run. The closure must call runExample() exactly once. #### Declaration [](#/Suite%20Hooks) ### Suite Hooks * `[BeforeSuiteAsyncClosure](#/s:5Quick23BeforeSuiteAsyncClosurea)` Asynchronous An async throwing closure executed before any examples are run. #### Declaration * `[BeforeSuiteClosure](#/s:5Quick18BeforeSuiteClosurea) ` A throwing closure executed before any examples are run. #### Declaration * `[BeforeSuiteNonThrowingClosure](#/s:5Quick29BeforeSuiteNonThrowingClosurea) ` A closure executed before any examples are run. #### Declaration * `[AfterSuiteAsyncClosure](#/s:5Quick22AfterSuiteAsyncClosurea) ` An async throwing closure executed after all examples have finished running. #### Declaration * `[AfterSuiteClosure](#/s:5Quick17AfterSuiteClosurea) ` A throwing closure executed after all examples have finished running. #### Declaration * `[AfterSuiteNonThrowingClosure](#/s:5Quick28AfterSuiteNonThrowingClosurea) ` A closure executed after all examples have finished running. #### Declaration * `[SharedExampleContext](#/s:5Quick20SharedExampleContexta) ` A closure that, when evaluated, returns a dictionary of key-value pairs that can be accessed from within a group of shared examples. #### Declaration * `[SharedExampleClosure](#/s:5Quick20SharedExampleClosurea) ` A closure that is used to define a group of shared examples. This closure may contain any number of example and example groups. #### Declaration --- # Page not found · GitHub Pages 404 === **File not found** The site configured at this address does not contain the requested file. If this is your site, make sure that the filename case matches the URL as well as any file permissions. For root URLs (like `http://example.com/`) you must provide an `index.html` file. [Read the full documentation](https://help.github.com/pages/) for more information about using **GitHub Pages**. [GitHub Status](https://githubstatus.com) — [@githubstatus](https://twitter.com/githubstatus) [![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTZCRDY3REIzRjAxMUUyQUQzREIxQzRENUFFNUM5NiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTZCRDY3RUIzRjAxMUUyQUQzREIxQzRENUFFNUM5NiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkUxNkJENjdCQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkUxNkJENjdDQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+SM9MCAAAA+5JREFUeNrEV11Ik1EY3s4+ddOp29Q5b0opCgKFsoKoi5Kg6CIhuwi6zLJLoYLopq4qsKKgi4i6CYIoU/q5iDAKs6syoS76IRWtyJ+p7cdt7sf1PGOD+e0c3dygAx/67ZzzPM95/877GYdHRg3ZjMXFxepQKNS6sLCwJxqNNuFpiMfjVs4ZjUa/pmmjeD6VlJS8NpvNT4QQ7mxwjSsJiEQim/1+/9lgMHgIr5ohuxG1WCw9Vqv1clFR0dCqBODElV6v90ogEDjGdYbVjXhpaendioqK07CIR7ZAqE49PT09BPL2PMgTByQGsYiZlQD4uMXtdr+JxWINhgINYhGT2MsKgMrm2dnZXgRXhaHAg5jEJodUAHxux4LudHJE9RdEdA+i3Juz7bGHe4mhE9FNrgwBCLirMFV9Okh5eflFh8PR5nK5nDabrR2BNJlKO0T35+Li4n4+/J+/JQCxhmu5h3uJoXNHPbmWZAHMshWB8l5/ipqammaAf0zPDDx1ONV3vurdidqwAQL+pEc8sLcAe1CCvQ3YHxIW8Pl85xSWNC1hADDIv0rIE/o4J0k3kww4xSlwIhcq3EFFOm7KN/hUGOQkt0CFa5WpNJlMvxBEz/IVQAxg/ZRZl9wiHA63yDYieM7DnLP5CiAGsC7I5sgtYKJGWe2A8seFqgFJrJjEPY1Cn3pJ8/9W1e5VWsFDTEmFrBcoDhZJEQkXuhICMyKpjhahqN21hRYATKfUOlDmkygrR4o4C0VOLGJKrOITKB4jijzdXygBKixyC5TDQdnk/Pz8qRw6oOWGlsTKGOQW6OH6FBWsyePxdOXLTgxiyebILZCjz+GLgMIKnXNzc49YMlcRdHXcSwxFVgTInQhC9G33UhNoJLuqq6t345p9y3eUy8OTk5PjAHuI9uo4b07FBaOhsu0A4Unc+T1TU1Nj3KsSSE5yJ65jqF2DDd8QqWYmAZrIM2VlZTdnZmb6AbpdV9V6ec9znf5Q7HjYumdRE0JOp3MjitO4SFa+cZz8Umqe3TCbSLvdfkR/kWDdNQl5InuTcysOcpFT35ZrbBxx4p3JAHlZVVW1D/634VRt+FvLBgK/v5LV9WS+10xMTEwtRw7XvqOL+e2Q8V3AYIOIAXQ26/heWVnZCVfcyKHg2CBgTpmPmjYM8l24GyaUHyaIh7XwfR9ErE8qHoDfn2LTNAVC0HX6MFcBIP8Bi+6F6cdW/DICkANRfx99fEYFQ7Nph5i/uQiA214gno7K+guhaiKg9gC62+M8eR7XsBsYJ4ilam60Fb7r7uAj8wFyuwM1oIOWgfmDy6RXEEQzJMPe23DXrVS7rtyD3Df8z/FPgAEAzWU5Ku59ZAUAAAAASUVORK5CYII=)](/) [![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQUM1QkUxRUI0MUMxMUUyQUQzREIxQzRENUFFNUM5NiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQUM1QkUxRkI0MUMxMUUyQUQzREIxQzRENUFFNUM5NiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkUxNkJENjdGQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkUxNkJENjgwQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+hfPRaQAAB6lJREFUeNrsW2mM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)](/) --- # Page not found · GitHub Pages 404 === **File not found** The site configured at this address does not contain the requested file. If this is your site, make sure that the filename case matches the URL as well as any file permissions. For root URLs (like `http://example.com/`) you must provide an `index.html` file. [Read the full documentation](https://help.github.com/pages/) for more information about using **GitHub Pages**. [GitHub Status](https://githubstatus.com) — [@githubstatus](https://twitter.com/githubstatus) [![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTZCRDY3REIzRjAxMUUyQUQzREIxQzRENUFFNUM5NiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTZCRDY3RUIzRjAxMUUyQUQzREIxQzRENUFFNUM5NiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkUxNkJENjdCQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkUxNkJENjdDQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+SM9MCAAAA+5JREFUeNrEV11Ik1EY3s4+ddOp29Q5b0opCgKFsoKoi5Kg6CIhuwi6zLJLoYLopq4qsKKgi4i6CYIoU/q5iDAKs6syoS76IRWtyJ+p7cdt7sf1PGOD+e0c3dygAx/67ZzzPM95/877GYdHRg3ZjMXFxepQKNS6sLCwJxqNNuFpiMfjVs4ZjUa/pmmjeD6VlJS8NpvNT4QQ7mxwjSsJiEQim/1+/9lgMHgIr5ohuxG1WCw9Vqv1clFR0dCqBODElV6v90ogEDjGdYbVjXhpaendioqK07CIR7ZAqE49PT09BPL2PMgTByQGsYiZlQD4uMXtdr+JxWINhgINYhGT2MsKgMrm2dnZXgRXhaHAg5jEJodUAHxux4LudHJE9RdEdA+i3Juz7bGHe4mhE9FNrgwBCLirMFV9Okh5eflFh8PR5nK5nDabrR2BNJlKO0T35+Li4n4+/J+/JQCxhmu5h3uJoXNHPbmWZAHMshWB8l5/ipqammaAf0zPDDx1ONV3vurdidqwAQL+pEc8sLcAe1CCvQ3YHxIW8Pl85xSWNC1hADDIv0rIE/o4J0k3kww4xSlwIhcq3EFFOm7KN/hUGOQkt0CFa5WpNJlMvxBEz/IVQAxg/ZRZl9wiHA63yDYieM7DnLP5CiAGsC7I5sgtYKJGWe2A8seFqgFJrJjEPY1Cn3pJ8/9W1e5VWsFDTEmFrBcoDhZJEQkXuhICMyKpjhahqN21hRYATKfUOlDmkygrR4o4C0VOLGJKrOITKB4jijzdXygBKixyC5TDQdnk/Pz8qRw6oOWGlsTKGOQW6OH6FBWsyePxdOXLTgxiyebILZCjz+GLgMIKnXNzc49YMlcRdHXcSwxFVgTInQhC9G33UhNoJLuqq6t345p9y3eUy8OTk5PjAHuI9uo4b07FBaOhsu0A4Unc+T1TU1Nj3KsSSE5yJ65jqF2DDd8QqWYmAZrIM2VlZTdnZmb6AbpdV9V6ec9znf5Q7HjYumdRE0JOp3MjitO4SFa+cZz8Umqe3TCbSLvdfkR/kWDdNQl5InuTcysOcpFT35ZrbBxx4p3JAHlZVVW1D/634VRt+FvLBgK/v5LV9WS+10xMTEwtRw7XvqOL+e2Q8V3AYIOIAXQ26/heWVnZCVfcyKHg2CBgTpmPmjYM8l24GyaUHyaIh7XwfR9ErE8qHoDfn2LTNAVC0HX6MFcBIP8Bi+6F6cdW/DICkANRfx99fEYFQ7Nph5i/uQiA214gno7K+guhaiKg9gC62+M8eR7XsBsYJ4ilam60Fb7r7uAj8wFyuwM1oIOWgfmDy6RXEEQzJMPe23DXrVS7rtyD3Df8z/FPgAEAzWU5Ku59ZAUAAAAASUVORK5CYII=)](/) [![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQUM1QkUxRUI0MUMxMUUyQUQzREIxQzRENUFFNUM5NiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQUM1QkUxRkI0MUMxMUUyQUQzREIxQzRENUFFNUM5NiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkUxNkJENjdGQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkUxNkJENjgwQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+hfPRaQAAB6lJREFUeNrsW2mM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)](/) --- # Site not found · GitHub Pages 404 === **There isn't a GitHub Pages site here.** If you're trying to publish one, [read the full documentation](https://help.github.com/pages/) to learn how to set up **GitHub Pages** for your repository, organization, or user account. [GitHub Status](https://githubstatus.com) — [@githubstatus](https://twitter.com/githubstatus) [![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTZCRDY3REIzRjAxMUUyQUQzREIxQzRENUFFNUM5NiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTZCRDY3RUIzRjAxMUUyQUQzREIxQzRENUFFNUM5NiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkUxNkJENjdCQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkUxNkJENjdDQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+SM9MCAAAA+5JREFUeNrEV11Ik1EY3s4+ddOp29Q5b0opCgKFsoKoi5Kg6CIhuwi6zLJLoYLopq4qsKKgi4i6CYIoU/q5iDAKs6syoS76IRWtyJ+p7cdt7sf1PGOD+e0c3dygAx/67ZzzPM95/877GYdHRg3ZjMXFxepQKNS6sLCwJxqNNuFpiMfjVs4ZjUa/pmmjeD6VlJS8NpvNT4QQ7mxwjSsJiEQim/1+/9lgMHgIr5ohuxG1WCw9Vqv1clFR0dCqBODElV6v90ogEDjGdYbVjXhpaendioqK07CIR7ZAqE49PT09BPL2PMgTByQGsYiZlQD4uMXtdr+JxWINhgINYhGT2MsKgMrm2dnZXgRXhaHAg5jEJodUAHxux4LudHJE9RdEdA+i3Juz7bGHe4mhE9FNrgwBCLirMFV9Okh5eflFh8PR5nK5nDabrR2BNJlKO0T35+Li4n4+/J+/JQCxhmu5h3uJoXNHPbmWZAHMshWB8l5/ipqammaAf0zPDDx1ONV3vurdidqwAQL+pEc8sLcAe1CCvQ3YHxIW8Pl85xSWNC1hADDIv0rIE/o4J0k3kww4xSlwIhcq3EFFOm7KN/hUGOQkt0CFa5WpNJlMvxBEz/IVQAxg/ZRZl9wiHA63yDYieM7DnLP5CiAGsC7I5sgtYKJGWe2A8seFqgFJrJjEPY1Cn3pJ8/9W1e5VWsFDTEmFrBcoDhZJEQkXuhICMyKpjhahqN21hRYATKfUOlDmkygrR4o4C0VOLGJKrOITKB4jijzdXygBKixyC5TDQdnk/Pz8qRw6oOWGlsTKGOQW6OH6FBWsyePxdOXLTgxiyebILZCjz+GLgMIKnXNzc49YMlcRdHXcSwxFVgTInQhC9G33UhNoJLuqq6t345p9y3eUy8OTk5PjAHuI9uo4b07FBaOhsu0A4Unc+T1TU1Nj3KsSSE5yJ65jqF2DDd8QqWYmAZrIM2VlZTdnZmb6AbpdV9V6ec9znf5Q7HjYumdRE0JOp3MjitO4SFa+cZz8Umqe3TCbSLvdfkR/kWDdNQl5InuTcysOcpFT35ZrbBxx4p3JAHlZVVW1D/634VRt+FvLBgK/v5LV9WS+10xMTEwtRw7XvqOL+e2Q8V3AYIOIAXQ26/heWVnZCVfcyKHg2CBgTpmPmjYM8l24GyaUHyaIh7XwfR9ErE8qHoDfn2LTNAVC0HX6MFcBIP8Bi+6F6cdW/DICkANRfx99fEYFQ7Nph5i/uQiA214gno7K+guhaiKg9gC62+M8eR7XsBsYJ4ilam60Fb7r7uAj8wFyuwM1oIOWgfmDy6RXEEQzJMPe23DXrVS7rtyD3Df8z/FPgAEAzWU5Ku59ZAUAAAAASUVORK5CYII=)](/) [![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQUM1QkUxRUI0MUMxMUUyQUQzREIxQzRENUFFNUM5NiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQUM1QkUxRkI0MUMxMUUyQUQzREIxQzRENUFFNUM5NiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkUxNkJENjdGQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkUxNkJENjgwQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+hfPRaQAAB6lJREFUeNrsW2mM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)](/) --- # Page not found · GitHub Pages 404 === **File not found** The site configured at this address does not contain the requested file. If this is your site, make sure that the filename case matches the URL as well as any file permissions. For root URLs (like `http://example.com/`) you must provide an `index.html` file. [Read the full documentation](https://help.github.com/pages/) for more information about using **GitHub Pages**. [GitHub Status](https://githubstatus.com) — [@githubstatus](https://twitter.com/githubstatus) [![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTZCRDY3REIzRjAxMUUyQUQzREIxQzRENUFFNUM5NiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTZCRDY3RUIzRjAxMUUyQUQzREIxQzRENUFFNUM5NiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkUxNkJENjdCQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkUxNkJENjdDQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+SM9MCAAAA+5JREFUeNrEV11Ik1EY3s4+ddOp29Q5b0opCgKFsoKoi5Kg6CIhuwi6zLJLoYLopq4qsKKgi4i6CYIoU/q5iDAKs6syoS76IRWtyJ+p7cdt7sf1PGOD+e0c3dygAx/67ZzzPM95/877GYdHRg3ZjMXFxepQKNS6sLCwJxqNNuFpiMfjVs4ZjUa/pmmjeD6VlJS8NpvNT4QQ7mxwjSsJiEQim/1+/9lgMHgIr5ohuxG1WCw9Vqv1clFR0dCqBODElV6v90ogEDjGdYbVjXhpaendioqK07CIR7ZAqE49PT09BPL2PMgTByQGsYiZlQD4uMXtdr+JxWINhgINYhGT2MsKgMrm2dnZXgRXhaHAg5jEJodUAHxux4LudHJE9RdEdA+i3Juz7bGHe4mhE9FNrgwBCLirMFV9Okh5eflFh8PR5nK5nDabrR2BNJlKO0T35+Li4n4+/J+/JQCxhmu5h3uJoXNHPbmWZAHMshWB8l5/ipqammaAf0zPDDx1ONV3vurdidqwAQL+pEc8sLcAe1CCvQ3YHxIW8Pl85xSWNC1hADDIv0rIE/o4J0k3kww4xSlwIhcq3EFFOm7KN/hUGOQkt0CFa5WpNJlMvxBEz/IVQAxg/ZRZl9wiHA63yDYieM7DnLP5CiAGsC7I5sgtYKJGWe2A8seFqgFJrJjEPY1Cn3pJ8/9W1e5VWsFDTEmFrBcoDhZJEQkXuhICMyKpjhahqN21hRYATKfUOlDmkygrR4o4C0VOLGJKrOITKB4jijzdXygBKixyC5TDQdnk/Pz8qRw6oOWGlsTKGOQW6OH6FBWsyePxdOXLTgxiyebILZCjz+GLgMIKnXNzc49YMlcRdHXcSwxFVgTInQhC9G33UhNoJLuqq6t345p9y3eUy8OTk5PjAHuI9uo4b07FBaOhsu0A4Unc+T1TU1Nj3KsSSE5yJ65jqF2DDd8QqWYmAZrIM2VlZTdnZmb6AbpdV9V6ec9znf5Q7HjYumdRE0JOp3MjitO4SFa+cZz8Umqe3TCbSLvdfkR/kWDdNQl5InuTcysOcpFT35ZrbBxx4p3JAHlZVVW1D/634VRt+FvLBgK/v5LV9WS+10xMTEwtRw7XvqOL+e2Q8V3AYIOIAXQ26/heWVnZCVfcyKHg2CBgTpmPmjYM8l24GyaUHyaIh7XwfR9ErE8qHoDfn2LTNAVC0HX6MFcBIP8Bi+6F6cdW/DICkANRfx99fEYFQ7Nph5i/uQiA214gno7K+guhaiKg9gC62+M8eR7XsBsYJ4ilam60Fb7r7uAj8wFyuwM1oIOWgfmDy6RXEEQzJMPe23DXrVS7rtyD3Df8z/FPgAEAzWU5Ku59ZAUAAAAASUVORK5CYII=)](/) [![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQUM1QkUxRUI0MUMxMUUyQUQzREIxQzRENUFFNUM5NiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQUM1QkUxRkI0MUMxMUUyQUQzREIxQzRENUFFNUM5NiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkUxNkJENjdGQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkUxNkJENjgwQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+hfPRaQAAB6lJREFUeNrsW2mM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)](/) --- # Page not found · GitHub Pages 404 === **File not found** The site configured at this address does not contain the requested file. If this is your site, make sure that the filename case matches the URL as well as any file permissions. For root URLs (like `http://example.com/`) you must provide an `index.html` file. [Read the full documentation](https://help.github.com/pages/) for more information about using **GitHub Pages**. [GitHub Status](https://githubstatus.com) — [@githubstatus](https://twitter.com/githubstatus) [![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTZCRDY3REIzRjAxMUUyQUQzREIxQzRENUFFNUM5NiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTZCRDY3RUIzRjAxMUUyQUQzREIxQzRENUFFNUM5NiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkUxNkJENjdCQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkUxNkJENjdDQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+SM9MCAAAA+5JREFUeNrEV11Ik1EY3s4+ddOp29Q5b0opCgKFsoKoi5Kg6CIhuwi6zLJLoYLopq4qsKKgi4i6CYIoU/q5iDAKs6syoS76IRWtyJ+p7cdt7sf1PGOD+e0c3dygAx/67ZzzPM95/877GYdHRg3ZjMXFxepQKNS6sLCwJxqNNuFpiMfjVs4ZjUa/pmmjeD6VlJS8NpvNT4QQ7mxwjSsJiEQim/1+/9lgMHgIr5ohuxG1WCw9Vqv1clFR0dCqBODElV6v90ogEDjGdYbVjXhpaendioqK07CIR7ZAqE49PT09BPL2PMgTByQGsYiZlQD4uMXtdr+JxWINhgINYhGT2MsKgMrm2dnZXgRXhaHAg5jEJodUAHxux4LudHJE9RdEdA+i3Juz7bGHe4mhE9FNrgwBCLirMFV9Okh5eflFh8PR5nK5nDabrR2BNJlKO0T35+Li4n4+/J+/JQCxhmu5h3uJoXNHPbmWZAHMshWB8l5/ipqammaAf0zPDDx1ONV3vurdidqwAQL+pEc8sLcAe1CCvQ3YHxIW8Pl85xSWNC1hADDIv0rIE/o4J0k3kww4xSlwIhcq3EFFOm7KN/hUGOQkt0CFa5WpNJlMvxBEz/IVQAxg/ZRZl9wiHA63yDYieM7DnLP5CiAGsC7I5sgtYKJGWe2A8seFqgFJrJjEPY1Cn3pJ8/9W1e5VWsFDTEmFrBcoDhZJEQkXuhICMyKpjhahqN21hRYATKfUOlDmkygrR4o4C0VOLGJKrOITKB4jijzdXygBKixyC5TDQdnk/Pz8qRw6oOWGlsTKGOQW6OH6FBWsyePxdOXLTgxiyebILZCjz+GLgMIKnXNzc49YMlcRdHXcSwxFVgTInQhC9G33UhNoJLuqq6t345p9y3eUy8OTk5PjAHuI9uo4b07FBaOhsu0A4Unc+T1TU1Nj3KsSSE5yJ65jqF2DDd8QqWYmAZrIM2VlZTdnZmb6AbpdV9V6ec9znf5Q7HjYumdRE0JOp3MjitO4SFa+cZz8Umqe3TCbSLvdfkR/kWDdNQl5InuTcysOcpFT35ZrbBxx4p3JAHlZVVW1D/634VRt+FvLBgK/v5LV9WS+10xMTEwtRw7XvqOL+e2Q8V3AYIOIAXQ26/heWVnZCVfcyKHg2CBgTpmPmjYM8l24GyaUHyaIh7XwfR9ErE8qHoDfn2LTNAVC0HX6MFcBIP8Bi+6F6cdW/DICkANRfx99fEYFQ7Nph5i/uQiA214gno7K+guhaiKg9gC62+M8eR7XsBsYJ4ilam60Fb7r7uAj8wFyuwM1oIOWgfmDy6RXEEQzJMPe23DXrVS7rtyD3Df8z/FPgAEAzWU5Ku59ZAUAAAAASUVORK5CYII=)](/) [![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpEQUM1QkUxRUI0MUMxMUUyQUQzREIxQzRENUFFNUM5NiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpEQUM1QkUxRkI0MUMxMUUyQUQzREIxQzRENUFFNUM5NiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkUxNkJENjdGQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkUxNkJENjgwQjNGMDExRTJBRDNEQjFDNEQ1QUU1Qzk2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+hfPRaQAAB6lJREFUeNrsW2mM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)](/) ---