OLD | NEW |
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:convert'; | 5 import 'dart:convert'; |
6 import "dart:typed_data"; | 6 import "dart:typed_data"; |
7 import "package:expect/expect.dart"; | 7 import "package:expect/expect.dart"; |
8 | 8 |
9 main() { | 9 main() { |
10 for (var list in [[], | 10 for (var list in [[], |
(...skipping 13 matching lines...) Expand all Loading... |
24 | 24 |
25 // Decoder is lenienet with mixed styles. | 25 // Decoder is lenienet with mixed styles. |
26 Expect.listEquals([0xfb, 0xff, 0xbf, 0x00], BASE64.decode("-_+/AA%3D=")); | 26 Expect.listEquals([0xfb, 0xff, 0xbf, 0x00], BASE64.decode("-_+/AA%3D=")); |
27 Expect.listEquals([0xfb, 0xff, 0xbf, 0x00], BASE64.decode("-_+/AA=%3D")); | 27 Expect.listEquals([0xfb, 0xff, 0xbf, 0x00], BASE64.decode("-_+/AA=%3D")); |
28 } | 28 } |
29 | 29 |
30 void testRoundtrip(list, name) { | 30 void testRoundtrip(list, name) { |
31 // Direct. | 31 // Direct. |
32 String encodedNormal = BASE64.encode(list); | 32 String encodedNormal = BASE64.encode(list); |
33 String encodedPercent = encodedNormal.replaceAll("=", "%3D"); | 33 String encodedPercent = encodedNormal.replaceAll("=", "%3D"); |
34 String uriEncoded = encodedNormal.replaceAll("+", "-").replaceAll("/", "_"); | 34 String uriEncoded = BASE64URL.encode(list); |
| 35 String expectedUriEncoded = |
| 36 encodedNormal.replaceAll("+", "-").replaceAll("/", "_"); |
| 37 Expect.equals(expectedUriEncoded, uriEncoded); |
| 38 |
35 List result = BASE64.decode(encodedNormal); | 39 List result = BASE64.decode(encodedNormal); |
36 Expect.listEquals(list, result, name); | 40 Expect.listEquals(list, result, name); |
37 result = BASE64.decode(encodedPercent); | 41 result = BASE64.decode(encodedPercent); |
38 Expect.listEquals(list, result, name); | 42 Expect.listEquals(list, result, name); |
| 43 result = BASE64.decode(uriEncoded); |
| 44 Expect.listEquals(list, result, name); |
39 | 45 |
40 int increment = list.length ~/ 7 + 1; | 46 int increment = list.length ~/ 7 + 1; |
41 // Chunked. | 47 // Chunked. |
42 for (int i = 0; i < list.length; i += increment) { | 48 for (int i = 0; i < list.length; i += increment) { |
43 for (int j = i; j < list.length; j += increment) { | 49 for (int j = i; j < list.length; j += increment) { |
| 50 // Normal |
44 { | 51 { |
45 // Using add/close | 52 // Using add/close |
46 var results; | 53 var results; |
47 var sink = new ChunkedConversionSink.withCallback((v) { results = v; }); | 54 var sink = new ChunkedConversionSink.withCallback((v) { results = v; }); |
48 var encoder = BASE64.encoder.startChunkedConversion(sink); | 55 var encoder = BASE64.encoder.startChunkedConversion(sink); |
49 encoder.add(list.sublist(0, i)); | 56 encoder.add(list.sublist(0, i)); |
50 encoder.add(list.sublist(i, j)); | 57 encoder.add(list.sublist(i, j)); |
51 encoder.add(list.sublist(j, list.length)); | 58 encoder.add(list.sublist(j, list.length)); |
52 encoder.close(); | 59 encoder.close(); |
53 var name = "0-$i-$j-${list.length}: list"; | 60 var name = "0-$i-$j-${list.length}: list"; |
54 Expect.equals(encodedNormal, results.join(""), name); | 61 Expect.equals(encodedNormal, results.join(""), name); |
55 } | 62 } |
56 { | 63 { |
57 // Using addSlice | 64 // Using addSlice |
58 var results; | 65 var results; |
59 var sink = new ChunkedConversionSink.withCallback((v) { results = v; }); | 66 var sink = new ChunkedConversionSink.withCallback((v) { results = v; }); |
60 var encoder = BASE64.encoder.startChunkedConversion(sink); | 67 var encoder = BASE64.encoder.startChunkedConversion(sink); |
61 encoder.addSlice(list, 0, i, false); | 68 encoder.addSlice(list, 0, i, false); |
62 encoder.addSlice(list, i, j, false); | 69 encoder.addSlice(list, i, j, false); |
63 encoder.addSlice(list, j, list.length, true); | 70 encoder.addSlice(list, j, list.length, true); |
64 var name = "0-$i-$j-${list.length}: $list"; | 71 var name = "0-$i-$j-${list.length}: $list"; |
65 Expect.equals(encodedNormal, results.join(""), name); | 72 Expect.equals(encodedNormal, results.join(""), name); |
66 } | 73 } |
| 74 // URI |
| 75 { |
| 76 // Using add/close |
| 77 var results; |
| 78 var sink = new ChunkedConversionSink.withCallback((v) { results = v; }); |
| 79 var encoder = BASE64URL.encoder.startChunkedConversion(sink); |
| 80 encoder.add(list.sublist(0, i)); |
| 81 encoder.add(list.sublist(i, j)); |
| 82 encoder.add(list.sublist(j, list.length)); |
| 83 encoder.close(); |
| 84 var name = "0-$i-$j-${list.length}: list"; |
| 85 Expect.equals(uriEncoded, results.join(""), name); |
| 86 } |
| 87 { |
| 88 // Using addSlice |
| 89 var results; |
| 90 var sink = new ChunkedConversionSink.withCallback((v) { results = v; }); |
| 91 var encoder = BASE64URL.encoder.startChunkedConversion(sink); |
| 92 encoder.addSlice(list, 0, i, false); |
| 93 encoder.addSlice(list, i, j, false); |
| 94 encoder.addSlice(list, j, list.length, true); |
| 95 var name = "0-$i-$j-${list.length}: $list"; |
| 96 Expect.equals(uriEncoded, results.join(""), name); |
| 97 } |
67 } | 98 } |
68 } | 99 } |
69 | 100 |
70 for (var encoded in [encodedNormal, encodedPercent, uriEncoded]) { | 101 for (var encoded in [encodedNormal, encodedPercent, uriEncoded]) { |
71 increment = encoded.length ~/ 7 + 1; | 102 increment = encoded.length ~/ 7 + 1; |
72 for (int i = 0; i < encoded.length; i += increment) { | 103 for (int i = 0; i < encoded.length; i += increment) { |
73 for (int j = i; j < encoded.length; j += increment) { | 104 for (int j = i; j < encoded.length; j += increment) { |
74 { | 105 { |
75 // Using add/close | 106 // Using add/close |
76 var results; | 107 var results; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 }); | 143 }); |
113 var c = BASE64.decoder.startChunkedConversion(sink); | 144 var c = BASE64.decoder.startChunkedConversion(sink); |
114 for (String string in list) { | 145 for (String string in list) { |
115 c.add(string); | 146 c.add(string); |
116 } | 147 } |
117 c.close(); | 148 c.close(); |
118 }, isFormatException, "chunk $list"); | 149 }, isFormatException, "chunk $list"); |
119 } | 150 } |
120 void badDecode(String string) { | 151 void badDecode(String string) { |
121 Expect.throws(() => BASE64.decode(string), isFormatException, string); | 152 Expect.throws(() => BASE64.decode(string), isFormatException, string); |
| 153 Expect.throws(() => BASE64URL.decode(string), isFormatException, string); |
122 badChunkDecode([string]); | 154 badChunkDecode([string]); |
123 badChunkDecode(["", string]); | 155 badChunkDecode(["", string]); |
124 badChunkDecode([string, ""]); | 156 badChunkDecode([string, ""]); |
125 badChunkDecode([string, "", ""]); | 157 badChunkDecode([string, "", ""]); |
126 badChunkDecode(["", string, ""]); | 158 badChunkDecode(["", string, ""]); |
127 } | 159 } |
128 | 160 |
129 badDecode("A"); | 161 badDecode("A"); |
130 badDecode("AA"); | 162 badDecode("AA"); |
131 badDecode("AAA"); | 163 badDecode("AAA"); |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 BASE64.decoder.startChunkedConversion(new TestSink<List<int>>()); | 277 BASE64.decoder.startChunkedConversion(new TestSink<List<int>>()); |
246 ByteConversionSink encodeSink = | 278 ByteConversionSink encodeSink = |
247 BASE64.encoder.startChunkedConversion(new TestSink<String>()); | 279 BASE64.encoder.startChunkedConversion(new TestSink<String>()); |
248 } | 280 } |
249 | 281 |
250 // Implementation of Sink<T> to test type constraints. | 282 // Implementation of Sink<T> to test type constraints. |
251 class TestSink<T> implements Sink<T> { | 283 class TestSink<T> implements Sink<T> { |
252 void add(T value) {} | 284 void add(T value) {} |
253 void close() {} | 285 void close() {} |
254 } | 286 } |
OLD | NEW |