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

Side by Side Diff: packages/string_scanner/test/span_scanner_test.dart

Issue 2989763002: Update charted to 0.4.8 and roll (Closed)
Patch Set: Removed Cutch from list of reviewers Created 3 years, 4 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
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 string_scanner.span_scanner_test; 5 import 'package:source_span/source_span.dart';
6
7 import 'package:string_scanner/string_scanner.dart'; 6 import 'package:string_scanner/string_scanner.dart';
8 import 'package:test/test.dart'; 7 import 'package:test/test.dart';
9 8
9 import 'utils.dart';
10
10 void main() { 11 void main() {
11 testForImplementation("lazy", () { 12 testForImplementation("lazy", ([string]) {
12 return new SpanScanner('foo\nbar\nbaz', sourceUrl: 'source'); 13 return new SpanScanner(string ?? 'foo\nbar\nbaz', sourceUrl: 'source');
13 }); 14 });
14 15
15 testForImplementation("eager", () { 16 testForImplementation("eager", ([string]) {
16 return new SpanScanner.eager('foo\nbar\nbaz', sourceUrl: 'source'); 17 return new SpanScanner.eager(string ?? 'foo\nbar\nbaz',
18 sourceUrl: 'source');
19 });
20
21 group("within", () {
22 var text = 'first\nbefore: foo\nbar\nbaz :after\nlast';
23 var startOffset = text.indexOf('foo');
24
25 var scanner;
26 setUp(() {
27 var file = new SourceFile.fromString(text, url: 'source');
28 scanner = new SpanScanner.within(
29 file.span(startOffset, text.indexOf(' :after')));
30 });
31
32 test("string only includes the span text", () {
33 expect(scanner.string, equals("foo\nbar\nbaz"));
34 });
35
36 test("line and column are span-relative", () {
37 expect(scanner.line, equals(0));
38 expect(scanner.column, equals(0));
39
40 scanner.scan("foo");
41 expect(scanner.line, equals(0));
42 expect(scanner.column, equals(3));
43
44 scanner.scan("\n");
45 expect(scanner.line, equals(1));
46 expect(scanner.column, equals(0));
47 });
48
49 test("tracks the span for the last match", () {
50 scanner.scan('fo');
51 scanner.scan('o\nba');
52
53 var span = scanner.lastSpan;
54 expect(span.start.offset, equals(startOffset + 2));
55 expect(span.start.line, equals(1));
56 expect(span.start.column, equals(10));
57 expect(span.start.sourceUrl, equals(Uri.parse('source')));
58
59 expect(span.end.offset, equals(startOffset + 6));
60 expect(span.end.line, equals(2));
61 expect(span.end.column, equals(2));
62 expect(span.start.sourceUrl, equals(Uri.parse('source')));
63
64 expect(span.text, equals('o\nba'));
65 });
66
67 test(".spanFrom() returns a span from a previous state", () {
68 scanner.scan('fo');
69 var state = scanner.state;
70 scanner.scan('o\nba');
71 scanner.scan('r\nba');
72
73 var span = scanner.spanFrom(state);
74 expect(span.text, equals('o\nbar\nba'));
75 });
76
77 test(".emptySpan returns an empty span at the current location", () {
78 scanner.scan('foo\nba');
79
80 var span = scanner.emptySpan;
81 expect(span.start.offset, equals(startOffset + 6));
82 expect(span.start.line, equals(2));
83 expect(span.start.column, equals(2));
84 expect(span.start.sourceUrl, equals(Uri.parse('source')));
85
86 expect(span.end.offset, equals(startOffset + 6));
87 expect(span.end.line, equals(2));
88 expect(span.end.column, equals(2));
89 expect(span.start.sourceUrl, equals(Uri.parse('source')));
90
91 expect(span.text, equals(''));
92 });
93
94 test(".error() uses an absolute span", () {
95 scanner.expect("foo");
96 expect(() => scanner.error('oh no!'),
97 throwsStringScannerException("foo"));
98 });
99
100 test(".isDone returns true at the end of the span", () {
101 scanner.expect("foo\nbar\nbaz");
102 expect(scanner.isDone, isTrue);
103 });
17 }); 104 });
18 } 105 }
19 106
20 void testForImplementation(String name, SpanScanner create()) { 107 void testForImplementation(String name, SpanScanner create()) {
21 group("for a $name scanner", () { 108 group("for a $name scanner", () {
22 var scanner; 109 var scanner;
23 setUp(() => scanner = create()); 110 setUp(() => scanner = create());
24 111
25 test("tracks the span for the last match", () { 112 test("tracks the span for the last match", () {
26 scanner.scan('fo'); 113 scanner.scan('fo');
(...skipping 16 matching lines...) Expand all
43 test(".spanFrom() returns a span from a previous state", () { 130 test(".spanFrom() returns a span from a previous state", () {
44 scanner.scan('fo'); 131 scanner.scan('fo');
45 var state = scanner.state; 132 var state = scanner.state;
46 scanner.scan('o\nba'); 133 scanner.scan('o\nba');
47 scanner.scan('r\nba'); 134 scanner.scan('r\nba');
48 135
49 var span = scanner.spanFrom(state); 136 var span = scanner.spanFrom(state);
50 expect(span.text, equals('o\nbar\nba')); 137 expect(span.text, equals('o\nbar\nba'));
51 }); 138 });
52 139
140 test(".spanFrom() handles surrogate pairs correctly", () {
141 scanner = create('fo\u{12345}o');
142 scanner.scan('fo');
143 var state = scanner.state;
144 scanner.scan('\u{12345}o');
145 var span = scanner.spanFrom(state);
146 expect(span.text, equals('\u{12345}o'));
147 });
148
53 test(".emptySpan returns an empty span at the current location", () { 149 test(".emptySpan returns an empty span at the current location", () {
54 scanner.scan('foo\nba'); 150 scanner.scan('foo\nba');
55 151
56 var span = scanner.emptySpan; 152 var span = scanner.emptySpan;
57 expect(span.start.offset, equals(6)); 153 expect(span.start.offset, equals(6));
58 expect(span.start.line, equals(1)); 154 expect(span.start.line, equals(1));
59 expect(span.start.column, equals(2)); 155 expect(span.start.column, equals(2));
60 expect(span.start.sourceUrl, equals(Uri.parse('source'))); 156 expect(span.start.sourceUrl, equals(Uri.parse('source')));
61 157
62 expect(span.end.offset, equals(6)); 158 expect(span.end.offset, equals(6));
63 expect(span.end.line, equals(1)); 159 expect(span.end.line, equals(1));
64 expect(span.end.column, equals(2)); 160 expect(span.end.column, equals(2));
65 expect(span.start.sourceUrl, equals(Uri.parse('source'))); 161 expect(span.start.sourceUrl, equals(Uri.parse('source')));
66 162
67 expect(span.text, equals('')); 163 expect(span.text, equals(''));
68 }); 164 });
69 }); 165 });
70 } 166 }
OLDNEW
« no previous file with comments | « packages/string_scanner/test/line_scanner_test.dart ('k') | packages/string_scanner/test/string_scanner_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698