Skip to content

Commit b0e9ef9

Browse files
Merge pull request #3 from RobotlegsJS/coverage
Improve code coverage
2 parents cea1161 + 9c641a8 commit b0e9ef9

File tree

7 files changed

+511
-14
lines changed

7 files changed

+511
-14
lines changed

src/org/osflash/signals/MonoSignal.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export class MonoSignal implements ISignal {
4545
// Clone so the Array cannot be affected from outside.
4646
this._valueClasses = value ? value.slice() : [];
4747
for (var i: number = this._valueClasses.length; i--;) {
48-
if (!(this._valueClasses[i] instanceof Object)) {
48+
if (typeof this._valueClasses[i] !== "function") {
4949
throw new Error('Invalid valueClasses argument: ' +
5050
'item at index ' + i + ' should be a Class but was:<' +
5151
this._valueClasses[i] + '>.' + this._valueClasses[i]); //@CHANGED - temp replacement for getQualifiedClassByName()
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import "../../../entry";
2+
3+
import { assert } from "chai";
4+
5+
import { DeluxeSignal } from "../../../../src/org/osflash/signals/DeluxeSignal";
6+
7+
describe("DeluxeSignaltargetTest", () => {
8+
9+
let signal: DeluxeSignal;
10+
let self = this;
11+
12+
beforeEach(() => {
13+
signal = new DeluxeSignal(self, Number, String, Boolean);
14+
});
15+
16+
afterEach(() => {
17+
signal.removeAll();
18+
signal = null;
19+
});
20+
21+
it("set_target_should_change_target()", () => {
22+
let target: object = {};
23+
signal.target = target;
24+
assert.equal(signal.target, target);
25+
});
26+
27+
it("set_same_target_should_not_change_target()", () => {
28+
signal.target = self;
29+
assert.equal(signal.target, self);
30+
});
31+
});
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import "../../../entry";
2+
3+
import { assert } from "chai";
4+
5+
import { DeluxeSignal } from "../../../../src/org/osflash/signals/DeluxeSignal";
6+
7+
describe("DeluxeSignalValueClassesTest", () => {
8+
9+
let signal: DeluxeSignal;
10+
let self = this;
11+
12+
beforeEach(() => {
13+
signal = new DeluxeSignal(self, Number, String, Boolean);
14+
});
15+
16+
afterEach(() => {
17+
signal.removeAll();
18+
signal = null;
19+
});
20+
21+
it("get_value_classes_should_return_same_value_classes_used_in_constructor()", () => {
22+
assert.deepEqual(signal.valueClasses, [Number, String, Boolean]);
23+
});
24+
25+
it("set_value_classes_should_accept_only_class_objects()", () => {
26+
signal.valueClasses = [Number, String, Boolean];
27+
});
28+
29+
it("set_value_classes_throws_error_when_objects_are_passed()", () => {
30+
assert.throws(() => {
31+
signal.valueClasses = [0, "", false];
32+
}, Error);
33+
});
34+
35+
it("dispatch_less_value_objects_throws_error_when_number_of_arguments_are_less_than_number_of_value_classes_1()", () => {
36+
assert.throws(() => {
37+
signal.dispatch(0);
38+
}, Error);
39+
});
40+
41+
it("dispatch_less_value_objects_throws_error_when_number_of_arguments_are_less_than_number_of_value_classes_2()", () => {
42+
assert.throws(() => {
43+
signal.dispatch(0, "");
44+
}, Error);
45+
});
46+
47+
it("dispatch_value_object_with_different_type_throws_error_1()", () => {
48+
assert.throws(() => {
49+
signal.dispatch(0, 0, 0);
50+
}, Error);
51+
});
52+
53+
it("dispatch_value_object_with_different_type_throws_error_2()", () => {
54+
assert.throws(() => {
55+
signal.dispatch("", "", "");
56+
}, Error);
57+
});
58+
59+
it("dispatch_value_object_with_different_type_throws_error_3()", () => {
60+
assert.throws(() => {
61+
signal.dispatch(true, true, true);
62+
}, Error);
63+
});
64+
65+
it("dispatch_value_object_with_correct_type_just_works()", () => {
66+
signal.dispatch(0, "hello", true);
67+
});
68+
});
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import "../../../entry";
2+
3+
import { assert } from "chai";
4+
5+
import { MonoSignal } from "../../../../src/org/osflash/signals/MonoSignal";
6+
7+
describe("MonoSignalValueClassesTest", () => {
8+
9+
let signal: MonoSignal;
10+
11+
beforeEach(() => {
12+
signal = new MonoSignal(Number, String, Boolean);
13+
});
14+
15+
afterEach(() => {
16+
signal.removeAll();
17+
signal = null;
18+
});
19+
20+
it("get_value_classes_should_return_same_value_classes_used_in_constructor()", () => {
21+
assert.deepEqual(signal.valueClasses, [Number, String, Boolean]);
22+
});
23+
24+
it("set_value_classes_should_accept_only_class_objects()", () => {
25+
signal.valueClasses = [Number, String, Boolean];
26+
});
27+
28+
it("set_value_classes_throws_error_when_objects_are_passed()", () => {
29+
assert.throws(() => {
30+
signal.valueClasses = [0, "", false];
31+
}, Error);
32+
});
33+
34+
it("dispatch_less_value_objects_throws_error_when_number_of_arguments_are_less_than_number_of_value_classes_1()", () => {
35+
assert.throws(() => {
36+
signal.dispatch(0);
37+
}, Error);
38+
});
39+
40+
it("dispatch_less_value_objects_throws_error_when_number_of_arguments_are_less_than_number_of_value_classes_2()", () => {
41+
assert.throws(() => {
42+
signal.dispatch(0, "");
43+
}, Error);
44+
});
45+
46+
it("dispatch_value_object_with_different_type_throws_error_1()", () => {
47+
assert.throws(() => {
48+
signal.dispatch(0, 0, 0);
49+
}, Error);
50+
});
51+
52+
it("dispatch_value_object_with_different_type_throws_error_2()", () => {
53+
assert.throws(() => {
54+
signal.dispatch("", "", "");
55+
}, Error);
56+
});
57+
58+
it("dispatch_value_object_with_different_type_throws_error_3()", () => {
59+
assert.throws(() => {
60+
signal.dispatch(true, true, true);
61+
}, Error);
62+
});
63+
64+
it("dispatch_value_object_with_correct_type_just_works()", () => {
65+
signal.dispatch(0, "hello", true);
66+
});
67+
});
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
import "../../../entry";
2+
3+
import { assert } from "chai";
4+
5+
import { IPrioritySignal } from "../../../../src/org/osflash/signals/IPrioritySignal";
6+
import { PrioritySignal } from "../../../../src/org/osflash/signals/PrioritySignal";
7+
import { ISignal } from "../../../../src/org/osflash/signals/ISignal";
8+
import { Signal } from "../../../../src/org/osflash/signals/Signal";
9+
10+
describe("PrioritySignalOnceTest", () => {
11+
12+
let prioritySignal: IPrioritySignal;
13+
14+
let gotListenerDispatchOrder: any[];
15+
16+
const A = "A";
17+
const B = "B";
18+
const C = "C";
19+
20+
beforeEach(() => {
21+
gotListenerDispatchOrder = [];
22+
prioritySignal = new PrioritySignal();
23+
});
24+
25+
afterEach(() => {
26+
gotListenerDispatchOrder = null;
27+
prioritySignal.removeAll();
28+
prioritySignal = null;
29+
});
30+
31+
it("listeners_added_once_with_higher_priority_should_be_removed_independant_of_order_added_1()", () => {
32+
let expectedListenerDispatchOrder: any[] = [A, B, C];
33+
34+
prioritySignal.addOnceWithPriority(listenerA, 3);
35+
prioritySignal.addOnceWithPriority(listenerB, 2);
36+
prioritySignal.addOnceWithPriority(listenerC, 1);
37+
38+
prioritySignal.dispatch();
39+
40+
assertArrayEqual(expectedListenerDispatchOrder, gotListenerDispatchOrder);
41+
assertNumListenersEqual(prioritySignal.numListeners, 0);
42+
});
43+
44+
it("listeners_added_once_with_higher_priority_should_be_removed_independant_of_order_added_2()", () => {
45+
let expectedListenerDispatchOrder: any[] = [A, B, C];
46+
47+
prioritySignal.addOnceWithPriority(listenerA, 3);
48+
prioritySignal.addOnceWithPriority(listenerC, 1);
49+
prioritySignal.addOnceWithPriority(listenerB, 2);
50+
51+
prioritySignal.dispatch();
52+
53+
assertArrayEqual(expectedListenerDispatchOrder, gotListenerDispatchOrder);
54+
assertNumListenersEqual(prioritySignal.numListeners, 0);
55+
});
56+
57+
it("listeners_added_once_with_higher_priority_should_be_removed_independant_of_order_added_3()", () => {
58+
let expectedListenerDispatchOrder: any[] = [A, B, C];
59+
60+
prioritySignal.addOnceWithPriority(listenerB, 2);
61+
prioritySignal.addOnceWithPriority(listenerA, 3);
62+
prioritySignal.addOnceWithPriority(listenerC, 1);
63+
64+
prioritySignal.dispatch();
65+
66+
assertArrayEqual(expectedListenerDispatchOrder, gotListenerDispatchOrder);
67+
assertNumListenersEqual(prioritySignal.numListeners, 0);
68+
});
69+
70+
it("listeners_added_once_with_higher_priority_should_be_removed_independant_of_order_added_4()", () => {
71+
let expectedListenerDispatchOrder: any[] = [A, B, C];
72+
73+
prioritySignal.addOnceWithPriority(listenerB, 2);
74+
prioritySignal.addOnceWithPriority(listenerC, 1);
75+
prioritySignal.addOnceWithPriority(listenerA, 3);
76+
77+
prioritySignal.dispatch();
78+
79+
assertArrayEqual(expectedListenerDispatchOrder, gotListenerDispatchOrder);
80+
assertNumListenersEqual(prioritySignal.numListeners, 0);
81+
});
82+
83+
it("listeners_added_once_with_higher_priority_should_be_removed_independant_of_order_added_5()", () => {
84+
let expectedListenerDispatchOrder: any[] = [A, B, C];
85+
86+
prioritySignal.addOnceWithPriority(listenerC, 1);
87+
prioritySignal.addOnceWithPriority(listenerA, 3);
88+
prioritySignal.addOnceWithPriority(listenerB, 2);
89+
90+
prioritySignal.dispatch();
91+
92+
assertArrayEqual(expectedListenerDispatchOrder, gotListenerDispatchOrder);
93+
assertNumListenersEqual(prioritySignal.numListeners, 0);
94+
});
95+
96+
it("listeners_added_once_with_higher_priority_should_be_removed_independant_of_order_added_6()", () => {
97+
let expectedListenerDispatchOrder: any[] = [A, B, C];
98+
99+
prioritySignal.addOnceWithPriority(listenerC, 1);
100+
prioritySignal.addOnceWithPriority(listenerB, 2);
101+
prioritySignal.addOnceWithPriority(listenerA, 3);
102+
103+
prioritySignal.dispatch();
104+
105+
assertArrayEqual(expectedListenerDispatchOrder, gotListenerDispatchOrder);
106+
assertNumListenersEqual(prioritySignal.numListeners, 0);
107+
});
108+
109+
function listenerA(): void {
110+
gotListenerDispatchOrder.push(A);
111+
}
112+
113+
function listenerB(): void {
114+
gotListenerDispatchOrder.push(B);
115+
}
116+
117+
function listenerC(): void {
118+
gotListenerDispatchOrder.push(C);
119+
}
120+
121+
function assertArrayEqual(expected: any[], got: any[]): void {
122+
assert.equal(expected.length, got.length, "array length unequal");
123+
for (let i = 0; i < gotListenerDispatchOrder.length; i++) {
124+
assert.equal(expected[i], got[i], "@i=" + i);
125+
}
126+
}
127+
128+
function assertNumListenersEqual(expected: number, got: number): void {
129+
assert.equal(expected, got);
130+
}
131+
});
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import "../../../entry";
2+
3+
import { Signal } from "../../../../src/org/osflash/signals/Signal";
4+
import { GenericEvent } from "../../../../src/org/osflash/signals/events/GenericEvent";
5+
import { ISlot } from "../../../../src/org/osflash/signals/ISlot";
6+
import { AsyncUtil } from "../../../util/AsyncUtil";
7+
import { checkGenericEvent } from "../../../util/TestBase";
8+
9+
describe("SlotPauseResumeTest", () => {
10+
11+
let signal: Signal;
12+
let async: AsyncUtil = new AsyncUtil();
13+
14+
beforeEach(() => {
15+
signal = new Signal();
16+
});
17+
18+
it("add_listener_pause_then_resume_on_slot_should_dispatch", (done) => {
19+
let slot: ISlot = signal.add(async.add(checkGenericEvent, 10, done));
20+
slot.enabled = false;
21+
slot.enabled = true;
22+
23+
signal.dispatch(new GenericEvent());
24+
});
25+
26+
it("addOnce_listener_pause_then_resume_on_slot_should_dispatch", (done) => {
27+
let slot: ISlot = signal.addOnce(async.add(checkGenericEvent, 10, done));
28+
slot.enabled = false;
29+
slot.enabled = true;
30+
31+
signal.dispatch(new GenericEvent());
32+
});
33+
34+
});
35+

0 commit comments

Comments
 (0)