123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- goog.provide('goog.crypt.base64Test');
- goog.setTestOnly('goog.crypt.base64Test');
- goog.require('goog.crypt');
- goog.require('goog.crypt.base64');
- goog.require('goog.testing.jsunit');
- var tests = [
- '', '',
- 'f', 'Zg==',
- 'fo', 'Zm8=',
- 'foo', 'Zm9v',
- 'foob', 'Zm9vYg==',
- 'fooba', 'Zm9vYmE=',
- 'foobar', 'Zm9vYmFy',
-
- '\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89\xe5\x9b\x9b\xe4\xba\x94\xe5' +
- '\x85\xad\xe4\xb8\x83\xe5\x85\xab\xe4\xb9\x9d\xe5\x8d\x81',
- '5LiA5LqM5LiJ5Zub5LqU5YWt5LiD5YWr5Lmd5Y2B'];
- function assertDecodeToByteArrayEquals(expected, encoded, opt_webSafe) {
- var dec = goog.crypt.base64.decodeStringToByteArray(encoded, opt_webSafe);
- assertArrayEquals(expected, dec);
- }
- function assertDecodeToUint8ArrayEquals(expected, encoded) {
- if (goog.global.Uint8Array) {
- var dec = goog.crypt.base64.decodeStringToUint8Array(encoded);
- assertArrayEquals(expected, Array.prototype.slice.call(dec));
- }
- }
- function testByteArrayEncoding() {
-
-
- for (var i = 0; i < tests.length; i += 2) {
- var enc = goog.crypt.base64.encodeByteArray(
- goog.crypt.stringToByteArray(tests[i]));
- assertEquals(tests[i + 1], enc);
- var expected = goog.crypt.stringToByteArray(tests[i]);
- assertDecodeToByteArrayEquals(expected, enc);
- assertDecodeToUint8ArrayEquals(expected, enc);
-
- assertDecodeToByteArrayEquals(expected, enc, true );
-
- enc = goog.crypt.base64.encodeByteArray(
- goog.crypt.stringToByteArray(tests[i], true ));
-
- assertDecodeToByteArrayEquals(expected, enc);
- assertDecodeToUint8ArrayEquals(expected, enc);
-
- assertDecodeToByteArrayEquals(expected, enc, true );
- }
- }
- function testOddLengthByteArrayEncoding() {
- var buffer = [0, 0, 0];
- var encodedBuffer = goog.crypt.base64.encodeByteArray(buffer);
- assertEquals('AAAA', encodedBuffer);
- assertDecodeToByteArrayEquals(buffer, encodedBuffer);
- assertDecodeToUint8ArrayEquals(buffer, encodedBuffer);
- }
- function testOddLengthByteArrayDecoding() {
-
-
-
- var encodedBuffer = 'YWJjZA';
- var expected = goog.crypt.stringToByteArray('abcd');
- assertDecodeToByteArrayEquals(expected, encodedBuffer);
- assertDecodeToUint8ArrayEquals(expected, encodedBuffer);
-
- assertDecodeToByteArrayEquals(expected, encodedBuffer, true );
- }
- function testShortcutPathEncoding() {
-
- for (var i = 0; i < tests.length; i += 2) {
- var enc = goog.crypt.base64.encodeString(tests[i]);
- assertEquals(tests[i + 1], enc);
- var dec = goog.crypt.base64.decodeString(enc);
- assertEquals(tests[i], dec);
- }
- }
- function testMultipleIterations() {
-
- var numIterations = 100;
- for (var i = 0; i < numIterations; i++) {
- var input = [];
- for (var j = 0; j < i; j++) input[j] = j % 256;
- var encoded = goog.crypt.base64.encodeByteArray(input);
- assertDecodeToByteArrayEquals(input, encoded);
- assertDecodeToUint8ArrayEquals(input, encoded);
- }
- }
- function testWebSafeEncoding() {
-
- var test = '>>>???>>>???=/+';
- var testArr = goog.crypt.stringToByteArray(test);
- var enc = goog.crypt.base64.encodeByteArray(testArr);
- assertEquals('Non-websafe broken?', 'Pj4+Pz8/Pj4+Pz8/PS8r', enc);
- enc = goog.crypt.base64.encodeString(test);
- assertEquals('Non-websafe broken?', 'Pj4+Pz8/Pj4+Pz8/PS8r', enc);
- enc = goog.crypt.base64.encodeByteArray(testArr, true );
- assertEquals('Websafe encoding broken', 'Pj4-Pz8_Pj4-Pz8_PS8r', enc);
- enc = goog.crypt.base64.encodeString(test, true);
- assertEquals('Non-websafe broken?', 'Pj4-Pz8_Pj4-Pz8_PS8r', enc);
- assertDecodeToByteArrayEquals(testArr, enc);
- assertDecodeToUint8ArrayEquals(testArr, enc);
- var dec = goog.crypt.base64.decodeString(enc, true );
- assertEquals('Websafe decoding broken', test, dec);
-
- assertThrows('Didn\'t throw on malformed input', function() {
- goog.crypt.base64.decodeStringToByteArray('foooooo)oooo');
- });
-
- assertThrows('Didn\'t throw on malformed input', function() {
- goog.crypt.base64.decodeStringToUint8Array('foooooo)oooo');
- });
- }
- function testDecodeIgnoresSpace() {
- var spaceTests = [
-
- [' \n\t\r', ''], ['Z g =\n=', 'f'], ['Zm 8=', 'fo'], [' Zm 9v', 'foo'],
- ['Zm9v Yg ==\t ', 'foob'], ['\nZ m9 vYm\n E=', 'fooba'],
- [' \nZ \tm9v YmFy ', 'foobar']
- ];
- for (var i = 0; i < spaceTests.length; i++) {
- var thisTest = spaceTests[i];
- var encoded = thisTest[0];
- var expectedStr = thisTest[1];
- var expected = goog.crypt.stringToByteArray(expectedStr);
- assertDecodeToByteArrayEquals(expected, encoded);
- assertDecodeToUint8ArrayEquals(expected, encoded);
- assertEquals(expectedStr, goog.crypt.base64.decodeString(encoded));
- }
- }
|