Version 1
[yaffs-website] / node_modules / xhr / test / index.js
diff --git a/node_modules/xhr/test/index.js b/node_modules/xhr/test/index.js
new file mode 100644 (file)
index 0000000..651ea94
--- /dev/null
@@ -0,0 +1,287 @@
+var window = require("global/window")
+var test = require("tape")
+var forEach = require("for-each")
+
+var xhr = require("../index.js")
+
+test("constructs and calls callback without throwing", function(assert) {
+    xhr({}, function(err, resp, body) {
+        assert.ok(true, "got here")
+        assert.end()
+    })
+})
+
+test("[func] Can GET a url (cross-domain)", function(assert) {
+    xhr({
+        uri: "http://www.mocky.io/v2/55a02cb72651260b1a94f024",
+        useXDR: true
+    }, function(err, resp, body) {
+        assert.ifError(err, "no err")
+        assert.equal(resp.statusCode, 200)
+        assert.equal(typeof resp.rawRequest, "object")
+        assert.notEqual(resp.body.length, 0)
+        assert.equal(resp.body, '{"a":1}')
+        assert.notEqual(body.length, 0)
+        assert.end()
+    })
+})
+
+test("[func] Returns http error responses like npm's request (cross-domain)", function(assert) {
+    if (!window.XDomainRequest) {
+        xhr({
+            uri: "http://www.mocky.io/v2/55a02d63265126221a94f025",
+            useXDR: true
+        }, function(err, resp, body) {
+            assert.ifError(err, "no err")
+            assert.equal(resp.statusCode, 404)
+            assert.equal(typeof resp.rawRequest, "object")
+            assert.end()
+        })
+    } else {
+        assert.end();
+    }
+})
+
+test("[func] Returns a falsy body for 204 responses", function(assert) {
+    xhr({
+        uri: "/mock/no-content"
+    }, function(err, resp, body) {
+        assert.notOk(body, "body should be falsey")
+        assert.equal(resp.statusCode, 204)
+        assert.end()
+    })
+})
+
+test("[func] Calls the callback once even if error is thrown issue #127", function(assert) {
+    var count = 0;
+    setTimeout(function(){
+        assert.equal(count, 1, "expected one call")
+        assert.end()
+    },100)
+    try{
+        xhr({
+            uri: "instanterror://foo"
+        }, function(err, resp, body) {
+            count++;
+            throw Error("dummy error")
+        })
+    } catch(e){}
+})
+
+test("[func] Times out to an error ", function(assert) {
+    xhr({
+        timeout: 1,
+        uri: "/mock/timeout"
+    }, function(err, resp, body) {
+        assert.ok(err instanceof Error, "should return error")
+        assert.equal(err.message, "XMLHttpRequest timeout")
+        assert.equal(err.code, "ETIMEDOUT")
+        assert.equal(resp.statusCode, 0)
+        assert.end()
+    })
+})
+
+test("withCredentials option", function(assert) {
+    if (!window.XDomainRequest) {
+        var req = xhr({}, function() {})
+        assert.ok(!req.withCredentials,
+            "withCredentials not true"
+        )
+        req = xhr({
+            withCredentials: true
+        }, function() {})
+        assert.ok(
+            req.withCredentials,
+            "withCredentials set to true"
+        )
+    }
+    assert.end()
+})
+
+test("withCredentials ignored when using synchronous requests", function(assert) {
+    if (!window.XDomainRequest) {
+        var req = xhr({
+            withCredentials: true,
+            sync: true
+        }, function() {})
+        assert.ok(!req.withCredentials,
+            "sync overrides withCredentials"
+        )
+    }
+    assert.end()
+})
+
+test("XDR usage (run on IE8 or 9)", function(assert) {
+    var req = xhr({
+        useXDR: true,
+        uri: window.location.href,
+    }, function() {})
+
+    assert.ok(!window.XDomainRequest || window.XDomainRequest === req.constructor,
+        "Uses XDR when told to"
+    )
+
+
+    if (!!window.XDomainRequest) {
+        assert.throws(function() {
+            xhr({
+                useXDR: true,
+                uri: window.location.href,
+                headers: {
+                    "foo": "bar"
+                }
+            }, function() {})
+        }, true, "Throws when trying to send headers with XDR")
+    }
+    assert.end()
+})
+
+test("handles errorFunc call with no arguments provided", function(assert) {
+    var req = xhr({}, function(err) {
+        assert.ok(err instanceof Error, "callback should get an error")
+        assert.equal(err.message, "Unknown XMLHttpRequest Error", "error message incorrect")
+    })
+    assert.doesNotThrow(function() {
+        req.onerror()
+    }, "should not throw when error handler called without arguments")
+    assert.end()
+
+})
+
+test("constructs and calls callback without throwing", function(assert) {
+    assert.throws(function() {
+        xhr({})
+    }, "callback is not optional")
+    assert.end()
+})
+
+if (!window.XDomainRequest) {
+    var methods = ["get", "put", "post", "patch"]
+} else {
+    var methods = ["get", "post"]
+}
+
+test("[func] xhr[method] get, put, post, patch", function(assert) {
+    var i = 0
+
+    forEach(methods, function(method) {
+        xhr[method]({
+            uri: "/mock/200ok"
+        }, function(err, resp, body) {
+            i++
+            assert.ifError(err, "no err")
+            assert.equal(resp.statusCode, 200)
+            assert.equal(resp.method, method.toUpperCase())
+            if (i === methods.length) assert.end()
+        })
+    })
+})
+
+test("xhr[method] get, put, post, patch with url shorthands", function(assert) {
+    var i = 0
+    forEach(methods, function(method) {
+        var req = xhr[method]("/some-test", function() {})
+        i++
+        assert.equal(req.method, method.toUpperCase())
+
+        if (i === methods.length) assert.end()
+    })
+})
+
+
+test("xhr[method] get, put, post, patch with url shorthands and options", function(assert) {
+    var i = 0
+    forEach(methods, function(method) {
+        var req = xhr[method]("/some-test", {
+            headers: {
+                foo: 'bar'
+            }
+        }, function(err, resp, body) {
+            i++
+            assert.equal(resp.rawRequest.headers.foo, 'bar')
+            assert.equal(resp.method, method.toUpperCase())
+
+            if (i === methods.length) assert.end()
+        })
+    })
+})
+if (!window.XDomainRequest) {
+    test("[func] xhr.head", function(assert) {
+        xhr.head({
+            uri: "/mock/200ok",
+        }, function(err, resp, body) {
+            assert.ifError(err, "no err")
+            assert.equal(resp.statusCode, 200)
+            assert.equal(resp.method, "HEAD")
+            assert.notOk(resp.body)
+            assert.end()
+        })
+    })
+
+    test("xhr.head url shorthand", function(assert) {
+        xhr.head("/mock/200ok", function(err, resp, body) {
+            assert.equal(resp.method, "HEAD")
+            assert.end()
+        })
+    })
+
+    test("[func] xhr.del", function(assert) {
+        xhr.del({
+            uri: "/mock/200ok"
+        }, function(err, resp, body) {
+            assert.ifError(err, "no err")
+            assert.equal(resp.statusCode, 200)
+            assert.equal(resp.method, "DELETE")
+            assert.end()
+        })
+    })
+
+    test("xhr.del url shorthand", function(assert) {
+        xhr.del("/mock/200ok", function(err, resp, body) {
+            assert.equal(resp.method, "DELETE")
+            assert.end()
+        })
+    })
+}
+test("url signature without object", function(assert) {
+    xhr("/some-test", function(err, resp, body) {
+        assert.equal(resp.url, '/some-test')
+        assert.end()
+    })
+})
+
+test("url signature with object", function(assert) {
+    xhr("/some-test", {
+        headers: {
+            "foo": "bar"
+        }
+    }, function(err, resp, body) {
+        assert.equal(resp.url, '/some-test')
+        assert.equal(resp.rawRequest.headers.foo, 'bar')
+        assert.end()
+    })
+})
+
+test("XHR can be overridden", function(assert) {
+    var xhrs = 0
+    var noop = function() {}
+    var fakeXHR = function() {
+        xhrs++
+        this.open = this.send = noop
+    }
+    var xdrs = 0
+    var fakeXDR = function() {
+        xdrs++
+        this.open = this.send = noop
+    }
+    xhr.XMLHttpRequest = fakeXHR
+    xhr({}, function() {})
+    assert.equal(xhrs, 1, "created the custom XHR")
+
+    xhr.XDomainRequest = fakeXDR
+    xhr({
+        useXDR: true
+    }, function() {});
+    assert.equal(xdrs, 1, "created the custom XDR")
+    assert.end()
+})