@qooxdoo/framework
Version:
The JS Framework for Coders
271 lines (214 loc) • 6.97 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2007-2008 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:
* Fabian Jakobs (fjakobs)
************************************************************************ */
/* ************************************************************************
************************************************************************ */
/**
* @asset(qx/test/*)
* @ignore(qx.test.PART_FILES.*)
*/
qx.Class.define("qx.test.Part",
{
extend : qx.dev.unit.TestCase,
include : qx.test.io.MRemoteTest,
members :
{
testLoaderStructureParsing : function()
{
var loader = {
parts : {
"juhu" : [0, 1],
"kinners" : [0, 2]
},
packages : {
0 : {uris : ["1.js"]},
1 : {uris : ["2.js"]},
2 : {uris : ["3.1.js", "3.2.js"]}
},
closureParts : {"juhu": true},
boot: "juhu"
};
var partLoader = new qx.Part(loader);
// get the parts
var parts = partLoader.getParts();
this.assertEquals(2, Object.keys(parts).length);
var juhu = parts["juhu"];
var kinners = parts["kinners"];
// check part instances
this.assertInstance(juhu, qx.io.part.ClosurePart);
this.assertInstance(kinners, qx.io.part.Part);
// confirm part packages
var packages = kinners.getPackages();
this.assertEquals(2, packages.length);
this.assertEquals("0", packages[0].getId());
this.assertEquals("2", packages[1].getId());
// check package uris
var pkg2 = packages[1];
var pkg2Urls = pkg2.getUrls();
var refUrls = loader.packages[2].uris;
for (var s=0; s<refUrls.length; s++){
this.assertMatch(pkg2Urls[s], new RegExp(refUrls[s] + ".*")); // matches "?nocache=..." if present
}
},
testPreload : function()
{
qx.test.PART_FILES = [];
var loader = {
parts : {
"juhu" : ["p1"],
"affe" : ["p0"]
},
packages : {
p0 : { uris : ["boot.js"]},
p1 : { uris : [this.getUrl("qx/test/part/file1-closure.js")]}
},
closureParts : {"juhu": true},
boot: "affe"
};
var partLoader = new qx.Part(loader);
qx.Part.$$instance = partLoader;
var self = this;
var part = partLoader.getParts()["juhu"];
window.setTimeout(function() {
self.resume(function() {
self.assertEquals(0, qx.test.PART_FILES.length);
self.assertJsonEquals([], qx.test.PART_FILES);
self.assertEquals("initialized", part.getReadyState());
self.assertEquals("cached", part.getPackages()[0].getReadyState());
// execute closure to check if it is the correct one
part.getPackages()[0].execute();
self.assertJsonEquals(["file1-closure"], qx.test.PART_FILES);
});
}, 1000);
partLoader.preload("juhu");
this.wait();
},
testPreloadCallback : function()
{
qx.test.PART_FILES = [];
var loader = {
parts : {
"juhu" : ["p1"],
"affe" : ["p0"]
},
packages : {
p0 : { uris : ["boot.js"]},
p1 : { uris : [this.getUrl("qx/test/part/file1-closure.js")]}
},
closureParts : {"juhu": true},
boot: "affe"
};
var partLoader = new qx.Part(loader);
qx.Part.$$instance = partLoader;
var self = this;
var preloadExecuted = false;
partLoader.preload(["affe", "juhu"], function(states) {
self.resume(function() {
preloadExecuted = true;
self.assertEquals(self, this, "context wrong");
self.assertEquals("complete", states[0], "states wrong");
self.assertEquals("initialized", states[1], "states wrong");
}, self);
}, this);
this.wait();
},
testPreloadAndLoadAfterwards : function()
{
qx.test.PART_FILES = [];
var loader = {
parts : {
"juhu" : ["p1"],
"affe" : ["p0"]
},
packages : {
p0 : { uris : ["boot.js"]},
p1 : { uris : [this.getUrl("qx/test/part/file1-closure.js")]}
},
closureParts : {"juhu": true},
boot: "affe"
};
var partLoader = new qx.Part(loader);
qx.Part.$$instance = partLoader;
partLoader.preload("juhu");
var part = partLoader.getParts()["juhu"];
part.getPackages()[0].loadClosure = function() {
self.resume(function() {
self.fail("load called twice!");
});
};
partLoader.require("juhu", function() {
this.resume(function() {
this.assertEquals("complete", part.getPackages()[0].getReadyState());
this.assertEquals("complete", part.getReadyState());
this.assertEquals(1, qx.test.PART_FILES.length);
this.assertJsonEquals(["file1-closure"], qx.test.PART_FILES);
});
}, this);
this.wait();
},
testRequireState : function()
{
qx.test.PART_FILES = [];
// create a dummy loader
var loader = {
parts : {
"juhu" : ["p1"],
"affe" : ["p0"],
"fail" : ["p2"]
},
packages : {
p0 : { uris : ["boot.js"]},
p1 : { uris : [this.getUrl("qx/test/part/file1-closure.js")]},
p2 : { uris : ["_fail.js"]}
},
closureParts : {"juhu": true, "fail" : true},
boot: "affe"
};
var partLoader = new qx.Part(loader);
qx.Part.$$instance = partLoader;
// preload one part
partLoader.preload("juhu");
var timeout = qx.Part.TIMEOUT;
qx.Part.TIMEOUT = 1000;
// require all three parts and check the ready states
partLoader.require(["affe", "juhu", "fail"], function(states) {
this.resume(function() {
qx.Part.TIMEOUT = timeout;
this.assertEquals("complete", states[0]);
this.assertEquals("complete", states[1]);
this.assertEquals("error", states[2]);
delete qx.Part.$$instance;
}, this);
}, this);
this.wait();
},
testRequireUnknownPart: function () {
qx.test.PART_FILES = [];
// create a dummy loader
var loader = {
parts : {
"affe" : ["p0"]
},
packages : {
p0 : { uris : ["boot.js"]}
},
boot: "affe"
};
var partLoader = new qx.Part(loader);
qx.Part.$$instance = partLoader;
// require unknown part
this.assertException(function () {
partLoader.require(['unknown']);
}, Error);
delete qx.Part.$$instance;
}
}
});