File: ResultTests.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 (67 lines) | stat: -rw-r--r-- 1,961 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
62
63
64
65
66
67
/*
 This source file is part of the Swift.org open source project

 Copyright 2016 Apple Inc. and the Swift project authors
 Licensed under Apache License v2.0 with Runtime Library Exception

 See http://swift.org/LICENSE.txt for license information
 See http://swift.org/CONTRIBUTORS.txt for Swift project authors
*/

import XCTest

import TSCBasic
import TSCTestSupport

private enum DummyError: Error, Equatable {
    case somethingWentWrong
}

private enum OtherDummyError: Error, Equatable {
    case somethingElseWentWrong
    case andYetAnotherThingToGoWrong
}

class ResultTests: XCTestCase {
    func testTryMap() {
        let result1 = Result<Int, Error>.success(1).tryMap({ $0 + 1 })
        XCTAssertEqual(result1.success, 2)

        let result2 = Result<Int, Error>.failure(DummyError.somethingWentWrong).tryMap({ (value: Int) -> Int in
            XCTFail("should not reach here")
            return value
        })
        XCTAssertEqual(result2.failure as? DummyError, DummyError.somethingWentWrong)

        let result3 = Result<Int, Error>.success(1).tryMap({ (value: Int) -> Int in
            throw OtherDummyError.somethingElseWentWrong
        })
        XCTAssertEqual(result3.failure as? OtherDummyError, OtherDummyError.somethingElseWentWrong)

        let result4 = Result<Int, Error>.failure(DummyError.somethingWentWrong).tryMap({ (value: Int) -> Int in
            XCTFail("should not reach here")
            throw OtherDummyError.somethingElseWentWrong
        })
        XCTAssertEqual(result4.failure as? DummyError, DummyError.somethingWentWrong)
    }
}

extension Result {
    var success: Success? {
        switch self {
        case .success(let success):
            return success
        case .failure:
            return nil
        }
    }

    var failure: Failure? {
        switch self {
        case .success:
            return nil
        case .failure(let error):
            return error
        }
    }
}