| // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors |
| // Licensed under Apache License v2.0 with Runtime Library Exception |
| // |
| // See https://swift.org/LICENSE.txt for license information |
| // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors |
| // |
| //===----------------------------------------------------------------------===// |
| |
| // RUN: %target-run-simple-swift |
| // REQUIRES: executable_test |
| // REQUIRES: objc_interop |
| |
| // RUN: %target-build-swift %s 2> %t.warnings.txt |
| // RUN: %FileCheck -check-prefix=CHECK-WARNINGS %s < %t.warnings.txt |
| |
| import StdlibUnittest |
| |
| import Foundation |
| |
| var tests = TestSuite("NSError") |
| |
| tests.test("user info") { |
| let error = NSError(domain: "MyDomain", code: 1, userInfo: [ |
| // CHECK-WARNINGS: warning: 'localizedDescriptionKey' is deprecated: renamed to 'NSLocalizedDescriptionKey' |
| // CHECK-WARNINGS: note: use 'NSLocalizedDescriptionKey' instead |
| AnyHashable(ErrorUserInfoKey.localizedDescriptionKey.rawValue): "description", |
| AnyHashable(NSLocalizedFailureReasonErrorKey): "reason" |
| ]) |
| expectEqual("description", error.userInfo[NSLocalizedDescriptionKey]! as! String) |
| |
| expectEqual("reason", error.userInfo[ErrorUserInfoKey.localizedFailureReasonErrorKey.rawValue]! as! String) |
| |
| // TODO: Without the 'as NSObject' conversion, this produces nil. |
| // We may need to forward _CustomAnyHashable through swift_newtypes. |
| expectEqual("reason", error.userInfo[ErrorUserInfoKey.localizedFailureReasonErrorKey as NSObject]! as! String) |
| } |
| |
| tests.test("convenience") { |
| let error1 = CocoaError.error(.fileNoSuchFile) |
| expectNotNil((error1 as NSError).localizedDescription) |
| expectEqual(CocoaError.Code.fileNoSuchFile.rawValue, (error1 as NSError).code) |
| |
| let url = URL(string: "file:///tmp/bar/foo") |
| let error2 = CocoaError.error(.fileNoSuchFile, url: url) |
| expectEqual(url, (error2 as! CocoaError).url) |
| expectNotNil((error2 as NSError).localizedDescription) |
| expectEqual(url, (error2 as NSError).userInfo[NSURLErrorKey] as? URL) |
| |
| let error3 = CocoaError.error(.fileNoSuchFile, userInfo: ["foo" : "bar"], url: url) |
| expectEqual(url, (error3 as! CocoaError).url) |
| expectNotNil((error3 as NSError).localizedDescription) |
| expectEqual(url, (error3 as NSError).userInfo[NSURLErrorKey] as? URL) |
| expectEqual("bar", (error3 as NSError).userInfo["foo"] as? String) |
| } |
| |
| tests.test("Hashable") { |
| checkHashable([CocoaError.Code.fileNoSuchFile, .fileReadUnknown, .keyValueValidation], equalityOracle: { $0 == $1 }) |
| checkHashable([URLError.Code.unknown, .cancelled, .badURL], equalityOracle: { $0 == $1 }) |
| } |
| |
| runAllTests() |