Skip to content

Commit 1ff1a22

Browse files
committed
Add tests for dumped results of Syntax
1 parent 103090e commit 1ff1a22

File tree

1 file changed

+215
-0
lines changed

1 file changed

+215
-0
lines changed

Tests/SwiftSyntaxTest/CustomReflecatbleTests.swift

Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,218 @@ import SwiftSyntax
44

55
public class CustomReflectableTests: XCTestCase {
66
public static let allTests = [
7+
("testDump", testDump),
78
("testConformanceToCustomReflectable", testConformanceToCustomReflectable),
89
]
910

1011

12+
public func testDump() {
13+
struct TestCase {
14+
let syntax: Any
15+
let expectedDumped: String
16+
}
17+
18+
let testCases: [UInt: TestCase] = [
19+
#line: .init(syntax: SyntaxFactory.makeUnknownSyntax(tokens: []),
20+
expectedDumped: """
21+
- UnknownSyntax
22+
23+
"""),
24+
#line: .init(syntax: SyntaxFactory.makeToken(.associatedtypeKeyword,
25+
presence: .present,
26+
leadingTrivia: [],
27+
trailingTrivia: []),
28+
expectedDumped: """
29+
▿ TokenSyntax
30+
- text: "associatedtype"
31+
▿ leadingTrivia: SwiftSyntax.Trivia
32+
- pieces: 0 elements
33+
▿ trailingTrivia: SwiftSyntax.Trivia
34+
- pieces: 0 elements
35+
- tokenKind: SwiftSyntax.TokenKind.associatedtypeKeyword
36+
37+
"""),
38+
#line: {
39+
let leftToken = SyntaxFactory.makeToken(.leftSquareBracket,
40+
presence: .present,
41+
leadingTrivia: [],
42+
trailingTrivia: [])
43+
let elements = SyntaxFactory.makeBlankArrayElementList()
44+
let rightToken = SyntaxFactory.makeToken(.rightSquareBracket,
45+
presence: .present,
46+
leadingTrivia: [],
47+
trailingTrivia: [])
48+
let expr = SyntaxFactory.makeArrayExpr(leftSquare: leftToken,
49+
elements: elements,
50+
rightSquare: rightToken)
51+
return .init(syntax: expr.tokens,
52+
expectedDumped: """
53+
▿ SwiftSyntax.TokenSequence
54+
▿ TokenSyntax
55+
- text: "["
56+
▿ leadingTrivia: SwiftSyntax.Trivia
57+
- pieces: 0 elements
58+
▿ trailingTrivia: SwiftSyntax.Trivia
59+
- pieces: 0 elements
60+
- tokenKind: SwiftSyntax.TokenKind.leftSquareBracket
61+
▿ TokenSyntax
62+
- text: "]"
63+
▿ leadingTrivia: SwiftSyntax.Trivia
64+
- pieces: 0 elements
65+
▿ trailingTrivia: SwiftSyntax.Trivia
66+
- pieces: 0 elements
67+
- tokenKind: SwiftSyntax.TokenKind.rightSquareBracket
68+
69+
""")
70+
}(),
71+
#line: {
72+
let leftToken = SyntaxFactory.makeToken(.leftSquareBracket,
73+
presence: .present,
74+
leadingTrivia: [],
75+
trailingTrivia: [])
76+
let elements = SyntaxFactory.makeBlankArrayElementList()
77+
let rightToken = SyntaxFactory.makeToken(.rightSquareBracket,
78+
presence: .present,
79+
leadingTrivia: [],
80+
trailingTrivia: [])
81+
let expr = SyntaxFactory.makeArrayExpr(leftSquare: leftToken,
82+
elements: elements,
83+
rightSquare: rightToken)
84+
return .init(syntax: expr.tokens.reversed(),
85+
expectedDumped: """
86+
▿ SwiftSyntax.ReversedTokenSequence
87+
▿ TokenSyntax
88+
- text: "]"
89+
▿ leadingTrivia: SwiftSyntax.Trivia
90+
- pieces: 0 elements
91+
▿ trailingTrivia: SwiftSyntax.Trivia
92+
- pieces: 0 elements
93+
- tokenKind: SwiftSyntax.TokenKind.rightSquareBracket
94+
▿ TokenSyntax
95+
- text: "["
96+
▿ leadingTrivia: SwiftSyntax.Trivia
97+
- pieces: 0 elements
98+
▿ trailingTrivia: SwiftSyntax.Trivia
99+
- pieces: 0 elements
100+
- tokenKind: SwiftSyntax.TokenKind.leftSquareBracket
101+
102+
""")
103+
}(),
104+
#line: {
105+
let token1 = SyntaxFactory.makeToken(.integerLiteral("1"),
106+
presence: .present,
107+
leadingTrivia: [],
108+
trailingTrivia: [])
109+
let expr1 = SyntaxFactory.makeIntegerLiteralExpr(digits: token1)
110+
let token2 = SyntaxFactory.makeToken(.integerLiteral("2"),
111+
presence: .present,
112+
leadingTrivia: [],
113+
trailingTrivia: [])
114+
let expr2 = SyntaxFactory.makeIntegerLiteralExpr(digits: token2)
115+
let elements = [SyntaxFactory.makeTupleElement(label: nil,
116+
colon: nil,
117+
expression: expr1,
118+
trailingComma: nil),
119+
SyntaxFactory.makeTupleElement(label: nil,
120+
colon: nil,
121+
expression: expr2,
122+
trailingComma: nil)]
123+
let tuples = SyntaxFactory.makeTupleElementList(elements)
124+
return .init(syntax: tuples,
125+
expectedDumped: """
126+
▿ TupleElementListSyntax
127+
▿ TupleElementSyntax
128+
- label: nil
129+
- colon: nil
130+
▿ expression: IntegerLiteralExprSyntax
131+
▿ digits: TokenSyntax
132+
- text: "1"
133+
▿ leadingTrivia: SwiftSyntax.Trivia
134+
- pieces: 0 elements
135+
▿ trailingTrivia: SwiftSyntax.Trivia
136+
- pieces: 0 elements
137+
▿ tokenKind: SwiftSyntax.TokenKind.integerLiteral
138+
- integerLiteral: "1"
139+
- trailingComma: nil
140+
▿ TupleElementSyntax
141+
- label: nil
142+
- colon: nil
143+
▿ expression: IntegerLiteralExprSyntax
144+
▿ digits: TokenSyntax
145+
- text: "2"
146+
▿ leadingTrivia: SwiftSyntax.Trivia
147+
- pieces: 0 elements
148+
▿ trailingTrivia: SwiftSyntax.Trivia
149+
- pieces: 0 elements
150+
▿ tokenKind: SwiftSyntax.TokenKind.integerLiteral
151+
- integerLiteral: "2"
152+
- trailingComma: nil
153+
154+
""")
155+
}(),
156+
#line: {
157+
let token1 = SyntaxFactory.makeToken(.integerLiteral("1"),
158+
presence: .present,
159+
leadingTrivia: [],
160+
trailingTrivia: [])
161+
let expr1 = SyntaxFactory.makeIntegerLiteralExpr(digits: token1)
162+
let token2 = SyntaxFactory.makeToken(.integerLiteral("2"),
163+
presence: .present,
164+
leadingTrivia: [],
165+
trailingTrivia: [])
166+
let expr2 = SyntaxFactory.makeIntegerLiteralExpr(digits: token2)
167+
let elements = [SyntaxFactory.makeTupleElement(label: nil,
168+
colon: nil,
169+
expression: expr1,
170+
trailingComma: nil),
171+
SyntaxFactory.makeTupleElement(label: nil,
172+
colon: nil,
173+
expression: expr2,
174+
trailingComma: nil)]
175+
let tuples = SyntaxFactory.makeTupleElementList(elements)
176+
return .init(syntax: tuples.reversed(),
177+
expectedDumped: """
178+
▿ SwiftSyntax.TupleElementListSyntax.Reversed
179+
▿ collection: TupleElementListSyntax
180+
▿ TupleElementSyntax
181+
- label: nil
182+
- colon: nil
183+
▿ expression: IntegerLiteralExprSyntax
184+
▿ digits: TokenSyntax
185+
- text: "1"
186+
▿ leadingTrivia: SwiftSyntax.Trivia
187+
- pieces: 0 elements
188+
▿ trailingTrivia: SwiftSyntax.Trivia
189+
- pieces: 0 elements
190+
▿ tokenKind: SwiftSyntax.TokenKind.integerLiteral
191+
- integerLiteral: "1"
192+
- trailingComma: nil
193+
▿ TupleElementSyntax
194+
- label: nil
195+
- colon: nil
196+
▿ expression: IntegerLiteralExprSyntax
197+
▿ digits: TokenSyntax
198+
- text: "2"
199+
▿ leadingTrivia: SwiftSyntax.Trivia
200+
- pieces: 0 elements
201+
▿ trailingTrivia: SwiftSyntax.Trivia
202+
- pieces: 0 elements
203+
▿ tokenKind: SwiftSyntax.TokenKind.integerLiteral
204+
- integerLiteral: "2"
205+
- trailingComma: nil
206+
207+
""")
208+
}(),
209+
]
210+
211+
testCases.forEach { keyAndValue in
212+
let (key: line, value: testCase) = keyAndValue
213+
let actualDumped = dumped(testCase.syntax)
214+
XCTAssertEqual(testCase.expectedDumped, actualDumped, line: line)
215+
}
216+
}
217+
218+
11219
public func testConformanceToCustomReflectable() {
12220
XCTAssertNoThrow(try {
13221
let parsed = try SyntaxParser.parse(getInput("near-empty.swift"))
@@ -49,4 +257,11 @@ public class CustomReflectableTests: XCTestCase {
49257
collectSyntaxNotConformedCustomReflectable(from: value, ancestors: currentPathComponents, foundPaths: &foundPaths)
50258
}
51259
}
260+
261+
262+
public func dumped(_ syntax: Any) -> String {
263+
var result = ""
264+
dump(syntax, to: &result)
265+
return result
266+
}
52267
}

0 commit comments

Comments
 (0)