@@ -4,10 +4,218 @@ import SwiftSyntax
4
4
5
5
public class CustomReflectableTests : XCTestCase {
6
6
public static let allTests = [
7
+ ( " testDump " , testDump) ,
7
8
( " testConformanceToCustomReflectable " , testConformanceToCustomReflectable) ,
8
9
]
9
10
10
11
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
+
11
219
public func testConformanceToCustomReflectable( ) {
12
220
XCTAssertNoThrow ( try {
13
221
let parsed = try SyntaxParser . parse ( getInput ( " near-empty.swift " ) )
@@ -49,4 +257,11 @@ public class CustomReflectableTests: XCTestCase {
49
257
collectSyntaxNotConformedCustomReflectable ( from: value, ancestors: currentPathComponents, foundPaths: & foundPaths)
50
258
}
51
259
}
260
+
261
+
262
+ public func dumped( _ syntax: Any ) -> String {
263
+ var result = " "
264
+ dump ( syntax, to: & result)
265
+ return result
266
+ }
52
267
}
0 commit comments