CommandLineToolkit
197 строк · 6.2 Кб
1import Foundation
2import XCTest
3import InlineSnapshotTesting
4@testable import Console
5
6final class LogRendererTests: XCTestCase {
7let renderer = LogComponentRenderer()
8
9override func invokeTest() {
10withSnapshotTesting(record: .never) {
11super.invokeTest()
12}
13}
14
15func testBasicTraceLog() {
16let component = LogComponent(
17state: .init(
18level: .trace,
19message: "Trace log message",
20metadata: [:],
21source: "",
22file: "FakeFile.swift",
23function: #function,
24line: 1
25)
26)
27
28assertInlineSnapshot(of: component, as: .consoleText(verbositySettings: .verbose)) {
29"""
30╶ Trace log message
31"""
32}
33
34assertInlineSnapshot(of: component, as: .consoleRaw(verbositySettings: .verbose)) {
35"""
36╶ Trace log message
37"""
38}
39}
40
41func testBasicInfoLog() {
42let component = LogComponent(
43state: .init(
44level: .info,
45message: "Info log message",
46metadata: [:],
47source: "",
48file: "FakeFile.swift",
49function: #function,
50line: 1
51)
52)
53
54assertInlineSnapshot(of: component, as: .consoleText(verbositySettings: .verbose)) {
55"""
56╶ Info log message
57"""
58}
59
60assertInlineSnapshot(of: component, as: .consoleRaw(verbositySettings: .verbose)) {
61"""
62^[38;5;36m╶^[0m ^[38;5;36mInfo log message^[0m
63"""
64}
65}
66
67func testMultilineInfoLog() {
68let component = LogComponent(
69state: .init(
70level: .info,
71message: "Info log message\nsecond line",
72metadata: [:],
73source: "",
74file: "FakeFile.swift",
75function: #function,
76line: 1
77)
78)
79
80assertInlineSnapshot(of: component, as: .consoleText(verbositySettings: .verbose)) {
81"""
82╭ Info log message
83│ second line
84╰
85"""
86}
87
88assertInlineSnapshot(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
97func testMultilineInfoLogWithMeta() {
98let component = LogComponent(
99state: .init(
100level: .info,
101message: "Info log message\nsecond line",
102metadata: ["key": "value"],
103source: "",
104file: "FakeFile.swift",
105function: #function,
106line: 1
107)
108)
109
110assertInlineSnapshot(of: component, as: .consoleText(verbositySettings: .verbose)) {
111"""
112╭ Info log message
113│ second line
114├─────────────────
115│ key: value
116╰
117"""
118}
119
120assertInlineSnapshot(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
131func testBasicInfoLogWithMeta() {
132let component = LogComponent(
133state: .init(
134level: .info,
135message: "Info log message with meta",
136metadata: [
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],
154source: "",
155file: "FakeFile.swift",
156function: #function,
157line: 1
158)
159)
160
161assertInlineSnapshot(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
179assertInlineSnapshot(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