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

Unified Diff: test/codegen/lib/convert/line_splitter_test.dart

Issue 1965563003: Update dart:convert and dart:core Uri. (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 7 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
Index: test/codegen/lib/convert/line_splitter_test.dart
diff --git a/test/codegen/lib/convert/line_splitter_test.dart b/test/codegen/lib/convert/line_splitter_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..5e240a9d4eaf8c00cb412bd3a28bb9faea8cc61d
--- /dev/null
+++ b/test/codegen/lib/convert/line_splitter_test.dart
@@ -0,0 +1,218 @@
+// Copyright (c) 2013, 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 line_splitter_test;
+import "package:expect/expect.dart";
+import 'dart:async';
+import 'dart:convert';
+import 'dart:math' as MATH;
+
+
+const lineTerminators = const ['\n', '\r', '\r\n'];
+
+void main() {
+ testSimpleConvert();
+ testSplit();
+ testSplitWithOffsets();
+ testManyLines();
+ testReadLine1();
+ testReadLine2();
+ testChunkedConversion();
+}
+
+void testManyLines() {
+ int breakIndex = 0;
+
+ var inputs = const ['line1', 'line2', 'long line 3', ' line 4 ', 'l5'];
+
+ var buffer = inputs.fold(new StringBuffer(), (buff, e) {
+ buff.write(e);
+ buff.write(lineTerminators[breakIndex]);
+
+ breakIndex++;
+ breakIndex = breakIndex % lineTerminators.length;
+
+ return buff;
+ });
+
+
+ var foo = _getLinesSliced(buffer.toString());
+ Expect.equals(inputs.join(), foo);
+}
+
+
+String _getLinesSliced(String str) {
+ String lines;
+ var stringSink =
+ new StringConversionSink.withCallback((result) => lines = result);
+ var sink = new LineSplitter().startChunkedConversion(stringSink);
+
+ const chunkSize = 3;
+ var index = 0;
+ while(index < str.length) {
+ var end = MATH.min(str.length, index + chunkSize);
+
+ sink.addSlice(str, index, end, false);
+ index += chunkSize;
+ }
+
+ sink.close();
+ return lines;
+}
+
+void testSimpleConvert() {
+ var decoder = new LineSplitter();
+ for (var lf in lineTerminators) {
+ var test = "line1${lf}line2${lf}line3";
+
+ var result = decoder.convert(test);
+
+ Expect.listEquals(['line1', 'line2', 'line3'], result);
+ }
+
+ var test = "Line1\nLine2\r\nLine3\rLine4\n\n\n\r\n\r\n\r\r";
+ var result = decoder.convert(test);
+
+ Expect.listEquals(
+ ['Line1', 'Line2', 'Line3', 'Line4', '', '', '', '', '', ''],
+ result);
+}
+
+void testReadLine1() {
+ var controller = new StreamController(sync: true);
+ var stream = controller.stream
+ .transform(UTF8.decoder)
+ .transform(const LineSplitter());
+
+ var stage = 0;
+ var done = false;
+
+ void stringData(line) {
+ Expect.equals(stage, 0);
+ Expect.equals("Line", line);
+ stage++;
+ }
+
+ void streamClosed() {
+ Expect.equals(1, stage);
+ done = true;
+ }
+
+ stream.listen(
+ stringData,
+ onDone: streamClosed);
+
+ // Note: codeUnits is fine. Text is ASCII.
+ controller.add("Line".codeUnits);
+ controller.close();
+ Expect.isTrue(done, 'should be done by now');
+}
+
+void testReadLine2() {
+ var controller = new StreamController(sync: true);
+
+ var stream = controller.stream
+ .transform(UTF8.decoder)
+ .transform(const LineSplitter());
+
+ var expectedLines = ['Line1', 'Line2','Line3', 'Line4',
+ '', '', '', '', '', '',
+ 'Line5', 'Line6'];
+
+ var index = 0;
+
+ stream.listen((line) {
+ Expect.equals(expectedLines[index++], line);
+ });
+
+ // Note: codeUnits is fine. Text is ASCII.
+ controller.add("Line1\nLine2\r\nLine3\rLi".codeUnits);
+ controller.add("ne4\n".codeUnits);
+ controller.add("\n\n\r\n\r\n\r\r".codeUnits);
+ controller.add("Line5\r".codeUnits);
+ controller.add("\nLine6\n".codeUnits);
+ controller.close();
+ Expect.equals(expectedLines.length, index);
+}
+
+
+void testSplit() {
+ for (var lf in lineTerminators) {
+ var test = "line1${lf}line2${lf}line3";
+ var result = LineSplitter.split(test).toList();
+ Expect.listEquals(['line1', 'line2', 'line3'], result);
+ }
+
+ var test = "Line1\nLine2\r\nLine3\rLine4\n\n\n\r\n\r\n\r\r";
+ var result = LineSplitter.split(test).toList();
+
+ Expect.listEquals(
+ ['Line1', 'Line2', 'Line3', 'Line4', '', '', '', '', '', ''],
+ result);
+}
+
+void testSplitWithOffsets() {
+ for (var lf in lineTerminators) {
+ var test = "line1${lf}line2${lf}line3";
+ var i2 = 5 + lf.length; // index of "line2".
+ Expect.equals(5 + lf.length, i2);
+
+ var result = LineSplitter.split(test, 4).toList();
+ Expect.listEquals(['1', 'line2', 'line3'], result);
+
+ result = LineSplitter.split(test, 5).toList();
+ Expect.listEquals(['', 'line2', 'line3'], result);
+
+ result = LineSplitter.split(test, i2).toList();
+ Expect.listEquals(['line2', 'line3'], result);
+
+ result = LineSplitter.split(test, 0, i2 + 2).toList();
+ Expect.listEquals(['line1', 'li'], result);
+
+ result = LineSplitter.split(test, i2, i2 + 5).toList();
+ Expect.listEquals(['line2'], result);
+ }
+
+ var test = "Line1\nLine2\r\nLine3\rLine4\n\n\n\r\n\r\n\r\r";
+
+ var result = LineSplitter.split(test).toList();
+
+ Expect.listEquals(
+ ['Line1', 'Line2', 'Line3', 'Line4', '', '', '', '', '', ''],
+ result);
+
+ test = "a\n\nb\r\nc\n\rd\r\re\r\n\nf\r\n";
+ result = LineSplitter.split(test).toList();
+ Expect.listEquals(["a", "", "b", "c", "", "d", "", "e", "", "f"], result);
+}
+
+void testChunkedConversion() {
+ // Test any split of this complex string.
+ var test = "a\n\nb\r\nc\n\rd\r\re\r\n\nf\rg\nh\r\n";
+ var result = ["a", "", "b","c", "", "d", "", "e", "", "f", "g", "h"];
+ for (int i = 0; i < test.length; i++) {
+ var output = [];
+ var splitter = new LineSplitter();
+ var outSink = new ChunkedConversionSink.withCallback(output.addAll);
+ var sink = splitter.startChunkedConversion(outSink);
+ sink.addSlice(test, 0, i, false);
+ sink.addSlice(test, i, test.length, false);
+ sink.close();
+ Expect.listEquals(result, output);
+ }
+
+ // Test the string split into three parts in any way.
+ for (int i = 0; i < test.length; i++) {
+ for (int j = i; j < test.length; j++) {
+ var output = [];
+ var splitter = new LineSplitter();
+ var outSink = new ChunkedConversionSink.withCallback(output.addAll);
+ var sink = splitter.startChunkedConversion(outSink);
+ sink.addSlice(test, 0, i, false);
+ sink.addSlice(test, i, j, false);
+ sink.addSlice(test, j, test.length, true);
+ Expect.listEquals(result, output);
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698