Index: pkg/string_scanner/test/error_format_test.dart |
diff --git a/pkg/string_scanner/test/error_format_test.dart b/pkg/string_scanner/test/error_format_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..11873440050265c107d10b6b5ccec2130e3c5379 |
--- /dev/null |
+++ b/pkg/string_scanner/test/error_format_test.dart |
@@ -0,0 +1,110 @@ |
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library string_scanner.error_format_test; |
+ |
+import 'package:string_scanner/string_scanner.dart'; |
+import 'package:unittest/unittest.dart'; |
+ |
+void main() { |
+ test('points to the first unconsumed character', () { |
+ var scanner = new StringScanner('foo bar baz'); |
+ scanner.expect('foo '); |
+ expect(() => scanner.expect('foo'), throwsFormattedError(''' |
+Expected "foo" on line 1, column 5. |
+foo bar baz |
+ ^''')); |
+ }); |
+ |
+ test('prints the correct line', () { |
+ var scanner = new StringScanner('foo bar baz\ndo re mi\nearth fire water'); |
+ scanner.expect('foo bar baz\ndo '); |
+ expect(() => scanner.expect('foo'), throwsFormattedError(''' |
+Expected "foo" on line 2, column 4. |
+do re mi |
+ ^''')); |
+ }); |
+ |
+ test('handles the beginning of the string correctly', () { |
+ var scanner = new StringScanner('foo bar baz'); |
+ expect(() => scanner.expect('zap'), throwsFormattedError(''' |
+Expected "zap" on line 1, column 1. |
+foo bar baz |
+^''')); |
+ }); |
+ |
+ test('handles the end of the string correctly', () { |
+ var scanner = new StringScanner('foo bar baz'); |
+ scanner.expect('foo bar baz'); |
+ expect(() => scanner.expect('bang'), throwsFormattedError(''' |
+Expected "bang" on line 1, column 12. |
+foo bar baz |
+ ^''')); |
+ }); |
+ |
+ test('handles an empty string correctly', () { |
+ expect(() => new StringScanner('').expect('foo'), throwsFormattedError(''' |
+Expected "foo" on line 1, column 1. |
+ |
+^''')); |
+ }); |
+ |
+ group("expected name", () { |
+ test("uses the provided name", () { |
+ expect(() => new StringScanner('').expect('foo bar', name: 'zap'), |
+ throwsFormattedError(''' |
+Expected zap on line 1, column 1. |
+ |
+^''')); |
+ }); |
+ |
+ test("escapes string quotes", () { |
+ expect(() => new StringScanner('').expect('foo"bar'), |
+ throwsFormattedError(''' |
+Expected "foo\\"bar" on line 1, column 1. |
+ |
+^''')); |
+ }); |
+ |
+ test("escapes string backslashes", () { |
+ expect(() => new StringScanner('').expect('foo\\bar'), |
+ throwsFormattedError(''' |
+Expected "foo\\\\bar" on line 1, column 1. |
+ |
+^''')); |
+ }); |
+ |
+ test("prints PERL-style regexps", () { |
+ expect(() => new StringScanner('').expect(new RegExp(r'foo')), |
+ throwsFormattedError(''' |
+Expected /foo/ on line 1, column 1. |
+ |
+^''')); |
+ }); |
+ |
+ test("escape regexp forward slashes", () { |
+ expect(() => new StringScanner('').expect(new RegExp(r'foo/bar')), |
+ throwsFormattedError(''' |
+Expected /foo\\/bar/ on line 1, column 1. |
+ |
+^''')); |
+ }); |
+ |
+ test("does not escape regexp backslashes", () { |
+ expect(() => new StringScanner('').expect(new RegExp(r'foo\bar')), |
+ throwsFormattedError(''' |
+Expected /foo\\bar/ on line 1, column 1. |
+ |
+^''')); |
+ }); |
+ }); |
+} |
+ |
+Matcher throwsFormattedError(String format) { |
+ return throwsA(predicate((error) { |
+ expect(error, isFormatException); |
+ expect(error.message, equals(format)); |
+ return true; |
+ })); |
+} |