| var tape = require("tape"); |
| |
| var fetch = require(".."); |
| |
| tape.test("fetch", function(test) { |
| |
| if (typeof Promise !== "undefined") |
| test.test(test.name + " - promise", function(test) { |
| var promise = fetch("NOTFOUND"); |
| test.plan(2); |
| test.ok(promise instanceof Promise, "should return a promise if callback has been omitted"); |
| promise |
| .then(function() { |
| test.fail("should not resolve"); |
| }) |
| .catch(function(err) { |
| test.ok(err, "should reject with an error"); |
| }); |
| }); |
| |
| test.test(test.name + " - node fs", function(test) { |
| |
| test.test(test.name + " - string", function(test) { |
| test.plan(2); |
| fetch(require.resolve("./data/file.txt"), function(err, contents) { |
| test.notOk(err, "should not return an error"); |
| test.equal(contents, "file.txt", "should return contents as a string"); |
| }); |
| }); |
| |
| test.test(test.name + " - binary", function(test) { |
| test.plan(2); |
| fetch(require.resolve("./data/file.txt"), { binary: true }, function(err, contents) { |
| test.notOk(err, "should not return an error"); |
| test.same(contents, new Buffer("file.txt", "utf8"), "should return contents as a Buffer"); |
| }); |
| }); |
| |
| test.test(test.name + " - fallback", function(test) { |
| test.plan(2); |
| global.XMLHttpRequest = fakeXHR(0); |
| fetch("file.txt", function(err, contents) { |
| delete global.XMLHttpRequest; |
| test.notOk(err, "should not return an error"); |
| test.same(contents, "file.txt", "should return contents as a string"); |
| }); |
| }); |
| |
| test.end(); |
| }); |
| |
| test.test(test.name + " - XMLHttpRequest", function(test) { |
| |
| test.test(test.name + " - 404", function(test) { |
| global.XMLHttpRequest = fakeXHR(404); |
| fetch("file.txt", { xhr: true }, function(err) { |
| delete global.XMLHttpRequest; |
| test.ok(err, "should return an error"); |
| test.end(); |
| }); |
| }); |
| |
| test.test(test.name + " - string", function(test) { |
| global.XMLHttpRequest = fakeXHR(0); |
| test.plan(2); |
| fetch("file.txt", { xhr: true }, function(err, contents) { |
| delete global.XMLHttpRequest; |
| test.notOk(err, "should not return an error"); |
| test.equal(contents, "file.txt", "should return contents as a string"); |
| }); |
| }); |
| |
| test.test(test.name + " - binary", function(test) { |
| global.XMLHttpRequest = fakeXHR(200); |
| test.plan(2); |
| fetch("file.txt", { xhr: true, binary: true }, function(err, contents) { |
| delete global.XMLHttpRequest; |
| test.notOk(err, "should not return an error"); |
| test.same(contents, new Uint8Array([0x66, 0x69, 0x6c, 0x65, 0x2e, 0x74, 0x78, 0x74]), "should return contents as an Uint8Array"); |
| }); |
| }); |
| |
| }); |
| |
| test.test(test.name + " - XMLHttpRequest (ancient)", function(test) { |
| |
| test.test(test.name + " - string", function(test) { |
| global.XMLHttpRequest = fakeXHR(0, true); |
| test.plan(2); |
| fetch("file.txt", { xhr: true }, function(err, contents) { |
| delete global.XMLHttpRequest; |
| test.notOk(err, "should not return an error"); |
| test.equal(contents, "file.txt", "should return contents as a string"); |
| }); |
| }); |
| |
| test.test(test.name + " - binary", function(test) { |
| global.XMLHttpRequest = fakeXHR(200, true); |
| var U8 = global.Uint8Array; |
| delete global.Uint8Array; |
| test.plan(2); |
| fetch("file.txt", { xhr: true, binary: true }, function(err, contents) { |
| delete global.XMLHttpRequest; |
| global.Uint8Array = U8; |
| test.notOk(err, "should not return an error"); |
| test.same(contents, [0x66, 0x69, 0x6c, 0x65, 0x2e, 0x74, 0x78, 0x74], "should return contents as an Array"); |
| }); |
| }); |
| |
| }); |
| |
| }); |
| |
| function fakeXHR(status, ancient) { |
| |
| var UNSENT = 0, |
| OPENED = 1, |
| HEADERS_RECEIVED = 2, |
| LOADING = 3, |
| DONE = 4; |
| |
| function XMLHttpRequest() { |
| this.status = 0; |
| this.readyState = UNSENT; |
| } |
| if (!ancient) |
| XMLHttpRequest.prototype.overrideMimeType = function(mimeType) { |
| this._mimeType = mimeType; |
| }; |
| XMLHttpRequest.prototype.open = function open(method, path) { |
| this._method = method; |
| this._path = path; |
| this.readyState = OPENED; |
| }; |
| XMLHttpRequest.prototype.send = function send() { |
| var self = this; |
| setTimeout(function() { |
| self.onreadystatechange(); // opened |
| self.readyState = HEADERS_RECEIVED; |
| self.onreadystatechange(); |
| self.readyState = LOADING; |
| self.onreadystatechange(); |
| self.readyState = DONE; |
| self.status = status; |
| if (self.responseType === "arraybuffer" && !ancient) { |
| var buf = new Buffer(self._path, "utf8"); |
| var abuf = new ArrayBuffer(buf.length); |
| var view = new Uint8Array(abuf); |
| for (var i = 0; i < buf.length; ++i) |
| view[i] = buf[i]; |
| self.response = abuf; |
| } else |
| self.responseText = self._path; |
| self.onreadystatechange(); |
| }); |
| }; |
| return XMLHttpRequest; |
| } |