File: DiagnosticsEngineTests.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 (99 lines) | stat: -rw-r--r-- 3,458 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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
 This source file is part of the Swift.org open source project

 Copyright (c) 2014 - 2017 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

private struct FooDiag: DiagnosticData {
    let arr: [String]
    let str: String
    let int: Int

    var description: String {
        return "literal \(arr.joined(separator: ", ")) \(int) \(str) bar \(str)"
    }
}

private struct FooLocation: DiagnosticLocation {
    let name: String

    var description: String {
        return name
    }
}

class DiagnosticsEngineTests: XCTestCase {
    func testBasics() {
        let diagnostics = DiagnosticsEngine() 
        diagnostics.emit(.error(
            FooDiag(arr: ["foo", "bar"], str: "str", int: 2)),
            location: FooLocation(name: "foo loc")
        )
        let diag = diagnostics.diagnostics[0]

        XCTAssertEqual(diagnostics.diagnostics.count, 1)
        XCTAssertEqual(diag.location.description, "foo loc")
        XCTAssertEqual(diag.description, "literal foo, bar 2 str bar str")
        XCTAssertEqual(diag.message.behavior, .error)
    }

    func testMerging() {
        let engine1 = DiagnosticsEngine() 
        engine1.emit(
            .error(FooDiag(arr: ["foo", "bar"], str: "str", int: 2)),
            location: FooLocation(name: "foo loc")
        )
        XCTAssertEqual(engine1.diagnostics.count, 1)

        let engine2 = DiagnosticsEngine() 
        engine2.emit(
            .error(FooDiag(arr: ["foo", "bar"], str: "str", int: 2)),
            location: FooLocation(name: "foo loc")
        )
        engine2.emit(
            .error(FooDiag(arr: ["foo", "bar"], str: "str", int: 2)),
            location: FooLocation(name: "foo loc")
        )
        XCTAssertEqual(engine2.diagnostics.count, 2)

        engine1.merge(engine2)
        XCTAssertEqual(engine1.diagnostics.count, 3)
        XCTAssertEqual(engine2.diagnostics.count, 2)
    }

    func testHandlers() {
        var handledDiagnostics: [Diagnostic] = []
        let handler: DiagnosticsEngine.DiagnosticsHandler = { diagnostic in 
            handledDiagnostics.append(diagnostic)
        }

        let diagnostics = DiagnosticsEngine(handlers: [handler])
        let location = FooLocation(name: "location")
        diagnostics.emit(
            .error(FooDiag(arr: ["foo", "bar"], str: "str", int: 2)),
            location: location
        )
        diagnostics.emit(.error(StringDiagnostic("diag 2")), location: location)
        diagnostics.emit(.note(StringDiagnostic("diag 3")), location: location)
        diagnostics.emit(.remark(StringDiagnostic("diag 4")), location: location)
        diagnostics.emit(.error(StringDiagnostic("end")), location: location)

        XCTAssertEqual(handledDiagnostics.count, 5)
        for diagnostic in handledDiagnostics {
            XCTAssertEqual(diagnostic.location.description, location.description)
        }
        XCTAssertEqual(handledDiagnostics[0].description, "literal foo, bar 2 str bar str")
        XCTAssertEqual(handledDiagnostics[1].description, "diag 2")
        XCTAssertEqual(handledDiagnostics[2].description, "diag 3")
        XCTAssertEqual(handledDiagnostics[3].description, "diag 4")
        XCTAssertEqual(handledDiagnostics[4].description, "end")
    }
}