CommandLineToolkit

Форк
0
/
LogRendererTests.swift 
197 строк · 6.2 Кб
1
import Foundation
2
import XCTest
3
import InlineSnapshotTesting
4
@testable import Console
5

6
final class LogRendererTests: XCTestCase {
7
    let renderer = LogComponentRenderer()
8
    
9
    override func invokeTest() {
10
        withSnapshotTesting(record: .never) {
11
            super.invokeTest()
12
        }
13
    }
14

15
    func testBasicTraceLog() {
16
        let component = LogComponent(
17
            state: .init(
18
                level: .trace,
19
                message: "Trace log message",
20
                metadata: [:],
21
                source: "",
22
                file: "FakeFile.swift",
23
                function: #function,
24
                line: 1
25
            )
26
        )
27
        
28
        assertInlineSnapshot(of: component, as: .consoleText(verbositySettings: .verbose)) {
29
            """
30
            ╶ Trace log message
31
            """
32
        }
33

34
        assertInlineSnapshot(of: component, as: .consoleRaw(verbositySettings: .verbose)) {
35
            """
36
            ╶ Trace log message
37
            """
38
        }
39
    }
40

41
    func testBasicInfoLog() {
42
        let component = LogComponent(
43
            state: .init(
44
                level: .info,
45
                message: "Info log message",
46
                metadata: [:],
47
                source: "",
48
                file: "FakeFile.swift",
49
                function: #function,
50
                line: 1
51
            )
52
        )
53

54
        assertInlineSnapshot(of: component, as: .consoleText(verbositySettings: .verbose)) {
55
            """
56
            ╶ Info log message
57
            """
58
        }
59
        
60
        assertInlineSnapshot(of: component, as: .consoleRaw(verbositySettings: .verbose)) {
61
            """
62
            ^[38;5;36m╶^[0m ^[38;5;36mInfo log message^[0m
63
            """
64
        }
65
    }
66

67
    func testMultilineInfoLog() {
68
        let component = LogComponent(
69
            state: .init(
70
                level: .info,
71
                message: "Info log message\nsecond line",
72
                metadata: [:],
73
                source: "",
74
                file: "FakeFile.swift",
75
                function: #function,
76
                line: 1
77
            )
78
        )
79
        
80
        assertInlineSnapshot(of: component, as: .consoleText(verbositySettings: .verbose)) {
81
            """
82
            ╭ Info log message
83
            │ second line
84
85
            """
86
        }
87

88
        assertInlineSnapshot(of: component, as: .consoleRaw(verbositySettings: .verbose)) {
89
            """
90
            ^[38;5;36m╭^[0m ^[38;5;36mInfo log message^[0m
91
            ^[38;5;36m│^[0m ^[38;5;36msecond line^[0m
92
            ^[38;5;36m╰^[0m
93
            """
94
        }
95
    }
96

97
    func testMultilineInfoLogWithMeta() {
98
        let component = LogComponent(
99
            state: .init(
100
                level: .info,
101
                message: "Info log message\nsecond line",
102
                metadata: ["key": "value"],
103
                source: "",
104
                file: "FakeFile.swift",
105
                function: #function,
106
                line: 1
107
            )
108
        )
109
        
110
        assertInlineSnapshot(of: component, as: .consoleText(verbositySettings: .verbose)) {
111
            """
112
            ╭ Info log message
113
            │ second line
114
            ├─────────────────
115
            │ key: value
116
117
            """
118
        }
119

120
        assertInlineSnapshot(of: component, as: .consoleRaw(verbositySettings: .verbose)) {
121
            """
122
            ^[38;5;36m╭^[0m ^[38;5;36mInfo log message^[0m
123
            ^[38;5;36m│^[0m ^[38;5;36msecond line^[0m
124
            ^[38;5;36m├^[0m^[38;5;36m─────────────────^[0m
125
            ^[38;5;36m│^[0m ^[38;5;36mkey: value^[0m
126
            ^[38;5;36m╰^[0m
127
            """
128
        }
129
    }
130

131
    func testBasicInfoLogWithMeta() {
132
        let component = LogComponent(
133
            state: .init(
134
                level: .info,
135
                message: "Info log message with meta",
136
                metadata: [
137
                    "string": "value",
138
                    "string-convertible": .stringConvertible(10),
139
                    "array-of-strings": [
140
                        "first",
141
                        "second",
142
                    ],
143
                    "array-of-objects": [
144
                        [
145
                            "key1": "value1",
146
                            "key2": "value2"
147
                        ],
148
                        [
149
                            "key3": "value3",
150
                            "key4": "value4"
151
                        ]
152
                    ]
153
                ],
154
                source: "",
155
                file: "FakeFile.swift",
156
                function: #function,
157
                line: 1
158
            )
159
        )
160
        
161
        assertInlineSnapshot(of: component, as: .consoleText(verbositySettings: .verbose)) {
162
            """
163
            ╭ Info log message with meta
164
            ├───────────────────────────
165
            │ array-of-objects:
166
            │ - key1: value1
167
            │   key2: value2
168
            │ - key3: value3
169
            │   key4: value4
170
            │ array-of-strings:
171
            │ - first
172
            │ - second
173
            │ string: value
174
            │ string-convertible: '10'
175
176
            """
177
        }
178

179
        assertInlineSnapshot(of: component, as: .consoleRaw(verbositySettings: .verbose)) {
180
            """
181
            ^[38;5;36m╭^[0m ^[38;5;36mInfo log message with meta^[0m
182
            ^[38;5;36m├^[0m^[38;5;36m───────────────────────────^[0m
183
            ^[38;5;36m│^[0m ^[38;5;36marray-of-objects:^[0m
184
            ^[38;5;36m│^[0m ^[38;5;36m- key1: value1^[0m
185
            ^[38;5;36m│^[0m ^[38;5;36m  key2: value2^[0m
186
            ^[38;5;36m│^[0m ^[38;5;36m- key3: value3^[0m
187
            ^[38;5;36m│^[0m ^[38;5;36m  key4: value4^[0m
188
            ^[38;5;36m│^[0m ^[38;5;36marray-of-strings:^[0m
189
            ^[38;5;36m│^[0m ^[38;5;36m- first^[0m
190
            ^[38;5;36m│^[0m ^[38;5;36m- second^[0m
191
            ^[38;5;36m│^[0m ^[38;5;36mstring: value^[0m
192
            ^[38;5;36m│^[0m ^[38;5;36mstring-convertible: '10'^[0m
193
            ^[38;5;36m╰^[0m
194
            """
195
        }
196
    }
197
}
198

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.