OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012, 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 import "dart:async"; | |
6 import "dart:convert"; | |
7 import "dart:io"; | |
8 import "dart:isolate"; | |
9 | |
10 import "package:expect/expect.dart"; | |
11 | |
12 const UNICODE_REPLACEMENT_CHARACTER_CODEPOINT = 0xFFFD; | |
13 | |
14 void main() { | |
15 testUtf8(); | |
16 testLatin1(); | |
17 testAscii(); | |
18 testReadLine1(); | |
19 testReadLine2(); | |
20 testErrorHandler(); | |
21 testLatin1EncoderError(); | |
22 } | |
23 | |
24 void testUtf8() { | |
25 List<int> data = [0x01, | |
26 0x7f, | |
27 0xc2, 0x80, | |
28 0xdf, 0xbf, | |
29 0xe0, 0xa0, 0x80, | |
30 0xef, 0xbf, 0xbf, | |
31 0xf0, 0x9d, 0x84, 0x9e, | |
32 0x100, -0x1, -0xFF]; | |
33 var controller = new StreamController(sync: true); | |
34 controller.add(data); | |
35 controller.close(); | |
36 var stringStream = controller.stream | |
37 .transform(new StringDecoder(Encoding.UTF_8)); | |
38 stringStream.listen( | |
39 (s) { | |
40 Expect.equals(11, s.length); | |
41 Expect.equals(new String.fromCharCodes([0x01]), s[0]); | |
42 Expect.equals(new String.fromCharCodes([0x7f]), s[1]); | |
43 Expect.equals(new String.fromCharCodes([0x80]), s[2]); | |
44 Expect.equals(new String.fromCharCodes([0x7ff]), s[3]); | |
45 Expect.equals(new String.fromCharCodes([0x800]), s[4]); | |
46 Expect.equals(new String.fromCharCodes([0xffff]), s[5]); | |
47 Expect.equals(new String.fromCharCodes([0xffff]), s[5]); | |
48 | |
49 // Surrogate pair for U+1D11E. | |
50 Expect.equals(new String.fromCharCodes([0xd834, 0xdd1e]), | |
51 s.substring(6, 8)); | |
52 | |
53 Expect.equals(new String.fromCharCodes( | |
54 [UNICODE_REPLACEMENT_CHARACTER_CODEPOINT, | |
55 UNICODE_REPLACEMENT_CHARACTER_CODEPOINT, | |
56 UNICODE_REPLACEMENT_CHARACTER_CODEPOINT]), | |
57 s.substring(8, 11)); | |
58 }); | |
59 } | |
60 | |
61 void testLatin1() { | |
62 List<int> data = [0x01, | |
63 0x7f, | |
64 0x44, 0x61, 0x72, 0x74, | |
65 0x80, | |
66 0xff, | |
67 0x100, -0x1, -0xff]; | |
68 var controller = new StreamController(sync: true); | |
69 controller.add(data); | |
70 controller.close(); | |
71 var stream = controller.stream | |
72 .transform(new StringDecoder(Encoding.ISO_8859_1)); | |
73 stream.listen((s) { | |
74 Expect.equals(11, s.length); | |
75 Expect.equals(new String.fromCharCodes([0x01]), s[0]); | |
76 Expect.equals(new String.fromCharCodes([0x7f]), s[1]); | |
77 Expect.equals("Dart", s.substring(2, 6)); | |
78 Expect.equals(new String.fromCharCodes([0x80]), s[6]); | |
79 Expect.equals(new String.fromCharCodes([0xff]), s[7]); | |
80 Expect.equals('???', s.substring(8, 11)); | |
81 }); | |
82 } | |
83 | |
84 void testAscii() { | |
85 List<int> data = [0x01, | |
86 0x44, 0x61, 0x72, 0x74, | |
87 0x7f, | |
88 0xf4, 0x100, -0x1, -0xff]; | |
89 var controller = new StreamController(sync: true); | |
90 controller.add(data); | |
91 controller.close(); | |
92 var stream = controller.stream | |
93 .transform(new StringDecoder(Encoding.ASCII)); | |
94 stream.listen((s) { | |
95 Expect.equals(10, s.length); | |
96 Expect.equals(new String.fromCharCodes([0x01]), s[0]); | |
97 Expect.equals("Dart", s.substring(1, 5)); | |
98 Expect.equals(new String.fromCharCodes([0x7f]), s[5]); | |
99 Expect.equals('????', s.substring(6, 10)); | |
100 }); | |
101 } | |
102 | |
103 void testReadLine1() { | |
104 var controller = new StreamController(sync: true); | |
105 var stream = controller.stream | |
106 .transform(new StringDecoder()) | |
107 .transform(new LineSplitter()); | |
108 | |
109 var stage = 0; | |
110 | |
111 void stringData(line) { | |
112 Expect.equals(stage, 0); | |
113 Expect.equals("Line", line); | |
114 stage++; | |
115 } | |
116 | |
117 void streamClosed() { | |
118 Expect.equals(1, stage); | |
119 } | |
120 | |
121 stream.listen( | |
122 stringData, | |
123 onDone: streamClosed); | |
124 | |
125 // Note: codeUnits is fine. Text is ASCII. | |
126 controller.add("Line".codeUnits); | |
127 controller.close(); | |
128 Expect.equals(1, stage); | |
129 } | |
130 | |
131 void testReadLine2() { | |
132 var controller = new StreamController(sync: true); | |
133 | |
134 var stream = controller.stream | |
135 .transform(new StringDecoder()) | |
136 .transform(new LineSplitter()); | |
137 | |
138 var expectedLines = ['Line1', 'Line2','Line3', 'Line4', | |
139 '', '', '', '', '', '', | |
140 'Line5', 'Line6']; | |
141 | |
142 var index = 0; | |
143 | |
144 stream.listen((line) { | |
145 Expect.equals(expectedLines[index++], line); | |
146 }); | |
147 | |
148 // Note: codeUnits is fine. Text is ASCII. | |
149 controller.add("Line1\nLine2\r\nLine3\rLi".codeUnits); | |
150 controller.add("ne4\n".codeUnits); | |
151 controller.add("\n\n\r\n\r\n\r\r".codeUnits); | |
152 controller.add("Line5\r".codeUnits); | |
153 controller.add("\nLine6\n".codeUnits); | |
154 controller.close(); | |
155 Expect.equals(expectedLines.length, index); | |
156 } | |
157 | |
158 class TestException implements Exception { | |
159 TestException(); | |
160 } | |
161 | |
162 void testErrorHandler() { | |
163 var controller = new StreamController(sync: true); | |
164 var errors = 0; | |
165 var stream = controller.stream | |
166 .transform(new StringDecoder()) | |
167 .transform(new LineSplitter()); | |
168 stream.listen( | |
169 (_) {}, | |
170 onDone: () { | |
171 Expect.equals(1, errors); | |
172 }, | |
173 onError: (error) { | |
174 errors++; | |
175 Expect.isTrue(error is TestException); | |
176 }); | |
177 controller.addError(new TestException()); | |
178 controller.close(); | |
179 } | |
180 | |
181 void testLatin1EncoderError() { | |
182 List<int> data = [0x01, | |
183 0x7f, | |
184 0x44, 0x61, 0x72, 0x74, | |
185 0x80, | |
186 0xff, | |
187 0x100]; | |
188 var controller = new StreamController(sync: true); | |
189 controller.add(new String.fromCharCodes(data)); | |
190 controller.close(); | |
191 var stream = controller.stream | |
192 .transform(new StringEncoder(Encoding.ISO_8859_1)); | |
193 stream.listen( | |
194 (s) { | |
195 Expect.fail("data not expected"); | |
196 }, | |
197 onError: (error) { | |
198 Expect.isTrue(error is FormatException); | |
199 }); | |
200 | |
201 } | |
OLD | NEW |