blob: 917d139f7748f760ba998f8a862fe30dd9d74faa [file] [log] [blame]
// 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
ErrorUserInfoKey.localizedDescriptionKey.rawValue: "description",
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.rawValue]! 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()