@@ -19,6 +19,7 @@ public class AbsolutePositionTestCase: XCTestCase {
19
19
( " testTrivias " , testTrivias) ,
20
20
( " testImplicit " , testImplicit) ,
21
21
( " testWithoutSourceFileRoot " , testWithoutSourceFileRoot) ,
22
+ ( " testSourceLocation " , testSourceLocation) ,
22
23
]
23
24
24
25
public func testVisitor( ) {
@@ -139,4 +140,29 @@ public class AbsolutePositionTestCase: XCTestCase {
139
140
XCTAssertEqual ( 0 , item. position. utf8Offset)
140
141
XCTAssertEqual ( 1 , item. positionAfterSkippingLeadingTrivia. utf8Offset)
141
142
}
143
+
144
+ public func testSourceLocation( ) {
145
+ let url = URL ( fileURLWithPath: " /tmp/test.swift " )
146
+ let root = self . createSourceFile ( 2 )
147
+ guard let secondReturnStmt = root. child ( at: 0 ) ? . child ( at: 1 ) else {
148
+ fatalError ( " out of sync with createSourceFile " )
149
+ }
150
+ let startLoc = secondReturnStmt. startLocation ( in: url)
151
+ XCTAssertEqual ( startLoc. line, 4 )
152
+ XCTAssertEqual ( startLoc. column, 18 )
153
+
154
+ let startLocBeforeTrivia =
155
+ secondReturnStmt. startLocation ( in: url, afterLeadingTrivia: false )
156
+ XCTAssertEqual ( startLocBeforeTrivia. line, 3 )
157
+ XCTAssertEqual ( startLocBeforeTrivia. column, 1 )
158
+
159
+ let endLoc = secondReturnStmt. endLocation ( in: url)
160
+ XCTAssertEqual ( endLoc. line, 4 )
161
+ XCTAssertEqual ( endLoc. column, 24 )
162
+
163
+ let endLocAfterTrivia =
164
+ secondReturnStmt. endLocation ( in: url, afterTrailingTrivia: true )
165
+ XCTAssertEqual ( endLocAfterTrivia. line, 5 )
166
+ XCTAssertEqual ( endLocAfterTrivia. column, 1 )
167
+ }
142
168
}
0 commit comments