Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: pkg/source_maps/test/span_test.dart

Issue 304603003: Make source map location information more readable. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/source_maps/pubspec.yaml ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 group('location message', () { 72 group('location message', () {
73 test('first line', () { 73 test('first line', () {
74 expect(file.getLocationMessage('the message', 1, 3), 74 expect(file.getLocationMessage('the message', 1, 3),
75 'file:1:2: the message\n' 75 'line 1, column 2 of file: the message\n'
76 '+23456789_\n' 76 '+23456789_\n'
77 ' ^^'); 77 ' ^^');
78 }); 78 });
79 79
80 test('in the middle of the file', () { 80 test('in the middle of the file', () {
81 // fifth line (including 4 new lines), columns 2 .. 11 81 // fifth line (including 4 new lines), columns 2 .. 11
82 var line = 10 + 80 + 31 + 27 + 4; 82 var line = 10 + 80 + 31 + 27 + 4;
83 expect(file.getLocationMessage('the message', line + 2, line + 11), 83 expect(file.getLocationMessage('the message', line + 2, line + 11),
84 'file:5:3: the message\n' 84 'line 5, column 3 of file: the message\n'
85 '1234+6789_1234\n' 85 '1234+6789_1234\n'
86 ' ^^^^^^^^^'); 86 ' ^^^^^^^^^');
87 }); 87 });
88 88
89 test('no file url', () { 89 test('no file url', () {
90 var line = 10 + 80 + 31 + 27 + 4; 90 var line = 10 + 80 + 31 + 27 + 4;
91 expect(new SourceFile.text(null, TEST_FILE).getLocationMessage( 91 expect(new SourceFile.text(null, TEST_FILE).getLocationMessage(
92 'the message', line + 2, line + 11), 92 'the message', line + 2, line + 11),
93 ':5:3: the message\n' 93 'line 5, column 3: the message\n'
94 '1234+6789_1234\n' 94 '1234+6789_1234\n'
95 ' ^^^^^^^^^'); 95 ' ^^^^^^^^^');
96 }); 96 });
97 97
98 test('penultimate line', () { 98 test('penultimate line', () {
99 // We search '\n' backwards twice because last line is \n terminated: 99 // We search '\n' backwards twice because last line is \n terminated:
100 int index = TEST_FILE.lastIndexOf('\n'); 100 int index = TEST_FILE.lastIndexOf('\n');
101 var start = TEST_FILE.lastIndexOf('\n', index - 1) - 3; 101 var start = TEST_FILE.lastIndexOf('\n', index - 1) - 3;
102 expect(file.getLocationMessage('the message', start, start + 2), 102 expect(file.getLocationMessage('the message', start, start + 2),
103 'file:11:41: the message\n' 103 'line 11, column 41 of file: the message\n'
104 '123456789_+23456789_123456789_123456789_123\n' 104 '123456789_+23456789_123456789_123456789_123\n'
105 ' ^^'); 105 ' ^^');
106 }); 106 });
107 107
108 test('last line', () { 108 test('last line', () {
109 var start = TEST_FILE.lastIndexOf('\n') - 2; 109 var start = TEST_FILE.lastIndexOf('\n') - 2;
110 expect(file.getLocationMessage('the message', start, start + 1), 110 expect(file.getLocationMessage('the message', start, start + 1),
111 'file:12:28: the message\n' 111 'line 12, column 28 of file: the message\n'
112 '123456789_1+3456789_123456789\n' 112 '123456789_1+3456789_123456789\n'
113 ' ^'); 113 ' ^');
114 }); 114 });
115 115
116 group('no trailing empty-line at the end -', () { 116 group('no trailing empty-line at the end -', () {
117 var text = TEST_FILE.substring(0, TEST_FILE.length - 1); 117 var text = TEST_FILE.substring(0, TEST_FILE.length - 1);
118 var file2 = new SourceFile.text('file', text); 118 var file2 = new SourceFile.text('file', text);
119 119
120 test('penultimate line', () { 120 test('penultimate line', () {
121 var start = text.lastIndexOf('\n') - 3; 121 var start = text.lastIndexOf('\n') - 3;
122 expect(file2.getLocationMessage('the message', start, start + 2), 122 expect(file2.getLocationMessage('the message', start, start + 2),
123 'file:11:41: the message\n' 123 'line 11, column 41 of file: the message\n'
124 '123456789_+23456789_123456789_123456789_123\n' 124 '123456789_+23456789_123456789_123456789_123\n'
125 ' ^^'); 125 ' ^^');
126 }); 126 });
127 127
128 test('last line', () { 128 test('last line', () {
129 var start = text.length - 2; 129 var start = text.length - 2;
130 expect(file2.getLocationMessage('the message', start, start + 1), 130 expect(file2.getLocationMessage('the message', start, start + 1),
131 'file:12:28: the message\n' 131 'line 12, column 28 of file: the message\n'
132 '123456789_1+3456789_123456789\n' 132 '123456789_1+3456789_123456789\n'
133 ' ^'); 133 ' ^');
134 }); 134 });
135 }); 135 });
136 136
137 test('single line', () { 137 test('single line', () {
138 var text = "this is a single line"; 138 var text = "this is a single line";
139 int start = text.indexOf(' ') + 1; 139 int start = text.indexOf(' ') + 1;
140 var file2 = new SourceFile.text('file', text); 140 var file2 = new SourceFile.text('file', text);
141 expect(file2.getLocationMessage('the message', start, start + 2), 141 expect(file2.getLocationMessage('the message', start, start + 2),
142 'file:1:${start + 1}: the message\n' 142 'line 1, column ${start + 1} of file: the message\n'
143 'this is a single line\n' 143 'this is a single line\n'
144 ' ^^'); 144 ' ^^');
145 }); 145 });
146 }); 146 });
147 147
148 test('location getters', () { 148 test('location getters', () {
149 expect(loc(8).line, 0); 149 expect(loc(8).line, 0);
150 expect(loc(8).column, 8); 150 expect(loc(8).column, 8);
151 expect(loc(9).line, 0); 151 expect(loc(9).line, 0);
152 expect(loc(9).column, 9); 152 expect(loc(9).column, 9);
(...skipping 18 matching lines...) Expand all
171 expect(span(8, 9).start.line, 0); 171 expect(span(8, 9).start.line, 0);
172 expect(span(8, 9).start.column, 8); 172 expect(span(8, 9).start.column, 8);
173 expect(span(8, 9).end.line, 0); 173 expect(span(8, 9).end.line, 0);
174 expect(span(8, 9).end.column, 9); 174 expect(span(8, 9).end.column, 9);
175 expect(span(8, 9).text, '9'); 175 expect(span(8, 9).text, '9');
176 expect(span(8, 9).isIdentifier, false); 176 expect(span(8, 9).isIdentifier, false);
177 expect(span(8, 9).formatLocation, 'file:1:9'); 177 expect(span(8, 9).formatLocation, 'file:1:9');
178 178
179 var line = 10 + 80 + 31 + 27 + 4; 179 var line = 10 + 80 + 31 + 27 + 4;
180 expect(span(line + 2, line + 11).getLocationMessage('the message'), 180 expect(span(line + 2, line + 11).getLocationMessage('the message'),
181 'file:5:3: the message\n' 181 'line 5, column 3 of file: the message\n'
182 '1234+6789_1234\n' 182 '1234+6789_1234\n'
183 ' ^^^^^^^^^'); 183 ' ^^^^^^^^^');
184 184
185 expect(span(12, 95).start.line, 1); 185 expect(span(12, 95).start.line, 1);
186 expect(span(12, 95).start.column, 1); 186 expect(span(12, 95).start.column, 1);
187 expect(span(12, 95).end.line, 2); 187 expect(span(12, 95).end.line, 2);
188 expect(span(12, 95).end.column, 3); 188 expect(span(12, 95).end.column, 3);
189 expect(span(12, 95).text, 189 expect(span(12, 95).text,
190 '+ _123456789_123456789_123456789_123456789_123456789_1234567' 190 '+ _123456789_123456789_123456789_123456789_123456789_1234567'
191 '89_123456789_\n +'); 191 '89_123456789_\n +');
(...skipping 27 matching lines...) Expand all
219 expect(span.end.offset, greaterThanOrEqualTo(lastEnd)); 219 expect(span.end.offset, greaterThanOrEqualTo(lastEnd));
220 } 220 }
221 lastStart = span.start.offset; 221 lastStart = span.start.offset;
222 lastEnd = span.end.offset; 222 lastEnd = span.end.offset;
223 } 223 }
224 }); 224 });
225 225
226 test('range check for large offsets', () { 226 test('range check for large offsets', () {
227 var start = TEST_FILE.length; 227 var start = TEST_FILE.length;
228 expect(file.getLocationMessage('the message', start, start + 9), 228 expect(file.getLocationMessage('the message', start, start + 9),
229 'file:13:1: the message\n'); 229 'line 13, column 1 of file: the message\n');
230 }); 230 });
231 231
232 group('file segment', () { 232 group('file segment', () {
233 var baseOffset = 123; 233 var baseOffset = 123;
234 var segmentText = TEST_FILE.substring(baseOffset, TEST_FILE.length - 100); 234 var segmentText = TEST_FILE.substring(baseOffset, TEST_FILE.length - 100);
235 var segment = new SourceFileSegment('file', segmentText, loc(baseOffset)); 235 var segment = new SourceFileSegment('file', segmentText, loc(baseOffset));
236 sline(int n) => segment.getLine(n); 236 sline(int n) => segment.getLine(n);
237 scol(int n) => segment.getColumn(segment.getLine(n), n); 237 scol(int n) => segment.getColumn(segment.getLine(n), n);
238 line(int n) => file.getLine(n); 238 line(int n) => file.getLine(n);
239 col(int n) => file.getColumn(file.getLine(n), n); 239 col(int n) => file.getColumn(file.getLine(n), n);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 file.getLocationMessage('the message', start, start + 2)); 289 file.getLocationMessage('the message', start, start + 2));
290 290
291 start = segmentText.length + 20; 291 start = segmentText.length + 20;
292 expect(segment.getLocationMessage('the message', start, start + 2), 292 expect(segment.getLocationMessage('the message', start, start + 2),
293 file.getLocationMessage('the message', start, start + 2)); 293 file.getLocationMessage('the message', start, start + 2));
294 }); 294 });
295 295
296 test('past segment, past its line', () { 296 test('past segment, past its line', () {
297 var start = TEST_FILE.length - 2; 297 var start = TEST_FILE.length - 2;
298 expect(file.getLocationMessage('the message', start, start + 1), 298 expect(file.getLocationMessage('the message', start, start + 1),
299 'file:12:29: the message\n' 299 'line 12, column 29 of file: the message\n'
300 '123456789_1+3456789_123456789\n' 300 '123456789_1+3456789_123456789\n'
301 ' ^'); 301 ' ^');
302 302
303 // The answer below is different because the segment parsing only knows 303 // The answer below is different because the segment parsing only knows
304 // 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
305 // afterwards) 305 // afterwards)
306 expect(segment.getLocationMessage('the message', start, start + 1), 306 expect(segment.getLocationMessage('the message', start, start + 1),
307 'file:11:1: the message\n'); 307 'line 11, column 1 of file: the message\n');
308 }); 308 });
309 }); 309 });
310 }); 310 });
311 311
312 test('span isIdentifier defaults to false', () { 312 test('span isIdentifier defaults to false', () {
313 var start = new TestLocation(0); 313 var start = new TestLocation(0);
314 var end = new TestLocation(1); 314 var end = new TestLocation(1);
315 expect(new TestSpan(start, end).isIdentifier, false); 315 expect(new TestSpan(start, end).isIdentifier, false);
316 expect(file.span(8, 9, null).isIdentifier, false); 316 expect(file.span(8, 9, null).isIdentifier, false);
317 expect(new FixedSpan('', 8, 1, 8, isIdentifier: null).isIdentifier, false); 317 expect(new FixedSpan('', 8, 1, 8, isIdentifier: null).isIdentifier, false);
(...skipping 14 matching lines...) Expand all
332 TestSpan(Location start, Location end) : super(start, end, null); 332 TestSpan(Location start, Location end) : super(start, end, null);
333 get text => null; 333 get text => null;
334 } 334 }
335 335
336 class TestLocation extends Location { 336 class TestLocation extends Location {
337 String get sourceUrl => ''; 337 String get sourceUrl => '';
338 TestLocation(int offset) : super(offset); 338 TestLocation(int offset) : super(offset);
339 get line => 0; 339 get line => 0;
340 get column => 0; 340 get column => 0;
341 } 341 }
OLDNEW
« no previous file with comments | « pkg/source_maps/pubspec.yaml ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698