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

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

Issue 1858113003: Add "url-safe" encoding to base64 in dart:convert. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fix typo Created 4 years, 8 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
« no previous file with comments | « sdk/lib/convert/base64.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: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
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
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
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 }
OLDNEW
« no previous file with comments | « sdk/lib/convert/base64.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698