Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 library string_scanner.line_scanner_test; | |
| 6 | |
| 7 import 'package:string_scanner/string_scanner.dart'; | |
| 8 import 'package:unittest/unittest.dart'; | |
| 9 | |
| 10 void main() { | |
| 11 var scanner; | |
| 12 setUp(() { | |
| 13 scanner = new LineScanner('foo\nbar\nbaz'); | |
| 14 }); | |
| 15 | |
| 16 test('begins with line and column 0', () { | |
| 17 expect(scanner.line, equals(0)); | |
| 18 expect(scanner.column, equals(0)); | |
| 19 }); | |
| 20 | |
| 21 group("scan()", () { | |
| 22 test("consuming no newlines increases the column but not the line", () { | |
| 23 scanner.scan('foo'); | |
| 24 expect(scanner.line, equals(0)); | |
| 25 expect(scanner.column, equals(3)); | |
| 26 }); | |
| 27 | |
| 28 test("consuming a newline resets the column and increases the line", () { | |
| 29 scanner.expect('foo\nba'); | |
| 30 expect(scanner.line, equals(1)); | |
| 31 expect(scanner.column, equals(2)); | |
| 32 }); | |
| 33 | |
| 34 test("consuming multiple newlines resets the column and increases the line", | |
| 35 () { | |
| 36 scanner.expect('foo\nbar\nb'); | |
| 37 expect(scanner.line, equals(2)); | |
| 38 expect(scanner.column, equals(1)); | |
| 39 }); | |
| 40 }); | |
| 41 | |
| 42 group("readChar()", () { | |
| 43 test("on a non-newline character increases the column but not the line", | |
| 44 () { | |
| 45 scanner.readChar(); | |
| 46 expect(scanner.line, equals(0)); | |
| 47 expect(scanner.column, equals(1)); | |
| 48 }); | |
| 49 | |
| 50 test("consuming a newline resets the column and increases the line", () { | |
| 51 scanner.expect('foo'); | |
| 52 expect(scanner.line, equals(0)); | |
| 53 expect(scanner.column, equals(3)); | |
| 54 | |
| 55 scanner.readChar(); | |
| 56 expect(scanner.line, equals(1)); | |
| 57 expect(scanner.column, equals(0)); | |
| 58 }); | |
| 59 }); | |
| 60 | |
| 61 group("position=", () { | |
| 62 test("forward through newlines sets the line and column", () { | |
| 63 scanner.position = 9; // "foo\nbar\nb" | |
| 64 expect(scanner.line, equals(2)); | |
| 65 expect(scanner.column, equals(1)); | |
| 66 }); | |
| 67 | |
| 68 test("forward through no newlines sets the column", () { | |
| 69 scanner.position = 2; // "fo" | |
| 70 expect(scanner.line, equals(0)); | |
| 71 expect(scanner.column, equals(2)); | |
| 72 }); | |
| 73 | |
| 74 test("backward through newlines sets the line and column", () { | |
| 75 scanner.scan("foo\nbar\nbaz"); | |
| 76 scanner.position = 2; // "fo" | |
| 77 expect(scanner.line, equals(0)); | |
| 78 expect(scanner.column, equals(2)); | |
| 79 }); | |
| 80 | |
| 81 test("backard through no newlines sets the column", () { | |
|
Bob Nystrom
2014/05/28 21:28:57
"backward"
nweiz
2014/05/28 23:56:34
Done.
| |
| 82 scanner.scan("foo\nbar\nbaz"); | |
| 83 scanner.position = 9; // "foo\nbar\nb" | |
| 84 expect(scanner.line, equals(2)); | |
| 85 expect(scanner.column, equals(1)); | |
| 86 }); | |
| 87 }); | |
| 88 | |
| 89 test("state= restores the line, column, and position", () { | |
| 90 scanner.scan('foo\nb'); | |
| 91 var state = scanner.state; | |
| 92 | |
| 93 scanner.scan('ar\nba'); | |
| 94 scanner.state = state; | |
| 95 expect(scanner.rest, equals('ar\nbaz')); | |
| 96 expect(scanner.line, equals(1)); | |
| 97 expect(scanner.column, equals(1)); | |
| 98 }); | |
| 99 | |
| 100 test("state= rejects a foreign state", () { | |
| 101 scanner.scan('foo\nb'); | |
| 102 | |
| 103 expect(() => new LineScanner(scanner.string).state = scanner.state, | |
| 104 throwsArgumentError); | |
| 105 }); | |
| 106 } | |
| OLD | NEW |