|
| 1 | +'use strict'; |
| 2 | + |
| 3 | +var assert = require ('assert'); |
| 4 | + |
| 5 | +var base64 = require ('..'); |
| 6 | + |
| 7 | + |
| 8 | +var btoa = base64.btoa; |
| 9 | +var atob = base64.atob; |
| 10 | + |
| 11 | + |
| 12 | +describe ('Base64.js', function() { |
| 13 | + |
| 14 | + it ('can encode ASCII input', function() { |
| 15 | + assert.strictEqual (btoa (''), ''); |
| 16 | + assert.strictEqual (btoa ('f'), 'Zg=='); |
| 17 | + assert.strictEqual (btoa ('fo'), 'Zm8='); |
| 18 | + assert.strictEqual (btoa ('foo'), 'Zm9v'); |
| 19 | + assert.strictEqual (btoa ('quux'), 'cXV1eA=='); |
| 20 | + assert.strictEqual (btoa ('!"#$%'), 'ISIjJCU='); |
| 21 | + assert.strictEqual (btoa ("&'()*+"), 'JicoKSor'); |
| 22 | + assert.strictEqual (btoa (',-./012'), 'LC0uLzAxMg=='); |
| 23 | + assert.strictEqual (btoa ('3456789:'), 'MzQ1Njc4OTo='); |
| 24 | + assert.strictEqual (btoa (';<=>?@ABC'), 'Ozw9Pj9AQUJD'); |
| 25 | + assert.strictEqual (btoa ('DEFGHIJKLM'), 'REVGR0hJSktMTQ=='); |
| 26 | + assert.strictEqual (btoa ('NOPQRSTUVWX'), 'Tk9QUVJTVFVWV1g='); |
| 27 | + assert.strictEqual (btoa ('YZ[\\]^_`abc'), 'WVpbXF1eX2BhYmM='); |
| 28 | + assert.strictEqual (btoa ('defghijklmnop'), 'ZGVmZ2hpamtsbW5vcA=='); |
| 29 | + assert.strictEqual (btoa ('qrstuvwxyz{|}~'), 'cXJzdHV2d3h5ent8fX4='); |
| 30 | + }); |
| 31 | + |
| 32 | + it ('cannot encode non-ASCII input', function() { |
| 33 | + assert.throws ( |
| 34 | + function() { btoa ('✈'); }, |
| 35 | + function(err) { |
| 36 | + return err instanceof Error && |
| 37 | + err.name === 'InvalidCharacterError' && |
| 38 | + err.message === ("'btoa' failed: " + |
| 39 | + 'The string to be encoded contains ' + |
| 40 | + 'characters outside of the Latin1 range.'); |
| 41 | + } |
| 42 | + ); |
| 43 | + }); |
| 44 | + |
| 45 | + it ('coerces input', function() { |
| 46 | + assert.strictEqual (btoa (42), btoa ('42')); |
| 47 | + assert.strictEqual (btoa (null), btoa ('null')); |
| 48 | + assert.strictEqual (btoa ({x: 1}), btoa ('[object Object]')); |
| 49 | + }); |
| 50 | + |
| 51 | + it ('can decode Base64-encoded input', function() { |
| 52 | + assert.strictEqual (atob (''), ''); |
| 53 | + assert.strictEqual (atob ('Zg=='), 'f'); |
| 54 | + assert.strictEqual (atob ('Zm8='), 'fo'); |
| 55 | + assert.strictEqual (atob ('Zm9v'), 'foo'); |
| 56 | + assert.strictEqual (atob ('cXV1eA=='), 'quux'); |
| 57 | + assert.strictEqual (atob ('ISIjJCU='), '!"#$%'); |
| 58 | + assert.strictEqual (atob ('JicoKSor'), "&'()*+"); |
| 59 | + assert.strictEqual (atob ('LC0uLzAxMg=='), ',-./012'); |
| 60 | + assert.strictEqual (atob ('MzQ1Njc4OTo='), '3456789:'); |
| 61 | + assert.strictEqual (atob ('Ozw9Pj9AQUJD'), ';<=>?@ABC'); |
| 62 | + assert.strictEqual (atob ('REVGR0hJSktMTQ=='), 'DEFGHIJKLM'); |
| 63 | + assert.strictEqual (atob ('Tk9QUVJTVFVWV1g='), 'NOPQRSTUVWX'); |
| 64 | + assert.strictEqual (atob ('WVpbXF1eX2BhYmM='), 'YZ[\\]^_`abc'); |
| 65 | + assert.strictEqual (atob ('ZGVmZ2hpamtsbW5vcA=='), 'defghijklmnop'); |
| 66 | + assert.strictEqual (atob ('cXJzdHV2d3h5ent8fX4='), 'qrstuvwxyz{|}~'); |
| 67 | + }); |
| 68 | + |
| 69 | + it ('cannot decode invalid input', function() { |
| 70 | + assert.throws ( |
| 71 | + function() { atob ('a'); }, |
| 72 | + function(err) { |
| 73 | + return err instanceof Error && |
| 74 | + err.name === 'InvalidCharacterError' && |
| 75 | + err.message === ("'atob' failed: The string to be " + |
| 76 | + 'decoded is not correctly encoded.'); |
| 77 | + } |
| 78 | + ); |
| 79 | + }); |
| 80 | + |
| 81 | + it ('coerces input', function() { |
| 82 | + assert.strictEqual (atob (42), atob ('42')); |
| 83 | + assert.strictEqual (atob (null), atob ('null')); |
| 84 | + }); |
| 85 | + |
| 86 | +}); |
0 commit comments