Skip to content

Commit 6acadb4

Browse files
committed
fix convenience accessors on CocoaError and URLError
1 parent aa07812 commit 6acadb4

File tree

2 files changed

+101
-8
lines changed

2 files changed

+101
-8
lines changed

Sources/Foundation/NSError.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -719,29 +719,29 @@ internal extension CocoaError {
719719
}
720720

721721
public extension CocoaError {
722-
private var _nsUserInfo: [AnyHashable : Any] {
722+
private var _nsUserInfo: [String: Any] {
723723
return _nsError.userInfo
724724
}
725725

726726
/// The file path associated with the error, if any.
727727
var filePath: String? {
728-
return _nsUserInfo[NSFilePathErrorKey._bridgeToObjectiveC()] as? String
728+
return _nsUserInfo[NSFilePathErrorKey] as? String
729729
}
730730

731731
/// The string encoding associated with this error, if any.
732732
var stringEncoding: String.Encoding? {
733-
return (_nsUserInfo[NSStringEncodingErrorKey._bridgeToObjectiveC()] as? NSNumber)
733+
return (_nsUserInfo[NSStringEncodingErrorKey] as? NSNumber)
734734
.map { String.Encoding(rawValue: $0.uintValue) }
735735
}
736736

737737
/// The underlying error behind this error, if any.
738738
var underlying: Error? {
739-
return _nsUserInfo[NSUnderlyingErrorKey._bridgeToObjectiveC()] as? Error
739+
return _nsUserInfo[NSUnderlyingErrorKey] as? Error
740740
}
741741

742742
/// The URL associated with this error, if any.
743743
var url: URL? {
744-
return _nsUserInfo[NSURLErrorKey._bridgeToObjectiveC()] as? URL
744+
return _nsUserInfo[NSURLErrorKey] as? URL
745745
}
746746
}
747747

@@ -913,18 +913,18 @@ public struct URLError : _BridgedStoredNSError {
913913
}
914914

915915
extension URLError {
916-
private var _nsUserInfo: [AnyHashable : Any] {
916+
private var _nsUserInfo: [String: Any] {
917917
return _nsError.userInfo
918918
}
919919

920920
/// The URL which caused a load to fail.
921921
public var failingURL: URL? {
922-
return _nsUserInfo[NSURLErrorFailingURLErrorKey._bridgeToObjectiveC()] as? URL
922+
return _nsUserInfo[NSURLErrorFailingURLErrorKey] as? URL
923923
}
924924

925925
/// The string for the URL which caused a load to fail.
926926
public var failureURLString: String? {
927-
return _nsUserInfo[NSURLErrorFailingURLStringErrorKey._bridgeToObjectiveC()] as? String
927+
return _nsUserInfo[NSURLErrorFailingURLStringErrorKey] as? String
928928
}
929929
}
930930

Tests/Foundation/Tests/TestNSError.swift

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,96 @@ class TestNSError : XCTestCase {
107107
}
108108
}
109109
}
110+
111+
class TestURLError: XCTestCase {
112+
113+
static var allTests: [(String, (TestURLError) -> () throws -> Void)] {
114+
return [
115+
("test_errorCode", TestURLError.test_errorCode),
116+
("test_failingURL", TestURLError.test_failingURL),
117+
("test_failingURLString", TestURLError.test_failingURLString),
118+
]
119+
}
120+
121+
static let testURL = URL(string: "https://swift.org")!
122+
let userInfo: [String: Any] = [
123+
NSURLErrorFailingURLErrorKey: TestURLError.testURL,
124+
NSURLErrorFailingURLStringErrorKey: TestURLError.testURL.absoluteString,
125+
]
126+
127+
func test_errorCode() {
128+
let e = URLError(.unsupportedURL)
129+
XCTAssertEqual(e.errorCode, URLError.Code.unsupportedURL.rawValue)
130+
}
131+
132+
func test_failingURL() {
133+
let e = URLError(.badURL, userInfo: userInfo)
134+
XCTAssertNotNil(e.failingURL)
135+
XCTAssertEqual(e.failingURL, e.userInfo[NSURLErrorFailingURLErrorKey] as? URL)
136+
}
137+
138+
func test_failingURLString() {
139+
let e = URLError(.badURL, userInfo: userInfo)
140+
XCTAssertNotNil(e.failureURLString)
141+
XCTAssertEqual(e.failureURLString, e.userInfo[NSURLErrorFailingURLStringErrorKey] as? String)
142+
}
143+
}
144+
145+
class TestCocoaError: XCTestCase {
146+
147+
static var allTests: [(String, (TestCocoaError) -> () throws -> Void)] {
148+
return [
149+
("test_errorCode", TestCocoaError.test_errorCode),
150+
("test_filePath", TestCocoaError.test_filePath),
151+
("test_url", TestCocoaError.test_url),
152+
("test_stringEncoding", TestCocoaError.test_stringEncoding),
153+
("test_underlying", TestCocoaError.test_underlying),
154+
]
155+
}
156+
157+
static let testURL = URL(string: "file:///")!
158+
let userInfo: [String: Any] = [
159+
NSURLErrorKey: TestCocoaError.testURL,
160+
NSFilePathErrorKey: TestCocoaError.testURL.path,
161+
NSUnderlyingErrorKey: POSIXError(.EACCES),
162+
NSStringEncodingErrorKey: String.Encoding.utf16.rawValue,
163+
]
164+
165+
func test_errorCode() {
166+
let e = CocoaError(.fileReadNoSuchFile)
167+
XCTAssertEqual(e.errorCode, CocoaError.Code.fileReadNoSuchFile.rawValue)
168+
XCTAssertEqual(e.isCoderError, false)
169+
XCTAssertEqual(e.isExecutableError, false)
170+
XCTAssertEqual(e.isFileError, true)
171+
XCTAssertEqual(e.isFormattingError, false)
172+
XCTAssertEqual(e.isPropertyListError, false)
173+
XCTAssertEqual(e.isUbiquitousFileError, false)
174+
XCTAssertEqual(e.isUserActivityError, false)
175+
XCTAssertEqual(e.isValidationError, false)
176+
XCTAssertEqual(e.isXPCConnectionError, false)
177+
}
178+
179+
func test_filePath() {
180+
let e = CocoaError(.fileWriteNoPermission, userInfo: userInfo)
181+
XCTAssertNotNil(e.filePath)
182+
XCTAssertEqual(e.filePath, TestCocoaError.testURL.path)
183+
}
184+
185+
func test_url() {
186+
let e = CocoaError(.fileReadNoSuchFile, userInfo: userInfo)
187+
XCTAssertNotNil(e.url)
188+
XCTAssertEqual(e.url, TestCocoaError.testURL)
189+
}
190+
191+
func test_stringEncoding() {
192+
let e = CocoaError(.fileReadUnknownStringEncoding, userInfo: userInfo)
193+
XCTAssertNotNil(e.stringEncoding)
194+
XCTAssertEqual(e.stringEncoding, .utf16)
195+
}
196+
197+
func test_underlying() {
198+
let e = CocoaError(.fileWriteNoPermission, userInfo: userInfo)
199+
XCTAssertNotNil(e.underlying as? POSIXError)
200+
XCTAssertEqual(e.underlying as? POSIXError, POSIXError.init(.EACCES))
201+
}
202+
}

0 commit comments

Comments
 (0)