@@ -121,4 +121,56 @@ public class ClassificationTests: XCTestCase {
121
121
XCTAssertEqual ( classif. kind, . typeIdentifier)
122
122
}
123
123
}
124
+
125
+ public func testOperatorTokenClassification( ) {
126
+ do {
127
+ let source = " let x: Int = 4 + 5 / 6 "
128
+ let tree = Parser . parse ( source: source)
129
+
130
+ let tokens = Array ( tree. tokens ( viewMode: . sourceAccurate) )
131
+ XCTAssertEqual ( tokens. count, 10 )
132
+ guard tokens. count == 10 else {
133
+ return
134
+ }
135
+ let classif = tokens. map { $0. tokenClassification }
136
+ XCTAssertEqual ( classif [ 0 ] . kind, . keyword)
137
+ XCTAssertEqual ( classif [ 0 ] . range, ByteSourceRange ( offset: 0 , length: 3 ) )
138
+ XCTAssertEqual ( classif [ 1 ] . kind, . identifier)
139
+ XCTAssertEqual ( classif [ 1 ] . range, ByteSourceRange ( offset: 4 , length: 1 ) )
140
+ XCTAssertEqual ( classif [ 2 ] . kind, . none)
141
+ XCTAssertEqual ( classif [ 2 ] . range, ByteSourceRange ( offset: 5 , length: 1 ) )
142
+ XCTAssertEqual ( classif [ 3 ] . kind, . typeIdentifier)
143
+ XCTAssertEqual ( classif [ 3 ] . range, ByteSourceRange ( offset: 7 , length: 3 ) )
144
+ XCTAssertEqual ( classif [ 4 ] . kind, . none)
145
+ XCTAssertEqual ( classif [ 4 ] . range, ByteSourceRange ( offset: 11 , length: 1 ) )
146
+ XCTAssertEqual ( classif [ 5 ] . kind, . integerLiteral)
147
+ XCTAssertEqual ( classif [ 5 ] . range, ByteSourceRange ( offset: 13 , length: 1 ) )
148
+ XCTAssertEqual ( classif [ 6 ] . kind, . operatorIdentifier)
149
+ XCTAssertEqual ( classif [ 6 ] . range, ByteSourceRange ( offset: 15 , length: 1 ) )
150
+ XCTAssertEqual ( classif [ 7 ] . kind, . integerLiteral)
151
+ XCTAssertEqual ( classif [ 7 ] . range, ByteSourceRange ( offset: 17 , length: 1 ) )
152
+ XCTAssertEqual ( classif [ 8 ] . kind, . operatorIdentifier)
153
+ XCTAssertEqual ( classif [ 8 ] . range, ByteSourceRange ( offset: 19 , length: 1 ) )
154
+ XCTAssertEqual ( classif [ 9 ] . kind, . integerLiteral)
155
+ XCTAssertEqual ( classif [ 9 ] . range, ByteSourceRange ( offset: 21 , length: 1 ) )
156
+ }
157
+
158
+ do {
159
+ let source = " infix operator *--* "
160
+ let tree = Parser . parse ( source: source)
161
+
162
+ let tokens = Array ( tree. tokens ( viewMode: . sourceAccurate) )
163
+ XCTAssertEqual ( tokens. count, 3 )
164
+ guard tokens. count == 3 else {
165
+ return
166
+ }
167
+ let classif = tokens. map { $0. tokenClassification }
168
+ XCTAssertEqual ( classif [ 0 ] . kind, . keyword)
169
+ XCTAssertEqual ( classif [ 0 ] . range, ByteSourceRange ( offset: 0 , length: 5 ) )
170
+ XCTAssertEqual ( classif [ 1 ] . kind, . keyword)
171
+ XCTAssertEqual ( classif [ 1 ] . range, ByteSourceRange ( offset: 6 , length: 8 ) )
172
+ XCTAssertEqual ( classif [ 2 ] . kind, . operatorIdentifier)
173
+ XCTAssertEqual ( classif [ 2 ] . range, ByteSourceRange ( offset: 15 , length: 4 ) )
174
+ }
175
+ }
124
176
}
0 commit comments