signal stress tests
This commit is contained in:
@@ -220,7 +220,8 @@ class Signal<T> {
|
|||||||
|
|
||||||
public function add(listener:T):Void {
|
public function add(listener:T):Void {
|
||||||
var pos = listeners.indexOf(listener);
|
var pos = listeners.indexOf(listener);
|
||||||
if (pos == -1) checkLock(); else listeners.splice(pos, 1);
|
checkLock();
|
||||||
|
if (pos > -1) listeners.splice(pos, 1);
|
||||||
listeners.push(listener);
|
listeners.push(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,6 +49,52 @@ class SignalTest extends BuddySuite {
|
|||||||
callNum.should.be(3);
|
callNum.should.be(3);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("signal should correct add/remove listeners", {
|
||||||
|
function listener2(_, _) {
|
||||||
|
callNum ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
function listener(_, _) {
|
||||||
|
fs.add(listener2);
|
||||||
|
callNum++;
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.add(listener);
|
||||||
|
fs.dispatch(null, null);
|
||||||
|
|
||||||
|
callNum.should.be(1); // 1 listener only
|
||||||
|
|
||||||
|
fs.dispatch(null, null);
|
||||||
|
|
||||||
|
callNum.should.be(3); // listener2 added
|
||||||
|
|
||||||
|
fs.remove(listener2);
|
||||||
|
fs.dispatch(null, null);
|
||||||
|
|
||||||
|
callNum.should.be(4); // listener2 removed
|
||||||
|
|
||||||
|
fs.removeAll();
|
||||||
|
fs.dispatch(null, null);
|
||||||
|
|
||||||
|
callNum.should.be(4); // all listeners removed
|
||||||
|
});
|
||||||
|
|
||||||
|
it("signal should correct dispatch in listener", {
|
||||||
|
function listener(_, _) {
|
||||||
|
fs.remove(listener);
|
||||||
|
fs.dispatch(null, null);
|
||||||
|
callNum++;
|
||||||
|
}
|
||||||
|
var callNum2 = 0;
|
||||||
|
function listener2(_, _) callNum2++;
|
||||||
|
|
||||||
|
fs.add(listener);
|
||||||
|
fs.add(listener2);
|
||||||
|
fs.dispatch(null, null);
|
||||||
|
|
||||||
|
callNum.should.be(1);
|
||||||
|
callNum2.should.be(2);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("MethodSignal functionality tests", {
|
describe("MethodSignal functionality tests", {
|
||||||
|
|||||||
Reference in New Issue
Block a user