mirror of
https://github.com/protobufjs/protobuf.js.git
synced 2025-12-08 20:58:55 +00:00
158 lines
5.6 KiB
JavaScript
158 lines
5.6 KiB
JavaScript
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;
|
|
} |