File: NSError.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (61 lines) | stat: -rw-r--r-- 2,631 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// 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()