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

Unified Diff: tests/lib/convert/base64_test.dart

Issue 1419983003: Add support for decoding URL-safe encoded base64. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fix assert. Created 5 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sdk/lib/convert/base64.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/lib/convert/base64_test.dart
diff --git a/tests/lib/convert/base64_test.dart b/tests/lib/convert/base64_test.dart
index 016dc91d6e3a10c8b3238fe01f2366cc88c23609..ccbed3dea09a976ab53db96a5aff6a4060c872ef 100644
--- a/tests/lib/convert/base64_test.dart
+++ b/tests/lib/convert/base64_test.dart
@@ -20,12 +20,20 @@ main() {
testRoundtrip(new Uint8List.fromList(list), "Uint8List#${list.length}");
}
testErrors();
+
+ // Decoder is lenienet with mixed styles.
+ Expect.listEquals([0xfb, 0xff, 0xbf, 0x00], BASE64.decode("-_+/AA%3D="));
+ Expect.listEquals([0xfb, 0xff, 0xbf, 0x00], BASE64.decode("-_+/AA=%3D"));
}
void testRoundtrip(list, name) {
// Direct.
- String encoded = BASE64.encode(list);
- List result = BASE64.decode(encoded);
+ String encodedNormal = BASE64.encode(list);
+ String encodedPercent = encodedNormal.replaceAll("=", "%3D");
+ String uriEncoded = encodedNormal.replaceAll("+", "-").replaceAll("/", "_");
+ List result = BASE64.decode(encodedNormal);
+ Expect.listEquals(list, result, name);
+ result = BASE64.decode(encodedPercent);
Expect.listEquals(list, result, name);
int increment = list.length ~/ 7 + 1;
@@ -42,7 +50,7 @@ void testRoundtrip(list, name) {
encoder.add(list.sublist(j, list.length));
encoder.close();
var name = "0-$i-$j-${list.length}: list";
- Expect.equals(encoded, results.join(""), name);
+ Expect.equals(encodedNormal, results.join(""), name);
}
{
// Using addSlice
@@ -53,36 +61,40 @@ void testRoundtrip(list, name) {
encoder.addSlice(list, i, j, false);
encoder.addSlice(list, j, list.length, true);
var name = "0-$i-$j-${list.length}: $list";
- Expect.equals(encoded, results.join(""), name);
+ Expect.equals(encodedNormal, results.join(""), name);
}
}
}
- increment = encoded.length ~/ 7 + 1;
- for (int i = 0; i < encoded.length; i += increment) {
- for (int j = i; j < encoded.length; j += increment) {
- {
- // Using add/close
- var results;
- var sink = new ChunkedConversionSink.withCallback((v) { results = v; });
- var decoder = BASE64.decoder.startChunkedConversion(sink);
- decoder.add(encoded.substring(0, i));
- decoder.add(encoded.substring(i, j));
- decoder.add(encoded.substring(j, encoded.length));
- decoder.close();
- var name = "0-$i-$j-${encoded.length}: $encoded";
- Expect.listEquals(list, results.expand((x)=>x).toList(), name);
- }
- {
- // Using addSlice
- var results;
- var sink = new ChunkedConversionSink.withCallback((v) { results = v; });
- var decoder = BASE64.decoder.startChunkedConversion(sink);
- decoder.addSlice(encoded, 0, i, false);
- decoder.addSlice(encoded, i, j, false);
- decoder.addSlice(encoded, j, encoded.length, true);
- var name = "0-$i-$j-${encoded.length}: $encoded";
- Expect.listEquals(list, results.expand((x)=>x).toList(), name);
+ for (var encoded in [encodedNormal, encodedPercent, uriEncoded]) {
+ increment = encoded.length ~/ 7 + 1;
+ for (int i = 0; i < encoded.length; i += increment) {
+ for (int j = i; j < encoded.length; j += increment) {
+ {
+ // Using add/close
+ var results;
+ var sink =
+ new ChunkedConversionSink.withCallback((v) { results = v; });
+ var decoder = BASE64.decoder.startChunkedConversion(sink);
+ decoder.add(encoded.substring(0, i));
+ decoder.add(encoded.substring(i, j));
+ decoder.add(encoded.substring(j, encoded.length));
+ decoder.close();
+ var name = "0-$i-$j-${encoded.length}: $encoded";
+ Expect.listEquals(list, results.expand((x)=>x).toList(), name);
+ }
+ {
+ // Using addSlice
+ var results;
+ var sink =
+ new ChunkedConversionSink.withCallback((v) { results = v; });
+ var decoder = BASE64.decoder.startChunkedConversion(sink);
+ decoder.addSlice(encoded, 0, i, false);
+ decoder.addSlice(encoded, i, j, false);
+ decoder.addSlice(encoded, j, encoded.length, true);
+ var name = "0-$i-$j-${encoded.length}: $encoded";
+ Expect.listEquals(list, results.expand((x)=>x).toList(), name);
+ }
}
}
}
@@ -123,6 +135,11 @@ void testErrors() {
badDecode("AAAA==");
badDecode("AAAA===");
badDecode("AAAA====");
+ badDecode("AAAA%");
+ badDecode("AAAA%3");
+ badDecode("AAAA%3D");
+ badDecode("AAA%3D%");
+ badDecode("AAA%3D=");
badDecode("A=");
badDecode("A=A");
badDecode("A==");
@@ -130,11 +147,12 @@ void testErrors() {
badDecode("A===");
badDecode("====");
badDecode("AA=");
+ badDecode("AA%=");
+ badDecode("AA%3");
+ badDecode("AA%3D");
badDecode("AA===");
badDecode("AAA==");
badDecode("AAA=AAAA");
- badDecode("AAA-");
- badDecode("AAA_");
badDecode("AAA\x00");
badDecode("AAA=\x00");
badDecode("AAA\x80");
@@ -142,9 +160,12 @@ void testErrors() {
badDecode("AAA\u{141}");
badDecode("AAA\u{1041}");
badDecode("AAA\u{10041}");
+ badDecode("AA\u{141}=");
+ badDecode("AA\u{1041}=");
+ badDecode("AA\u{10041}=");
var alphabet =
- "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/";
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/-_";
var units = alphabet.codeUnits;
for (int i = 0; i < 128; i++) {
if (!units.contains(i)) {
« 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