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

Side by Side Diff: test/base64_test.dart

Issue 1169453002: Add an option for percent-encoding of the padding character to Base64Codec (Closed) Base URL: https://github.com/dart-lang/crypto.git@master
Patch Set: Fix formatting according to issue comments Created 5 years, 6 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 | « lib/src/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 // Library tag to allow the test to run on Dartium. 5 // Library tag to allow the test to run on Dartium.
6 library base64_test; 6 library base64_test;
7 7
8 import 'dart:math'; 8 import 'dart:math';
9 import 'dart:async'; 9 import 'dart:async';
10 10
11 import "package:crypto/crypto.dart"; 11 import "package:crypto/crypto.dart";
12 import "package:test/test.dart"; 12 import "package:test/test.dart";
13 13
14 void main() { 14 void main() {
15 test('encoder', _testEncoder); 15 test('encoder', _testEncoder);
16 test('decoder', _testDecoder); 16 test('decoder', _testDecoder);
17 test('decoder for malformed input', _testDecoderForMalformedInput); 17 test('decoder for malformed input', _testDecoderForMalformedInput);
18 test('encode decode lists', _testEncodeDecodeLists); 18 test('encode decode lists', _testEncodeDecodeLists);
19 test('url safe encode-decode', _testUrlSafeEncodeDecode); 19 test('url safe encode-decode', _testUrlSafeEncodeDecode);
20 test('consistent safe/unsafe character decoding', 20 test('consistent safe/unsafe character decoding',
21 _testConsistentSafeUnsafeDecode); 21 _testConsistentSafeUnsafeDecode);
22 test('percent-encoded padding character encode-decode',
23 _testPaddingCharacter);
22 test('streaming encoder', _testStreamingEncoder); 24 test('streaming encoder', _testStreamingEncoder);
23 test('streaming decoder', _testStreamingDecoder); 25 test('streaming decoder', _testStreamingDecoder);
24 test('streaming decoder for malformed input', 26 test('streaming decoder for malformed input',
25 _testStreamingDecoderForMalformedInput); 27 _testStreamingDecoderForMalformedInput);
26 test('streaming encoder for different decompositions of a list of bytes', 28 test('streaming encoder for different decompositions of a list of bytes',
27 _testStreamingEncoderForDecompositions); 29 _testStreamingEncoderForDecompositions);
28 test('streaming decoder for different decompositions of a string', 30 test('streaming decoder for different decompositions of a string',
29 _testStreamingDecoderForDecompositions); 31 _testStreamingDecoderForDecompositions);
30 test('consistent safe/unsafe character streaming decoding', 32 test('consistent safe/unsafe character streaming decoding',
31 _testConsistentSafeUnsafeStreamDecode); 33 _testConsistentSafeUnsafeStreamDecode);
34 test('streaming for encoded padding character',
35 _testStreamingForEncodedPadding);
32 test('old api', _testOldApi); 36 test('old api', _testOldApi);
33 test('url safe streaming encoder/decoder', _testUrlSafeStreaming); 37 test('url safe streaming encoder/decoder', _testUrlSafeStreaming);
34 test('performance', _testPerformance); 38 test('performance', _testPerformance);
35 39
36 40
37 } 41 }
38 42
39 // Data from http://tools.ietf.org/html/rfc4648. 43 // Data from http://tools.ietf.org/html/rfc4648.
40 const _INPUTS = 44 const _INPUTS =
41 const [ '', 'f', 'fo', 'foo', 'foob', 'fooba', 'foobar']; 45 const [ '', 'f', 'fo', 'foo', 'foob', 'fooba', 'foobar'];
42 const _RESULTS = 46 const _RESULTS =
43 const [ '', 'Zg==', 'Zm8=', 'Zm9v', 'Zm9vYg==', 'Zm9vYmE=', 'Zm9vYmFy']; 47 const [ '', 'Zg==', 'Zm8=', 'Zm9v', 'Zm9vYg==', 'Zm9vYmE=', 'Zm9vYmFy'];
48
49 const _PADDING_INPUT = const [2, 8];
50
44 var _STREAMING_ENCODER_INPUT = 51 var _STREAMING_ENCODER_INPUT =
45 [[102, 102], [111, 102], 52 [[102, 102], [111, 102],
46 [111, 111, 102, 111, 111, 98, 102, 111, 53 [111, 111, 102, 111, 111, 98, 102, 111,
47 111, 98, 97, 102, 111, 111, 98, 97, 114]]; 54 111, 98, 97, 102, 111, 111, 98, 97, 114]];
48 55
49 const _STREAMING_ENCODED = 'ZmZvZm9vZm9vYmZvb2JhZm9vYmFy'; 56 const _STREAMING_ENCODED = 'ZmZvZm9vZm9vYmZvb2JhZm9vYmFy';
50 const _STREAMING_DECODER_INPUT = 57 const _STREAMING_DECODER_INPUT =
51 const ['YmFz', 'ZTY', '0I', 'GRlY29kZXI=']; 58 const ['YmFz', 'ZTY', '0I', 'GRlY29kZXI='];
52 const _STREAMING_DECODED = 59 const _STREAMING_DECODED =
53 const [98, 97, 115, 101, 54, 52, 32, 100, 101, 99, 111, 100, 101, 114]; 60 const [98, 97, 115, 101, 54, 52, 32, 100, 101, 99, 111, 100, 101, 114];
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 inputsWithZeroes[i]); 148 inputsWithZeroes[i]);
142 } 149 }
143 150
144 var longLineDecoded = BASE64.decode(_LONG_LINE_RESULT); 151 var longLineDecoded = BASE64.decode(_LONG_LINE_RESULT);
145 expect(new String.fromCharCodes(longLineDecoded), _LONG_LINE); 152 expect(new String.fromCharCodes(longLineDecoded), _LONG_LINE);
146 153
147 var longLineResultNoBreak = BASE64.decode(_LONG_LINE_RESULT); 154 var longLineResultNoBreak = BASE64.decode(_LONG_LINE_RESULT);
148 expect(new String.fromCharCodes(longLineResultNoBreak), _LONG_LINE); 155 expect(new String.fromCharCodes(longLineResultNoBreak), _LONG_LINE);
149 } 156 }
150 157
158 void _testPaddingCharacter() {
159 var encoded = BASE64.encode(_PADDING_INPUT, encodePaddingCharacter: true);
160 expect(encoded, 'Agg%3D');
161 expect(BASE64.decode(encoded), _PADDING_INPUT);
162 }
163
151 Future _testStreamingEncoder() async { 164 Future _testStreamingEncoder() async {
152 expect( 165 expect(
153 await new Stream.fromIterable(_STREAMING_ENCODER_INPUT) 166 await new Stream.fromIterable(_STREAMING_ENCODER_INPUT)
154 .transform(BASE64.encoder) 167 .transform(BASE64.encoder)
155 .join(), 168 .join(),
156 _STREAMING_ENCODED); 169 _STREAMING_ENCODED);
157 } 170 }
158 171
159 Future _testStreamingDecoder() async { 172 Future _testStreamingDecoder() async {
160 expect( 173 expect(
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 }, throwsFormatException); 243 }, throwsFormatException);
231 } 244 }
232 245
233 Future _testConsistentSafeUnsafeStreamDecode() { 246 Future _testConsistentSafeUnsafeStreamDecode() {
234 expect(new Stream.fromIterable(_INCONSISTENT_SAFE_STREAMING_RESULT) 247 expect(new Stream.fromIterable(_INCONSISTENT_SAFE_STREAMING_RESULT)
235 .transform(BASE64.decoder) 248 .transform(BASE64.decoder)
236 .toList(), 249 .toList(),
237 throwsFormatException); 250 throwsFormatException);
238 } 251 }
239 252
253 Future _testStreamingForEncodedPadding() async {
254 List<String> withEncodedPadding = ['AA%', '3D', '%', '3', 'DEFGZ'];
255 List<int> decoded = BASE64.decode('AA==EFGZ');
256 var streamedResult = await new Stream.fromIterable(withEncodedPadding)
257 .transform(BASE64.decoder).expand((x) => x).toList();
258
259 expect(streamedResult, decoded);
260 }
261
240 void _testUrlSafeEncodeDecode() { 262 void _testUrlSafeEncodeDecode() {
241 List<int> decUrlSafe = BASE64.decode('-_A='); 263 List<int> decUrlSafe = BASE64.decode('-_A=');
242 List<int> dec = BASE64.decode('+/A='); 264 List<int> dec = BASE64.decode('+/A=');
243 expect(decUrlSafe, orderedEquals(dec)); 265 expect(decUrlSafe, orderedEquals(dec));
244 expect(BASE64.encode(dec, urlSafe: true), '-_A='); 266 expect(BASE64.encode(dec, urlSafe: true), '-_A=');
245 expect(BASE64.encode(dec), '+/A='); 267 expect(BASE64.encode(dec), '+/A=');
246 } 268 }
247 269
248 void _testEncodeDecodeLists() { 270 void _testEncodeDecodeLists() {
249 for (int i = 0; i < 10; i++) { 271 for (int i = 0; i < 10; i++) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 // print("Encode 1024 bytes for $iters times: $ms msec. $perSec b/s"); 309 // print("Encode 1024 bytes for $iters times: $ms msec. $perSec b/s");
288 w..reset(); 310 w..reset();
289 for( int i = 0; i < iters; ++i ) { 311 for( int i = 0; i < iters; ++i ) {
290 BASE64.decode(enc); 312 BASE64.decode(enc);
291 } 313 }
292 ms = w.elapsedMilliseconds; 314 ms = w.elapsedMilliseconds;
293 perSec = (iters * l.length) * 1000 ~/ ms; 315 perSec = (iters * l.length) * 1000 ~/ ms;
294 // ('''Decode into ${l.length} bytes for $iters 316 // ('''Decode into ${l.length} bytes for $iters
295 // times: $ms msec. $perSec b/s'''); 317 // times: $ms msec. $perSec b/s''');
296 } 318 }
OLDNEW
« no previous file with comments | « lib/src/base64.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698