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

Side by Side Diff: tests/standalone/io/io_sink_test.dart

Issue 52263005: Add IOSink:flush(). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « sdk/lib/io/stdio.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 import "package:expect/expect.dart"; 5 import "package:expect/expect.dart";
6 import "package:async_helper/async_helper.dart";
6 import "dart:async"; 7 import "dart:async";
7 import "dart:io"; 8 import "dart:io";
8 import "dart:isolate";
9 9
10 class TestConsumer implements StreamConsumer { 10 class TestConsumer implements StreamConsumer {
11 final List expected; 11 final List expected;
12 final List received = []; 12 final List received = [];
13 13
14 var closePort;
15
16 int addStreamCount = 0; 14 int addStreamCount = 0;
17 int expcetedAddStreamCount; 15 int expcetedAddStreamCount;
16 bool expectClose;
18 17
19 TestConsumer(this.expected, 18 TestConsumer(this.expected,
20 {close: true, 19 {this.expectClose: true,
21 this.expcetedAddStreamCount: -1}) { 20 this.expcetedAddStreamCount: -1}) {
22 if (close) closePort = new ReceivePort(); 21 if (expectClose) asyncStart();
23 } 22 }
24 23
25 Future addStream(Stream stream) { 24 Future addStream(Stream stream) {
26 addStreamCount++; 25 addStreamCount++;
27 return stream.fold( 26 var sub = stream
28 received, 27 .listen((v) {
29 (list, value) { 28 received.addAll(v);
30 list.addAll(value); 29 });
31 return list; 30 sub.pause();
32 }) 31 scheduleMicrotask(sub.resume);
33 .then((_) {}); 32 return sub.asFuture();
33 }
34
35 void matches(List list) {
36 Expect.listEquals(list, received);
34 } 37 }
35 38
36 Future close() { 39 Future close() {
37 return new Future.value() 40 return new Future.value()
38 .then((_) { 41 .then((_) {
39 if (closePort != null) closePort.close(); 42 if (expectClose) asyncEnd();
40 Expect.listEquals(expected, received); 43 Expect.listEquals(expected, received);
41 if (expcetedAddStreamCount >= 0) { 44 if (expcetedAddStreamCount >= 0) {
42 Expect.equals(expcetedAddStreamCount, addStreamCount); 45 Expect.equals(expcetedAddStreamCount, addStreamCount);
43 } 46 }
44 }); 47 });
45 } 48 }
46 } 49 }
47 50
48 void testClose() { 51 void testClose() {
49 var sink = new IOSink(new TestConsumer([], expcetedAddStreamCount: 0)); 52 var sink = new IOSink(new TestConsumer([], expcetedAddStreamCount: 0));
50 sink.close(); 53 sink.close();
51 } 54 }
52 55
53 void testAddClose() { 56 void testAddClose() {
54 var sink = new IOSink(new TestConsumer([0])); 57 var sink = new IOSink(new TestConsumer([0]));
55 sink.add([0]); 58 sink.add([0]);
56 sink.close(); 59 sink.close();
57 60
58 sink = new IOSink(new TestConsumer([0, 1, 2])); 61 sink = new IOSink(new TestConsumer([0, 1, 2]));
59 sink.add([0]); 62 sink.add([0]);
60 sink.add([1]); 63 sink.add([1]);
61 sink.add([2]); 64 sink.add([2]);
62 sink.close(); 65 sink.close();
63 } 66 }
64 67
68
69 void testAddFlush() {
70 var consumer = new TestConsumer([0, 1, 2]);
71 var sink = new IOSink(consumer);
72 sink.add([0]);
73 sink.flush().then((s) {
74 consumer.matches([0]);
75 s.add([1]);
76 s.add([2]);
77 s.flush().then((s) {
78 consumer.matches([0, 1, 2]);
79 s.close();
80 });
81 });
82 }
83
84
65 void testAddStreamClose() { 85 void testAddStreamClose() {
66 { 86 {
67 var sink = new IOSink(new TestConsumer([0])); 87 var sink = new IOSink(new TestConsumer([0]));
68 var controller = new StreamController(sync: true); 88 var controller = new StreamController(sync: true);
69 sink.addStream(controller.stream) 89 sink.addStream(controller.stream)
70 .then((_) { 90 .then((_) {
71 sink.close(); 91 sink.close();
72 }); 92 });
73 controller.add([0]); 93 controller.add([0]);
74 controller.close(); 94 controller.close();
(...skipping 22 matching lines...) Expand all
97 sink.close(); 117 sink.close();
98 }); 118 });
99 controller.add([0]); 119 controller.add([0]);
100 controller.close(); 120 controller.close();
101 } 121 }
102 } 122 }
103 123
104 void main() { 124 void main() {
105 testClose(); 125 testClose();
106 testAddClose(); 126 testAddClose();
127 testAddFlush();
107 testAddStreamClose(); 128 testAddStreamClose();
108 testAddStreamAddClose(); 129 testAddStreamAddClose();
109 } 130 }
OLDNEW
« no previous file with comments | « sdk/lib/io/stdio.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698