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

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

Issue 12207008: Move source maps package to the dart repo, so it can be used by other internal (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: updates Created 7 years, 9 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/test/run.dart ('k') | pkg/source_maps/test/utils_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library test.span_test;
6
7 import 'package:unittest/unittest.dart';
8 import 'package:source_maps/span.dart';
9
10 const String TEST_FILE = '''
11 +23456789_
12 + _123456789_123456789_123456789_123456789_123456789_123456789_123456789_
13 + _123456789_1
14 123+56789_123456789_1234567
15 1234+6789_1234
16 12345+789_123456789_12345
17 123456+89_123456789_123456789_123456789_123456789_123456789_123456789_123456789
18 1234567+9_123456789_123456789_123456789_123456789_123456789_123456789_123
19 12345678+_123456789_123456789_123456789_123456789_1
20 123456789+123456789_123456789_12345678
21 123456789_+23456789_123456789_123456789_123
22 123456789_1+3456789_123456789
23 ''';
24
25 List<int> newLines = TEST_FILE.split('\n').map((s) => s.length).toList();
26
27 main() {
28 var file = new SourceFile.text('file', TEST_FILE);
29 span(int start, int end) => file.span(start, end);
30 loc(int offset) => file.location(offset);
31
32 test('validate test input', () {
33 expect(newLines,
34 const [10, 80, 31, 27, 14, 25, 79, 73, 51, 38, 43, 29, 0]);
35 });
36
37 test('get line and column', () {
38 line(int n) => file.getLine(n);
39 col(int n) => file.getColumn(file.getLine(n), n);
40
41 expect(line(8), 0);
42 expect(line(10), 0);
43 expect(line(11), 1);
44 expect(line(12), 1);
45 expect(line(91), 1);
46 expect(line(92), 2);
47 expect(line(93), 2);
48 expect(col(11), 0);
49 expect(col(12), 1);
50 expect(col(91), 80);
51 expect(col(92), 0);
52 expect(col(93), 1);
53
54 int j = 0;
55 int lineOffset = 0;
56 for (int i = 0; i < TEST_FILE.length; i++) {
57 if (i > lineOffset + newLines[j]) {
58 lineOffset += newLines[j] + 1;
59 j++;
60 }
61 expect(line(i), j, reason: 'position: $i');
62 expect(col(i), i - lineOffset, reason: 'position: $i');
63 }
64 });
65
66 test('get text', () {
67 // fifth line (including 4 new lines), columns 2 .. 11
68 var line = 10 + 80 + 31 + 27 + 4;
69 expect(file.getText(line + 2, line + 11), '34+6789_1');
70 });
71
72 test('get location message', () {
73 // fifth line (including 4 new lines), columns 2 .. 11
74 var line = 10 + 80 + 31 + 27 + 4;
75 expect(file.getLocationMessage('the message', line + 2, line + 11),
76 'file:5:3: the message\n'
77 '1234+6789_1234\n'
78 ' ^^^^^^^^^');
79 });
80
81 test('get location message - no file url', () {
82 var line = 10 + 80 + 31 + 27 + 4;
83 expect(new SourceFile.text(null, TEST_FILE).getLocationMessage(
84 'the message', line + 2, line + 11),
85 ':5:3: the message\n'
86 '1234+6789_1234\n'
87 ' ^^^^^^^^^');
88 });
89
90 test('location getters', () {
91 expect(loc(8).line, 0);
92 expect(loc(8).column, 8);
93 expect(loc(9).line, 0);
94 expect(loc(9).column, 9);
95 expect(loc(8).formatString, 'file:1:9');
96 expect(loc(12).line, 1);
97 expect(loc(12).column, 1);
98 expect(loc(95).line, 2);
99 expect(loc(95).column, 3);
100 });
101
102 test('location compare', () {
103 var list = [9, 8, 11, 14, 6, 6, 1, 1].map((n) => loc(n)).toList();
104 list.sort();
105 var lastOffset = 0;
106 for (var location in list) {
107 expect(location.offset, greaterThanOrEqualTo(lastOffset));
108 lastOffset = location.offset;
109 }
110 });
111
112 test('span getters', () {
113 expect(span(8, 9).start.line, 0);
114 expect(span(8, 9).start.column, 8);
115 expect(span(8, 9).end.line, 0);
116 expect(span(8, 9).end.column, 9);
117 expect(span(8, 9).text, '9');
118 expect(span(8, 9).isIdentifier, false);
119 expect(span(8, 9).formatLocation, 'file:1:9');
120
121 var line = 10 + 80 + 31 + 27 + 4;
122 expect(span(line + 2, line + 11).getLocationMessage('the message'),
123 'file:5:3: the message\n'
124 '1234+6789_1234\n'
125 ' ^^^^^^^^^');
126
127 expect(span(12, 95).start.line, 1);
128 expect(span(12, 95).start.column, 1);
129 expect(span(12, 95).end.line, 2);
130 expect(span(12, 95).end.column, 3);
131 expect(span(12, 95).text,
132 '+ _123456789_123456789_123456789_123456789_123456789_1234567'
133 '89_123456789_\n +');
134 expect(span(12, 95).formatLocation, 'file:2:2');
135 });
136
137 test('span union', () {
138 var union = new FileSpan.union(span(8, 9), span(12, 95));
139 expect(union.start.offset, 8);
140 expect(union.start.line, 0);
141 expect(union.start.column, 8);
142 expect(union.end.offset, 95);
143 expect(union.end.line, 2);
144 expect(union.end.column, 3);
145 expect(union.text,
146 '9_\n'
147 ' + _123456789_123456789_123456789_123456789_123456789_'
148 '123456789_123456789_\n +');
149 expect(union.formatLocation, 'file:1:9');
150 });
151
152 test('span compare', () {
153 var list = [span(9, 10), span(8, 9), span(11, 12), span(14, 19),
154 span(6, 12), span(6, 8), span(1, 9), span(1, 2)];
155 list.sort();
156 var lastStart = 0;
157 var lastEnd = 0;
158 for (var span in list) {
159 expect(span.start.offset, greaterThanOrEqualTo(lastStart));
160 if (span.start.offset == lastStart) {
161 expect(span.end.offset, greaterThanOrEqualTo(lastEnd));
162 }
163 lastStart = span.start.offset;
164 lastEnd = span.end.offset;
165 }
166 });
167
168 test('file segment', () {
169 var segment = new SourceFileSegment('file',
170 TEST_FILE.substring(12), loc(12));
171 sline(int n) => segment.getLine(n);
172 scol(int n) => segment.getColumn(segment.getLine(n), n);
173
174 line(int n) => file.getLine(n);
175 col(int n) => file.getColumn(file.getLine(n), n);
176
177 int j = 0;
178 int lineOffset = 0;
179 for (int i = 12; i < TEST_FILE.length; i++) {
180 if (i > lineOffset + newLines[j]) {
181 lineOffset += newLines[j] + 1;
182 j++;
183 }
184 expect(segment.location(i - 12).offset, i);
185 expect(segment.location(i - 12).line, line(i));
186 expect(segment.location(i - 12).column, col(i));
187 expect(segment.span(i - 12).start.offset, i);
188 expect(segment.span(i - 12).start.line, line(i));
189 expect(segment.span(i - 12).start.column, col(i));
190
191 expect(sline(i), line(i));
192 expect(scol(i), col(i));
193 }
194 });
195
196 test('span isIdentifier defaults to false', () {
197 var start = new TestLocation(0);
198 var end = new TestLocation(1);
199 expect(new TestSpan(start, end).isIdentifier, false);
200 expect(file.span(8, 9, null).isIdentifier, false);
201 expect(new FixedSpan('', 8, 1, 8, isIdentifier: null).isIdentifier, false);
202 });
203 }
204
205 class TestSpan extends Span {
206 TestSpan(Location start, Location end) : super(start, end, null);
207 get text => null;
208 }
209
210 class TestLocation extends Location {
211 String get sourceUrl => '';
212 TestLocation(int offset) : super(offset);
213 get line => 0;
214 get column => 0;
215 }
OLDNEW
« no previous file with comments | « pkg/source_maps/test/run.dart ('k') | pkg/source_maps/test/utils_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698