UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

136 lines (107 loc) 3.71 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2007-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: * Adrian Olaru (adrianolaru) ************************************************************************ */ /* ************************************************************************ ************************************************************************ */ /** * * @asset(qx/test/webworker.js) */ qx.Class.define("qx.test.bom.WebWorker", { extend : qx.dev.unit.TestCase, members : { _url: null, _worker: null, _send: null, /* * Firefox 8+ throws an exception ("Could not get domain") when trying * to create a worker using a source URI that doesn't contain a TLD, e.g. * "localhost" or an IP address. * * http://bugzilla.qooxdoo.org/show_bug.cgi?id=5565 * https://bugzilla.mozilla.org/show_bug.cgi?id=683280 */ _isBuggyGecko : function() { return qx.core.Environment.get("engine.name") === "gecko" && parseInt(qx.core.Environment.get("engine.version"), 10) >= 8 && parseInt(qx.core.Environment.get("engine.version"), 10) < 9; }, setUp: function() { this._url = qx.util.ResourceManager.getInstance().toUri("qx/test/webworker.js"); if (this._isBuggyGecko()) { throw new qx.dev.unit.RequirementError("foo", "Test skipped due to Firefox bug #683280"); } this._worker = new qx.bom.WebWorker(this._url); this._send = function(message, fn) { this._worker.addListener("message", function(e) { this.assertType(e.getData(), typeof message); fn.call(this, message, e); }, this); this._worker.postMessage(message); }; }, tearDown: function() { this._worker.dispose(); this._worker = null; this._send = null; this._url = null; }, testConstructor: function() { this.assertInstance(this._worker, qx.bom.WebWorker); }, testMessageEvent: function() { this._send("message", function(mess, e) { this.assertIdentical(mess, e.getData()); }); }, testErrorEvent: function() { var message = "error"; this._worker.addListener("error", function(e) { this.assertTrue(/error/.test(e.getData())); }, this); this._worker.postMessage(message); }, testPostMessageWithNumber: function() { this._send(1, function(mess, e) { this.assertIdentical(mess, e.getData()); }); }, testPostMessageWithBoolean: function() { this._send(true, function(mess, e) { this.assertIdentical(mess, e.getData()); }); }, testPostMessageWithNull: function() { this._send(null, function(mess, e) { this.assertIdentical(mess, e.getData()); }); }, testPostMessageWithObject: function() { //this._send({a:"1", b:2, c:3}); this._send({a:"1", b:2, c:true}, function(mess, e) { this.assertIdentical(mess.a, e.getData().a); this.assertIdentical(mess.b, e.getData().b); this.assertIdentical(mess.c, e.getData().c); }); }, testPostMessageWithArray: function() { //this._send(["1", 2, true]); this._send(["1", 2, true], function(mess, e) { this.assertIdentical(mess[0], e.getData()[0]); this.assertIdentical(mess[1], e.getData()[1]); this.assertIdentical(mess[2], e.getData()[2]); }); } } });