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

Unified Diff: test/util/string_literal_iterator_test.dart

Issue 1034813004: Add code to contextualize a span relative to its original source file. (Closed) Base URL: git@github.com:dart-lang/unittest@master
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/runner/runner_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/util/string_literal_iterator_test.dart
diff --git a/test/util/string_literal_iterator_test.dart b/test/util/string_literal_iterator_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..bd4b56e9ba80abeb5dd6829a4f04fe19ef0a64a9
--- /dev/null
+++ b/test/util/string_literal_iterator_test.dart
@@ -0,0 +1,243 @@
+// Copyright (c) 2015, 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.
+
+import 'package:analyzer/analyzer.dart';
+import 'package:unittest/unittest.dart';
+import 'package:unittest/src/util/string_literal_iterator.dart';
+
+final _offset = "final str = ".length;
+
+void main() {
+ group("returns simple characters in", () {
+ test("a single simple string", () {
+ var iter = _parse('"abc"');
+
+ expect(iter.current, isNull);
+ expect(iter.offset, equals(_offset));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("a"));
+ expect(iter.offset, equals(_offset + 1));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("b"));
+ expect(iter.offset, equals(_offset + 2));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("c"));
+ expect(iter.offset, equals(_offset + 3));
+
+ expect(iter.moveNext(), isFalse);
+ expect(iter.current, isNull);
+ expect(iter.offset, equals(_offset + 4));
+ });
+
+ test("a raw string", () {
+ var iter = _parse('r"abc"');
+
+ expect(iter.current, isNull);
+ expect(iter.offset, equals(_offset + 1));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("a"));
+ expect(iter.offset, equals(_offset + 2));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("b"));
+ expect(iter.offset, equals(_offset + 3));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("c"));
+ expect(iter.offset, equals(_offset + 4));
+
+ expect(iter.moveNext(), isFalse);
+ expect(iter.current, isNull);
+ expect(iter.offset, equals(_offset + 5));
+ });
+
+ test("a multiline string", () {
+ var iter = _parse('"""ab\ncd"""');
+
+ expect(iter.current, isNull);
+ expect(iter.offset, equals(_offset + 2));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("a"));
+ expect(iter.offset, equals(_offset + 3));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("b"));
+ expect(iter.offset, equals(_offset + 4));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("\n"));
+ expect(iter.offset, equals(_offset + 5));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("c"));
+ expect(iter.offset, equals(_offset + 6));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("d"));
+ expect(iter.offset, equals(_offset + 7));
+
+ expect(iter.moveNext(), isFalse);
+ expect(iter.current, isNull);
+ expect(iter.offset, equals(_offset + 8));
+ });
+
+ test("a raw multiline string", () {
+ var iter = _parse('r"""ab\ncd"""');
+
+ expect(iter.current, isNull);
+ expect(iter.offset, equals(_offset + 3));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("a"));
+ expect(iter.offset, equals(_offset + 4));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("b"));
+ expect(iter.offset, equals(_offset + 5));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("\n"));
+ expect(iter.offset, equals(_offset + 6));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("c"));
+ expect(iter.offset, equals(_offset + 7));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("d"));
+ expect(iter.offset, equals(_offset + 8));
+
+ expect(iter.moveNext(), isFalse);
+ expect(iter.current, isNull);
+ expect(iter.offset, equals(_offset + 9));
+ });
+
+ test("adjacent strings", () {
+ var iter = _parse('"ab" r"cd" """ef\ngh"""');
+
+ expect(iter.current, isNull);
+ expect(iter.offset, equals(_offset));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("a"));
+ expect(iter.offset, equals(_offset + 1));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("b"));
+ expect(iter.offset, equals(_offset + 2));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("c"));
+ expect(iter.offset, equals(_offset + 7));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("d"));
+ expect(iter.offset, equals(_offset + 8));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("e"));
+ expect(iter.offset, equals(_offset + 14));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("f"));
+ expect(iter.offset, equals(_offset + 15));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("\n"));
+ expect(iter.offset, equals(_offset + 16));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("g"));
+ expect(iter.offset, equals(_offset + 17));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("h"));
+ expect(iter.offset, equals(_offset + 18));
+
+ expect(iter.moveNext(), isFalse);
+ expect(iter.current, isNull);
+ expect(iter.offset, equals(_offset + 19));
+ });
+ });
+
+ group("parses an escape sequence for", () {
+ test("a newline", () => _expectEscape(r"\n", "\n"));
+ test("a carriage return", () => _expectEscape(r"\r", "\r"));
+ test("a form feed", () => _expectEscape(r"\f", "\f"));
+ test("a backspace", () => _expectEscape(r"\b", "\b"));
+ test("a tab", () => _expectEscape(r"\t", "\t"));
+ test("a vertical tab", () => _expectEscape(r"\v", "\v"));
+ test("a quote", () => _expectEscape(r'\"', '"'));
+ test("a backslash", () => _expectEscape(r"\\", "\\"));
+
+ test("a hex character", () {
+ _expectEscape(r"\x62", "b");
+ _expectEscape(r"\x7A", "z");
+ _expectEscape(r"\x7a", "z");
+ });
+
+ test("a fixed-length unicode character",
+ () => _expectEscape(r"\u0062", "b"));
+
+ test("a short variable-length unicode character",
+ () => _expectEscape(r"\u{62}", "b"));
+
+ test("a long variable-length unicode character",
+ () => _expectEscape(r"\u{000062}", "b"));
+ });
+
+ group("throws an ArgumentError for", () {
+ test("interpolation", () {
+ expect(() => _parse(r'"$foo"'), throwsArgumentError);
+ });
+
+ test("interpolation in an adjacent string", () {
+ expect(() => _parse(r'"foo" "$bar" "baz"'), throwsArgumentError);
+ });
+ });
+}
+
+/// Asserts that [escape] is parsed as [value].
+void _expectEscape(String escape, String value) {
+ var iter = _parse('"a${escape}b"');
+
+ expect(iter.current, isNull);
+ expect(iter.offset, equals(_offset));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("a"));
+ expect(iter.offset, equals(_offset + 1));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune(value));
+ expect(iter.offset, equals(_offset + 2));
+
+ expect(iter.moveNext(), isTrue);
+ expect(iter.current, _isRune("b"));
+ expect(iter.offset, equals(_offset + escape.length + 2));
+
+ expect(iter.moveNext(), isFalse);
+ expect(iter.current, isNull);
+ expect(iter.offset, equals(_offset + escape.length + 3));
+}
+
+/// Returns a matcher that asserts that the given rune is the rune for [char].
+Matcher _isRune(String char) {
+ return predicate((rune) {
+ return rune is int && new String.fromCharCode(rune) == char;
+ }, 'is the rune "$char"');
+}
+
+/// Parses [dart], which should be a string literal, into a
+/// [StringLiteralIterator].
+StringLiteralIterator _parse(String dart) {
+ var literal = parseCompilationUnit("final str = $dart;")
+ .declarations.single.variables.variables.single.initializer;
+ return new StringLiteralIterator(literal);
+}
« no previous file with comments | « test/runner/runner_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698