You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

test.js 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /**
  2. * Module dependencies.
  3. */
  4. var assert = require('assert');
  5. var dataUriToBuffer = require('../');
  6. describe('data-uri-to-buffer', function () {
  7. it('should decode bare-bones Data URIs', function () {
  8. var uri = 'data:,Hello%2C%20World!';
  9. var buf = dataUriToBuffer(uri);
  10. assert.equal('text/plain', buf.type);
  11. assert.equal('Hello, World!', buf.toString());
  12. });
  13. it('should decode bare-bones "base64" Data URIs', function () {
  14. var uri = 'data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D';
  15. var buf = dataUriToBuffer(uri);
  16. assert.equal('text/plain', buf.type);
  17. assert.equal('Hello, World!', buf.toString());
  18. });
  19. it('should decode plain-text Data URIs', function () {
  20. var html = '<!DOCTYPE html>'+
  21. '<html lang="en">'+
  22. '<head><title>Embedded Window</title></head>'+
  23. '<body><h1>42</h1></body>'+
  24. '</html>';
  25. // Escape the HTML for URL formatting
  26. var uri = 'data:text/html;charset=utf-8,' + encodeURIComponent(html);
  27. var buf = dataUriToBuffer(uri);
  28. assert.equal('text/html', buf.type);
  29. assert.equal('utf-8', buf.charset);
  30. assert.equal(html, buf.toString());
  31. });
  32. // the next 4 tests are from:
  33. // https://bug161965.bugzilla.mozilla.org/attachment.cgi?id=94670&action=view
  34. it('should decode "ISO-8859-8 in Base64" URIs', function () {
  35. var uri = 'data:text/plain;charset=iso-8859-8-i;base64,+ezl7Q==';
  36. var buf = dataUriToBuffer(uri);
  37. assert.equal('text/plain', buf.type);
  38. assert.equal('iso-8859-8-i', buf.charset);
  39. assert.equal(4, buf.length);
  40. assert.equal(0xf9, buf[0]);
  41. assert.equal(0xec, buf[1]);
  42. assert.equal(0xe5, buf[2]);
  43. assert.equal(0xed, buf[3]);
  44. });
  45. it('should decode "ISO-8859-8 in URL-encoding" URIs', function () {
  46. var uri = 'data:text/plain;charset=iso-8859-8-i,%f9%ec%e5%ed';
  47. var buf = dataUriToBuffer(uri);
  48. assert.equal('text/plain', buf.type);
  49. assert.equal('iso-8859-8-i', buf.charset);
  50. assert.equal(4, buf.length);
  51. assert.equal(0xf9, buf[0]);
  52. assert.equal(0xec, buf[1]);
  53. assert.equal(0xe5, buf[2]);
  54. assert.equal(0xed, buf[3]);
  55. });
  56. it('should decode "UTF-8 in Base64" URIs', function () {
  57. var uri = 'data:text/plain;charset=UTF-8;base64,16nXnNeV150=';
  58. var buf = dataUriToBuffer(uri);
  59. assert.equal('text/plain', buf.type);
  60. assert.equal('UTF-8', buf.charset);
  61. assert.equal(8, buf.length);
  62. assert.equal('שלום', buf.toString('utf8'));
  63. });
  64. it('should decode "UTF-8 in URL-encoding" URIs', function () {
  65. var uri = 'data:text/plain;charset=UTF-8,%d7%a9%d7%9c%d7%95%d7%9d';
  66. var buf = dataUriToBuffer(uri);
  67. assert.equal('text/plain', buf.type);
  68. assert.equal('UTF-8', buf.charset);
  69. assert.equal(8, buf.length);
  70. assert.equal('שלום', buf.toString('utf8'));
  71. });
  72. // this next one is from Wikipedia IIRC
  73. it('should decode "base64" Data URIs with newlines', function () {
  74. var uri = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA\n' +
  75. 'AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO\n' +
  76. '9TXL0Y4OHwAAAABJRU5ErkJggg==';
  77. var buf = dataUriToBuffer(uri);
  78. assert.equal('image/png', buf.type);
  79. assert.equal('iVBORw0KGgoAAAANSUhEUgAAAAUA' +
  80. 'AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO' +
  81. '9TXL0Y4OHwAAAABJRU5ErkJggg==', buf.toString('base64'));
  82. });
  83. it('should decode a plain-text URI with a space character in it', function () {
  84. var uri = 'data:,foo bar';
  85. var buf = dataUriToBuffer(uri);
  86. assert.equal('text/plain', buf.type);
  87. assert.equal('foo bar', buf.toString());
  88. });
  89. it('should decode data with a "," comma char', function () {
  90. var uri = 'data:,a,b';
  91. var buf = dataUriToBuffer(uri);
  92. assert.equal('text/plain', buf.type);
  93. assert.equal('a,b', buf.toString());
  94. });
  95. it('should decode data with traditionally reserved characters like ";"', function () {
  96. var uri = 'data:,;test';
  97. var buf = dataUriToBuffer(uri);
  98. assert.equal('text/plain', buf.type);
  99. assert.equal(';test', buf.toString());
  100. });
  101. });