file.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /**
  2. * Module dependencies.
  3. */
  4. var fs = require('fs');
  5. var getUri = require('../');
  6. var assert = require('assert');
  7. var streamToArray = require('stream-to-array');
  8. describe('get-uri', function () {
  9. describe('"file:" protocol', function () {
  10. var cache;
  11. var sep = require('path').sep || '/';
  12. // TODO: move this out into a more full-featured module some day…
  13. // i.e. the inverse of https://github.com/TooTallNate/file-path-to-uri
  14. function path2uri (p) {
  15. if ('\\' == sep) {
  16. // windows
  17. return 'file:///' + p;
  18. } else {
  19. // unix
  20. return 'file://' + p;
  21. }
  22. }
  23. it('should work for local files', function (done) {
  24. var uri = path2uri(__filename);
  25. fs.readFile(__filename, 'utf8', function (err, real) {
  26. if (err) return done(err);
  27. getUri(uri, function (err, rs) {
  28. if (err) return done(err);
  29. cache = rs;
  30. streamToArray(rs, function (err, array) {
  31. if (err) return done(err);
  32. var str = Buffer.concat(array).toString('utf8');
  33. assert.equal(str, real);
  34. done();
  35. });
  36. });
  37. });
  38. });
  39. it('should return ENOTFOUND for bad filenames', function (done) {
  40. var uri = path2uri(__filename + 'does-not-exist');
  41. getUri(uri, function (err, rs) {
  42. assert(err);
  43. assert.equal('ENOTFOUND', err.code);
  44. done();
  45. });
  46. });
  47. it('should return ENOTMODIFIED for the same URI with `cache`', function (done) {
  48. var uri = path2uri(__filename);
  49. getUri(uri, { cache: cache }, function (err, rs) {
  50. assert(err);
  51. assert.equal('ENOTMODIFIED', err.code);
  52. done();
  53. });
  54. });
  55. });
  56. });