2
0

AFError+AlamofireTests.swift 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. //
  2. // AFError+AlamofireTests.swift
  3. //
  4. // Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/)
  5. //
  6. // Permission is hereby granted, free of charge, to any person obtaining a copy
  7. // of this software and associated documentation files (the "Software"), to deal
  8. // in the Software without restriction, including without limitation the rights
  9. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10. // copies of the Software, and to permit persons to whom the Software is
  11. // furnished to do so, subject to the following conditions:
  12. //
  13. // The above copyright notice and this permission notice shall be included in
  14. // all copies or substantial portions of the Software.
  15. //
  16. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  19. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  22. // THE SOFTWARE.
  23. //
  24. import Alamofire
  25. import Foundation
  26. extension AFError {
  27. // ParameterEncodingFailureReason
  28. var isMissingURLFailed: Bool {
  29. if case let .parameterEncodingFailed(reason) = self, reason.isMissingURL { return true }
  30. return false
  31. }
  32. var isJSONEncodingFailed: Bool {
  33. if case let .parameterEncodingFailed(reason) = self, reason.isJSONEncodingFailed { return true }
  34. return false
  35. }
  36. // MultipartEncodingFailureReason
  37. var isBodyPartURLInvalid: Bool {
  38. if case let .multipartEncodingFailed(reason) = self, reason.isBodyPartURLInvalid { return true }
  39. return false
  40. }
  41. var isBodyPartFilenameInvalid: Bool {
  42. if case let .multipartEncodingFailed(reason) = self, reason.isBodyPartFilenameInvalid { return true }
  43. return false
  44. }
  45. var isBodyPartFileNotReachable: Bool {
  46. if case let .multipartEncodingFailed(reason) = self, reason.isBodyPartFileNotReachable { return true }
  47. return false
  48. }
  49. var isBodyPartFileNotReachableWithError: Bool {
  50. if case let .multipartEncodingFailed(reason) = self, reason.isBodyPartFileNotReachableWithError { return true }
  51. return false
  52. }
  53. var isBodyPartFileIsDirectory: Bool {
  54. if case let .multipartEncodingFailed(reason) = self, reason.isBodyPartFileIsDirectory { return true }
  55. return false
  56. }
  57. var isBodyPartFileSizeNotAvailable: Bool {
  58. if case let .multipartEncodingFailed(reason) = self, reason.isBodyPartFileSizeNotAvailable { return true }
  59. return false
  60. }
  61. var isBodyPartFileSizeQueryFailedWithError: Bool {
  62. if case let .multipartEncodingFailed(reason) = self, reason.isBodyPartFileSizeQueryFailedWithError { return true }
  63. return false
  64. }
  65. var isBodyPartInputStreamCreationFailed: Bool {
  66. if case let .multipartEncodingFailed(reason) = self, reason.isBodyPartInputStreamCreationFailed { return true }
  67. return false
  68. }
  69. var isOutputStreamCreationFailed: Bool {
  70. if case let .multipartEncodingFailed(reason) = self, reason.isOutputStreamCreationFailed { return true }
  71. return false
  72. }
  73. var isOutputStreamFileAlreadyExists: Bool {
  74. if case let .multipartEncodingFailed(reason) = self, reason.isOutputStreamFileAlreadyExists { return true }
  75. return false
  76. }
  77. var isOutputStreamURLInvalid: Bool {
  78. if case let .multipartEncodingFailed(reason) = self, reason.isOutputStreamURLInvalid { return true }
  79. return false
  80. }
  81. var isOutputStreamWriteFailed: Bool {
  82. if case let .multipartEncodingFailed(reason) = self, reason.isOutputStreamWriteFailed { return true }
  83. return false
  84. }
  85. var isInputStreamReadFailed: Bool {
  86. if case let .multipartEncodingFailed(reason) = self, reason.isInputStreamReadFailed { return true }
  87. return false
  88. }
  89. // ResponseSerializationFailureReason
  90. var isInputDataNilOrZeroLength: Bool {
  91. if case let .responseSerializationFailed(reason) = self, reason.isInputDataNilOrZeroLength { return true }
  92. return false
  93. }
  94. var isInputFileNil: Bool {
  95. if case let .responseSerializationFailed(reason) = self, reason.isInputFileNil { return true }
  96. return false
  97. }
  98. var isInputFileReadFailed: Bool {
  99. if case let .responseSerializationFailed(reason) = self, reason.isInputFileReadFailed { return true }
  100. return false
  101. }
  102. var isStringSerializationFailed: Bool {
  103. if case let .responseSerializationFailed(reason) = self, reason.isStringSerializationFailed { return true }
  104. return false
  105. }
  106. var isJSONSerializationFailed: Bool {
  107. if case let .responseSerializationFailed(reason) = self, reason.isJSONSerializationFailed { return true }
  108. return false
  109. }
  110. var isJSONDecodingFailed: Bool {
  111. if case let .responseSerializationFailed(reason) = self, reason.isDecodingFailed { return true }
  112. return false
  113. }
  114. var isInvalidEmptyResponse: Bool {
  115. if case let .responseSerializationFailed(reason) = self, reason.isInvalidEmptyResponse { return true }
  116. return false
  117. }
  118. // ResponseValidationFailureReason
  119. var isDataFileNil: Bool {
  120. if case let .responseValidationFailed(reason) = self, reason.isDataFileNil { return true }
  121. return false
  122. }
  123. var isDataFileReadFailed: Bool {
  124. if case let .responseValidationFailed(reason) = self, reason.isDataFileReadFailed { return true }
  125. return false
  126. }
  127. var isMissingContentType: Bool {
  128. if case let .responseValidationFailed(reason) = self, reason.isMissingContentType { return true }
  129. return false
  130. }
  131. var isUnacceptableContentType: Bool {
  132. if case let .responseValidationFailed(reason) = self, reason.isUnacceptableContentType { return true }
  133. return false
  134. }
  135. var isUnacceptableStatusCode: Bool {
  136. if case let .responseValidationFailed(reason) = self, reason.isUnacceptableStatusCode { return true }
  137. return false
  138. }
  139. // URLRequestValidationFailure
  140. var isBodyDataInGETRequest: Bool {
  141. if case let .urlRequestValidationFailed(reason) = self, reason.isBodyDataInGETRequest { return true }
  142. return false
  143. }
  144. var isHostURLError: Bool {
  145. guard let errorCode = (underlyingError as? URLError)?.code else { return false }
  146. return [.cannotConnectToHost, .cannotFindHost].contains(errorCode)
  147. }
  148. }
  149. // MARK: -
  150. extension AFError.ParameterEncodingFailureReason {
  151. var isMissingURL: Bool {
  152. if case .missingURL = self { return true }
  153. return false
  154. }
  155. var isJSONEncodingFailed: Bool {
  156. if case .jsonEncodingFailed = self { return true }
  157. return false
  158. }
  159. }
  160. // MARK: -
  161. extension AFError.MultipartEncodingFailureReason {
  162. var isBodyPartURLInvalid: Bool {
  163. if case .bodyPartURLInvalid = self { return true }
  164. return false
  165. }
  166. var isBodyPartFilenameInvalid: Bool {
  167. if case .bodyPartFilenameInvalid = self { return true }
  168. return false
  169. }
  170. var isBodyPartFileNotReachable: Bool {
  171. if case .bodyPartFileNotReachable = self { return true }
  172. return false
  173. }
  174. var isBodyPartFileNotReachableWithError: Bool {
  175. if case .bodyPartFileNotReachableWithError = self { return true }
  176. return false
  177. }
  178. var isBodyPartFileIsDirectory: Bool {
  179. if case .bodyPartFileIsDirectory = self { return true }
  180. return false
  181. }
  182. var isBodyPartFileSizeNotAvailable: Bool {
  183. if case .bodyPartFileSizeNotAvailable = self { return true }
  184. return false
  185. }
  186. var isBodyPartFileSizeQueryFailedWithError: Bool {
  187. if case .bodyPartFileSizeQueryFailedWithError = self { return true }
  188. return false
  189. }
  190. var isBodyPartInputStreamCreationFailed: Bool {
  191. if case .bodyPartInputStreamCreationFailed = self { return true }
  192. return false
  193. }
  194. var isOutputStreamCreationFailed: Bool {
  195. if case .outputStreamCreationFailed = self { return true }
  196. return false
  197. }
  198. var isOutputStreamFileAlreadyExists: Bool {
  199. if case .outputStreamFileAlreadyExists = self { return true }
  200. return false
  201. }
  202. var isOutputStreamURLInvalid: Bool {
  203. if case .outputStreamURLInvalid = self { return true }
  204. return false
  205. }
  206. var isOutputStreamWriteFailed: Bool {
  207. if case .outputStreamWriteFailed = self { return true }
  208. return false
  209. }
  210. var isInputStreamReadFailed: Bool {
  211. if case .inputStreamReadFailed = self { return true }
  212. return false
  213. }
  214. }
  215. // MARK: -
  216. extension AFError.ResponseSerializationFailureReason {
  217. var isInputDataNilOrZeroLength: Bool {
  218. if case .inputDataNilOrZeroLength = self { return true }
  219. return false
  220. }
  221. var isInputFileNil: Bool {
  222. if case .inputFileNil = self { return true }
  223. return false
  224. }
  225. var isInputFileReadFailed: Bool {
  226. if case .inputFileReadFailed = self { return true }
  227. return false
  228. }
  229. var isStringSerializationFailed: Bool {
  230. if case .stringSerializationFailed = self { return true }
  231. return false
  232. }
  233. var isJSONSerializationFailed: Bool {
  234. if case .jsonSerializationFailed = self { return true }
  235. return false
  236. }
  237. var isDecodingFailed: Bool {
  238. if case .decodingFailed = self { return true }
  239. return false
  240. }
  241. var isInvalidEmptyResponse: Bool {
  242. if case .invalidEmptyResponse = self { return true }
  243. return false
  244. }
  245. }
  246. // MARK: -
  247. extension AFError.ResponseValidationFailureReason {
  248. var isDataFileNil: Bool {
  249. if case .dataFileNil = self { return true }
  250. return false
  251. }
  252. var isDataFileReadFailed: Bool {
  253. if case .dataFileReadFailed = self { return true }
  254. return false
  255. }
  256. var isMissingContentType: Bool {
  257. if case .missingContentType = self { return true }
  258. return false
  259. }
  260. var isUnacceptableContentType: Bool {
  261. if case .unacceptableContentType = self { return true }
  262. return false
  263. }
  264. var isUnacceptableStatusCode: Bool {
  265. if case .unacceptableStatusCode = self { return true }
  266. return false
  267. }
  268. }
  269. // MARK: -
  270. #if !(os(Linux) || os(Windows))
  271. extension AFError.ServerTrustFailureReason {
  272. var isNoRequiredEvaluator: Bool {
  273. if case .noRequiredEvaluator = self { return true }
  274. return false
  275. }
  276. var isNoCertificatesFound: Bool {
  277. if case .noCertificatesFound = self { return true }
  278. return false
  279. }
  280. var isNoPublicKeysFound: Bool {
  281. if case .noPublicKeysFound = self { return true }
  282. return false
  283. }
  284. var isPolicyApplicationFailed: Bool {
  285. if case .policyApplicationFailed = self { return true }
  286. return false
  287. }
  288. var isRevocationPolicyCreationFailed: Bool {
  289. if case .revocationPolicyCreationFailed = self { return true }
  290. return false
  291. }
  292. var isTrustEvaluationFailed: Bool {
  293. if case .trustEvaluationFailed = self { return true }
  294. return false
  295. }
  296. var isDefaultEvaluationFailed: Bool {
  297. if case .defaultEvaluationFailed = self { return true }
  298. return false
  299. }
  300. var isHostValidationFailed: Bool {
  301. if case .hostValidationFailed = self { return true }
  302. return false
  303. }
  304. var isRevocationCheckFailed: Bool {
  305. if case .revocationCheckFailed = self { return true }
  306. return false
  307. }
  308. var isCertificatePinningFailed: Bool {
  309. if case .certificatePinningFailed = self { return true }
  310. return false
  311. }
  312. var isPublicKeyPinningFailed: Bool {
  313. if case .publicKeyPinningFailed = self { return true }
  314. return false
  315. }
  316. }
  317. #endif
  318. extension AFError.URLRequestValidationFailureReason {
  319. var isBodyDataInGETRequest: Bool {
  320. if case .bodyDataInGETRequest = self { return true }
  321. return false
  322. }
  323. }