UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

234 lines (184 loc) 6.14 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2004-2011 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Tristan Koch (tristankoch) ************************************************************************ */ qx.Class.define("qx.test.io.request.XhrWithRemote", { extend: qx.dev.unit.TestCase, include: [qx.test.io.MRemoteTest, qx.dev.unit.MRequirements], members: { setUp: function() { this.req = new qx.io.request.Xhr(); this.require(["http"]); }, tearDown: function() { this.req.dispose(); }, "test: fetch resource": function() { var req = this.req, url = this.noCache(this.getUrl("qx/test/xmlhttp/sample.txt")); req.addListener("success", function(e) { this.resume(function() { this.assertEquals("SAMPLE", e.getTarget().getResponseText()); }, this); }, this); req.setUrl(url); req.send(); this.wait(); }, "test: recycle request": function() { var req = new qx.io.request.Xhr(), url1 = this.noCache(this.getUrl("qx/test/xmlhttp/sample.txt") + "?1"), url2 = this.noCache(this.getUrl("qx/test/xmlhttp/sample.txt") + "?2"), count = 0; req.addListener("success", function() { count++; if (count == 2) { this.resume(); } else { req.setUrl(url2); req.send(); } }, this); req.setUrl(url1); req.send(); this.wait(); }, "test: progress phases": function() { var req = this.req, phases = [], expectedPhases = ["opened", "sent", "loading", "load", "success"], url = this.getUrl("qx/test/xmlhttp/sample.txt"); req.addListener("changePhase", function() { phases.push(req.getPhase()); if (req.getPhase() === "success") { this.resume(function() { this.assertArrayEquals(expectedPhases, phases); }, this); } }, this); req.setUrl(url); req.send(); this.wait(); }, "test: progress phases when abort after send": function() { var req = this.req, phases = [], expectedPhases = ["opened", "sent", "abort"], url = this.getUrl("qx/test/xmlhttp/sample.txt"); req.addListener("changePhase", function() { phases.push(req.getPhase()); if (req.getPhase() === "abort") { this.assertArrayEquals(expectedPhases, phases); } }, this); req.setUrl(url); req.send(); req.abort(); }, "test: progress phases when abort after loading": function() { // Note: // * Breaks on Windows 7 and OS X in every browser because the loading phase // is never entered // * Also breaks on Windows 10 in every browser this.require(["noIe", "noWin7", "noOsx", "noWin10"]); var req = this.req, phases = [], expectedPhases = ["opened", "sent", "loading", "abort"], url = this.noCache(this.getUrl("qx/test/xmlhttp/loading.php")) + "&duration=100"; req.addListener("changePhase", function() { phases.push(req.getPhase()); if (req.getPhase() === "abort") { this.resume(function() { this.assertArrayEquals(expectedPhases, phases); }); } }, this); req.setUrl(url); req.send(); // Abort loading. Give remote some time to respond. qx.event.Timer.once(function() { req.abort(); }, this, 500); this.wait(); }, "test: timeout": function() { var req = this.req, url = this.noCache(this.getUrl("qx/test/xmlhttp/loading.php")) + "&duration=100"; req.addListener("timeout", function() { this.resume(function() { this.assertEquals("timeout", req.getPhase()); }); }, this); req.setUrl(url); req.setTimeout(1/1000); req.send(); this.wait(); }, "test: timeout with header call": function() { var req = this.req, url = this.noCache(this.getUrl("qx/test/xmlhttp/loading.php")) + "&duration=100"; req.addListener("timeout", function() { this.resume(function() { try { req.getResponseHeader("X-UI-My-Header"); throw new Error("DOM exception expected!"); } catch (ex) {} }); }, this); req.setUrl(url); req.setTimeout(1/1000); req.send(); this.wait(); }, // "test: fetch resources simultaneously": function() { // this.require(["php"]); // // var count = 1, // upTo = 20, // startedAt = new Date(), // duration = 0; // // for (var i=0; i<upTo; i++) { // var req = new qx.io.request.Xhr(), // url = this.noCache(this.getUrl("qx/test/xmlhttp/loading.php")) + "&duration=6"; // // req.addListener("success", function() { // this.resume(function() { // // In seconds // duration = (new Date() - startedAt) / 1000; // this.debug("Request #" + count + " completed (" + duration + ")"); // if (count == upTo) { // return; // } // // ++count; // this.wait(6000 + 1000); // }, this); // }, this); // // req.setUrl(url); // req.send(); // } // // // Provided two concurrent requests are made (each 6s), 20 requests // // (i.e. 10 packs of requests) should complete after 60s // this.wait(60000 + 1000); // }, noCache: function(url) { return qx.util.Uri.appendParamsToUrl(url, "nocache=" + (new Date).valueOf()); }, hasNoIe: function() { return !(qx.core.Environment.get("engine.name") == "mshtml"); } } });