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

Side by Side Diff: tests/lib/convert/ascii_test.dart

Issue 22875034: Add ASCII encoding to lib/convert. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address review comments Created 7 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sdk/lib/convert/latin1.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 "package:expect/expect.dart"; 5 import "package:expect/expect.dart";
6 import 'dart:convert'; 6 import 'dart:convert';
7 7
8 var latin1Strings = [ 8 var asciiStrings = [
9 "pure ascii", 9 "pure ascii",
10 "blåbærgrød", 10 "\x00 with control characters \n",
11 "\x00 edge cases \xff" 11 "\x01 edge cases \x7f"
12 ]; 12 ];
13 13
14 var nonLatin1Strings = [ 14 var nonAsciiStrings = [
15 "Edge case \u{100}", 15 "\x80 edge case first",
16 "Edge case ASCII \u{80}",
17 "Edge case byte \u{ff}",
16 "Edge case super-BMP \u{10000}" 18 "Edge case super-BMP \u{10000}"
17 ]; 19 ];
18 20
19 void main() { 21 void main() {
20 // Build longer versions of the example strings. 22 // Build longer versions of the example strings.
21 for (int i = 0, n = latin1Strings.length; i < n ; i++) { 23 for (int i = 0, n = asciiStrings.length; i < n ; i++) {
22 var string = latin1Strings[i]; 24 var string = asciiStrings[i];
23 while (string.length < 1024) { 25 while (string.length < 1024) {
24 string += string; 26 string += string;
25 } 27 }
26 latin1Strings.add(string); 28 asciiStrings.add(string);
27 } 29 }
28 for (int i = 0, n = nonLatin1Strings.length; i < n ; i++) { 30 for (int i = 0, n = nonAsciiStrings.length; i < n ; i++) {
29 var string = nonLatin1Strings[i]; 31 var string = nonAsciiStrings[i];
30 while (string.length < 1024) { 32 while (string.length < 1024) {
31 string += string; 33 string += string;
32 } 34 }
33 nonLatin1Strings.add(string); 35 nonAsciiStrings.add(string);
34 } 36 }
35 testDirectConversions(); 37 testDirectConversions();
36 testChunkedConversions(); 38 testChunkedConversions();
37 } 39 }
38 40
39 void testDirectConversions() { 41 void testDirectConversions() {
40 for (var codec in [LATIN1, new Latin1Codec()]) { 42 for (var codec in [ASCII, new AsciiCodec()]) {
41 for (var latin1String in latin1Strings) { 43 for (var asciiString in asciiStrings) {
42 List bytes = codec.encoder.convert(latin1String); 44 List bytes = codec.encoder.convert(asciiString);
43 Expect.listEquals(latin1String.codeUnits.toList(), bytes, latin1String); 45 Expect.listEquals(asciiString.codeUnits.toList(), bytes, asciiString);
44 String roundTripString = codec.decoder.convert(bytes); 46 String roundTripString = codec.decoder.convert(bytes);
45 Expect.equals(latin1String, roundTripString); 47 Expect.equals(asciiString, roundTripString);
46 roundTripString = codec.decode(bytes); 48 roundTripString = codec.decode(bytes);
47 Expect.equals(latin1String, roundTripString); 49 Expect.equals(asciiString, roundTripString);
48 } 50 }
49 51
50 for (var nonLatin1String in nonLatin1Strings) { 52 for (var nonAsciiString in nonAsciiStrings) {
51 Expect.throws(() { 53 Expect.throws(() {
52 print(codec.encoder.convert(nonLatin1String)); 54 print(codec.encoder.convert(nonAsciiString));
53 }, null, nonLatin1String); 55 }, null, nonAsciiString);
54 } 56 }
55 } 57 }
56 58
57 var allowInvalidCodec = new Latin1Codec(allowInvalid: true); 59 var allowInvalidCodec = new AsciiCodec(allowInvalid: true);
58 var invalidBytes = [0, 1, 0xff, 0xdead, 0]; 60 var invalidBytes = [0, 1, 0xff, 0xdead, 0];
59 String decoded = allowInvalidCodec.decode(invalidBytes); 61 String decoded = allowInvalidCodec.decode(invalidBytes);
60 Expect.equals("\x00\x01\xFF\uFFFD\x00", decoded); 62 Expect.equals("\x00\x01\uFFFD\uFFFD\x00", decoded);
61 decoded = allowInvalidCodec.decoder.convert(invalidBytes); 63 decoded = allowInvalidCodec.decoder.convert(invalidBytes);
62 Expect.equals("\x00\x01\xFF\uFFFD\x00", decoded); 64 Expect.equals("\x00\x01\uFFFD\uFFFD\x00", decoded);
63 decoded = LATIN1.decode(invalidBytes, allowInvalid: true); 65 decoded = ASCII.decode(invalidBytes, allowInvalid: true);
64 Expect.equals("\x00\x01\xFF\uFFFD\x00", decoded); 66 Expect.equals("\x00\x01\uFFFD\uFFFD\x00", decoded);
65 } 67 }
66 68
67 List<int> encode(String str, int chunkSize, 69 List<int> encode(String str, int chunkSize,
68 Converter<String, List<int>> converter) { 70 Converter<String, List<int>> converter) {
69 List<int> bytes = <int>[]; 71 List<int> bytes = <int>[];
70 ChunkedConversionSink byteSink = 72 ChunkedConversionSink byteSink =
71 new ByteConversionSink.withCallback(bytes.addAll); 73 new ByteConversionSink.withCallback(bytes.addAll);
72 var stringConversionSink = converter.startChunkedConversion(byteSink); 74 var stringConversionSink = converter.startChunkedConversion(byteSink);
73 for (int i = 0; i < str.length; i += chunkSize) { 75 for (int i = 0; i < str.length; i += chunkSize) {
74 if (i + chunkSize <= str.length) { 76 if (i + chunkSize <= str.length) {
(...skipping 18 matching lines...) Expand all
93 } else { 95 } else {
94 byteConversionSink.add(bytes.sublist(i)); 96 byteConversionSink.add(bytes.sublist(i));
95 } 97 }
96 } 98 }
97 byteConversionSink.close(); 99 byteConversionSink.close();
98 return buf.toString(); 100 return buf.toString();
99 } 101 }
100 102
101 void testChunkedConversions() { 103 void testChunkedConversions() {
102 // Check encoding. 104 // Check encoding.
103 for (var converter in [LATIN1.encoder, 105 for (var converter in [ASCII.encoder,
104 new Latin1Codec().encoder, 106 new AsciiCodec().encoder,
105 new Latin1Encoder()]) { 107 new AsciiEncoder()]) {
106 for (int chunkSize in [1, 2, 5, 50]) { 108 for (int chunkSize in [1, 2, 5, 50]) {
107 for (var latin1String in latin1Strings) { 109 for (var asciiString in asciiStrings) {
108 var units = latin1String.codeUnits.toList(); 110 var units = asciiString.codeUnits.toList();
109 List bytes = encode(latin1String, chunkSize, converter); 111 List bytes = encode(asciiString, chunkSize, converter);
110 Expect.listEquals(units, bytes); 112 Expect.listEquals(units, bytes);
111 } 113 }
112 for (var nonLatin1String in nonLatin1Strings) { 114 for (var nonAsciiString in nonAsciiStrings) {
113 Expect.throws(() { 115 Expect.throws(() {
114 encode(nonLatin1Strings, chunkSize, converter); 116 encode(nonAsciiStrings, chunkSize, converter);
115 }); 117 });
116 } 118 }
117 } 119 }
118 } 120 }
119 // Check decoding. 121 // Check decoding.
120 for (var converter in [LATIN1.decoder, 122 for (var converter in [ASCII.decoder,
121 new Latin1Codec().decoder, 123 new AsciiCodec().decoder,
122 new Latin1Decoder()]) { 124 new AsciiDecoder()]) {
123 for (int chunkSize in [1, 2, 5, 50]) { 125 for (int chunkSize in [1, 2, 5, 50]) {
124 for (var latin1String in latin1Strings) { 126 for (var asciiString in asciiStrings) {
125 var units = latin1String.codeUnits.toList(); 127 var units = asciiString.codeUnits.toList();
126 Expect.equals(latin1String, decode(units, chunkSize, converter)); 128 Expect.equals(asciiString, decode(units, chunkSize, converter));
127 } 129 }
128 for (var nonLatin1String in nonLatin1Strings) { 130 for (var nonAsciiString in nonAsciiStrings) {
129 var units = nonLatin1String.codeUnits.toList(); 131 var units = nonAsciiString.codeUnits.toList();
130 Expect.throws(() { 132 Expect.throws(() {
131 decode(units, chunkSize, converter); 133 decode(units, chunkSize, converter);
132 }); 134 });
133 } 135 }
134 } 136 }
135 } 137 }
136 } 138 }
OLDNEW
« no previous file with comments | « sdk/lib/convert/latin1.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698