@qooxdoo/framework
Version:
The JS Framework for Coders
384 lines (305 loc) • 10.5 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)
************************************************************************ */
/**
* @ignore(qx.test.Single.getInstance, qx.test.Single)
*/
qx.Class.define("qx.test.core.Object", {
extend: qx.dev.unit.TestCase,
include: qx.dev.unit.MMock,
events: {
test: "qx.event.type.Event",
test2: "qx.event.type.Event"
},
members: {
testHasListener() {
var listener = function () {};
this.assertFalse(this.hasListener("testHasListener", false));
this.assertFalse(this.hasListener("testHasListener2", false));
this.addListener("testHasListener", listener, this, false);
this.assertTrue(this.hasListener("testHasListener", false));
this.assertFalse(this.hasListener("testHasListener2", false));
this.addListener("testHasListener2", listener, this, false);
this.assertTrue(this.hasListener("testHasListener", false));
this.assertTrue(this.hasListener("testHasListener2", false));
this.removeListener("testHasListener", listener, this, false);
this.removeListener("testHasListener2", listener, this, false);
this.assertFalse(this.hasListener("testHasListener", false));
this.assertFalse(this.hasListener("testHasListener2", false));
},
testAddListener() {
var listener = function () {};
this.addListener("testAddListener", listener, this, false);
this.assertTrue(this.hasListener("testAddListener", false));
this.removeListener("testAddListener", listener, this, false);
this.assertFalse(this.hasListener("testAddListener", false));
},
testAddListenerOnce() {
var listener = function () {};
this.addListenerOnce("testAddListenerOnce", listener, this, false);
this.assertTrue(this.hasListener("testAddListenerOnce", false));
this.removeListener("testAddListenerOnce", listener, this, false);
this.assertFalse(this.hasListener("testAddListenerOnce", false));
},
testAddListenerOnceWithSameListener() {
var called = 0;
var listener = function () {
// debugger;
called++;
};
this.addListenerOnce("test", listener);
this.addListenerOnce("test2", listener);
this.fireEvent("test");
this.assertEquals(1, called);
this.fireEvent("test");
this.assertEquals(1, called);
},
testAddListenerOnceWithDifferentContext() {
var called = 0;
var listener = function () {
// debugger;
called++;
};
var context1 = { name: "context1" };
var context2 = { name: "context2" };
this.addListenerOnce("test", listener, context1);
this.addListenerOnce("test", listener, context2);
this.fireEvent("test");
this.assertEquals(2, called);
},
testRemoveListenerById() {
var id = this.addListener(
"testRemoveListenerById",
function () {},
this,
false
);
this.assertTrue(this.hasListener("testRemoveListenerById", false));
this.removeListenerById(id);
this.assertFalse(this.hasListener("testRemoveListenerById", false));
},
testRemoveListenerOnceById() {
var id = this.addListenerOnce(
"testRemoveListenerOnceById",
function () {},
this,
false
);
this.assertTrue(this.hasListener("testRemoveListenerOnceById", false));
this.removeListenerById(id);
this.assertFalse(this.hasListener("testRemoveListenerOnceById", false));
},
testUserData() {
var o = new qx.core.Object();
this.assertNull(o.getUserData("foo"));
o.setUserData("foo", "bar");
this.assertEquals("bar", o.getUserData("foo"));
this.assertNull(o.getUserData("bar"));
o.dispose();
},
testRemoveListenerByIdAsync() {
var executed = false;
var id = this.addListener("testRemoveListenerByIdAsync", () => {
executed = true;
});
this.removeListenerById(id);
this.fireEvent("testRemoveListenerByIdAsync");
var self = this;
window.setTimeout(function () {
self.resume(function () {
this.assertFalse(executed, "Event has been executed.");
}, self);
}, 3000);
this.wait();
},
testFireDataEvent() {
var self = this;
var data = [];
data.push({ value: "a", old: "b" });
data.push({ value: "a", old: "" });
data.push({ value: 1, old: 0 });
data.push({ value: 12, old: -123 });
data.push({ value: true, old: false });
data.push({ value: false, old: true });
data.push({ value: /^a/, old: null });
data.push({ value: ["a"], old: [] });
var emitter = new qx.test.core.EventEmitterDummy();
for (var i = 0; i < data.length; i++) {
this.assertEventFired(
emitter,
"eventName",
function () {
emitter.fireDataEvent("eventName", data[i].value, data[i].old);
},
function (e) {
self.assertEquals(data[i].value, e.getData());
self.assertEquals(data[i].old, e.getOldData());
}
);
}
emitter.dispose();
},
testFireEventTypeCheck() {
if (!this.isDebugOn()) {
return;
}
var emitter = new qx.test.core.EventEmitterDummy();
emitter.addListener("plain", function () {});
emitter.addListener("error", function () {});
emitter.addListener("data", function () {});
// store error logger
var oldError = qx.log.Logger.error;
var called = 0;
qx.log.Logger.error = function () {
called += 1;
};
emitter.fireEvent("plain", qx.event.type.Event);
this.assertEquals(0, called);
emitter.fireEvent("error", qx.event.type.Event);
this.assertEquals(1, called);
emitter.fireEvent("data", qx.event.type.Event);
this.assertEquals(2, called);
emitter.fireEvent("data", qx.event.type.Data);
this.assertEquals(2, called);
qx.log.Logger.error = oldError;
emitter.dispose();
},
testDisposeObject() {
// regular object dispose
var o = new qx.core.Object();
o.o = new qx.core.Object();
o._disposeObjects("o");
this.assertNull(o.o);
// check if a dispose of not existent object works
o._disposeObjects("x");
// object dispose with a singleton
qx.Class.define("qx.test.Single", {
extend: qx.core.Object,
type: "singleton"
});
o.dispose();
var o = new qx.core.Object();
o.s = qx.test.Single.getInstance();
this.assertException(function () {
o._disposeObjects("s");
});
qx.Class.undefine("qx.test.Single");
o.dispose();
},
testDisposeBindingWithChain() {
// object dispose with a singleton
qx.Class.define("qx.test.Single", {
extend: qx.core.Object,
properties: {
a: { event: "changeA", nullable: true }
}
});
var o = new qx.test.Single();
var o2 = new qx.test.Single();
var o3 = new qx.test.Single();
o.bind("a.a", o2, "a");
o.setA(o3);
this.assertEquals(1, o.getBindings().length);
o.dispose();
this.assertEquals(0, o.getBindings().length);
this.assertEventNotFired(o2, "changeA", function () {
o3.setA("affe");
});
o2.dispose();
o3.dispose();
qx.Class.undefine("qx.test.Single");
},
testDisposeBindingWithSelfChain() {
// object dispose with a singleton
qx.Class.define("qx.test.Single", {
extend: qx.core.Object,
properties: {
a: { event: "changeA", nullable: true },
b: { event: "changeB", nullable: true, apply: "applyB" }
},
members: {
applyB() {},
init() {
this.bind("a.a", this, "b");
}
}
});
var o = new qx.test.Single();
var o2 = new qx.test.Single();
var spy = this.spy(o, "applyB");
o.init();
o.setA(o2);
this.assertEquals(1, o.getBindings().length);
o.dispose();
o2.setA("affe");
this.assertEquals(0, o.getBindings().length);
this.assertCalledOnce(spy);
o2.dispose();
qx.Class.undefine("qx.test.Single");
},
testDisposeBinding() {
// object dispose with a singleton
qx.Class.define("qx.test.Single", {
extend: qx.core.Object,
properties: {
a: { event: "changeA", nullable: true },
b: { event: "changeB", nullable: true }
}
});
var o = new qx.test.Single();
var o2 = new qx.test.Single();
o.bind("a", o2, "a");
o.bind("a", o, "b");
o2.bind("a", o, "a");
this.assertEquals(3, o.getBindings().length);
this.assertEquals(2, o2.getBindings().length);
o.dispose();
o2.dispose();
qx.Class.undefine("qx.test.Single");
this.assertEquals(0, o.getBindings().length);
this.assertEquals(0, o2.getBindings().length);
},
testDisposeSingletonObject() {
// object dispose with a singleton and an object
qx.Class.define("qx.test.Single", {
extend: qx.core.Object,
type: "singleton"
});
var o = new qx.core.Object();
o.o = new qx.core.Object();
o.s = qx.test.Single.getInstance();
o._disposeSingletonObjects("o", "s");
this.assertTrue(o.o == null);
this.assertTrue(o.s == null);
qx.Class.undefine("qx.test.Single");
o.dispose();
},
/**
* @ignore(qx.test.MyClass)
*/
testIsPropertyInitialized() {
qx.Class.define("qx.test.MyClass", {
extend: qx.core.Object,
properties: {
a: {},
b: { init: false }
}
});
var o = new qx.test.MyClass();
this.assertFalse(o.isPropertyInitialized("a"));
o.setA(false);
this.assertTrue(o.isPropertyInitialized("a"));
this.assertTrue(o.isPropertyInitialized("b"));
qx.Class.undefine("qx.test.MyClass");
o.dispose();
}
}
});