Repository: rhodgkins/SwiftHTTPStatusCodes Branch: master Commit: a2c4f5f645de Files: 31 Total size: 127.7 KB Directory structure: gitextract_wa78b5hf/ ├── .gitignore ├── .travis.yml ├── HTTPStatusCodes.podspec ├── LICENSE ├── Package.swift ├── README.md ├── Sources/ │ ├── HTTPStatusCodes+Extensions.swift │ └── HTTPStatusCodes.swift └── Tests/ ├── .gitignore ├── Cartfile ├── Generator.playground/ │ ├── Contents.swift │ ├── Sources/ │ │ ├── Case.swift │ │ └── StaticTexts.swift │ └── contents.xcplayground ├── HTTPStatusCodes/ │ ├── Deprecated.h │ ├── Deprecated.m │ ├── HTTPStatusCodes.h │ └── SupportingFiles/ │ ├── Info-OSX.plist │ ├── Info-iOS.plist │ ├── Info-tvOS.plist │ └── Info-watchOS.plist ├── HTTPStatusCodes.xcconfig ├── HTTPStatusCodes.xcodeproj/ │ ├── project.pbxproj │ ├── project.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata/ │ └── xcschemes/ │ └── HTTPStatusCodes.xcscheme └── HTTPStatusCodesTests/ ├── HTTPStatusCodesTests.swift ├── Info.plist ├── ObjectiveCRegressionTests.m ├── ObjectiveCTests.m └── RegressionTests.swift ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ # Xcode # build/ *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 xcuserdata *.xccheckout *.moved-aside DerivedData *.hmap *.ipa *.xcuserstate ## Playgrounds timeline.xctimeline playground.xcworkspace # Swift Package Manager # # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. # Packages/ .build/ ================================================ FILE: .travis.yml ================================================ language: objective-c osx_image: xcode10.2 script: - xcodebuild -project Tests/HTTPStatusCodes.xcodeproj -scheme HTTPStatusCodes clean build test - xcodebuild -project Tests/HTTPStatusCodes.xcodeproj -scheme HTTPStatusCodes -destination "platform=iOS Simulator,name=iPhone X" clean build test - xcodebuild -project Tests/HTTPStatusCodes.xcodeproj -scheme HTTPStatusCodes -destination "platform=tvOS Simulator,name=Apple TV 4K" clean build test ================================================ FILE: HTTPStatusCodes.podspec ================================================ Pod::Spec.new do |s| s.name = 'HTTPStatusCodes' s.version = '3.3.2' s.license = 'MIT' s.summary = 'Swift enum wrapper for easier handling of HTTP status codes' s.homepage = 'https://github.com/rhodgkins/SwiftHTTPStatusCodes' s.social_media_url = 'http://twitter.com/rhodgkins' s.authors = 'Rich Hodgkins' s.source = { :git => 'https://github.com/rhodgkins/SwiftHTTPStatusCodes.git', :tag => s.version } s.swift_versions = ['4.0', '4.2', '5.0'] s.ios.deployment_target = '8.0' s.osx.deployment_target = '10.9' s.watchos.deployment_target = '2.0' s.tvos.deployment_target = '9.0' s.frameworks = 'Foundation' s.source_files = 'Sources/*' s.requires_arc = true end ================================================ FILE: LICENSE ================================================ The MIT License (MIT) Copyright (c) 2017 Rich Hodgkins Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: Package.swift ================================================ // swift-tools-version:4.0 // // Created by Richard Hodgkins on 07/06/2016. // Copyright (c) 2016 Richard Hodgkins. All rights reserved. // import PackageDescription let package = Package( name: "HTTPStatusCodes", products: [ .library(name: "HTTPStatusCodes", targets: ["HTTPStatusCodes"]) ], targets: [ .target( name: "HTTPStatusCodes", path: "Sources" ), .testTarget( name: "HTTPStatusCodesTests", dependencies: ["HTTPStatusCodes"], path: "Tests/HTTPStatusCodesTests", sources: [ "HTTPStatusCodesTests.swift", "RegressionTests.swift" ] ) ] ) ================================================ FILE: README.md ================================================ # SwiftHTTPStatusCodes [![Build Status](https://travis-ci.org/rhodgkins/SwiftHTTPStatusCodes.svg?branch=master)](https://travis-ci.org/rhodgkins/SwiftHTTPStatusCodes) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Pod Version](http://img.shields.io/cocoapods/v/HTTPStatusCodes.svg)](http://cocoadocs.org/docsets/HTTPStatusCodes/) [![Pod Platform](http://img.shields.io/cocoapods/p/HTTPStatusCodes.svg)](http://cocoadocs.org/docsets/HTTPStatusCodes/) [![Pod License](http://img.shields.io/cocoapods/l/HTTPStatusCodes.svg)](http://opensource.org/licenses/MIT) Swift enum wrapper for easier handling of HTTP status codes. The purpose of this library is to improve to clarify of code and remove the need for checking of status codes as numbers (`==200`), or as a range of values (`== 2xx`) - instead replacing it with descriptive enums. All the [RF2616](http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml) standard status codes are supported with a few added ones from the [Wikipedia page](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes). As of version 3.0.0 of this framework, the list of status codes are directly generated from a [online IANA CSV](http://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv). The [HTML page](http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml) has a last updated field, and this is also mirrored in the header comments to identify which version this framework is currently using.
If this library is out of date compared to this page please open an issue and I will update the list. ## Usage ### Swift versions support * Swift 5.1 - use version 3.3.2 * Swift 5 - use version 3.3.1 * Swift 4 - use version 3.3.0 * Swift 3 - use version 3.1 * Older versions - use version 3.0 ### Swift Package Manager Add this package to the dependencies in your `Package.swift` file: ```swift .package(url: "https://github.com/rhodgkins/SwiftHTTPStatusCodes.git", .upToNextMajor(from: "3.0.0")) ``` ### Carthage `Cartfile`: ```ogdl github "rhodgkins/SwiftHTTPStatusCodes" ~> 3.3 ``` Source code: ```swift import HTTPStatusCodes ``` ### CocoaPods `Podfile`: ```ruby pod 'HTTPStatusCodes', '~> 3.3.0' ``` Source code: ```swift import HTTPStatusCodes ``` ### Manually Or drop in the Swift files inside the [`Sources folder`](https://github.com/rhodgkins/SwiftHTTPStatusCodes/tree/master/Sources) into your project. ## Helper methods There are `Bool` properties on the enum for checking if a status code is of a certain category: ```swift isInformational isSuccess isRedirection isClientError isServerError ``` There is also an extension on `HTTPURLResponse` to obtain a status code enum directly and to `init` with one: ```swift var statusCodeValue: HTTPStatusCode? init?(url: URL, statusCode: HTTPStatusCode, httpVersion: String?, headerFields: [String : String]?) ``` ================================================ FILE: Sources/HTTPStatusCodes+Extensions.swift ================================================ // // HTTPStatusCodes+Extensions.swift // HTTPStatusCodes // // Created by Richard Hodgkins on 07/06/2016. // Copyright © 2016 Rich H. All rights reserved. // import Foundation public extension HTTPStatusCode { /// Informational - Request received, continuing process. var isInformational: Bool { return isIn(range: 100...199) } /// Success - The action was successfully received, understood, and accepted. var isSuccess: Bool { return isIn(range: 200...299) } /// Redirection - Further action must be taken in order to complete the request. var isRedirection: Bool { return isIn(range: 300...399) } /// Client Error - The request contains bad syntax or cannot be fulfilled. var isClientError: Bool { return isIn(range: 400...499) } /// Server Error - The server failed to fulfill an apparently valid request. var isServerError: Bool { return isIn(range: 500...599) } /// - returns: `true` if the status code is in the provided range, false otherwise. private func isIn(range: ClosedRange) -> Bool { return range.contains(rawValue) } } public extension HTTPStatusCode { /// - returns: a localized string suitable for displaying to users that describes the specified status code. var localizedReasonPhrase: String { return HTTPURLResponse.localizedString(forStatusCode: rawValue) } } // MARK: - Printing extension HTTPStatusCode: CustomDebugStringConvertible, CustomStringConvertible { public var description: String { return "\(rawValue) - \(localizedReasonPhrase)" } public var debugDescription: String { return "HTTPStatusCode:\(description)" } } // MARK: - HTTP URL Response public extension HTTPStatusCode { /// Obtains a possible status code from an optional HTTP URL response. init?(HTTPResponse: HTTPURLResponse?) { guard let statusCodeValue = HTTPResponse?.statusCode else { return nil } self.init(statusCodeValue) } /// This is declared as it's not automatically picked up by the complier for the above init private init?(_ rawValue: Int) { guard let value = HTTPStatusCode(rawValue: rawValue) else { return nil } self = value } } public extension HTTPURLResponse { /** * Marked internal to expose (as `statusCodeValue`) for Objective-C interoperability only. * * - returns: the receiver’s HTTP status code. */ @objc(statusCodeValue) var statusCodeEnum: HTTPStatusCode { return HTTPStatusCode(HTTPResponse: self)! } /// - returns: the receiver’s HTTP status code. var statusCodeValue: HTTPStatusCode? { return HTTPStatusCode(HTTPResponse: self) } /** * Initializer for NSHTTPURLResponse objects. * * - parameter url: the URL from which the response was generated. * - parameter statusCode: an HTTP status code. * - parameter HTTPVersion: the version of the HTTP response as represented by the server. This is typically represented as "HTTP/1.1". * - parameter headerFields: a dictionary representing the header keys and values of the server response. * * - returns: the instance of the object, or `nil` if an error occurred during initialization. */ @available(iOS, introduced: 7.0) @objc(initWithURL:statusCodeValue:HTTPVersion:headerFields:) convenience init?(url: URL, statusCode: HTTPStatusCode, httpVersion: String?, headerFields: [String : String]?) { self.init(url: url, statusCode: statusCode.rawValue, httpVersion: httpVersion, headerFields: headerFields) } } // MARK: - Deprecated cases public extension HTTPStatusCode { /// - deprecated: Renamed to `payloadTooLarge` @available(*, deprecated, renamed: "payloadTooLarge") static let requestEntityTooLarge = payloadTooLarge /// - deprecated: Renamed to `uriTooLong` @available(*, deprecated, renamed: "uriTooLong") static let requestURITooLong = uriTooLong /// - deprecated: Renamed to `rangeNotSatisfiable` @available(*, deprecated, renamed: "rangeNotSatisfiable") static let requestedRangeNotSatisfiable = rangeNotSatisfiable /// - deprecated: Renamed to `iisLoginTimeout` @available(*, deprecated, renamed: "iisLoginTimeout") static let loginTimeout = iisLoginTimeout /// - deprecated: Renamed to `iisRetryWith` @available(*, deprecated, renamed: "iisRetryWith") static let retryWith = iisRetryWith /// - deprecated: Renamed to `nginxNoResponse` @available(*, deprecated, renamed: "nginxNoResponse") static let noResponse = nginxNoResponse /// - deprecated: Renamed to `nginxSSLCertificateError` @available(*, deprecated, renamed: "nginxSSLCertificateError") static let certError = nginxSSLCertificateError /// - deprecated: Renamed to `nginxSSLCertificateRequired` @available(*, deprecated, renamed: "nginxSSLCertificateRequired") static let noCert = nginxSSLCertificateRequired /// - deprecated: Renamed to `nginxHTTPToHTTPS` @available(*, deprecated, renamed: "nginxHTTPToHTTPS") static let httpToHTTPS = nginxHTTPToHTTPS /// - deprecated: Renamed to `nginxClientClosedRequest` @available(*, deprecated, renamed: "nginxClientClosedRequest") static let clientClosedRequest = nginxClientClosedRequest /// - deprecated: Renamed to `networkConnectTimeoutError` @available(*, deprecated, renamed: "networkConnectTimeoutError") static let networkTimeoutError = networkConnectTimeoutError /// Returned by version 1 of the Twitter Search and Trends API when the client is being rate limited; versions 1.1 and later use the 429 Too Many Requests (`tooManyRequests`) response code instead. /// /// - seealso: [Twitter Error Codes & Responses](https://dev.twitter.com/docs/error-codes-responses) @available(*, deprecated, renamed: "tooManyRequests") static let twitterEnhanceYourCalm = tooManyRequests } public extension HTTPURLResponse { /// - deprecated: Renamed to `init(url:statusCode:httpVersion:headerFields)` to correct Swift 3 naming convention. @available(*, deprecated, renamed: "init(url:statusCode:httpVersion:headerFields:)", message: "Renamed to correct Swift 3 naming convention") @nonobjc convenience init?(url: URL, statusCode: HTTPStatusCode, HTTPVersion: String?, headerFields: [String : String]?) { self.init(url: url, statusCode: statusCode, httpVersion: HTTPVersion, headerFields: headerFields) } } // MARK: - Remove cases /// Declared here for a cleaner API with no `!` types. private let __Unavailable: HTTPStatusCode! = nil public extension HTTPStatusCode { /// Checkpoint: 103 /// /// Used in the resumable requests proposal to resume aborted PUT or POST requests. /// /// - seealso: [Original proposal](https://web.archive.org/web/20151013212135/http://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal) @available(*, unavailable, renamed: "earlyHints", message: "Replaced by RFC standard code with different meaning") static let checkpoint = __Unavailable /// Switch Proxy: 306 /// /// No longer used. Originally meant "Subsequent requests should use the specified proxy." /// /// - seealso: [Original draft](https://tools.ietf.org/html/draft-cohen-http-305-306-responses-00) @available(*, unavailable, message: "No longer used") static let switchProxy = __Unavailable /// Authentication Timeout: 419 /// /// Removed from Wikipedia page. @available(*, unavailable, message: "No longer available") static let authenticationTimeout = __Unavailable /// Method Failure: 419 /// /// A deprecated response used by the Spring Framework when a method has failed. /// /// - seealso: [Spring Framework: HttpStatus enum documentation - `METHOD_FAILURE`](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/HttpStatus.html#METHOD_FAILURE) @available(*, unavailable, message: "Deprecated") static let springFrameworkMethodFailure = __Unavailable /// Request Header Too Large: 494 /// /// Removed and replaced with `RequestHeaderFieldsTooLarge` - 431 @available(*, unavailable, renamed: "requestHeaderFieldsTooLarge", message: "Changed to a 431 status code") static let requestHeaderTooLarge = __Unavailable } ================================================ FILE: Sources/HTTPStatusCodes.swift ================================================ // // HTTPStatusCodes.swift // // Generated by Richard Hodgkins on 21/02/2019. // Copyright (c) 2019 Richard Hodgkins. All rights reserved. // import Foundation /// HTTP status codes as per the [IANA HTTP status code registry](http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml). /// /// Last updated: Fri, 21 Sep 2018 16:10:10 GMT /// /// - seealso: [Wikipedia page - List of HTTP status codes](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes) /// - seealso: [HTTP protocol standard - Status Code Definitions](https://tools.ietf.org/html/rfc2616#section-10) @objc public enum HTTPStatusCode: Int { /// Continue: 100 /// /// - seealso: [RFC7231, Section 6.2.1](http://www.iana.org/go/rfc7231#section-6.2.1) case `continue` = 100 /// Switching Protocols: 101 /// /// - seealso: [RFC7231, Section 6.2.2](http://www.iana.org/go/rfc7231#section-6.2.2) case switchingProtocols = 101 /// Processing: 102 /// /// - seealso: [RFC2518](http://www.iana.org/go/rfc2518) case processing = 102 /// Early Hints: 103 /// /// - seealso: [RFC8297](http://www.iana.org/go/rfc8297) case earlyHints = 103 /// OK: 200 /// /// - seealso: [RFC7231, Section 6.3.1](http://www.iana.org/go/rfc7231#section-6.3.1) @objc(HTTPStatusCodeOK) case ok = 200 /// Created: 201 /// /// - seealso: [RFC7231, Section 6.3.2](http://www.iana.org/go/rfc7231#section-6.3.2) case created = 201 /// Accepted: 202 /// /// - seealso: [RFC7231, Section 6.3.3](http://www.iana.org/go/rfc7231#section-6.3.3) case accepted = 202 /// Non-Authoritative Information: 203 /// /// - seealso: [RFC7231, Section 6.3.4](http://www.iana.org/go/rfc7231#section-6.3.4) case nonAuthoritativeInformation = 203 /// No Content: 204 /// /// - seealso: [RFC7231, Section 6.3.5](http://www.iana.org/go/rfc7231#section-6.3.5) case noContent = 204 /// Reset Content: 205 /// /// - seealso: [RFC7231, Section 6.3.6](http://www.iana.org/go/rfc7231#section-6.3.6) case resetContent = 205 /// Partial Content: 206 /// /// - seealso: [RFC7233, Section 4.1](http://www.iana.org/go/rfc7233#section-4.1) case partialContent = 206 /// Multi-Status: 207 /// /// - seealso: [RFC4918](http://www.iana.org/go/rfc4918) case multiStatus = 207 /// Already Reported: 208 /// /// - seealso: [RFC5842](http://www.iana.org/go/rfc5842) case alreadyReported = 208 /// IM Used: 226 /// /// - seealso: [RFC3229](http://www.iana.org/go/rfc3229) @objc(HTTPStatusCodeIMUsed) case imUsed = 226 /// Multiple Choices: 300 /// /// - seealso: [RFC7231, Section 6.4.1](http://www.iana.org/go/rfc7231#section-6.4.1) case multipleChoices = 300 /// Moved Permanently: 301 /// /// - seealso: [RFC7231, Section 6.4.2](http://www.iana.org/go/rfc7231#section-6.4.2) case movedPermanently = 301 /// Found: 302 /// /// - seealso: [RFC7231, Section 6.4.3](http://www.iana.org/go/rfc7231#section-6.4.3) case found = 302 /// See Other: 303 /// /// - seealso: [RFC7231, Section 6.4.4](http://www.iana.org/go/rfc7231#section-6.4.4) case seeOther = 303 /// Not Modified: 304 /// /// - seealso: [RFC7232, Section 4.1](http://www.iana.org/go/rfc7232#section-4.1) case notModified = 304 /// Use Proxy: 305 /// /// - seealso: [RFC7231, Section 6.4.5](http://www.iana.org/go/rfc7231#section-6.4.5) case useProxy = 305 /// Temporary Redirect: 307 /// /// - seealso: [RFC7231, Section 6.4.7](http://www.iana.org/go/rfc7231#section-6.4.7) case temporaryRedirect = 307 /// Permanent Redirect: 308 /// /// - seealso: [RFC7538](http://www.iana.org/go/rfc7538) case permanentRedirect = 308 /// Bad Request: 400 /// /// - seealso: [RFC7231, Section 6.5.1](http://www.iana.org/go/rfc7231#section-6.5.1) case badRequest = 400 /// Unauthorized: 401 /// /// - seealso: [RFC7235, Section 3.1](http://www.iana.org/go/rfc7235#section-3.1) case unauthorized = 401 /// Payment Required: 402 /// /// - seealso: [RFC7231, Section 6.5.2](http://www.iana.org/go/rfc7231#section-6.5.2) case paymentRequired = 402 /// Forbidden: 403 /// /// - seealso: [RFC7231, Section 6.5.3](http://www.iana.org/go/rfc7231#section-6.5.3) case forbidden = 403 /// Not Found: 404 /// /// - seealso: [RFC7231, Section 6.5.4](http://www.iana.org/go/rfc7231#section-6.5.4) case notFound = 404 /// Method Not Allowed: 405 /// /// - seealso: [RFC7231, Section 6.5.5](http://www.iana.org/go/rfc7231#section-6.5.5) case methodNotAllowed = 405 /// Not Acceptable: 406 /// /// - seealso: [RFC7231, Section 6.5.6](http://www.iana.org/go/rfc7231#section-6.5.6) case notAcceptable = 406 /// Proxy Authentication Required: 407 /// /// - seealso: [RFC7235, Section 3.2](http://www.iana.org/go/rfc7235#section-3.2) case proxyAuthenticationRequired = 407 /// Request Timeout: 408 /// /// - seealso: [RFC7231, Section 6.5.7](http://www.iana.org/go/rfc7231#section-6.5.7) case requestTimeout = 408 /// Conflict: 409 /// /// - seealso: [RFC7231, Section 6.5.8](http://www.iana.org/go/rfc7231#section-6.5.8) case conflict = 409 /// Gone: 410 /// /// - seealso: [RFC7231, Section 6.5.9](http://www.iana.org/go/rfc7231#section-6.5.9) case gone = 410 /// Length Required: 411 /// /// - seealso: [RFC7231, Section 6.5.10](http://www.iana.org/go/rfc7231#section-6.5.10) case lengthRequired = 411 /// Precondition Failed: 412 /// /// - seealso: [RFC7232, Section 4.2](http://www.iana.org/go/rfc7232#section-4.2) /// - seealso: [RFC8144, Section 3.2](http://www.iana.org/go/rfc8144#section-3.2) case preconditionFailed = 412 /// Payload Too Large: 413 /// /// - seealso: [RFC7231, Section 6.5.11](http://www.iana.org/go/rfc7231#section-6.5.11) case payloadTooLarge = 413 /// URI Too Long: 414 /// /// - seealso: [RFC7231, Section 6.5.12](http://www.iana.org/go/rfc7231#section-6.5.12) @objc(HTTPStatusCodeURITooLong) case uriTooLong = 414 /// Unsupported Media Type: 415 /// /// - seealso: [RFC7231, Section 6.5.13](http://www.iana.org/go/rfc7231#section-6.5.13) /// - seealso: [RFC7694, Section 3](http://www.iana.org/go/rfc7694#section-3) case unsupportedMediaType = 415 /// Range Not Satisfiable: 416 /// /// - seealso: [RFC7233, Section 4.4](http://www.iana.org/go/rfc7233#section-4.4) case rangeNotSatisfiable = 416 /// Expectation Failed: 417 /// /// - seealso: [RFC7231, Section 6.5.14](http://www.iana.org/go/rfc7231#section-6.5.14) case expectationFailed = 417 /// I'm A Teapot: 418 /// /// Returned by tea pots requested to brew coffee /// /// - seealso: [RFC 2324](http://www.iana.org/go/rfc2324) case imATeapot = 418 /// Misdirected Request: 421 /// /// - seealso: [RFC7540, Section 9.1.2](http://www.iana.org/go/rfc7540#section-9.1.2) case misdirectedRequest = 421 /// Unprocessable Entity: 422 /// /// - seealso: [RFC4918](http://www.iana.org/go/rfc4918) case unprocessableEntity = 422 /// Locked: 423 /// /// - seealso: [RFC4918](http://www.iana.org/go/rfc4918) case locked = 423 /// Failed Dependency: 424 /// /// - seealso: [RFC4918](http://www.iana.org/go/rfc4918) case failedDependency = 424 /// Too Early: 425 /// /// - seealso: [RFC8470](http://www.iana.org/go/rfc8470) case tooEarly = 425 /// Upgrade Required: 426 /// /// - seealso: [RFC7231, Section 6.5.15](http://www.iana.org/go/rfc7231#section-6.5.15) case upgradeRequired = 426 /// Precondition Required: 428 /// /// - seealso: [RFC6585](http://www.iana.org/go/rfc6585) case preconditionRequired = 428 /// Too Many Requests: 429 /// /// - seealso: [RFC6585](http://www.iana.org/go/rfc6585) case tooManyRequests = 429 /// Request Header Fields Too Large: 431 /// /// - seealso: [RFC6585](http://www.iana.org/go/rfc6585) case requestHeaderFieldsTooLarge = 431 /// IIS Login Timeout: 440 /// /// The client's session has expired and must log in again. /// /// **Category**: Internet Information Services /// /// - seealso: [Error message when you try to log on to Exchange 2007 by using Outlook Web Access: "440 Login Timeout"](http://support.microsoft.com/kb/941201/en-us) @objc(HTTPStatusCodeIISLoginTimeout) case iisLoginTimeout = 440 /// nginx No Response: 444 /// /// Used to indicate that the server has returned no information to the client and closed the connection. /// /// **Category**: nginx case nginxNoResponse = 444 /// IIS Retry With: 449 /// /// The server cannot honour the request because the user has not provided the required information. /// /// **Category**: Internet Information Services /// /// - seealso: [2.2.6 449 Retry With Status Code](https://msdn.microsoft.com/en-us/library/dd891478.aspx) @objc(HTTPStatusCodeIISRetryWith) case iisRetryWith = 449 /// Blocked by Windows Parental Controls: 450 /// /// A Microsoft extension. This error is given when Windows Parental Controls are turned on and are blocking access to the given webpage. case blockedByWindowsParentalControls = 450 /// Unavailable For Legal Reasons: 451 /// /// - seealso: [RFC7725](http://www.iana.org/go/rfc7725) case unavailableForLegalReasons = 451 /// nginx SSL Certificate Error: 495 /// /// An expansion of the 400 Bad Request response code, used when the client has provided an invalid client certificate. /// /// **Category**: nginx case nginxSSLCertificateError = 495 /// nginx SSL Certificate Required: 496 /// /// An expansion of the 400 Bad Request response code, used when a client certificate is required but not provided. /// /// **Category**: nginx case nginxSSLCertificateRequired = 496 /// nginx HTTP To HTTPS: 497 /// /// An expansion of the 400 Bad Request response code, used when the client has made a HTTP request to a port listening for HTTPS requests. /// /// **Category**: nginx case nginxHTTPToHTTPS = 497 /// Token Expired: 498 /// /// Returned by [ArcGIS for Server](https://en.wikipedia.org/wiki/ArcGIS_Server). A code of 498 indicates an expired or otherwise invalid token. /// /// - seealso: [Using token-based authentication](http://help.arcgis.com/en/arcgisserver/10.0/apis/soap/index.htm#Using_token_authentication.htm) case tokenExpired = 498 /// nginx Client Closed Request: 499 /// /// Used when the client has closed the request before the server could send a response. /// /// **Category**: nginx case nginxClientClosedRequest = 499 /// Internal Server Error: 500 /// /// - seealso: [RFC7231, Section 6.6.1](http://www.iana.org/go/rfc7231#section-6.6.1) case internalServerError = 500 /// Not Implemented: 501 /// /// - seealso: [RFC7231, Section 6.6.2](http://www.iana.org/go/rfc7231#section-6.6.2) case notImplemented = 501 /// Bad Gateway: 502 /// /// - seealso: [RFC7231, Section 6.6.3](http://www.iana.org/go/rfc7231#section-6.6.3) case badGateway = 502 /// Service Unavailable: 503 /// /// - seealso: [RFC7231, Section 6.6.4](http://www.iana.org/go/rfc7231#section-6.6.4) case serviceUnavailable = 503 /// Gateway Timeout: 504 /// /// - seealso: [RFC7231, Section 6.6.5](http://www.iana.org/go/rfc7231#section-6.6.5) case gatewayTimeout = 504 /// HTTP Version Not Supported: 505 /// /// - seealso: [RFC7231, Section 6.6.6](http://www.iana.org/go/rfc7231#section-6.6.6) @objc(HTTPStatusCodeHTTPVersionNotSupported) case httpVersionNotSupported = 505 /// Variant Also Negotiates: 506 /// /// - seealso: [RFC2295](http://www.iana.org/go/rfc2295) case variantAlsoNegotiates = 506 /// Insufficient Storage: 507 /// /// - seealso: [RFC4918](http://www.iana.org/go/rfc4918) case insufficientStorage = 507 /// Loop Detected: 508 /// /// - seealso: [RFC5842](http://www.iana.org/go/rfc5842) case loopDetected = 508 /// Bandwidth Limit Exceeded: 509 /// /// The server has exceeded the bandwidth specified by the server administrator; this is often used by shared hosting providers to limit the bandwidth of customers. /// /// - seealso: case bandwidthLimitExceeded = 509 /// Not Extended: 510 /// /// - seealso: [RFC2774](http://www.iana.org/go/rfc2774) case notExtended = 510 /// Network Authentication Required: 511 /// /// - seealso: [RFC6585](http://www.iana.org/go/rfc6585) case networkAuthenticationRequired = 511 /// Site is frozen: 530 /// /// Used by the [Pantheon](https://en.wikipedia.org/wiki/Pantheon_(software)) web platform to indicate a site that has been frozen due to inactivity. case siteIsFrozen = 530 /// Network Connect Timeout Error: 599 /// /// This status code is not specified in any RFCs, but is used by some HTTP proxies to signal a network connect timeout behind the proxy to a client in front of the proxy. case networkConnectTimeoutError = 599 } ================================================ FILE: Tests/.gitignore ================================================ Carthage Cartfile.resolved ================================================ FILE: Tests/Cartfile ================================================ github "rhodgkins/SwiftHTTPStatusCodes" "master" ================================================ FILE: Tests/Generator.playground/Contents.swift ================================================ import Foundation import XCPlayground func createEnumCaseFromLine(line: String) -> Case? { func createCommentsFromReference(reference: String?) -> [String]? { func createRFCSeeAlso(link: String) -> String? { let values = link.components(separatedBy: ", ") guard let spec = values.first else { return nil } let components = NSURLComponents(string: spec.lowercased())! if values.count == 2 { components.fragment = values[1].lowercased().replacingOccurrences(of: " ", with: "-") } let url = components.url(relativeTo: URL(string: "http://www.iana.org/go/"))! return createSeeAlso(text: link, link: url.absoluteString) } guard let reference = reference else { return nil } let refsRegex = try! NSRegularExpression(pattern: "\\[([^\\]]+)\\]") return refsRegex.matches(in: reference, range: reference.nsRange).compactMap { result in guard result.numberOfRanges == 2, let link = reference[result.range(at: 1)] else { return nil } return createRFCSeeAlso(link: link) } } let linesRegex = try! NSRegularExpression(pattern: "^([^,]*),([^,]*),\"?([^\"$]*)\"?") guard let match = linesRegex.firstMatch(in: line, range: line.nsRange), match.numberOfRanges == 4 else { return nil } let ref = line[match.range(at: 3)] guard let codeString = line[match.range(at: 1)], let code = Int(codeString, radix: 10) else { return nil } guard let info = line[match.range(at: 2)], info.lowercased() != "unassigned" else { return nil } return Case(code: code, name: info, comments: createCommentsFromReference(reference: ref) ?? []) } func fetchCSV() -> (lastUpdated: String, cases: Set)? { let semaphore = DispatchSemaphore(value: 0) var result: (String, Set)? let task = URLSession.shared.dataTask(with: URL(string: "http://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv")!) { data, response, error in defer { semaphore.signal() } if let error = error { print("Error fetching CSV: \(error)") return } let response = response as! HTTPURLResponse guard let lastUpdated = response.allHeaderFields["Last-Modified"] as! String? else { print("No Last-Modified header value") return } guard let d = data, let string = String(data: d, encoding: .utf8) else { print("Unable to decode data: \(String(describing: data))") return } var cases = Set() string.enumerateLines{ line, _ in if let c = createEnumCaseFromLine(line: line) { cases.insert(c) } } result = (lastUpdated, cases) } task.resume() if semaphore.wait(timeout: DispatchTime.now() + .seconds(10)) != .success { task.cancel() print("Timeout waiting for task to complete") } return result } let CodeBlacklist = [ 306 // Declared as (Unused) in CSV ] if let (lastUpdated, allCases) = fetchCSV() { var cases = allCases.filter { !CodeBlacklist.contains($0.code) } cases.formUnion(ExtraCases) print(FileHeader) print() print(Imports) print() print(createEnumHeaderComment(lastUpdated: lastUpdated)) print(EnumDeclarationStart) print() print(cases.sorted().map(String.init(describing:)).joined(separator: "\n\n")) print(EnumDeclarationEnd) print() } ================================================ FILE: Tests/Generator.playground/Sources/Case.swift ================================================ public struct Case { public let code: Int let name: String let comments: [String] let caseName: String let objCCaseName: String? init(code: Int, name: String, comments: String...) { self.init(code: code, name: name, comments: comments) } public init(code: Int, name: String, comments: [String]) { self.code = code self.name = name self.comments = ["\(name): \(code)", ""] + comments // Remove all non code print characters, interpret '-' as a space let identifiers = (SpecialCaseNameLookup[code] ?? name).replacingOccurrences(of: "\\-", with: " ", options: [.caseInsensitive, .regularExpression]).replacingOccurrences(of: "[^a-z0-9 ]", with: "", options: [.caseInsensitive, .regularExpression]).components(separatedBy: " ") // Must always have at least 1 value for the identifiers let prefix = identifiers.first! // Match Swift 3.0 enum case naming convention let swiftCaseNamePrefix = prefix.lowercased() let swiftCaseNameSuffix = (identifiers.count > 1 ? identifiers.suffix(from: 1).map { $0.uppercasedFirstCharacter() } : []).joined(separator: "") let swiftCaseName = swiftCaseNamePrefix + swiftCaseNameSuffix // Keep acronyms if its the first identifier objCCaseName = prefix.uppercased() == prefix ? (prefix + swiftCaseNameSuffix) : nil // Escape special case names caseName = UnsafeCaseNames.contains(swiftCaseName) ? "`\(swiftCaseName)`" : swiftCaseName } } extension Case: Hashable, Comparable, CustomStringConvertible { public var hashValue: Int { return code.hashValue } public var description: String { var lines = [makeLinesIntoDocComment(lines: comments, prefix: "\t")] if let objCCaseName = objCCaseName { lines.append("\t@objc(\(EnumName)\(objCCaseName))") } lines.append("\tcase \(caseName) = \(code)") return text(lines) } public static func ==(lhs: Case, rhs: Case) -> Bool { return lhs.code == rhs.code } public static func <(lhs: Case, rhs: Case) -> Bool { return lhs.code < rhs.code } } private extension String { func lowercasedFirstCharacter() -> String { let firstCharacter = String(self[startIndex]) let rest = self[index(after: startIndex)...] return firstCharacter.lowercased() + rest } func uppercasedFirstCharacter() -> String { let firstCharacter = String(self[startIndex]) let rest = self[index(after: startIndex)...] return firstCharacter.uppercased() + rest } } import Foundation.NSRange public extension String { var nsRange: NSRange { return NSRange(startIndex.. String? { guard let r = Range(range, in: self) else { return nil } return String(self[r]) } } /// List of Swift keywords private let UnsafeCaseNames = Set(arrayLiteral: "continue", "break", "fallthrough­", "return", "guard", "if", "else", "switch", "default", "for", "while", "repeat", "do", "try", "catch", "throw", "defer", "func", "throws", "rethrows", "struct", "class", "extension", "enum", "protocol", "typealias­", "associatedtype­", "public", "internal", "private", "final", "open", "var", "let", "case", "indirect", "self", "static", "as", "is", "weak", "unowned", "in", "where", "get", "set", "willSet", "didSet", "init", "deinit", "subscript­", "operator", "postfix", "prefix", "infix", "convenience­", "dynamic­", "­infix­", "lazy­", "mutating­", "nonmutating­", "optional­", "override­", "required" ) ================================================ FILE: Tests/Generator.playground/Sources/StaticTexts.swift ================================================ import Foundation func text(_ lines: [String]) -> String { return lines.joined(separator: "\n") } func text(_ lines: String...) -> String { return text(lines) } func makeLinesIntoDocComment(lines: [String], prefix: String = "") -> String { return text(lines.map { "\(prefix)/// \($0)" }) } func makeLinesIntoDocComment(prefix: String = "", lines: String...) -> String { return makeLinesIntoDocComment(lines: lines, prefix: prefix) } private func makeLinesIntoComment(lines: String...) -> String { return text(lines.map { "// \($0)" }) } func createLink(text: String? = nil, link: String) -> String { guard let text = text else { return "<\(link)>" } return "[\(text)](\(link))" } public func createSeeAlso(text: String? = nil, link: String) -> String { return "- seealso: \(createLink(text: text, link: link))" } private let Date: String = { let formatter = DateFormatter() formatter.dateFormat = "dd/MM/yyyy" return formatter.string(from: Foundation.Date()) }() private let Year: String = { let formatter = DateFormatter() formatter.dateFormat = "yyyy" return formatter.string(from: Foundation.Date()) }() let EnumName = "HTTPStatusCode" public let FileHeader = makeLinesIntoComment(lines: "", "HTTPStatusCodes.swift", "", "Generated by Richard Hodgkins on \(Date).", "Copyright (c) \(Year) Richard Hodgkins. All rights reserved.", "" ) public let Imports = text( "import Foundation" ) public func createEnumHeaderComment(lastUpdated: String) -> String { return makeLinesIntoDocComment(lines: "HTTP status codes as per the \(createLink(text: "IANA HTTP status code registry", link: "http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml")).", "", "Last updated: \(lastUpdated)", "", "- seealso: \(createLink(text: "Wikipedia page - List of HTTP status codes", link: "http://en.wikipedia.org/wiki/List_of_HTTP_status_codes"))", "- seealso: \(createLink(text: "HTTP protocol standard - Status Code Definitions", link: "https://tools.ietf.org/html/rfc2616#section-10"))" ) } public let EnumDeclarationStart = "@objc public enum \(EnumName): Int {" public let EnumDeclarationEnd = "}" /// Allows conversions of special cases defined in the RFC spec. let SpecialCaseNameLookup: [Int: String] = [ : ] public let ExtraCases = [ // MARK: RFC Case(code: 418, name: "I'm A Teapot", comments: "Returned by tea pots requested to brew coffee", "", createSeeAlso(text: "RFC 2324", link: "http://www.iana.org/go/rfc2324") ), // MARK: ISS Case(code: 440, name: "IIS Login Timeout", comments: "The client's session has expired and must log in again.", "", "**Category**: Internet Information Services", "", createSeeAlso(text: "Error message when you try to log on to Exchange 2007 by using Outlook Web Access: \"440 Login Timeout\"", link: "http://support.microsoft.com/kb/941201/en-us") ), Case(code: 449, name: "IIS Retry With", comments: "The server cannot honour the request because the user has not provided the required information.", "", "**Category**: Internet Information Services", "", createSeeAlso(text: "2.2.6 449 Retry With Status Code", link: "https://msdn.microsoft.com/en-us/library/dd891478.aspx") ), // MARK: ngnix Case(code: 444, name: "nginx No Response", comments: "Used to indicate that the server has returned no information to the client and closed the connection.", "", "**Category**: nginx" ), Case(code: 495, name: "nginx SSL Certificate Error", comments: "An expansion of the 400 Bad Request response code, used when the client has provided an invalid client certificate.", "", "**Category**: nginx" ), Case(code: 496, name: "nginx SSL Certificate Required", comments: "An expansion of the 400 Bad Request response code, used when a client certificate is required but not provided.", "", "**Category**: nginx" ), Case(code: 497, name: "nginx HTTP To HTTPS", comments: "An expansion of the 400 Bad Request response code, used when the client has made a HTTP request to a port listening for HTTPS requests.", "", "**Category**: nginx" ), Case(code: 499, name: "nginx Client Closed Request", comments: "Used when the client has closed the request before the server could send a response.", "", "**Category**: nginx" ), // MARK: Other Case(code: 450, name: "Blocked by Windows Parental Controls", comments: "A Microsoft extension. This error is given when Windows Parental Controls are turned on and are blocking access to the given webpage." ), Case(code: 498, name: "Token Expired", comments: "Returned by \(createLink(text: "ArcGIS for Server", link: "https://en.wikipedia.org/wiki/ArcGIS_Server")). A code of 498 indicates an expired or otherwise invalid token.", "", createSeeAlso(text: "Using token-based authentication", link: "http://help.arcgis.com/en/arcgisserver/10.0/apis/soap/index.htm#Using_token_authentication.htm") ), Case(code: 530, name: "Site is frozen", comments: "Used by the \(createLink(text: "Pantheon", link: "https://en.wikipedia.org/wiki/Pantheon_(software)")) web platform to indicate a site that has been frozen due to inactivity." ), Case(code: 509, name: "Bandwidth Limit Exceeded", comments: "The server has exceeded the bandwidth specified by the server administrator; this is often used by shared hosting providers to limit the bandwidth of customers.", "", createSeeAlso(link: "https://documentation.cpanel.net/display/CKB/HTTP+Error+Codes+and+Quick+Fixes#HTTPErrorCodesandQuickFixes-509BandwidthLimitExceeded") ), Case(code: 599, name: "Network Connect Timeout Error", comments: "This status code is not specified in any RFCs, but is used by some HTTP proxies to signal a network connect timeout behind the proxy to a client in front of the proxy." ) ] ================================================ FILE: Tests/Generator.playground/contents.xcplayground ================================================ ================================================ FILE: Tests/HTTPStatusCodes/Deprecated.h ================================================ // // Deprecated.h // HTTPStatusCodes // // Created by Richard Hodgkins on 08/06/2016. // Copyright © 2016 Rich H. All rights reserved. // @import Foundation; /// Used to clean up API, should not be used externally. typedef const NSInteger __HTTPStatusCode NS_SWIFT_UNAVAILABLE(""); // MARK: - Deprecated /// - deprecated: Renamed to `HTTPStatusCodePayloadTooLarge` FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeRequestEntityTooLarge NS_SWIFT_UNAVAILABLE("Use HTTPStatusCode.requestEntityTooLarge instead") DEPRECATED_MSG_ATTRIBUTE("Renamed to HTTPStatusCodePayloadTooLarge"); /// - deprecated: Renamed to `HTTPStatusCodeURITooLong` FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeRequestURITooLong NS_SWIFT_UNAVAILABLE("Use HTTPStatusCode.requestURITooLong instead") DEPRECATED_MSG_ATTRIBUTE("Renamed to HTTPStatusCodeURITooLong"); /// - deprecated: Renamed to `HTTPStatusCodeRangeNotSatisfiable` FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeRequestedRangeNotSatisfiable NS_SWIFT_UNAVAILABLE("Use HTTPStatusCode.requestedRangeNotSatisfiable instead") DEPRECATED_MSG_ATTRIBUTE("Renamed to HTTPStatusCodeRangeNotSatisfiable"); /// - deprecated: Renamed to `HTTPStatusCodeIISLoginTimeout` FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeLoginTimeout NS_SWIFT_UNAVAILABLE("Use HTTPStatusCode.loginTimeout instead") DEPRECATED_MSG_ATTRIBUTE("Renamed to HTTPStatusCodeIISLoginTimeout"); /// - deprecated: Renamed to `HTTPStatusCodeIISRetryWith` FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeRetryWith NS_SWIFT_UNAVAILABLE("Use HTTPStatusCode.retryWith instead") DEPRECATED_MSG_ATTRIBUTE("Renamed to HTTPStatusCodeIISRetryWith"); /// - deprecated: Renamed to `HTTPStatusCodeNginxNoResponse` FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeNoResponse NS_SWIFT_UNAVAILABLE("Use HTTPStatusCode.noResponse instead") DEPRECATED_MSG_ATTRIBUTE("Renamed to HTTPStatusCodeNginxNoResponse"); /// - deprecated: Renamed to `HTTPStatusCodeNginxSSLCertificateError` FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeCertError NS_SWIFT_UNAVAILABLE("Use HTTPStatusCode.certError instead") DEPRECATED_MSG_ATTRIBUTE("Renamed to HTTPStatusCodeNginxSSLCertificateError"); /// - deprecated: Renamed to `HTTPStatusCodeNginxSSLCertificateRequired` FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeNoCert NS_SWIFT_UNAVAILABLE("Use HTTPStatusCode.noCert instead") DEPRECATED_MSG_ATTRIBUTE("Renamed to HTTPStatusCodeNginxSSLCertificateRequired"); /// - deprecated: Renamed to `HTTPStatusCodeNginxHTTPToHTTPS` FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeHTTPToHTTPS NS_SWIFT_UNAVAILABLE("Use HTTPStatusCode.hTTPToHTTPS instead") DEPRECATED_MSG_ATTRIBUTE("Renamed to HTTPStatusCodeNginxHTTPToHTTPS"); /// - deprecated: Renamed to `HTTPStatusCodeNginxClientClosedRequest` FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeClientClosedRequest NS_SWIFT_UNAVAILABLE("Use HTTPStatusCode.clientClosedRequest instead") DEPRECATED_MSG_ATTRIBUTE("Renamed to HTTPStatusCodeNginxClientClosedRequest"); /// - deprecated: Renamed to `HTTPStatusCodeNetworkConnectTimeoutError` FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeNetworkTimeoutError NS_SWIFT_UNAVAILABLE("Use HTTPStatusCode.networkTimeoutError instead") DEPRECATED_MSG_ATTRIBUTE("Renamed to HTTPStatusCodeNetworkConnectTimeoutError");; /// Returned by version 1 of the Twitter Search and Trends API when the client is being rate limited; versions 1.1 and later use the 429 Too Many Requests response code instead. /// /// - seealso: [Twitter Error Codes & Responses](https://dev.twitter.com/docs/error-codes-responses) FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeTwitterEnhanceYourCalm NS_SWIFT_UNAVAILABLE("Use HTTPStatusCode.TwitterEnhanceYourCalm instead") DEPRECATED_MSG_ATTRIBUTE("Renamed to HTTPStatusCodeTooManyRequests"); // MARK: - Removed /// Checkpoint: 103 /// /// Used in the resumable requests proposal to resume aborted PUT or POST requests. /// /// Removed and replaced with `EarlyHints` which has a different meaning. /// /// - seealso: [Original proposal](https://web.archive.org/web/20151013212135/http://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal) FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeCheckpoint NS_UNAVAILABLE; /// Switch Proxy: 306 /// /// No longer used. Originally meant "Subsequent requests should use the specified proxy." /// /// - seealso: [Original draft](https://tools.ietf.org/html/draft-cohen-http-305-306-responses-00) FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeSwitchProxy NS_UNAVAILABLE; /// Authentication Timeout: 419 /// /// Removed from Wikipedia page. FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeAuthenticationTimeout NS_UNAVAILABLE; /// Method Failure: 419 /// /// A deprecated response used by the Spring Framework when a method has failed. /// /// - seealso: [Spring Framework: HttpStatus enum documentation - `METHOD_FAILURE`](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/HttpStatus.html#METHOD_FAILURE) FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeSpringFrameworkMethodFailure NS_UNAVAILABLE; /// Request Header Too Large: 494 /// /// Removed and replaced with `RequestHeaderFieldsTooLarge` - 431 FOUNDATION_EXTERN __HTTPStatusCode HTTPStatusCodeRequestHeaderTooLarge NS_UNAVAILABLE; ================================================ FILE: Tests/HTTPStatusCodes/Deprecated.m ================================================ // // Deprecated.c // HTTPStatusCodes // // Created by Richard Hodgkins on 08/06/2016. // Copyright © 2016 Rich H. All rights reserved. // #import "Deprecated.h" #import // MARK: - Deprecated __HTTPStatusCode HTTPStatusCodeRequestEntityTooLarge = HTTPStatusCodePayloadTooLarge; __HTTPStatusCode HTTPStatusCodeRequestURITooLong = HTTPStatusCodeURITooLong; __HTTPStatusCode HTTPStatusCodeRequestedRangeNotSatisfiable = HTTPStatusCodeRangeNotSatisfiable; __HTTPStatusCode HTTPStatusCodeLoginTimeout = HTTPStatusCodeIISLoginTimeout; __HTTPStatusCode HTTPStatusCodeRetryWith = HTTPStatusCodeIISRetryWith; __HTTPStatusCode HTTPStatusCodeNoResponse = HTTPStatusCodeNginxNoResponse; __HTTPStatusCode HTTPStatusCodeCertError = HTTPStatusCodeNginxSSLCertificateError; __HTTPStatusCode HTTPStatusCodeNoCert = HTTPStatusCodeNginxSSLCertificateRequired; __HTTPStatusCode HTTPStatusCodeHTTPToHTTPS = HTTPStatusCodeNginxHTTPToHTTPS; __HTTPStatusCode HTTPStatusCodeClientClosedRequest = HTTPStatusCodeNginxClientClosedRequest; __HTTPStatusCode HTTPStatusCodeNetworkTimeoutError = HTTPStatusCodeNetworkConnectTimeoutError; __HTTPStatusCode HTTPStatusCodeTwitterEnhanceYourCalm = HTTPStatusCodeTooManyRequests; // MARK: - Removed __HTTPStatusCode HTTPStatusCodeCheckpoint = 103; __HTTPStatusCode HTTPStatusCodeSwitchProxy = 306; __HTTPStatusCode HTTPStatusCodeAuthenticationTimeout = 419; __HTTPStatusCode HTTPStatusCodeSpringFrameworkMethodFailure = 419; __HTTPStatusCode HTTPStatusCodeRequestHeaderTooLarge = 494; ================================================ FILE: Tests/HTTPStatusCodes/HTTPStatusCodes.h ================================================ // // HTTPStatusCodes.h // HTTPStatusCodes // // Created by Richard Hodgkins on 22/02/2015. // Copyright (c) 2015 Rich H. All rights reserved. // @import Foundation; //! Project version number for HTTPStatusCodes. FOUNDATION_EXPORT double HTTPStatusCodesVersionNumber; //! Project version string for HTTPStatusCodes. FOUNDATION_EXPORT const unsigned char HTTPStatusCodesVersionString[]; #import ================================================ FILE: Tests/HTTPStatusCodes/SupportingFiles/Info-OSX.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString $(HSC_VERSION) CFBundleSignature ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) NSHumanReadableCopyright Copyright © 2015 Rich H. All rights reserved. NSPrincipalClass ================================================ FILE: Tests/HTTPStatusCodes/SupportingFiles/Info-iOS.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString $(HSC_VERSION) CFBundleSignature ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass ================================================ FILE: Tests/HTTPStatusCodes/SupportingFiles/Info-tvOS.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString $(HSC_VERSION) CFBundleSignature ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass ================================================ FILE: Tests/HTTPStatusCodes/SupportingFiles/Info-watchOS.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString $(HSC_VERSION) CFBundleSignature ???? CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass ================================================ FILE: Tests/HTTPStatusCodes.xcconfig ================================================ // // HTTPStatusCodes.xcconfig // HTTPStatusCodes // // Created by Richard Hodgkins on 14/09/2015. // Copyright © 2015 Rich H. All rights reserved. // // Custom PRODUCT_NAME = HTTPStatusCodes PRODUCT_BUNDLE_IDENTIFIER = uk.co.rhodgkins.swift.$(PRODUCT_NAME:rfc1034identifier) HSC_VERSION = 3.3.2 // Universal Framework APPLICATION_EXTENSION_API_ONLY = YES COMBINE_HIDPI_IMAGES = YES SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator appletvos appletvsimulator watchos watchsimulator VALID_ARCHS[sdk=iphone*] = arm64 armv7 armv7s VALID_ARCHS[sdk=appletv*] = arm64 VALID_ARCHS[sdk=macosx*] = i386 x86_64 VALID_ARCHS[sdk=watch*] = armv7k SWIFT_VERSION = 5.0 LD_RUNPATH_SEARCH_PATHS[sdk=iphone*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks LD_RUNPATH_SEARCH_PATHS[sdk=appletv*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) @executable_path/../Frameworks @loader_path/Frameworks LD_RUNPATH_SEARCH_PATHS[sdk=watch*] = $(inherited) @executable_path/Frameworks INFOPLIST_FILE[sdk=iphone*] = $(PROJECT_NAME)/SupportingFiles/Info-iOS.plist INFOPLIST_FILE[sdk=appletv*] = $(PROJECT_NAME)/SupportingFiles/Info-tvOS.plist INFOPLIST_FILE[sdk=macosx*] = $(PROJECT_NAME)/SupportingFiles/Info-OSX.plist INFOPLIST_FILE[sdk=watch*] = $(PROJECT_NAME)/SupportingFiles/Info-watchOS.plist // Platform-specific // iOS CODE_SIGN_IDENTITY[sdk=iphoneos*] = iPhone Developer IPHONEOS_DEPLOYMENT_TARGET[sdk=iphone*] = 8.0 TARGETED_DEVICE_FAMILY[sdk=iphone*] = 1,2 // tvOS CODE_SIGN_IDENTITY[sdk=appletvos*] = iPhone Developer TVOS_DEPLOYMENT_TARGET[sdk=appletv*] = 9.0 TARGETED_DEVICE_FAMILY[sdk=appletv*] = 3 // OS X MACOSX_DEPLOYMENT_TARGET[sdk=macosx*] = 10.10 FRAMEWORK_VERSION[sdk=macosx*] = A // WatchOS CODE_SIGN_IDENTITY[sdk=watchos*] = iPhone Developer WATCHOS_DEPLOYMENT_TARGET[sdk=watch*] = 2.0 ================================================ FILE: Tests/HTTPStatusCodes.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 48; objects = { /* Begin PBXBuildFile section */ 440D14181A99DD1D00EEB60B /* HTTPStatusCodes.h in Headers */ = {isa = PBXBuildFile; fileRef = 440D14171A99DD1D00EEB60B /* HTTPStatusCodes.h */; settings = {ATTRIBUTES = (Public, ); }; }; 440D141E1A99DD1D00EEB60B /* HTTPStatusCodes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 440D14121A99DD1D00EEB60B /* HTTPStatusCodes.framework */; }; 440D14251A99DD1D00EEB60B /* HTTPStatusCodesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 440D14241A99DD1D00EEB60B /* HTTPStatusCodesTests.swift */; }; 4410E6E11D0740DA00AC18E6 /* HTTPStatusCodes+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4410E6E01D0740DA00AC18E6 /* HTTPStatusCodes+Extensions.swift */; }; 442266871D076CA10083A675 /* RegressionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 442266861D076CA10083A675 /* RegressionTests.swift */; }; 4423AB191DAEAF5700C36EA3 /* ObjectiveCRegressionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4423AB181DAEAF5700C36EA3 /* ObjectiveCRegressionTests.m */; }; 442DC0301DAEC41600420E08 /* ObjectiveCTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 442DC02F1DAEC41600420E08 /* ObjectiveCTests.m */; }; 444320471D08CA1D00A6CA18 /* Deprecated.h in Headers */ = {isa = PBXBuildFile; fileRef = 444320461D08C9AC00A6CA18 /* Deprecated.h */; settings = {ATTRIBUTES = (Public, ); }; }; 444320491D08CAED00A6CA18 /* Deprecated.m in Sources */ = {isa = PBXBuildFile; fileRef = 444320481D08CAED00A6CA18 /* Deprecated.m */; }; 44D94E4D1D07387400DC7B50 /* HTTPStatusCodes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44D94E4C1D07387400DC7B50 /* HTTPStatusCodes.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 440D141F1A99DD1D00EEB60B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 440D14091A99DD1D00EEB60B /* Project object */; proxyType = 1; remoteGlobalIDString = 440D14111A99DD1D00EEB60B; remoteInfo = HTTPStatusCodes; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 440D14121A99DD1D00EEB60B /* HTTPStatusCodes.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HTTPStatusCodes.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 440D14171A99DD1D00EEB60B /* HTTPStatusCodes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HTTPStatusCodes.h; sourceTree = ""; }; 440D141D1A99DD1D00EEB60B /* HTTPStatusCodesTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HTTPStatusCodesTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 440D14231A99DD1D00EEB60B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 440D14241A99DD1D00EEB60B /* HTTPStatusCodesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTTPStatusCodesTests.swift; sourceTree = ""; }; 440D14331A99DDC900EEB60B /* HTTPStatusCodes.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; name = HTTPStatusCodes.podspec; path = ../HTTPStatusCodes.podspec; sourceTree = ""; }; 440D14341A99DDC900EEB60B /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 440D14351A99DDC900EEB60B /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 440D14361A99E01500EEB60B /* .travis.yml */ = {isa = PBXFileReference; lastKnownFileType = text; name = .travis.yml; path = ../.travis.yml; sourceTree = ""; }; 4410E6E01D0740DA00AC18E6 /* HTTPStatusCodes+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "HTTPStatusCodes+Extensions.swift"; sourceTree = ""; }; 4410E6E21D074E7500AC18E6 /* Generator.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = Generator.playground; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; 442266861D076CA10083A675 /* RegressionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegressionTests.swift; sourceTree = ""; }; 4423AB181DAEAF5700C36EA3 /* ObjectiveCRegressionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjectiveCRegressionTests.m; sourceTree = ""; }; 442DC02F1DAEC41600420E08 /* ObjectiveCTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ObjectiveCTests.m; sourceTree = ""; }; 444320461D08C9AC00A6CA18 /* Deprecated.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Deprecated.h; sourceTree = ""; }; 444320481D08CAED00A6CA18 /* Deprecated.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Deprecated.m; sourceTree = ""; }; 446C8CDC1BA73F0B00FFB0E3 /* HTTPStatusCodes.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = HTTPStatusCodes.xcconfig; sourceTree = ""; }; 449852021B5A39140081F132 /* Info-iOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-iOS.plist"; sourceTree = ""; }; 449852031B5A39140081F132 /* Info-OSX.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-OSX.plist"; sourceTree = ""; }; 449852041B5A39140081F132 /* Info-watchOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-watchOS.plist"; sourceTree = ""; }; 44D94E4C1D07387400DC7B50 /* HTTPStatusCodes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPStatusCodes.swift; sourceTree = ""; }; 44D94E4E1D0738D600DC7B50 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Package.swift; path = ../Package.swift; sourceTree = ""; }; 44F92B2E1C7E3C7C00A0AD0A /* Info-tvOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-tvOS.plist"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 440D140E1A99DD1D00EEB60B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 440D141A1A99DD1D00EEB60B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 440D141E1A99DD1D00EEB60B /* HTTPStatusCodes.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 440D14081A99DD1D00EEB60B = { isa = PBXGroup; children = ( 440D14351A99DDC900EEB60B /* README.md */, 440D14331A99DDC900EEB60B /* HTTPStatusCodes.podspec */, 440D14361A99E01500EEB60B /* .travis.yml */, 440D14341A99DDC900EEB60B /* LICENSE */, 446C8CDC1BA73F0B00FFB0E3 /* HTTPStatusCodes.xcconfig */, 44D94E4E1D0738D600DC7B50 /* Package.swift */, 4410E6E21D074E7500AC18E6 /* Generator.playground */, 440D14141A99DD1D00EEB60B /* HTTPStatusCodes */, 440D14211A99DD1D00EEB60B /* HTTPStatusCodesTests */, 440D14131A99DD1D00EEB60B /* Products */, ); sourceTree = ""; }; 440D14131A99DD1D00EEB60B /* Products */ = { isa = PBXGroup; children = ( 440D14121A99DD1D00EEB60B /* HTTPStatusCodes.framework */, 440D141D1A99DD1D00EEB60B /* HTTPStatusCodesTests.xctest */, ); name = Products; sourceTree = ""; }; 440D14141A99DD1D00EEB60B /* HTTPStatusCodes */ = { isa = PBXGroup; children = ( 440D14171A99DD1D00EEB60B /* HTTPStatusCodes.h */, 444320461D08C9AC00A6CA18 /* Deprecated.h */, 444320481D08CAED00A6CA18 /* Deprecated.m */, 44D94E4B1D07387400DC7B50 /* Sources */, 449852011B5A39140081F132 /* SupportingFiles */, ); path = HTTPStatusCodes; sourceTree = ""; }; 440D14211A99DD1D00EEB60B /* HTTPStatusCodesTests */ = { isa = PBXGroup; children = ( 440D14231A99DD1D00EEB60B /* Info.plist */, 440D14241A99DD1D00EEB60B /* HTTPStatusCodesTests.swift */, 442DC02F1DAEC41600420E08 /* ObjectiveCTests.m */, 442266861D076CA10083A675 /* RegressionTests.swift */, 4423AB181DAEAF5700C36EA3 /* ObjectiveCRegressionTests.m */, ); path = HTTPStatusCodesTests; sourceTree = ""; }; 449852011B5A39140081F132 /* SupportingFiles */ = { isa = PBXGroup; children = ( 449852021B5A39140081F132 /* Info-iOS.plist */, 44F92B2E1C7E3C7C00A0AD0A /* Info-tvOS.plist */, 449852031B5A39140081F132 /* Info-OSX.plist */, 449852041B5A39140081F132 /* Info-watchOS.plist */, ); path = SupportingFiles; sourceTree = ""; }; 44D94E4B1D07387400DC7B50 /* Sources */ = { isa = PBXGroup; children = ( 44D94E4C1D07387400DC7B50 /* HTTPStatusCodes.swift */, 4410E6E01D0740DA00AC18E6 /* HTTPStatusCodes+Extensions.swift */, ); name = Sources; path = ../../Sources; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 440D140F1A99DD1D00EEB60B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 440D14181A99DD1D00EEB60B /* HTTPStatusCodes.h in Headers */, 444320471D08CA1D00A6CA18 /* Deprecated.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 440D14111A99DD1D00EEB60B /* HTTPStatusCodes */ = { isa = PBXNativeTarget; buildConfigurationList = 440D14281A99DD1D00EEB60B /* Build configuration list for PBXNativeTarget "HTTPStatusCodes" */; buildPhases = ( 440D140D1A99DD1D00EEB60B /* Sources */, 440D140E1A99DD1D00EEB60B /* Frameworks */, 440D140F1A99DD1D00EEB60B /* Headers */, 440D14101A99DD1D00EEB60B /* Resources */, ); buildRules = ( ); dependencies = ( ); name = HTTPStatusCodes; productName = HTTPStatusCodes; productReference = 440D14121A99DD1D00EEB60B /* HTTPStatusCodes.framework */; productType = "com.apple.product-type.framework"; }; 440D141C1A99DD1D00EEB60B /* HTTPStatusCodesTests */ = { isa = PBXNativeTarget; buildConfigurationList = 440D142B1A99DD1D00EEB60B /* Build configuration list for PBXNativeTarget "HTTPStatusCodesTests" */; buildPhases = ( 440D14191A99DD1D00EEB60B /* Sources */, 440D141A1A99DD1D00EEB60B /* Frameworks */, 440D141B1A99DD1D00EEB60B /* Resources */, ); buildRules = ( ); dependencies = ( 440D14201A99DD1D00EEB60B /* PBXTargetDependency */, ); name = HTTPStatusCodesTests; productName = HTTPStatusCodesTests; productReference = 440D141D1A99DD1D00EEB60B /* HTTPStatusCodesTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 440D14091A99DD1D00EEB60B /* Project object */ = { isa = PBXProject; attributes = { LastSwiftMigration = 0700; LastSwiftUpdateCheck = 0730; LastUpgradeCheck = 1020; ORGANIZATIONNAME = "Rich H"; TargetAttributes = { 440D14111A99DD1D00EEB60B = { CreatedOnToolsVersion = 6.3; LastSwiftMigration = 1020; }; 440D141C1A99DD1D00EEB60B = { CreatedOnToolsVersion = 6.3; LastSwiftMigration = 1020; }; }; }; buildConfigurationList = 440D140C1A99DD1D00EEB60B /* Build configuration list for PBXProject "HTTPStatusCodes" */; compatibilityVersion = "Xcode 8.0"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( English, en, ); mainGroup = 440D14081A99DD1D00EEB60B; productRefGroup = 440D14131A99DD1D00EEB60B /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 440D14111A99DD1D00EEB60B /* HTTPStatusCodes */, 440D141C1A99DD1D00EEB60B /* HTTPStatusCodesTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 440D14101A99DD1D00EEB60B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 440D141B1A99DD1D00EEB60B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 440D140D1A99DD1D00EEB60B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 4410E6E11D0740DA00AC18E6 /* HTTPStatusCodes+Extensions.swift in Sources */, 44D94E4D1D07387400DC7B50 /* HTTPStatusCodes.swift in Sources */, 444320491D08CAED00A6CA18 /* Deprecated.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 440D14191A99DD1D00EEB60B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 440D14251A99DD1D00EEB60B /* HTTPStatusCodesTests.swift in Sources */, 442DC0301DAEC41600420E08 /* ObjectiveCTests.m in Sources */, 442266871D076CA10083A675 /* RegressionTests.swift in Sources */, 4423AB191DAEAF5700C36EA3 /* ObjectiveCRegressionTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 440D14201A99DD1D00EEB60B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 440D14111A99DD1D00EEB60B /* HTTPStatusCodes */; targetProxy = 440D141F1A99DD1D00EEB60B /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 440D14261A99DD1D00EEB60B /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 446C8CDC1BA73F0B00FFB0E3 /* HTTPStatusCodes.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; 440D14271A99DD1D00EEB60B /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 446C8CDC1BA73F0B00FFB0E3 /* HTTPStatusCodes.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MTL_ENABLE_DEBUG_INFO = NO; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; 440D14291A99DD1D00EEB60B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 440D142A1A99DD1D00EEB60B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_CODE_COVERAGE = NO; COMBINE_HIDPI_IMAGES = YES; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; SKIP_INSTALL = YES; }; name = Release; }; 440D142C1A99DD1D00EEB60B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; INFOPLIST_FILE = "$(PRODUCT_NAME)/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=watch*]" = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; OTHER_SWIFT_FLAGS = "-DDEBUG"; PRODUCT_NAME = HTTPStatusCodesTests; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 440D142D1A99DD1D00EEB60B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { APPLICATION_EXTENSION_API_ONLY = NO; CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES; INFOPLIST_FILE = "$(PRODUCT_NAME)/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=watch*]" = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_NAME = HTTPStatusCodesTests; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 440D140C1A99DD1D00EEB60B /* Build configuration list for PBXProject "HTTPStatusCodes" */ = { isa = XCConfigurationList; buildConfigurations = ( 440D14261A99DD1D00EEB60B /* Debug */, 440D14271A99DD1D00EEB60B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 440D14281A99DD1D00EEB60B /* Build configuration list for PBXNativeTarget "HTTPStatusCodes" */ = { isa = XCConfigurationList; buildConfigurations = ( 440D14291A99DD1D00EEB60B /* Debug */, 440D142A1A99DD1D00EEB60B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 440D142B1A99DD1D00EEB60B /* Build configuration list for PBXNativeTarget "HTTPStatusCodesTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 440D142C1A99DD1D00EEB60B /* Debug */, 440D142D1A99DD1D00EEB60B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 440D14091A99DD1D00EEB60B /* Project object */; } ================================================ FILE: Tests/HTTPStatusCodes.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: Tests/HTTPStatusCodes.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist ================================================ IDEDidComputeMac32BitWarning ================================================ FILE: Tests/HTTPStatusCodes.xcodeproj/xcshareddata/xcschemes/HTTPStatusCodes.xcscheme ================================================ ================================================ FILE: Tests/HTTPStatusCodesTests/HTTPStatusCodesTests.swift ================================================ // // HTTPStatusCodesTests.swift // HTTPStatusCodesTests // // Created by Richard Hodgkins on 22/02/2015. // Copyright (c) 2015 Rich H. All rights reserved. // import Foundation #if os(watchOS) // No testing supported @testable import HTTPStatusCodes #else import XCTest #if DEBUG @testable import HTTPStatusCodes #else import HTTPStatusCodes #endif private func responseUsingInt(_ statusCode: Int) -> HTTPURLResponse { return HTTPURLResponse(url: URL(string: "http://www.google.com")!, statusCode: statusCode, httpVersion: nil, headerFields: nil)! } private func responseUsingRawValue(_ statusCode: HTTPStatusCode) -> HTTPURLResponse { return HTTPURLResponse(url: URL(string: "http://www.google.com")!, statusCode: statusCode.rawValue, httpVersion: nil, headerFields: nil)! } private func responseUsingEnum(_ statusCode: HTTPStatusCode) -> HTTPURLResponse { return HTTPURLResponse(url: URL(string: "http://www.google.com")!, statusCode: statusCode, httpVersion: nil, headerFields: nil)! } final class HTTPStatusCodesTests: XCTestCase { func testNSHTTPURLResponseInitUsingInt() { XCTAssertEqual(responseUsingRawValue(.continue).statusCode, 100, "Incorrect status code") XCTAssertEqual(responseUsingRawValue(.ok).statusCode, 200, "Incorrect status code") XCTAssertEqual(responseUsingRawValue(.multipleChoices).statusCode, 300, "Incorrect status code") XCTAssertEqual(responseUsingRawValue(.badRequest).statusCode, 400, "Incorrect status code") XCTAssertEqual(responseUsingRawValue(.internalServerError).statusCode, 500, "Incorrect status code") } func testNSHTTPURLResponseInitUsingEnum() { XCTAssertEqual(responseUsingEnum(.continue).statusCode, 100, "Incorrect status code") XCTAssertEqual(responseUsingEnum(.ok).statusCode, 200, "Incorrect status code") XCTAssertEqual(responseUsingEnum(.multipleChoices).statusCode, 300, "Incorrect status code") XCTAssertEqual(responseUsingEnum(.badRequest).statusCode, 400, "Incorrect status code") XCTAssertEqual(responseUsingEnum(.internalServerError).statusCode, 500, "Incorrect status code") } func testComputedStatusCodeValueProperty() { XCTAssertEqual(responseUsingInt(100).statusCodeValue!, HTTPStatusCode.continue, "Incorrect status code") XCTAssertEqual(responseUsingInt(200).statusCodeValue!, HTTPStatusCode.ok, "Incorrect status code") XCTAssertEqual(responseUsingInt(300).statusCodeValue!, HTTPStatusCode.multipleChoices, "Incorrect status code") XCTAssertEqual(responseUsingInt(400).statusCodeValue!, HTTPStatusCode.badRequest, "Incorrect status code") XCTAssertEqual(responseUsingInt(500).statusCodeValue!, HTTPStatusCode.internalServerError, "Incorrect status code") } #if DEBUG func testComputedStatusCodeEnumProperty() { XCTAssertEqual(responseUsingInt(100).statusCodeEnum, HTTPStatusCode.continue, "Incorrect status code") XCTAssertEqual(responseUsingInt(200).statusCodeEnum, HTTPStatusCode.ok, "Incorrect status code") XCTAssertEqual(responseUsingInt(300).statusCodeEnum, HTTPStatusCode.multipleChoices, "Incorrect status code") XCTAssertEqual(responseUsingInt(400).statusCodeEnum, HTTPStatusCode.badRequest, "Incorrect status code") XCTAssertEqual(responseUsingInt(500).statusCodeEnum, HTTPStatusCode.internalServerError, "Incorrect status code") } #endif func testHTTPStatusCodeInit() { XCTAssertEqual(HTTPStatusCode(HTTPResponse: responseUsingInt(100))!, HTTPStatusCode.continue, "Incorrect status code") XCTAssertEqual(HTTPStatusCode(HTTPResponse: responseUsingInt(200))!, HTTPStatusCode.ok, "Incorrect status code") XCTAssertEqual(HTTPStatusCode(HTTPResponse: responseUsingInt(300))!, HTTPStatusCode.multipleChoices, "Incorrect status code") XCTAssertEqual(HTTPStatusCode(HTTPResponse: responseUsingInt(400))!, HTTPStatusCode.badRequest, "Incorrect status code") XCTAssertEqual(HTTPStatusCode(HTTPResponse: responseUsingInt(500))!, HTTPStatusCode.internalServerError, "Incorrect status code") } func testValidBooleanRangeChecks() { for i in 100...199 { if let statusCode = HTTPStatusCode(rawValue: i) { XCTAssertTrue(statusCode.isInformational, "Should be informational status code") } } for i in 200...299 { if let statusCode = HTTPStatusCode(rawValue: i) { XCTAssertTrue(statusCode.isSuccess, "Should be success status code") } } for i in 300...399 { if let statusCode = HTTPStatusCode(rawValue: i) { XCTAssertTrue(statusCode.isRedirection, "Should be redirection status code") } } for i in 400...499 { if let statusCode = HTTPStatusCode(rawValue: i) { XCTAssertTrue(statusCode.isClientError, "Should be client error status code") } } for i in 500...599 { if let statusCode = HTTPStatusCode(rawValue: i) { XCTAssertTrue(statusCode.isServerError, "Should be server error status code") } } } func testInvalidBooleanRangeChecks() { /// 0...1000 - `ignoredRange` func range(ignoringRange ignoredRange: ClosedRange) -> [Int] { return (0...1000).filter { !ignoredRange.contains($0) } } for i in range(ignoringRange: 100...199) { if let statusCode = HTTPStatusCode(rawValue: i) { XCTAssertFalse(statusCode.isInformational, "Should be not informational status code") } } for i in range(ignoringRange: 200...299) { if let statusCode = HTTPStatusCode(rawValue: i) { XCTAssertFalse(statusCode.isSuccess, "Should be not success status code") } } for i in range(ignoringRange: 300...399) { if let statusCode = HTTPStatusCode(rawValue: i) { XCTAssertFalse(statusCode.isRedirection, "Should be not redirection status code") } } for i in range(ignoringRange: 400...499) { if let statusCode = HTTPStatusCode(rawValue: i) { XCTAssertFalse(statusCode.isClientError, "Should be not client error status code") } } for i in range(ignoringRange: 500...599) { if let statusCode = HTTPStatusCode(rawValue: i) { XCTAssertFalse(statusCode.isServerError, "Should be not server error status code") } } } func testReasonPhrase() { XCTAssertEqual(HTTPStatusCode.continue.localizedReasonPhrase, HTTPURLResponse.localizedString(forStatusCode: HTTPStatusCode.continue.rawValue)) XCTAssertEqual(HTTPStatusCode.ok.localizedReasonPhrase, HTTPURLResponse.localizedString(forStatusCode: HTTPStatusCode.ok.rawValue)) XCTAssertEqual(HTTPStatusCode.multipleChoices.localizedReasonPhrase, HTTPURLResponse.localizedString(forStatusCode: HTTPStatusCode.multipleChoices.rawValue)) XCTAssertEqual(HTTPStatusCode.badRequest.localizedReasonPhrase, HTTPURLResponse.localizedString(forStatusCode: HTTPStatusCode.badRequest.rawValue)) XCTAssertEqual(HTTPStatusCode.internalServerError.localizedReasonPhrase, HTTPURLResponse.localizedString(forStatusCode: HTTPStatusCode.internalServerError.rawValue)) } func testDescription() { XCTAssertEqual(String(describing: HTTPStatusCode.continue), "\(HTTPStatusCode.continue.rawValue) - \(HTTPStatusCode.continue.localizedReasonPhrase)") XCTAssertEqual(String(describing: HTTPStatusCode.ok), "\(HTTPStatusCode.ok.rawValue) - \(HTTPStatusCode.ok.localizedReasonPhrase)") XCTAssertEqual(String(describing: HTTPStatusCode.multipleChoices), "\(HTTPStatusCode.multipleChoices.rawValue) - \(HTTPStatusCode.multipleChoices.localizedReasonPhrase)") XCTAssertEqual(String(describing: HTTPStatusCode.badRequest), "\(HTTPStatusCode.badRequest.rawValue) - \(HTTPStatusCode.badRequest.localizedReasonPhrase)") XCTAssertEqual(String(describing: HTTPStatusCode.internalServerError), "\(HTTPStatusCode.internalServerError.rawValue) - \(HTTPStatusCode.internalServerError.localizedReasonPhrase)") } func testDebugDescription() { XCTAssertEqual(String(reflecting: HTTPStatusCode.continue), "HTTPStatusCode:\(HTTPStatusCode.continue.rawValue) - \(HTTPStatusCode.continue.localizedReasonPhrase)") XCTAssertEqual(String(reflecting: HTTPStatusCode.ok), "HTTPStatusCode:\(HTTPStatusCode.ok.rawValue) - \(HTTPStatusCode.ok.localizedReasonPhrase)") XCTAssertEqual(String(reflecting: HTTPStatusCode.multipleChoices), "HTTPStatusCode:\(HTTPStatusCode.multipleChoices.rawValue) - \(HTTPStatusCode.multipleChoices.localizedReasonPhrase)") XCTAssertEqual(String(reflecting: HTTPStatusCode.badRequest), "HTTPStatusCode:\(HTTPStatusCode.badRequest.rawValue) - \(HTTPStatusCode.badRequest.localizedReasonPhrase)") XCTAssertEqual(String(reflecting: HTTPStatusCode.internalServerError), "HTTPStatusCode:\(HTTPStatusCode.internalServerError.rawValue) - \(HTTPStatusCode.internalServerError.localizedReasonPhrase)") } func testBadStatusCodes() { XCTAssertTrue(HTTPStatusCode(rawValue: 1000) == nil) XCTAssertTrue(HTTPStatusCode(HTTPResponse: nil) == nil) XCTAssertTrue(HTTPStatusCode(HTTPResponse: responseUsingInt(1000)) == nil) } } #endif ================================================ FILE: Tests/HTTPStatusCodesTests/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString $(HSC_VERSION) CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: Tests/HTTPStatusCodesTests/ObjectiveCRegressionTests.m ================================================ // // ObjectiveCRegressionTests.m // ObjectiveCTests // // Created by Richard Hodgkins on 09/06/2016. // Copyright © 2016 Rich H. All rights reserved. // @import Foundation; #if TARGET_OS_WATCH // No testing supported #else @import XCTest; @import HTTPStatusCodes; #import @interface ObjectiveCRegressionTests : XCTestCase @end // Create with copy and paste of the enum and use: // FIND: \s*\n?(?:\s*///\s*.+\n)+\s*case (.+) = ([0-9]+) // REPLACE: XCTAssertEqual(HTTPStatusCode\1, \2);\n @implementation ObjectiveCRegressionTests -(void)testVersion2_0 { XCTAssertEqual(HTTPStatusCodeContinue, 100); XCTAssertEqual(HTTPStatusCodeSwitchingProtocols, 101); XCTAssertEqual(HTTPStatusCodeProcessing, 102); XCTAssertEqual(HTTPStatusCodeOK, 200); XCTAssertEqual(HTTPStatusCodeCreated, 201); XCTAssertEqual(HTTPStatusCodeAccepted, 202); XCTAssertEqual(HTTPStatusCodeNonAuthoritativeInformation, 203); XCTAssertEqual(HTTPStatusCodeNoContent, 204); XCTAssertEqual(HTTPStatusCodeResetContent, 205); XCTAssertEqual(HTTPStatusCodePartialContent, 206); XCTAssertEqual(HTTPStatusCodeMultiStatus, 207); XCTAssertEqual(HTTPStatusCodeAlreadyReported, 208); XCTAssertEqual(HTTPStatusCodeIMUsed, 226); XCTAssertEqual(HTTPStatusCodeMultipleChoices, 300); XCTAssertEqual(HTTPStatusCodeMovedPermanently, 301); XCTAssertEqual(HTTPStatusCodeFound, 302); XCTAssertEqual(HTTPStatusCodeSeeOther, 303); XCTAssertEqual(HTTPStatusCodeNotModified, 304); XCTAssertEqual(HTTPStatusCodeUseProxy, 305); XCTAssertEqual(HTTPStatusCodeTemporaryRedirect, 307); XCTAssertEqual(HTTPStatusCodePermanentRedirect, 308); XCTAssertEqual(HTTPStatusCodeBadRequest, 400); XCTAssertEqual(HTTPStatusCodeUnauthorized, 401); XCTAssertEqual(HTTPStatusCodePaymentRequired, 402); XCTAssertEqual(HTTPStatusCodeForbidden, 403); XCTAssertEqual(HTTPStatusCodeNotFound, 404); XCTAssertEqual(HTTPStatusCodeMethodNotAllowed, 405); XCTAssertEqual(HTTPStatusCodeNotAcceptable, 406); XCTAssertEqual(HTTPStatusCodeProxyAuthenticationRequired, 407); XCTAssertEqual(HTTPStatusCodeRequestTimeout, 408); XCTAssertEqual(HTTPStatusCodeConflict, 409); XCTAssertEqual(HTTPStatusCodeGone, 410); XCTAssertEqual(HTTPStatusCodeLengthRequired, 411); XCTAssertEqual(HTTPStatusCodePreconditionFailed, 412); XCTAssertEqual(HTTPStatusCodeRequestEntityTooLarge, 413); XCTAssertEqual(HTTPStatusCodeRequestURITooLong, 414); XCTAssertEqual(HTTPStatusCodeUnsupportedMediaType, 415); XCTAssertEqual(HTTPStatusCodeRequestedRangeNotSatisfiable, 416); XCTAssertEqual(HTTPStatusCodeExpectationFailed, 417); XCTAssertEqual(HTTPStatusCodeImATeapot, 418); // XCTAssertEqual(HTTPStatusCodeAuthenticationTimeout, 419); XCTAssertEqual(HTTPStatusCodeUnprocessableEntity, 422); XCTAssertEqual(HTTPStatusCodeLocked, 423); XCTAssertEqual(HTTPStatusCodeFailedDependency, 424); XCTAssertEqual(HTTPStatusCodeUpgradeRequired, 426); XCTAssertEqual(HTTPStatusCodePreconditionRequired, 428); XCTAssertEqual(HTTPStatusCodeTooManyRequests, 429); XCTAssertEqual(HTTPStatusCodeRequestHeaderFieldsTooLarge, 431); XCTAssertEqual(HTTPStatusCodeLoginTimeout, 440); XCTAssertEqual(HTTPStatusCodeNoResponse, 444); XCTAssertEqual(HTTPStatusCodeRetryWith, 449); XCTAssertEqual(HTTPStatusCodeUnavailableForLegalReasons, 451); // XCTAssertEqual(HTTPStatusCodeRequestHeaderTooLarge, 494); XCTAssertEqual(HTTPStatusCodeCertError, 495); XCTAssertEqual(HTTPStatusCodeNoCert, 496); XCTAssertEqual(HTTPStatusCodeHTTPToHTTPS, 497); XCTAssertEqual(HTTPStatusCodeTokenExpired, 498); XCTAssertEqual(HTTPStatusCodeClientClosedRequest, 499); XCTAssertEqual(HTTPStatusCodeInternalServerError, 500); XCTAssertEqual(HTTPStatusCodeNotImplemented, 501); XCTAssertEqual(HTTPStatusCodeBadGateway, 502); XCTAssertEqual(HTTPStatusCodeServiceUnavailable, 503); XCTAssertEqual(HTTPStatusCodeGatewayTimeout, 504); XCTAssertEqual(HTTPStatusCodeHTTPVersionNotSupported, 505); XCTAssertEqual(HTTPStatusCodeVariantAlsoNegotiates, 506); XCTAssertEqual(HTTPStatusCodeInsufficientStorage, 507); XCTAssertEqual(HTTPStatusCodeLoopDetected, 508); XCTAssertEqual(HTTPStatusCodeBandwidthLimitExceeded, 509); XCTAssertEqual(HTTPStatusCodeNotExtended, 510); XCTAssertEqual(HTTPStatusCodeNetworkAuthenticationRequired, 511); } -(void)testVersion3_0 { XCTAssertEqual(HTTPStatusCodeContinue, 100); XCTAssertEqual(HTTPStatusCodeSwitchingProtocols, 101); XCTAssertEqual(HTTPStatusCodeProcessing, 102); // XCTAssertEqual(HTTPStatusCodeCheckpoint, 103); XCTAssertEqual(HTTPStatusCodeOK, 200); XCTAssertEqual(HTTPStatusCodeCreated, 201); XCTAssertEqual(HTTPStatusCodeAccepted, 202); XCTAssertEqual(HTTPStatusCodeNonAuthoritativeInformation, 203); XCTAssertEqual(HTTPStatusCodeNoContent, 204); XCTAssertEqual(HTTPStatusCodeResetContent, 205); XCTAssertEqual(HTTPStatusCodePartialContent, 206); XCTAssertEqual(HTTPStatusCodeMultiStatus, 207); XCTAssertEqual(HTTPStatusCodeAlreadyReported, 208); XCTAssertEqual(HTTPStatusCodeIMUsed, 226); XCTAssertEqual(HTTPStatusCodeMultipleChoices, 300); XCTAssertEqual(HTTPStatusCodeMovedPermanently, 301); XCTAssertEqual(HTTPStatusCodeFound, 302); XCTAssertEqual(HTTPStatusCodeSeeOther, 303); XCTAssertEqual(HTTPStatusCodeNotModified, 304); XCTAssertEqual(HTTPStatusCodeUseProxy, 305); XCTAssertEqual(HTTPStatusCodeTemporaryRedirect, 307); XCTAssertEqual(HTTPStatusCodePermanentRedirect, 308); XCTAssertEqual(HTTPStatusCodeBadRequest, 400); XCTAssertEqual(HTTPStatusCodeUnauthorized, 401); XCTAssertEqual(HTTPStatusCodePaymentRequired, 402); XCTAssertEqual(HTTPStatusCodeForbidden, 403); XCTAssertEqual(HTTPStatusCodeNotFound, 404); XCTAssertEqual(HTTPStatusCodeMethodNotAllowed, 405); XCTAssertEqual(HTTPStatusCodeNotAcceptable, 406); XCTAssertEqual(HTTPStatusCodeProxyAuthenticationRequired, 407); XCTAssertEqual(HTTPStatusCodeRequestTimeout, 408); XCTAssertEqual(HTTPStatusCodeConflict, 409); XCTAssertEqual(HTTPStatusCodeGone, 410); XCTAssertEqual(HTTPStatusCodeLengthRequired, 411); XCTAssertEqual(HTTPStatusCodePreconditionFailed, 412); XCTAssertEqual(HTTPStatusCodePayloadTooLarge, 413); XCTAssertEqual(HTTPStatusCodeURITooLong, 414); XCTAssertEqual(HTTPStatusCodeUnsupportedMediaType, 415); XCTAssertEqual(HTTPStatusCodeRangeNotSatisfiable, 416); XCTAssertEqual(HTTPStatusCodeExpectationFailed, 417); XCTAssertEqual(HTTPStatusCodeImATeapot, 418); XCTAssertEqual(HTTPStatusCodeMisdirectedRequest, 421); XCTAssertEqual(HTTPStatusCodeUnprocessableEntity, 422); XCTAssertEqual(HTTPStatusCodeLocked, 423); XCTAssertEqual(HTTPStatusCodeFailedDependency, 424); XCTAssertEqual(HTTPStatusCodeUpgradeRequired, 426); XCTAssertEqual(HTTPStatusCodePreconditionRequired, 428); XCTAssertEqual(HTTPStatusCodeTooManyRequests, 429); XCTAssertEqual(HTTPStatusCodeRequestHeaderFieldsTooLarge, 431); XCTAssertEqual(HTTPStatusCodeIISLoginTimeout, 440); XCTAssertEqual(HTTPStatusCodeNginxNoResponse, 444); XCTAssertEqual(HTTPStatusCodeIISRetryWith, 449); XCTAssertEqual(HTTPStatusCodeBlockedByWindowsParentalControls, 450); XCTAssertEqual(HTTPStatusCodeUnavailableForLegalReasons, 451); XCTAssertEqual(HTTPStatusCodeNginxSSLCertificateError, 495); XCTAssertEqual(HTTPStatusCodeNginxSSLCertificateRequired, 496); XCTAssertEqual(HTTPStatusCodeNginxHTTPToHTTPS, 497); XCTAssertEqual(HTTPStatusCodeTokenExpired, 498); XCTAssertEqual(HTTPStatusCodeNginxClientClosedRequest, 499); XCTAssertEqual(HTTPStatusCodeInternalServerError, 500); XCTAssertEqual(HTTPStatusCodeNotImplemented, 501); XCTAssertEqual(HTTPStatusCodeBadGateway, 502); XCTAssertEqual(HTTPStatusCodeServiceUnavailable, 503); XCTAssertEqual(HTTPStatusCodeGatewayTimeout, 504); XCTAssertEqual(HTTPStatusCodeHTTPVersionNotSupported, 505); XCTAssertEqual(HTTPStatusCodeVariantAlsoNegotiates, 506); XCTAssertEqual(HTTPStatusCodeInsufficientStorage, 507); XCTAssertEqual(HTTPStatusCodeLoopDetected, 508); XCTAssertEqual(HTTPStatusCodeBandwidthLimitExceeded, 509); XCTAssertEqual(HTTPStatusCodeNotExtended, 510); XCTAssertEqual(HTTPStatusCodeNetworkAuthenticationRequired, 511); XCTAssertEqual(HTTPStatusCodeSiteIsFrozen, 530); XCTAssertEqual(HTTPStatusCodeNetworkConnectTimeoutError, 599); XCTAssertEqual(HTTPStatusCodeNetworkTimeoutError, 599); } -(void)testVersion3_2 { XCTAssertEqual(HTTPStatusCodeContinue, 100); XCTAssertEqual(HTTPStatusCodeSwitchingProtocols, 101); XCTAssertEqual(HTTPStatusCodeProcessing, 102); XCTAssertEqual(HTTPStatusCodeEarlyHints, 103); XCTAssertEqual(HTTPStatusCodeOK, 200); XCTAssertEqual(HTTPStatusCodeCreated, 201); XCTAssertEqual(HTTPStatusCodeAccepted, 202); XCTAssertEqual(HTTPStatusCodeNonAuthoritativeInformation, 203); XCTAssertEqual(HTTPStatusCodeNoContent, 204); XCTAssertEqual(HTTPStatusCodeResetContent, 205); XCTAssertEqual(HTTPStatusCodePartialContent, 206); XCTAssertEqual(HTTPStatusCodeMultiStatus, 207); XCTAssertEqual(HTTPStatusCodeAlreadyReported, 208); XCTAssertEqual(HTTPStatusCodeIMUsed, 226); XCTAssertEqual(HTTPStatusCodeMultipleChoices, 300); XCTAssertEqual(HTTPStatusCodeMovedPermanently, 301); XCTAssertEqual(HTTPStatusCodeFound, 302); XCTAssertEqual(HTTPStatusCodeSeeOther, 303); XCTAssertEqual(HTTPStatusCodeNotModified, 304); XCTAssertEqual(HTTPStatusCodeUseProxy, 305); XCTAssertEqual(HTTPStatusCodeTemporaryRedirect, 307); XCTAssertEqual(HTTPStatusCodePermanentRedirect, 308); XCTAssertEqual(HTTPStatusCodeBadRequest, 400); XCTAssertEqual(HTTPStatusCodeUnauthorized, 401); XCTAssertEqual(HTTPStatusCodePaymentRequired, 402); XCTAssertEqual(HTTPStatusCodeForbidden, 403); XCTAssertEqual(HTTPStatusCodeNotFound, 404); XCTAssertEqual(HTTPStatusCodeMethodNotAllowed, 405); XCTAssertEqual(HTTPStatusCodeNotAcceptable, 406); XCTAssertEqual(HTTPStatusCodeProxyAuthenticationRequired, 407); XCTAssertEqual(HTTPStatusCodeRequestTimeout, 408); XCTAssertEqual(HTTPStatusCodeConflict, 409); XCTAssertEqual(HTTPStatusCodeGone, 410); XCTAssertEqual(HTTPStatusCodeLengthRequired, 411); XCTAssertEqual(HTTPStatusCodePreconditionFailed, 412); XCTAssertEqual(HTTPStatusCodePayloadTooLarge, 413); XCTAssertEqual(HTTPStatusCodeURITooLong, 414); XCTAssertEqual(HTTPStatusCodeUnsupportedMediaType, 415); XCTAssertEqual(HTTPStatusCodeRangeNotSatisfiable, 416); XCTAssertEqual(HTTPStatusCodeExpectationFailed, 417); XCTAssertEqual(HTTPStatusCodeImATeapot, 418); XCTAssertEqual(HTTPStatusCodeMisdirectedRequest, 421); XCTAssertEqual(HTTPStatusCodeUnprocessableEntity, 422); XCTAssertEqual(HTTPStatusCodeLocked, 423); XCTAssertEqual(HTTPStatusCodeFailedDependency, 424); XCTAssertEqual(HTTPStatusCodeUpgradeRequired, 426); XCTAssertEqual(HTTPStatusCodePreconditionRequired, 428); XCTAssertEqual(HTTPStatusCodeTooManyRequests, 429); XCTAssertEqual(HTTPStatusCodeRequestHeaderFieldsTooLarge, 431); XCTAssertEqual(HTTPStatusCodeIISLoginTimeout, 440); XCTAssertEqual(HTTPStatusCodeNginxNoResponse, 444); XCTAssertEqual(HTTPStatusCodeIISRetryWith, 449); XCTAssertEqual(HTTPStatusCodeBlockedByWindowsParentalControls, 450); XCTAssertEqual(HTTPStatusCodeUnavailableForLegalReasons, 451); XCTAssertEqual(HTTPStatusCodeNginxSSLCertificateError, 495); XCTAssertEqual(HTTPStatusCodeNginxSSLCertificateRequired, 496); XCTAssertEqual(HTTPStatusCodeNginxHTTPToHTTPS, 497); XCTAssertEqual(HTTPStatusCodeTokenExpired, 498); XCTAssertEqual(HTTPStatusCodeNginxClientClosedRequest, 499); XCTAssertEqual(HTTPStatusCodeInternalServerError, 500); XCTAssertEqual(HTTPStatusCodeNotImplemented, 501); XCTAssertEqual(HTTPStatusCodeBadGateway, 502); XCTAssertEqual(HTTPStatusCodeServiceUnavailable, 503); XCTAssertEqual(HTTPStatusCodeGatewayTimeout, 504); XCTAssertEqual(HTTPStatusCodeHTTPVersionNotSupported, 505); XCTAssertEqual(HTTPStatusCodeVariantAlsoNegotiates, 506); XCTAssertEqual(HTTPStatusCodeInsufficientStorage, 507); XCTAssertEqual(HTTPStatusCodeLoopDetected, 508); XCTAssertEqual(HTTPStatusCodeBandwidthLimitExceeded, 509); XCTAssertEqual(HTTPStatusCodeNotExtended, 510); XCTAssertEqual(HTTPStatusCodeNetworkAuthenticationRequired, 511); XCTAssertEqual(HTTPStatusCodeSiteIsFrozen, 530); XCTAssertEqual(HTTPStatusCodeNetworkConnectTimeoutError, 599); } -(void)testVersion3_3 { XCTAssertEqual(HTTPStatusCodeContinue, 100); XCTAssertEqual(HTTPStatusCodeSwitchingProtocols, 101); XCTAssertEqual(HTTPStatusCodeProcessing, 102); XCTAssertEqual(HTTPStatusCodeEarlyHints, 103); XCTAssertEqual(HTTPStatusCodeOK, 200); XCTAssertEqual(HTTPStatusCodeCreated, 201); XCTAssertEqual(HTTPStatusCodeAccepted, 202); XCTAssertEqual(HTTPStatusCodeNonAuthoritativeInformation, 203); XCTAssertEqual(HTTPStatusCodeNoContent, 204); XCTAssertEqual(HTTPStatusCodeResetContent, 205); XCTAssertEqual(HTTPStatusCodePartialContent, 206); XCTAssertEqual(HTTPStatusCodeMultiStatus, 207); XCTAssertEqual(HTTPStatusCodeAlreadyReported, 208); XCTAssertEqual(HTTPStatusCodeIMUsed, 226); XCTAssertEqual(HTTPStatusCodeMultipleChoices, 300); XCTAssertEqual(HTTPStatusCodeMovedPermanently, 301); XCTAssertEqual(HTTPStatusCodeFound, 302); XCTAssertEqual(HTTPStatusCodeSeeOther, 303); XCTAssertEqual(HTTPStatusCodeNotModified, 304); XCTAssertEqual(HTTPStatusCodeUseProxy, 305); XCTAssertEqual(HTTPStatusCodeTemporaryRedirect, 307); XCTAssertEqual(HTTPStatusCodePermanentRedirect, 308); XCTAssertEqual(HTTPStatusCodeBadRequest, 400); XCTAssertEqual(HTTPStatusCodeUnauthorized, 401); XCTAssertEqual(HTTPStatusCodePaymentRequired, 402); XCTAssertEqual(HTTPStatusCodeForbidden, 403); XCTAssertEqual(HTTPStatusCodeNotFound, 404); XCTAssertEqual(HTTPStatusCodeMethodNotAllowed, 405); XCTAssertEqual(HTTPStatusCodeNotAcceptable, 406); XCTAssertEqual(HTTPStatusCodeProxyAuthenticationRequired, 407); XCTAssertEqual(HTTPStatusCodeRequestTimeout, 408); XCTAssertEqual(HTTPStatusCodeConflict, 409); XCTAssertEqual(HTTPStatusCodeGone, 410); XCTAssertEqual(HTTPStatusCodeLengthRequired, 411); XCTAssertEqual(HTTPStatusCodePreconditionFailed, 412); XCTAssertEqual(HTTPStatusCodePayloadTooLarge, 413); XCTAssertEqual(HTTPStatusCodeURITooLong, 414); XCTAssertEqual(HTTPStatusCodeUnsupportedMediaType, 415); XCTAssertEqual(HTTPStatusCodeRangeNotSatisfiable, 416); XCTAssertEqual(HTTPStatusCodeExpectationFailed, 417); XCTAssertEqual(HTTPStatusCodeImATeapot, 418); XCTAssertEqual(HTTPStatusCodeMisdirectedRequest, 421); XCTAssertEqual(HTTPStatusCodeUnprocessableEntity, 422); XCTAssertEqual(HTTPStatusCodeLocked, 423); XCTAssertEqual(HTTPStatusCodeFailedDependency, 424); XCTAssertEqual(HTTPStatusCodeTooEarly, 425); XCTAssertEqual(HTTPStatusCodeUpgradeRequired, 426); XCTAssertEqual(HTTPStatusCodePreconditionRequired, 428); XCTAssertEqual(HTTPStatusCodeTooManyRequests, 429); XCTAssertEqual(HTTPStatusCodeRequestHeaderFieldsTooLarge, 431); XCTAssertEqual(HTTPStatusCodeIISLoginTimeout, 440); XCTAssertEqual(HTTPStatusCodeNginxNoResponse, 444); XCTAssertEqual(HTTPStatusCodeIISRetryWith, 449); XCTAssertEqual(HTTPStatusCodeBlockedByWindowsParentalControls, 450); XCTAssertEqual(HTTPStatusCodeUnavailableForLegalReasons, 451); XCTAssertEqual(HTTPStatusCodeNginxSSLCertificateError, 495); XCTAssertEqual(HTTPStatusCodeNginxSSLCertificateRequired, 496); XCTAssertEqual(HTTPStatusCodeNginxHTTPToHTTPS, 497); XCTAssertEqual(HTTPStatusCodeTokenExpired, 498); XCTAssertEqual(HTTPStatusCodeNginxClientClosedRequest, 499); XCTAssertEqual(HTTPStatusCodeInternalServerError, 500); XCTAssertEqual(HTTPStatusCodeNotImplemented, 501); XCTAssertEqual(HTTPStatusCodeBadGateway, 502); XCTAssertEqual(HTTPStatusCodeServiceUnavailable, 503); XCTAssertEqual(HTTPStatusCodeGatewayTimeout, 504); XCTAssertEqual(HTTPStatusCodeHTTPVersionNotSupported, 505); XCTAssertEqual(HTTPStatusCodeVariantAlsoNegotiates, 506); XCTAssertEqual(HTTPStatusCodeInsufficientStorage, 507); XCTAssertEqual(HTTPStatusCodeLoopDetected, 508); XCTAssertEqual(HTTPStatusCodeBandwidthLimitExceeded, 509); XCTAssertEqual(HTTPStatusCodeNotExtended, 510); XCTAssertEqual(HTTPStatusCodeNetworkAuthenticationRequired, 511); XCTAssertEqual(HTTPStatusCodeSiteIsFrozen, 530); XCTAssertEqual(HTTPStatusCodeNetworkConnectTimeoutError, 599); } @end #endif ================================================ FILE: Tests/HTTPStatusCodesTests/ObjectiveCTests.m ================================================ // // ObjectiveCTests.m // HTTPStatusCodes // // Created by Richard Hodgkins on 12/10/2016. // Copyright © 2016 Rich H. All rights reserved. // @import Foundation; #if TARGET_OS_WATCH // No testing supported #else @import XCTest; @import HTTPStatusCodes; #import static NSHTTPURLResponse *_Nullable response(HTTPStatusCode statusCode) { return [[NSHTTPURLResponse alloc] initWithURL:[NSURL URLWithString:@"http://www.google.com"] statusCodeValue:statusCode HTTPVersion:nil headerFields:nil]; } @interface ObjectiveCTests : XCTestCase @end @implementation ObjectiveCTests -(void)testComputedStatusCodeValueProperty { XCTAssertEqual(response(HTTPStatusCodeContinue).statusCodeValue, HTTPStatusCodeContinue, @"Incorrect status code"); XCTAssertEqual(response(HTTPStatusCodeOK).statusCodeValue, HTTPStatusCodeOK, @"Incorrect status code"); XCTAssertEqual(response(HTTPStatusCodeMultipleChoices).statusCodeValue, HTTPStatusCodeMultipleChoices, @"Incorrect status code"); XCTAssertEqual(response(HTTPStatusCodeBadRequest).statusCodeValue, HTTPStatusCodeBadRequest, @"Incorrect status code"); XCTAssertEqual(response(HTTPStatusCodeInternalServerError).statusCodeValue, HTTPStatusCodeInternalServerError, @"Incorrect status code"); } -(void)testNSHTTPURLResponseInit { XCTAssertEqual([[NSHTTPURLResponse alloc] initWithURL:[NSURL URLWithString:@"http://www.google.com"] statusCodeValue:HTTPStatusCodeOK HTTPVersion:nil headerFields:nil].statusCode, 200); XCTAssertEqual([[NSHTTPURLResponse alloc] initWithURL:[NSURL URLWithString:@"http://www.google.com"] statusCodeValue:HTTPStatusCodeOK HTTPVersion:nil headerFields:nil].statusCode, HTTPStatusCodeOK); XCTAssertEqual([[NSHTTPURLResponse alloc] initWithURL:[NSURL URLWithString:@"http://www.google.com"] statusCodeValue:HTTPStatusCodeOK HTTPVersion:nil headerFields:nil].statusCodeValue, HTTPStatusCodeOK); } @end #endif ================================================ FILE: Tests/HTTPStatusCodesTests/RegressionTests.swift ================================================ // // RegressionTests.swift // HTTPStatusCodes // // Created by Richard Hodgkins on 07/06/2016. // Copyright © 2016 Rich H. All rights reserved. // import Foundation #if os(watchOS) // No testing supported @testable import HTTPStatusCodes #else import XCTest #if DEBUG @testable import HTTPStatusCodes #else import HTTPStatusCodes #endif extension HTTPStatusCode: ExpressibleByIntegerLiteral { public init(integerLiteral value: Int) { guard let _ = HTTPStatusCode(rawValue: value) else { fatalError("Invalid status code: \(value)") } self.init(rawValue: value)! } } // Create with copy and paste of the enum and use: // FIND: \s*\n?(?:\s*///\s*.+\n)+\s*case (.+) = ([0-9]+) // REPLACE: XCTAssertEqual(HTTPStatusCode.\1, \2)\n final class RegressionTests: XCTestCase { func testVersion2_0() { XCTAssertEqual(HTTPStatusCode.continue, 100) XCTAssertEqual(HTTPStatusCode.switchingProtocols, 101) XCTAssertEqual(HTTPStatusCode.processing, 102) XCTAssertEqual(HTTPStatusCode.ok, 200) XCTAssertEqual(HTTPStatusCode.created, 201) XCTAssertEqual(HTTPStatusCode.accepted, 202) XCTAssertEqual(HTTPStatusCode.nonAuthoritativeInformation, 203) XCTAssertEqual(HTTPStatusCode.noContent, 204) XCTAssertEqual(HTTPStatusCode.resetContent, 205) XCTAssertEqual(HTTPStatusCode.partialContent, 206) XCTAssertEqual(HTTPStatusCode.multiStatus, 207) XCTAssertEqual(HTTPStatusCode.alreadyReported, 208) XCTAssertEqual(HTTPStatusCode.imUsed, 226) XCTAssertEqual(HTTPStatusCode.multipleChoices, 300) XCTAssertEqual(HTTPStatusCode.movedPermanently, 301) XCTAssertEqual(HTTPStatusCode.found, 302) XCTAssertEqual(HTTPStatusCode.seeOther, 303) XCTAssertEqual(HTTPStatusCode.notModified, 304) XCTAssertEqual(HTTPStatusCode.useProxy, 305) XCTAssertEqual(HTTPStatusCode.temporaryRedirect, 307) XCTAssertEqual(HTTPStatusCode.permanentRedirect, 308) XCTAssertEqual(HTTPStatusCode.badRequest, 400) XCTAssertEqual(HTTPStatusCode.unauthorized, 401) XCTAssertEqual(HTTPStatusCode.paymentRequired, 402) XCTAssertEqual(HTTPStatusCode.forbidden, 403) XCTAssertEqual(HTTPStatusCode.notFound, 404) XCTAssertEqual(HTTPStatusCode.methodNotAllowed, 405) XCTAssertEqual(HTTPStatusCode.notAcceptable, 406) XCTAssertEqual(HTTPStatusCode.proxyAuthenticationRequired, 407) XCTAssertEqual(HTTPStatusCode.requestTimeout, 408) XCTAssertEqual(HTTPStatusCode.conflict, 409) XCTAssertEqual(HTTPStatusCode.gone, 410) XCTAssertEqual(HTTPStatusCode.lengthRequired, 411) XCTAssertEqual(HTTPStatusCode.preconditionFailed, 412) XCTAssertEqual(HTTPStatusCode.requestEntityTooLarge, 413) XCTAssertEqual(HTTPStatusCode.requestURITooLong, 414) XCTAssertEqual(HTTPStatusCode.unsupportedMediaType, 415) XCTAssertEqual(HTTPStatusCode.requestedRangeNotSatisfiable, 416) XCTAssertEqual(HTTPStatusCode.expectationFailed, 417) XCTAssertEqual(HTTPStatusCode.imATeapot, 418) // XCTAssertEqual(HTTPStatusCode.authenticationTimeout, 419) XCTAssertEqual(HTTPStatusCode.unprocessableEntity, 422) XCTAssertEqual(HTTPStatusCode.locked, 423) XCTAssertEqual(HTTPStatusCode.failedDependency, 424) XCTAssertEqual(HTTPStatusCode.upgradeRequired, 426) XCTAssertEqual(HTTPStatusCode.preconditionRequired, 428) XCTAssertEqual(HTTPStatusCode.tooManyRequests, 429) XCTAssertEqual(HTTPStatusCode.requestHeaderFieldsTooLarge, 431) XCTAssertEqual(HTTPStatusCode.loginTimeout, 440) XCTAssertEqual(HTTPStatusCode.noResponse, 444) XCTAssertEqual(HTTPStatusCode.retryWith, 449) XCTAssertEqual(HTTPStatusCode.unavailableForLegalReasons, 451) // XCTAssertEqual(HTTPStatusCode.requestHeaderTooLarge, 494) XCTAssertEqual(HTTPStatusCode.certError, 495) XCTAssertEqual(HTTPStatusCode.noCert, 496) XCTAssertEqual(HTTPStatusCode.httpToHTTPS, 497) XCTAssertEqual(HTTPStatusCode.tokenExpired, 498) XCTAssertEqual(HTTPStatusCode.clientClosedRequest, 499) XCTAssertEqual(HTTPStatusCode.internalServerError, 500) XCTAssertEqual(HTTPStatusCode.notImplemented, 501) XCTAssertEqual(HTTPStatusCode.badGateway, 502) XCTAssertEqual(HTTPStatusCode.serviceUnavailable, 503) XCTAssertEqual(HTTPStatusCode.gatewayTimeout, 504) XCTAssertEqual(HTTPStatusCode.httpVersionNotSupported, 505) XCTAssertEqual(HTTPStatusCode.variantAlsoNegotiates, 506) XCTAssertEqual(HTTPStatusCode.insufficientStorage, 507) XCTAssertEqual(HTTPStatusCode.loopDetected, 508) XCTAssertEqual(HTTPStatusCode.bandwidthLimitExceeded, 509) XCTAssertEqual(HTTPStatusCode.notExtended, 510) XCTAssertEqual(HTTPStatusCode.networkAuthenticationRequired, 511) XCTAssertEqual(HTTPURLResponse(url: URL(string: "http://www.google.com")!, statusCode: .ok, HTTPVersion: nil, headerFields: nil)!.statusCodeValue, .ok) } func testVersion3_0() { XCTAssertEqual(HTTPStatusCode.continue, 100) XCTAssertEqual(HTTPStatusCode.switchingProtocols, 101) XCTAssertEqual(HTTPStatusCode.processing, 102) // XCTAssertEqual(HTTPStatusCode.checkpoint, 103) XCTAssertEqual(HTTPStatusCode.ok, 200) XCTAssertEqual(HTTPStatusCode.created, 201) XCTAssertEqual(HTTPStatusCode.accepted, 202) XCTAssertEqual(HTTPStatusCode.nonAuthoritativeInformation, 203) XCTAssertEqual(HTTPStatusCode.noContent, 204) XCTAssertEqual(HTTPStatusCode.resetContent, 205) XCTAssertEqual(HTTPStatusCode.partialContent, 206) XCTAssertEqual(HTTPStatusCode.multiStatus, 207) XCTAssertEqual(HTTPStatusCode.alreadyReported, 208) XCTAssertEqual(HTTPStatusCode.imUsed, 226) XCTAssertEqual(HTTPStatusCode.multipleChoices, 300) XCTAssertEqual(HTTPStatusCode.movedPermanently, 301) XCTAssertEqual(HTTPStatusCode.found, 302) XCTAssertEqual(HTTPStatusCode.seeOther, 303) XCTAssertEqual(HTTPStatusCode.notModified, 304) XCTAssertEqual(HTTPStatusCode.useProxy, 305) XCTAssertEqual(HTTPStatusCode.temporaryRedirect, 307) XCTAssertEqual(HTTPStatusCode.permanentRedirect, 308) XCTAssertEqual(HTTPStatusCode.badRequest, 400) XCTAssertEqual(HTTPStatusCode.unauthorized, 401) XCTAssertEqual(HTTPStatusCode.paymentRequired, 402) XCTAssertEqual(HTTPStatusCode.forbidden, 403) XCTAssertEqual(HTTPStatusCode.notFound, 404) XCTAssertEqual(HTTPStatusCode.methodNotAllowed, 405) XCTAssertEqual(HTTPStatusCode.notAcceptable, 406) XCTAssertEqual(HTTPStatusCode.proxyAuthenticationRequired, 407) XCTAssertEqual(HTTPStatusCode.requestTimeout, 408) XCTAssertEqual(HTTPStatusCode.conflict, 409) XCTAssertEqual(HTTPStatusCode.gone, 410) XCTAssertEqual(HTTPStatusCode.lengthRequired, 411) XCTAssertEqual(HTTPStatusCode.preconditionFailed, 412) XCTAssertEqual(HTTPStatusCode.payloadTooLarge, 413) XCTAssertEqual(HTTPStatusCode.uriTooLong, 414) XCTAssertEqual(HTTPStatusCode.unsupportedMediaType, 415) XCTAssertEqual(HTTPStatusCode.rangeNotSatisfiable, 416) XCTAssertEqual(HTTPStatusCode.expectationFailed, 417) XCTAssertEqual(HTTPStatusCode.imATeapot, 418) XCTAssertEqual(HTTPStatusCode.misdirectedRequest, 421) XCTAssertEqual(HTTPStatusCode.unprocessableEntity, 422) XCTAssertEqual(HTTPStatusCode.locked, 423) XCTAssertEqual(HTTPStatusCode.failedDependency, 424) XCTAssertEqual(HTTPStatusCode.upgradeRequired, 426) XCTAssertEqual(HTTPStatusCode.preconditionRequired, 428) XCTAssertEqual(HTTPStatusCode.tooManyRequests, 429) XCTAssertEqual(HTTPStatusCode.requestHeaderFieldsTooLarge, 431) XCTAssertEqual(HTTPStatusCode.iisLoginTimeout, 440) XCTAssertEqual(HTTPStatusCode.nginxNoResponse, 444) XCTAssertEqual(HTTPStatusCode.iisRetryWith, 449) XCTAssertEqual(HTTPStatusCode.blockedByWindowsParentalControls, 450) XCTAssertEqual(HTTPStatusCode.unavailableForLegalReasons, 451) XCTAssertEqual(HTTPStatusCode.nginxSSLCertificateError, 495) XCTAssertEqual(HTTPStatusCode.nginxSSLCertificateRequired, 496) XCTAssertEqual(HTTPStatusCode.nginxHTTPToHTTPS, 497) XCTAssertEqual(HTTPStatusCode.tokenExpired, 498) XCTAssertEqual(HTTPStatusCode.nginxClientClosedRequest, 499) XCTAssertEqual(HTTPStatusCode.internalServerError, 500) XCTAssertEqual(HTTPStatusCode.notImplemented, 501) XCTAssertEqual(HTTPStatusCode.badGateway, 502) XCTAssertEqual(HTTPStatusCode.serviceUnavailable, 503) XCTAssertEqual(HTTPStatusCode.gatewayTimeout, 504) XCTAssertEqual(HTTPStatusCode.httpVersionNotSupported, 505) XCTAssertEqual(HTTPStatusCode.variantAlsoNegotiates, 506) XCTAssertEqual(HTTPStatusCode.insufficientStorage, 507) XCTAssertEqual(HTTPStatusCode.loopDetected, 508) XCTAssertEqual(HTTPStatusCode.bandwidthLimitExceeded, 509) XCTAssertEqual(HTTPStatusCode.notExtended, 510) XCTAssertEqual(HTTPStatusCode.networkAuthenticationRequired, 511) XCTAssertEqual(HTTPStatusCode.siteIsFrozen, 530) XCTAssertEqual(HTTPStatusCode.networkConnectTimeoutError, 599) XCTAssertEqual(HTTPStatusCode.networkTimeoutError, 599) XCTAssertEqual(HTTPURLResponse(url: URL(string: "http://www.google.com")!, statusCode: .ok, httpVersion: nil, headerFields: nil)!.statusCodeValue, .ok) } func testVersion3_2() { XCTAssertEqual(HTTPStatusCode.continue, 100) XCTAssertEqual(HTTPStatusCode.switchingProtocols, 101) XCTAssertEqual(HTTPStatusCode.processing, 102) XCTAssertEqual(HTTPStatusCode.earlyHints, 103) XCTAssertEqual(HTTPStatusCode.ok, 200) XCTAssertEqual(HTTPStatusCode.created, 201) XCTAssertEqual(HTTPStatusCode.accepted, 202) XCTAssertEqual(HTTPStatusCode.nonAuthoritativeInformation, 203) XCTAssertEqual(HTTPStatusCode.noContent, 204) XCTAssertEqual(HTTPStatusCode.resetContent, 205) XCTAssertEqual(HTTPStatusCode.partialContent, 206) XCTAssertEqual(HTTPStatusCode.multiStatus, 207) XCTAssertEqual(HTTPStatusCode.alreadyReported, 208) XCTAssertEqual(HTTPStatusCode.imUsed, 226) XCTAssertEqual(HTTPStatusCode.multipleChoices, 300) XCTAssertEqual(HTTPStatusCode.movedPermanently, 301) XCTAssertEqual(HTTPStatusCode.found, 302) XCTAssertEqual(HTTPStatusCode.seeOther, 303) XCTAssertEqual(HTTPStatusCode.notModified, 304) XCTAssertEqual(HTTPStatusCode.useProxy, 305) XCTAssertEqual(HTTPStatusCode.temporaryRedirect, 307) XCTAssertEqual(HTTPStatusCode.permanentRedirect, 308) XCTAssertEqual(HTTPStatusCode.badRequest, 400) XCTAssertEqual(HTTPStatusCode.unauthorized, 401) XCTAssertEqual(HTTPStatusCode.paymentRequired, 402) XCTAssertEqual(HTTPStatusCode.forbidden, 403) XCTAssertEqual(HTTPStatusCode.notFound, 404) XCTAssertEqual(HTTPStatusCode.methodNotAllowed, 405) XCTAssertEqual(HTTPStatusCode.notAcceptable, 406) XCTAssertEqual(HTTPStatusCode.proxyAuthenticationRequired, 407) XCTAssertEqual(HTTPStatusCode.requestTimeout, 408) XCTAssertEqual(HTTPStatusCode.conflict, 409) XCTAssertEqual(HTTPStatusCode.gone, 410) XCTAssertEqual(HTTPStatusCode.lengthRequired, 411) XCTAssertEqual(HTTPStatusCode.preconditionFailed, 412) XCTAssertEqual(HTTPStatusCode.payloadTooLarge, 413) XCTAssertEqual(HTTPStatusCode.uriTooLong, 414) XCTAssertEqual(HTTPStatusCode.unsupportedMediaType, 415) XCTAssertEqual(HTTPStatusCode.rangeNotSatisfiable, 416) XCTAssertEqual(HTTPStatusCode.expectationFailed, 417) XCTAssertEqual(HTTPStatusCode.imATeapot, 418) XCTAssertEqual(HTTPStatusCode.misdirectedRequest, 421) XCTAssertEqual(HTTPStatusCode.unprocessableEntity, 422) XCTAssertEqual(HTTPStatusCode.locked, 423) XCTAssertEqual(HTTPStatusCode.failedDependency, 424) XCTAssertEqual(HTTPStatusCode.upgradeRequired, 426) XCTAssertEqual(HTTPStatusCode.preconditionRequired, 428) XCTAssertEqual(HTTPStatusCode.tooManyRequests, 429) XCTAssertEqual(HTTPStatusCode.requestHeaderFieldsTooLarge, 431) XCTAssertEqual(HTTPStatusCode.iisLoginTimeout, 440) XCTAssertEqual(HTTPStatusCode.nginxNoResponse, 444) XCTAssertEqual(HTTPStatusCode.iisRetryWith, 449) XCTAssertEqual(HTTPStatusCode.blockedByWindowsParentalControls, 450) XCTAssertEqual(HTTPStatusCode.unavailableForLegalReasons, 451) XCTAssertEqual(HTTPStatusCode.nginxSSLCertificateError, 495) XCTAssertEqual(HTTPStatusCode.nginxSSLCertificateRequired, 496) XCTAssertEqual(HTTPStatusCode.nginxHTTPToHTTPS, 497) XCTAssertEqual(HTTPStatusCode.tokenExpired, 498) XCTAssertEqual(HTTPStatusCode.nginxClientClosedRequest, 499) XCTAssertEqual(HTTPStatusCode.internalServerError, 500) XCTAssertEqual(HTTPStatusCode.notImplemented, 501) XCTAssertEqual(HTTPStatusCode.badGateway, 502) XCTAssertEqual(HTTPStatusCode.serviceUnavailable, 503) XCTAssertEqual(HTTPStatusCode.gatewayTimeout, 504) XCTAssertEqual(HTTPStatusCode.httpVersionNotSupported, 505) XCTAssertEqual(HTTPStatusCode.variantAlsoNegotiates, 506) XCTAssertEqual(HTTPStatusCode.insufficientStorage, 507) XCTAssertEqual(HTTPStatusCode.loopDetected, 508) XCTAssertEqual(HTTPStatusCode.bandwidthLimitExceeded, 509) XCTAssertEqual(HTTPStatusCode.notExtended, 510) XCTAssertEqual(HTTPStatusCode.networkAuthenticationRequired, 511) XCTAssertEqual(HTTPStatusCode.siteIsFrozen, 530) XCTAssertEqual(HTTPStatusCode.networkConnectTimeoutError, 599) XCTAssertEqual(HTTPURLResponse(url: URL(string: "http://www.google.com")!, statusCode: .ok, httpVersion: nil, headerFields: nil)!.statusCodeValue, .ok) } func testVersion3_3() { XCTAssertEqual(HTTPStatusCode.continue, 100) XCTAssertEqual(HTTPStatusCode.switchingProtocols, 101) XCTAssertEqual(HTTPStatusCode.processing, 102) XCTAssertEqual(HTTPStatusCode.earlyHints, 103) XCTAssertEqual(HTTPStatusCode.ok, 200) XCTAssertEqual(HTTPStatusCode.created, 201) XCTAssertEqual(HTTPStatusCode.accepted, 202) XCTAssertEqual(HTTPStatusCode.nonAuthoritativeInformation, 203) XCTAssertEqual(HTTPStatusCode.noContent, 204) XCTAssertEqual(HTTPStatusCode.resetContent, 205) XCTAssertEqual(HTTPStatusCode.partialContent, 206) XCTAssertEqual(HTTPStatusCode.multiStatus, 207) XCTAssertEqual(HTTPStatusCode.alreadyReported, 208) XCTAssertEqual(HTTPStatusCode.imUsed, 226) XCTAssertEqual(HTTPStatusCode.multipleChoices, 300) XCTAssertEqual(HTTPStatusCode.movedPermanently, 301) XCTAssertEqual(HTTPStatusCode.found, 302) XCTAssertEqual(HTTPStatusCode.seeOther, 303) XCTAssertEqual(HTTPStatusCode.notModified, 304) XCTAssertEqual(HTTPStatusCode.useProxy, 305) XCTAssertEqual(HTTPStatusCode.temporaryRedirect, 307) XCTAssertEqual(HTTPStatusCode.permanentRedirect, 308) XCTAssertEqual(HTTPStatusCode.badRequest, 400) XCTAssertEqual(HTTPStatusCode.unauthorized, 401) XCTAssertEqual(HTTPStatusCode.paymentRequired, 402) XCTAssertEqual(HTTPStatusCode.forbidden, 403) XCTAssertEqual(HTTPStatusCode.notFound, 404) XCTAssertEqual(HTTPStatusCode.methodNotAllowed, 405) XCTAssertEqual(HTTPStatusCode.notAcceptable, 406) XCTAssertEqual(HTTPStatusCode.proxyAuthenticationRequired, 407) XCTAssertEqual(HTTPStatusCode.requestTimeout, 408) XCTAssertEqual(HTTPStatusCode.conflict, 409) XCTAssertEqual(HTTPStatusCode.gone, 410) XCTAssertEqual(HTTPStatusCode.lengthRequired, 411) XCTAssertEqual(HTTPStatusCode.preconditionFailed, 412) XCTAssertEqual(HTTPStatusCode.payloadTooLarge, 413) XCTAssertEqual(HTTPStatusCode.uriTooLong, 414) XCTAssertEqual(HTTPStatusCode.unsupportedMediaType, 415) XCTAssertEqual(HTTPStatusCode.rangeNotSatisfiable, 416) XCTAssertEqual(HTTPStatusCode.expectationFailed, 417) XCTAssertEqual(HTTPStatusCode.imATeapot, 418) XCTAssertEqual(HTTPStatusCode.misdirectedRequest, 421) XCTAssertEqual(HTTPStatusCode.unprocessableEntity, 422) XCTAssertEqual(HTTPStatusCode.locked, 423) XCTAssertEqual(HTTPStatusCode.failedDependency, 424) XCTAssertEqual(HTTPStatusCode.tooEarly, 425) XCTAssertEqual(HTTPStatusCode.upgradeRequired, 426) XCTAssertEqual(HTTPStatusCode.preconditionRequired, 428) XCTAssertEqual(HTTPStatusCode.tooManyRequests, 429) XCTAssertEqual(HTTPStatusCode.requestHeaderFieldsTooLarge, 431) XCTAssertEqual(HTTPStatusCode.iisLoginTimeout, 440) XCTAssertEqual(HTTPStatusCode.nginxNoResponse, 444) XCTAssertEqual(HTTPStatusCode.iisRetryWith, 449) XCTAssertEqual(HTTPStatusCode.blockedByWindowsParentalControls, 450) XCTAssertEqual(HTTPStatusCode.unavailableForLegalReasons, 451) XCTAssertEqual(HTTPStatusCode.nginxSSLCertificateError, 495) XCTAssertEqual(HTTPStatusCode.nginxSSLCertificateRequired, 496) XCTAssertEqual(HTTPStatusCode.nginxHTTPToHTTPS, 497) XCTAssertEqual(HTTPStatusCode.tokenExpired, 498) XCTAssertEqual(HTTPStatusCode.nginxClientClosedRequest, 499) XCTAssertEqual(HTTPStatusCode.internalServerError, 500) XCTAssertEqual(HTTPStatusCode.notImplemented, 501) XCTAssertEqual(HTTPStatusCode.badGateway, 502) XCTAssertEqual(HTTPStatusCode.serviceUnavailable, 503) XCTAssertEqual(HTTPStatusCode.gatewayTimeout, 504) XCTAssertEqual(HTTPStatusCode.httpVersionNotSupported, 505) XCTAssertEqual(HTTPStatusCode.variantAlsoNegotiates, 506) XCTAssertEqual(HTTPStatusCode.insufficientStorage, 507) XCTAssertEqual(HTTPStatusCode.loopDetected, 508) XCTAssertEqual(HTTPStatusCode.bandwidthLimitExceeded, 509) XCTAssertEqual(HTTPStatusCode.notExtended, 510) XCTAssertEqual(HTTPStatusCode.networkAuthenticationRequired, 511) XCTAssertEqual(HTTPStatusCode.siteIsFrozen, 530) XCTAssertEqual(HTTPStatusCode.networkConnectTimeoutError, 599) XCTAssertEqual(HTTPURLResponse(url: URL(string: "http://www.google.com")!, statusCode: .ok, httpVersion: nil, headerFields: nil)!.statusCodeValue, .ok) } } #endif