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