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

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

Issue 11364115: Don't crash when decoding astral plane UTF-8. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Respond to review. Created 8 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/string_stream.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) 2012, the Dart project authors. Please see the AUTHORS file 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 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("dart:io"); 5 #import("dart:io");
6 #import("dart:isolate"); 6 #import("dart:isolate");
7 7
8 void testUtf8() { 8 void testUtf8() {
9 List<int> data = [0x01, 9 List<int> data = [0x01,
10 0x7f, 10 0x7f,
11 0xc2, 0x80, 11 0xc2, 0x80,
12 0xdf, 0xbf, 12 0xdf, 0xbf,
13 0xe0, 0xa0, 0x80, 13 0xe0, 0xa0, 0x80,
14 0xef, 0xbf, 0xbf]; 14 0xef, 0xbf, 0xbf,
15 0xf0, 0x9d, 0x84, 0x9e];
15 ListInputStream s = new ListInputStream(); 16 ListInputStream s = new ListInputStream();
16 s.write(data); 17 s.write(data);
17 s.markEndOfStream(); 18 s.markEndOfStream();
18 StringInputStream stream = new StringInputStream(s); 19 StringInputStream stream = new StringInputStream(s);
19 void stringData() { 20 void stringData() {
20 String s = stream.read(); 21 String s = stream.read();
21 Expect.equals(6, s.length); 22 Expect.equals(8, s.length);
22 Expect.equals(new String.fromCharCodes([0x01]), s[0]); 23 Expect.equals(new String.fromCharCodes([0x01]), s[0]);
23 Expect.equals(new String.fromCharCodes([0x7f]), s[1]); 24 Expect.equals(new String.fromCharCodes([0x7f]), s[1]);
24 Expect.equals(new String.fromCharCodes([0x80]), s[2]); 25 Expect.equals(new String.fromCharCodes([0x80]), s[2]);
25 Expect.equals(new String.fromCharCodes([0x7ff]), s[3]); 26 Expect.equals(new String.fromCharCodes([0x7ff]), s[3]);
26 Expect.equals(new String.fromCharCodes([0x800]), s[4]); 27 Expect.equals(new String.fromCharCodes([0x800]), s[4]);
27 Expect.equals(new String.fromCharCodes([0xffff]), s[5]); 28 Expect.equals(new String.fromCharCodes([0xffff]), s[5]);
29 Expect.equals(new String.fromCharCodes([0xffff]), s[5]);
30
31 // Surrogate pair for U+1D11E.
32 Expect.equals(new String.fromCharCodes([0xd834]), s[6]);
33 Expect.equals(new String.fromCharCodes([0xdd1e]), s[7]);
28 } 34 }
29 stream.onData = stringData; 35 stream.onData = stringData;
30 } 36 }
31 37
32 void testLatin1() { 38 void testLatin1() {
33 List<int> data = [0x01, 39 List<int> data = [0x01,
34 0x7f, 40 0x7f,
35 0x44, 0x61, 0x72, 0x74, 41 0x44, 0x61, 0x72, 0x74,
36 0x80, 42 0x80,
37 0xff]; 43 0xff];
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 var errors = 0; 299 var errors = 0;
294 var stream = new StringInputStream(new ErrorInputStream()); 300 var stream = new StringInputStream(new ErrorInputStream());
295 stream.onError = (e) { 301 stream.onError = (e) {
296 errors++; 302 errors++;
297 Expect.isTrue(e is TestException); 303 Expect.isTrue(e is TestException);
298 }; 304 };
299 Expect.equals(1, errors); 305 Expect.equals(1, errors);
300 } 306 }
301 307
302 testEncodingErrorWithHandler() { 308 testEncodingErrorWithHandler() {
303 var port = new ReceivePort(); 309 var port = new ReceivePort();
304 var errors = 0; 310 var errors = 0;
305 var expected = [206, 187, 120, 46, 32, 120, 10]; 311 var expected = [206, 187, 120, 46, 32, 120, 10];
306 ListInputStream input = new ListInputStream(); 312 ListInputStream input = new ListInputStream();
307 input.write(expected); 313 input.write(expected);
308 var stringStream = new StringInputStream(input, Encoding.ASCII); 314 var stringStream = new StringInputStream(input, Encoding.ASCII);
309 stringStream.onData = () { 315 stringStream.onData = () {
310 Expect.fail("We should not get any data"); 316 Expect.fail("We should not get any data");
311 }; 317 };
312 stringStream.onError = (e) { 318 stringStream.onError = (e) {
313 port.close(); 319 port.close();
314 Expect.isTrue(e is Exception); 320 Expect.isTrue(e is Exception);
315 }; 321 };
316 } 322 }
317 323
318 324
319 main() { 325 main() {
320 testUtf8(); 326 testUtf8();
321 testLatin1(); 327 testLatin1();
322 testAscii(); 328 testAscii();
323 testReadLine1(); 329 testReadLine1();
324 testReadLine2(); 330 testReadLine2();
325 testReadChunks(); 331 testReadChunks();
326 testReadMixed(); 332 testReadMixed();
327 testErrorHandler(); 333 testErrorHandler();
328 testEncodingErrorWithHandler(); 334 testEncodingErrorWithHandler();
329 } 335 }
OLDNEW
« no previous file with comments | « sdk/lib/io/string_stream.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698