@qooxdoo/framework
Version:
The JS Framework for Coders
533 lines (504 loc) • 14.7 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2018 Zenesis Ltd, john.spackman@zenesis.com
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* John Spackman (johnspackman)
************************************************************************ */
/**
* @ignore(qx.Promise)
*/
qx.Class.define("qx.test.event.Utils", {
extend: qx.dev.unit.TestCase,
members: {
testQxPromiseNotDefined() {
if (qx.core.Environment.get("qx.promise")) {
this.assertTrue(true);
} else {
this.assertTrue(qx.Promise === undefined);
}
},
testNoPromises() {
var Utils = qx.event.Utils;
var tracker = {};
var str = "";
var self = this;
var finished = false;
Utils.catch(tracker, function () {
self.assertTrue(false);
});
Utils.then(tracker, function () {
return (str += "A");
});
Utils.then(tracker, function (value) {
self.assertEquals("A", value);
return (str += "B");
});
Utils.then(tracker, function () {
str += "C";
});
Utils.then(tracker, function () {
self.assertEquals("ABC", str);
finished = true;
});
this.assertTrue(finished);
},
testSomeDelayedPromises() {
if (qx.core.Environment.get("qx.promise")) {
var Utils = qx.event.Utils;
var tracker = {};
var str = "";
var self = this;
Utils.then(tracker, function () {
str += "A";
});
Utils.then(tracker, function () {
return new qx.Promise(function (resolve) {
setTimeout(function () {
str += "B";
resolve(str);
}, 200);
});
});
Utils.then(tracker, function (value) {
self.assertEquals("AB", value);
str += "C";
});
Utils.then(tracker, function () {
self.assertEquals("ABC", str);
self.resume();
});
self.wait();
} else {
this.skip("Skipping because qx.promise==false");
}
},
testSomeInstantPromises() {
if (qx.core.Environment.get("qx.promise")) {
var Utils = qx.event.Utils;
var tracker = {};
var str = "";
var self = this;
Utils.then(tracker, function () {
str += "A";
});
Utils.then(tracker, function () {
str += "B";
return qx.Promise.resolve(str);
});
Utils.then(tracker, function (value) {
self.assertEquals("AB", value);
str += "C";
});
Utils.then(tracker, function () {
self.assertEquals("ABC", str);
self.resume();
});
self.wait();
} else {
this.skip("Skipping because qx.promise==false");
}
},
testSomeInstantPromises2() {
if (qx.core.Environment.get("qx.promise")) {
var Utils = qx.event.Utils;
var tracker = {};
var str = "";
var self = this;
Utils.then(tracker, function () {
str += "A";
});
Utils.then(tracker, function () {
str += "B";
return qx.Promise.resolve();
});
Utils.then(tracker, function () {
return new qx.Promise(function (resolve) {
setTimeout(function () {
str += "C";
resolve(str);
}, 200);
});
});
Utils.then(tracker, function (value) {
self.assertEquals("ABC", value);
self.assertEquals("ABC", str);
self.resume();
});
self.wait();
} else {
this.skip("Skipping because qx.promise==false");
}
},
testSomeAbort() {
var Utils = qx.event.Utils;
var tracker = {};
var str = "";
var self = this;
var finished = false;
Utils.then(tracker, function () {
str += "A";
});
Utils.then(tracker, function () {
return Utils.ABORT;
});
Utils.then(tracker, function () {
str += "C";
});
Utils.then(tracker, function () {
self.assertTrue(false);
});
Utils.catch(tracker, function () {
self.assertEquals("A", str);
finished = true;
});
this.assertTrue(finished);
},
testSomeReject() {
if (qx.core.Environment.get("qx.promise")) {
var Utils = qx.event.Utils;
var tracker = {};
var str = "";
var self = this;
Utils.then(tracker, function () {
str += "A";
});
Utils.then(tracker, function () {
return new qx.Promise(function (resolve, reject) {
setTimeout(function () {
reject();
}, 200);
});
});
Utils.then(tracker, function () {
str += "C";
});
Utils.then(tracker, function () {
self.assertTrue(false);
});
Utils.catch(tracker, function () {
self.assertEquals("A", str);
self.resume();
});
self.wait();
} else {
this.skip("Skipping because qx.promise==false");
}
},
testResolveAndReject() {
if (qx.core.Environment.get("qx.promise")) {
var Utils = qx.event.Utils;
var tracker = {};
var str = "";
var self = this;
Utils.then(tracker, function () {
str += "A";
});
Utils.then(tracker, function () {
return new qx.Promise(function (resolve) {
setTimeout(function () {
str += "B";
resolve();
}, 200);
});
});
Utils.then(tracker, function () {
return new qx.Promise(function (resolve, reject) {
setTimeout(function () {
reject();
}, 200);
});
});
Utils.then(tracker, function () {
self.assertTrue(false);
});
Utils.catch(tracker, function () {
self.assertEquals("AB", str);
self.resume();
});
self.wait();
} else {
this.skip("Skipping because qx.promise==false");
}
},
testSeries1() {
if (qx.core.Environment.get("qx.promise")) {
var Utils = qx.event.Utils;
var tracker = {};
var str = "";
var self = this;
Utils.catch(tracker, function () {
self.assertTrue(false);
});
Utils.then(tracker, function () {
return Utils.series(["A", "B", "C", "D"], function (value) {
if (value === "C") {
return new qx.Promise(function (resolve, reject) {
setTimeout(function () {
str += value;
resolve();
}, 200);
});
} else {
str += value;
return null;
}
});
});
Utils.then(tracker, function () {
self.assertEquals("ABCD", str);
self.resume();
return null;
});
self.wait();
} else {
this.skip("Skipping because qx.promise==false");
}
},
testSeriesAbort() {
if (qx.core.Environment.get("qx.promise")) {
var Utils = qx.event.Utils;
var tracker = {};
var str = "";
var self = this;
Utils.catch(tracker, function () {
self.assertEquals("AB", str);
self.resume();
});
Utils.then(tracker, function () {
return Utils.series(["A", "B", "C", "D"], function (value) {
if (value === "B") {
return new qx.Promise(function (resolve, reject) {
setTimeout(function () {
str += value;
resolve();
}, 200);
});
} else if (value === "C") {
return Utils.ABORT;
} else {
str += value;
return null;
}
});
});
Utils.then(tracker, function () {
self.assertTrue(false);
});
self.wait();
} else {
this.skip("Skipping because qx.promise==false");
}
},
/**
* @ignore(Promise)
*/
testNativePromiseReturns() {
if (Promise !== undefined) {
var self = this;
var p = new Promise(function (resolve) {
setTimeout(resolve, 100);
});
p = p.then(function () {
var p2 = new Promise(function (resolve) {
setTimeout(resolve, 100);
});
return p2.then(function () {
return true;
});
});
p = p.then(function () {
self.resume();
});
this.wait();
} else {
this.skip("Skipping because native Promise is not defined");
}
},
testPromiseReturns() {
if (qx.core.Environment.get("qx.promise")) {
var self = this;
var p = new qx.Promise(function (resolve) {
setTimeout(function () {
console.log("testPromiseReturns:: resolving p");
resolve();
}, 100);
});
p = p.then(function () {
var p2 = new qx.Promise(function (resolve) {
setTimeout(function () {
console.log("testPromiseReturns:: resolving p2");
resolve();
}, 100);
});
return p2.then(function () {
console.log("testPromiseReturns:: resolving post p2");
});
});
p = p.then(function () {
console.log("testPromiseReturns:: outer then, resuming test");
self.resume();
});
this.wait();
} else {
this.skip("Skipping because native Promise is not defined");
}
},
testSeriesReject() {
if (qx.core.Environment.get("qx.promise")) {
var Utils = qx.event.Utils;
var tracker = {};
var str = "";
var self = this;
Utils.catch(tracker, function () {
self.assertEquals("AB", str);
self.resume();
});
Utils.then(tracker, function () {
return Utils.series(["A", "B", "C", "D"], function (value) {
if (value === "C") {
return new qx.Promise(function (resolve, reject) {
setTimeout(function () {
reject();
}, 200);
});
} else {
str += value;
return null;
}
});
});
Utils.then(tracker, function () {
self.assertTrue(false);
});
self.wait();
} else {
this.skip("Skipping because native Promise is not defined");
}
},
testSeriesRejectNested() {
if (qx.core.Environment.get("qx.promise")) {
var Utils = qx.event.Utils;
var tracker = {};
var str = "";
var self = this;
Utils.catch(tracker, function () {
self.assertEquals("ABC1", str);
self.resume();
});
Utils.then(tracker, function () {
return Utils.series(["A", "B", "C", "D"], function (letter) {
if (letter === "C") {
str += letter;
return Utils.series([1, 2, 3, 4], function (number) {
if (number == 2) {
return new qx.Promise(function (resolve, reject) {
setTimeout(function () {
reject();
}, 200);
});
} else {
str += number;
}
return null;
});
} else {
str += letter;
return null;
}
});
});
Utils.then(tracker, function () {
self.assertTrue(false);
return null;
});
self.wait();
} else {
this.skip("Skipping because native Promise is not defined");
}
},
testSeriesNested() {
if (qx.core.Environment.get("qx.promise")) {
var Utils = qx.event.Utils;
var tracker = {};
var str = "";
var self = this;
Utils.catch(tracker, function () {
self.assertTrue(false);
});
Utils.then(tracker, function () {
return Utils.series(["A", "B", "C", "D"], function (letter) {
if (letter === "C") {
str += letter;
return Utils.series([1, 2, 3, 4], function (number) {
if (number == 2) {
return new qx.Promise(function (resolve, reject) {
setTimeout(function () {
str += number;
resolve();
}, 200);
});
} else {
str += number;
}
return null;
});
} else {
str += letter;
return null;
}
});
});
Utils.then(tracker, function () {
self.assertEquals("ABC1234D", str);
self.resume();
return null;
});
self.wait();
} else {
this.skip("Skipping because native Promise is not defined");
}
},
testTrack() {
if (qx.core.Environment.get("qx.promise")) {
var Utils = qx.event.Utils;
var str = "";
var self = this;
var finished = true;
function outer() {
var tracker = {};
Utils.track(tracker, inner);
Utils.then(tracker, function () {
self.assertEquals("ABC", str);
finished = true;
});
self.assertTrue(finished);
}
function add(ch, delay) {
return function () {
return new qx.Promise(function (resolve) {
setTimeout(function () {
str += ch;
resolve();
}, 300);
});
};
}
function inner() {
var tracker = {};
Utils.then(tracker, add("A", 300));
Utils.then(tracker, add("B", 200));
Utils.then(tracker, add("C", 100));
return tracker.promise;
}
outer();
} else {
this.skip("Skipping because native Promise is not defined");
}
}
}
});