OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library test.span_test; | 5 library test.span_test; |
6 | 6 |
7 import 'package:unittest/unittest.dart'; | 7 import 'package:unittest/unittest.dart'; |
8 import 'package:source_maps/span.dart'; | 8 import 'package:source_maps/span.dart'; |
9 | 9 |
10 const String TEST_FILE = ''' | 10 const String TEST_FILE = ''' |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 expect(col(i), i - lineOffset, reason: 'position: $i'); | 62 expect(col(i), i - lineOffset, reason: 'position: $i'); |
63 } | 63 } |
64 }); | 64 }); |
65 | 65 |
66 test('get text', () { | 66 test('get text', () { |
67 // fifth line (including 4 new lines), columns 2 .. 11 | 67 // fifth line (including 4 new lines), columns 2 .. 11 |
68 var line = 10 + 80 + 31 + 27 + 4; | 68 var line = 10 + 80 + 31 + 27 + 4; |
69 expect(file.getText(line + 2, line + 11), '34+6789_1'); | 69 expect(file.getText(line + 2, line + 11), '34+6789_1'); |
70 }); | 70 }); |
71 | 71 |
72 test('get location message', () { | 72 group('location message', () { |
73 // fifth line (including 4 new lines), columns 2 .. 11 | 73 test('first line', () { |
74 var line = 10 + 80 + 31 + 27 + 4; | 74 expect(file.getLocationMessage('the message', 1, 3), |
75 expect(file.getLocationMessage('the message', line + 2, line + 11), | 75 'file:1:2: the message\n' |
76 'file:5:3: the message\n' | 76 '+23456789_\n' |
77 '1234+6789_1234\n' | 77 ' ^^'); |
78 ' ^^^^^^^^^'); | 78 }); |
79 }); | |
80 | 79 |
81 test('get location message - no file url', () { | 80 test('in the middle of the file', () { |
82 var line = 10 + 80 + 31 + 27 + 4; | 81 // fifth line (including 4 new lines), columns 2 .. 11 |
83 expect(new SourceFile.text(null, TEST_FILE).getLocationMessage( | 82 var line = 10 + 80 + 31 + 27 + 4; |
84 'the message', line + 2, line + 11), | 83 expect(file.getLocationMessage('the message', line + 2, line + 11), |
85 ':5:3: the message\n' | 84 'file:5:3: the message\n' |
86 '1234+6789_1234\n' | 85 '1234+6789_1234\n' |
87 ' ^^^^^^^^^'); | 86 ' ^^^^^^^^^'); |
| 87 }); |
| 88 |
| 89 test('no file url', () { |
| 90 var line = 10 + 80 + 31 + 27 + 4; |
| 91 expect(new SourceFile.text(null, TEST_FILE).getLocationMessage( |
| 92 'the message', line + 2, line + 11), |
| 93 ':5:3: the message\n' |
| 94 '1234+6789_1234\n' |
| 95 ' ^^^^^^^^^'); |
| 96 }); |
| 97 |
| 98 test('penultimate line', () { |
| 99 // We search '\n' backwards twice because last line is \n terminated: |
| 100 int index = TEST_FILE.lastIndexOf('\n'); |
| 101 var start = TEST_FILE.lastIndexOf('\n', index - 1) - 3; |
| 102 expect(file.getLocationMessage('the message', start, start + 2), |
| 103 'file:11:41: the message\n' |
| 104 '123456789_+23456789_123456789_123456789_123\n' |
| 105 ' ^^'); |
| 106 }); |
| 107 |
| 108 test('last line', () { |
| 109 var start = TEST_FILE.lastIndexOf('\n') - 2; |
| 110 expect(file.getLocationMessage('the message', start, start + 1), |
| 111 'file:12:28: the message\n' |
| 112 '123456789_1+3456789_123456789\n' |
| 113 ' ^'); |
| 114 }); |
| 115 |
| 116 group('no trailing empty-line at the end -', () { |
| 117 var text = TEST_FILE.substring(0, TEST_FILE.length - 1); |
| 118 var file2 = new SourceFile.text('file', text); |
| 119 |
| 120 test('penultimate line', () { |
| 121 var start = text.lastIndexOf('\n') - 3; |
| 122 expect(file2.getLocationMessage('the message', start, start + 2), |
| 123 'file:11:41: the message\n' |
| 124 '123456789_+23456789_123456789_123456789_123\n' |
| 125 ' ^^'); |
| 126 }); |
| 127 |
| 128 test('last line', () { |
| 129 var start = text.length - 2; |
| 130 expect(file2.getLocationMessage('the message', start, start + 1), |
| 131 'file:12:28: the message\n' |
| 132 '123456789_1+3456789_123456789\n' |
| 133 ' ^'); |
| 134 }); |
| 135 }); |
| 136 |
| 137 test('single line', () { |
| 138 var text = "this is a single line"; |
| 139 int start = text.indexOf(' ') + 1; |
| 140 var file2 = new SourceFile.text('file', text); |
| 141 expect(file2.getLocationMessage('the message', start, start + 2), |
| 142 'file:1:${start + 1}: the message\n' |
| 143 'this is a single line\n' |
| 144 ' ^^'); |
| 145 }); |
88 }); | 146 }); |
89 | 147 |
90 test('location getters', () { | 148 test('location getters', () { |
91 expect(loc(8).line, 0); | 149 expect(loc(8).line, 0); |
92 expect(loc(8).column, 8); | 150 expect(loc(8).column, 8); |
93 expect(loc(9).line, 0); | 151 expect(loc(9).line, 0); |
94 expect(loc(9).column, 9); | 152 expect(loc(9).column, 9); |
95 expect(loc(8).formatString, 'file:1:9'); | 153 expect(loc(8).formatString, 'file:1:9'); |
96 expect(loc(12).line, 1); | 154 expect(loc(12).line, 1); |
97 expect(loc(12).column, 1); | 155 expect(loc(12).column, 1); |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 file.getLocationMessage('the message', start, start + 2)); | 293 file.getLocationMessage('the message', start, start + 2)); |
236 }); | 294 }); |
237 | 295 |
238 test('past segment, past its line', () { | 296 test('past segment, past its line', () { |
239 var start = TEST_FILE.length - 2; | 297 var start = TEST_FILE.length - 2; |
240 expect(file.getLocationMessage('the message', start, start + 1), | 298 expect(file.getLocationMessage('the message', start, start + 1), |
241 'file:12:29: the message\n' | 299 'file:12:29: the message\n' |
242 '123456789_1+3456789_123456789\n' | 300 '123456789_1+3456789_123456789\n' |
243 ' ^'); | 301 ' ^'); |
244 | 302 |
245 // TODO(sigmund): consider also fixing this and report file:10:4 | |
246 // The answer below is different because the segment parsing only knows | 303 // The answer below is different because the segment parsing only knows |
247 // about the 10 lines it has (and nothing about the possible extra lines | 304 // about the 10 lines it has (and nothing about the possible extra lines |
248 // afterwards) | 305 // afterwards) |
249 expect(segment.getLocationMessage('the message', start, start + 1), | 306 expect(segment.getLocationMessage('the message', start, start + 1), |
250 'file:10:112: the message\n'); | 307 'file:11:1: the message\n'); |
251 | |
252 // The number 112 includes the count of extra characters past the | |
253 // segment, which we verify here: | |
254 var lastSegmentLineStart = segmentText.lastIndexOf('\n'); | |
255 expect(start - baseOffset - lastSegmentLineStart, 112); | |
256 }); | 308 }); |
257 }); | 309 }); |
258 }); | 310 }); |
259 | 311 |
260 test('span isIdentifier defaults to false', () { | 312 test('span isIdentifier defaults to false', () { |
261 var start = new TestLocation(0); | 313 var start = new TestLocation(0); |
262 var end = new TestLocation(1); | 314 var end = new TestLocation(1); |
263 expect(new TestSpan(start, end).isIdentifier, false); | 315 expect(new TestSpan(start, end).isIdentifier, false); |
264 expect(file.span(8, 9, null).isIdentifier, false); | 316 expect(file.span(8, 9, null).isIdentifier, false); |
265 expect(new FixedSpan('', 8, 1, 8, isIdentifier: null).isIdentifier, false); | 317 expect(new FixedSpan('', 8, 1, 8, isIdentifier: null).isIdentifier, false); |
266 }); | 318 }); |
267 } | 319 } |
268 | 320 |
269 class TestSpan extends Span { | 321 class TestSpan extends Span { |
270 TestSpan(Location start, Location end) : super(start, end, null); | 322 TestSpan(Location start, Location end) : super(start, end, null); |
271 get text => null; | 323 get text => null; |
272 } | 324 } |
273 | 325 |
274 class TestLocation extends Location { | 326 class TestLocation extends Location { |
275 String get sourceUrl => ''; | 327 String get sourceUrl => ''; |
276 TestLocation(int offset) : super(offset); | 328 TestLocation(int offset) : super(offset); |
277 get line => 0; | 329 get line => 0; |
278 get column => 0; | 330 get column => 0; |
279 } | 331 } |
OLD | NEW |