as3signals 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.textile +51 -0
- data/Gemfile +6 -0
- data/MIT-LICENSE.txt +22 -0
- data/README.textile +43 -0
- data/Rakefile +52 -0
- data/as3-signals.as3proj +87 -0
- data/as3-signals.docproj +9 -0
- data/as3signals.gemspec +24 -0
- data/build-asunit.properties +7 -0
- data/build-asunit.xml +34 -0
- data/build.properties +20 -0
- data/build.xml +53 -0
- data/lib/as3signals.rb +15 -0
- data/src/org/osflash/signals/DeluxeSignal.as +260 -0
- data/src/org/osflash/signals/IDeluxeSignal.as +34 -0
- data/src/org/osflash/signals/IDispatcher.as +15 -0
- data/src/org/osflash/signals/ISignal.as +44 -0
- data/src/org/osflash/signals/ISignalOwner.as +13 -0
- data/src/org/osflash/signals/Signal.as +206 -0
- data/src/org/osflash/signals/events/GenericEvent.as +44 -0
- data/src/org/osflash/signals/events/IBubbleEventHandler.as +14 -0
- data/src/org/osflash/signals/events/IEvent.as +27 -0
- data/src/org/osflash/signals/natives/INativeDispatcher.as +34 -0
- data/src/org/osflash/signals/natives/NativeMappedSignal.as +230 -0
- data/src/org/osflash/signals/natives/NativeRelaySignal.as +71 -0
- data/src/org/osflash/signals/natives/NativeSignal.as +176 -0
- data/tests/org/osflash/signals/AllTests.as +44 -0
- data/tests/org/osflash/signals/AllTestsRunner.as +19 -0
- data/tests/org/osflash/signals/AmbiguousRelationshipTest.as +60 -0
- data/tests/org/osflash/signals/DeluxeSignalAmbiguousRelationshipTest.as +60 -0
- data/tests/org/osflash/signals/DeluxeSignalDispatchExtraArgsTest.as +43 -0
- data/tests/org/osflash/signals/DeluxeSignalDispatchNoArgsTest.as +55 -0
- data/tests/org/osflash/signals/DeluxeSignalDispatchNonEventTest.as +67 -0
- data/tests/org/osflash/signals/DeluxeSignalSplitInterfacesTest.as +41 -0
- data/tests/org/osflash/signals/DeluxeSignalTest.as +134 -0
- data/tests/org/osflash/signals/DeluxeSignalWithBubblingEventTest.as +129 -0
- data/tests/org/osflash/signals/DeluxeSignalWithCustomEventTest.as +84 -0
- data/tests/org/osflash/signals/DeluxeSignalWithGenericEventTest.as +190 -0
- data/tests/org/osflash/signals/GenericEventTest.as +62 -0
- data/tests/org/osflash/signals/PriorityListenersTest.as +68 -0
- data/tests/org/osflash/signals/RedispatchedEventTest.as +51 -0
- data/tests/org/osflash/signals/SignalDispatchArgsTest.as +74 -0
- data/tests/org/osflash/signals/SignalDispatchNoArgsTest.as +55 -0
- data/tests/org/osflash/signals/SignalDispatchNonEventTest.as +81 -0
- data/tests/org/osflash/signals/SignalSplitInterfacesTest.as +47 -0
- data/tests/org/osflash/signals/SignalTest.as +267 -0
- data/tests/org/osflash/signals/SignalWithCustomEventTest.as +107 -0
- data/tests/org/osflash/signals/natives/AmbiguousRelationshipInNativeSignalTest.as +63 -0
- data/tests/org/osflash/signals/natives/NativeMappedSignalBoundaryUseTest.as +100 -0
- data/tests/org/osflash/signals/natives/NativeMappedSignalDefaultsTest.as +78 -0
- data/tests/org/osflash/signals/natives/NativeMappedSignalFunctionArgTest.as +148 -0
- data/tests/org/osflash/signals/natives/NativeMappedSignalFunctionNoArgsTest.as +95 -0
- data/tests/org/osflash/signals/natives/NativeMappedSignalObjectArgTest.as +85 -0
- data/tests/org/osflash/signals/natives/NativeRelaySignalTest.as +174 -0
- data/tests/org/osflash/signals/natives/NativeSignalTest.as +312 -0
- metadata +152 -0
@@ -0,0 +1,190 @@
|
|
1
|
+
package org.osflash.signals
|
2
|
+
{
|
3
|
+
import asunit.asserts.*;
|
4
|
+
import asunit.framework.IAsync;
|
5
|
+
|
6
|
+
import org.osflash.signals.events.GenericEvent;
|
7
|
+
import org.osflash.signals.events.IEvent;
|
8
|
+
|
9
|
+
import flash.display.Sprite;
|
10
|
+
|
11
|
+
public class DeluxeSignalWithGenericEventTest
|
12
|
+
{
|
13
|
+
[Inject]
|
14
|
+
public var async:IAsync;
|
15
|
+
|
16
|
+
protected var completed:DeluxeSignal;
|
17
|
+
protected var delegate:Function;
|
18
|
+
|
19
|
+
[Before]
|
20
|
+
public function setUp():void
|
21
|
+
{
|
22
|
+
completed = new DeluxeSignal(this);
|
23
|
+
}
|
24
|
+
|
25
|
+
[After]
|
26
|
+
public function tearDown():void
|
27
|
+
{
|
28
|
+
completed.removeAll();
|
29
|
+
completed = null;
|
30
|
+
delegate = null;
|
31
|
+
}
|
32
|
+
|
33
|
+
[Test]
|
34
|
+
public function signal_length_is_0_after_creation():void
|
35
|
+
{
|
36
|
+
assertEquals(0, completed.numListeners);
|
37
|
+
}
|
38
|
+
|
39
|
+
//////
|
40
|
+
|
41
|
+
[Test]
|
42
|
+
public function add_listener_and_dispatch_event_should_pass_event_to_listener():void
|
43
|
+
{
|
44
|
+
completed.add(async.add(checkGenericEvent, 10));
|
45
|
+
completed.dispatch(new GenericEvent());
|
46
|
+
}
|
47
|
+
|
48
|
+
protected function checkGenericEvent(e:IEvent):void
|
49
|
+
{
|
50
|
+
assertTrue('instance of IEvent', e is IEvent);
|
51
|
+
assertTrue('instance of GenericEvent', e is GenericEvent);
|
52
|
+
assertEquals('event.signal points to the originating Signal', this.completed, e.signal);
|
53
|
+
assertEquals('event.target points to object containing the Signal', this, e.target);
|
54
|
+
assertEquals('event.target is e.currentTarget because event does not bubble', e.target, e.currentTarget);
|
55
|
+
}
|
56
|
+
|
57
|
+
//////
|
58
|
+
|
59
|
+
|
60
|
+
[Test]
|
61
|
+
public function add_two_listeners_and_dispatch_should_call_both():void
|
62
|
+
{
|
63
|
+
completed.add(async.add(checkGenericEvent, 10));
|
64
|
+
completed.add(async.add(checkGenericEvent, 10));
|
65
|
+
completed.dispatch(new GenericEvent());
|
66
|
+
}
|
67
|
+
|
68
|
+
//////
|
69
|
+
|
70
|
+
[Test]
|
71
|
+
public function addOnce_and_dispatch_should_remove_listener_automatically():void
|
72
|
+
{
|
73
|
+
completed.addOnce(newEmptyHandler());
|
74
|
+
completed.dispatch(new GenericEvent());
|
75
|
+
assertEquals('there should be no listeners', 0, completed.numListeners);
|
76
|
+
}
|
77
|
+
|
78
|
+
//////
|
79
|
+
|
80
|
+
[Test]
|
81
|
+
public function add_one_listener_and_dispatch_then_listener_remove_itself_using_event_signal():void
|
82
|
+
{
|
83
|
+
delegate = async.add(remove_myself_from_signal, 10);
|
84
|
+
completed.add(delegate);
|
85
|
+
completed.dispatch(new GenericEvent());
|
86
|
+
}
|
87
|
+
|
88
|
+
private function remove_myself_from_signal(e:IEvent):void
|
89
|
+
{
|
90
|
+
assertEquals('listener still in signal', 1, e.signal.numListeners);
|
91
|
+
|
92
|
+
// Can't remove(arguments.callee) because it's wrapped with delegate created by async.add().
|
93
|
+
e.signal.remove(delegate);
|
94
|
+
|
95
|
+
assertEquals('listener removed from signal', 0, e.signal.numListeners);
|
96
|
+
}
|
97
|
+
|
98
|
+
//////
|
99
|
+
|
100
|
+
[Test]
|
101
|
+
public function add_listener_then_remove_then_dispatch_should_not_call_listener():void
|
102
|
+
{
|
103
|
+
var delegate:Function = failIfCalled;
|
104
|
+
completed.add(delegate);
|
105
|
+
completed.remove(delegate);
|
106
|
+
completed.dispatch(new GenericEvent());
|
107
|
+
}
|
108
|
+
|
109
|
+
private function failIfCalled(e:IEvent):void
|
110
|
+
{
|
111
|
+
fail('This event handler should not have been called.');
|
112
|
+
}
|
113
|
+
|
114
|
+
//////
|
115
|
+
|
116
|
+
[Test]
|
117
|
+
public function add_2_listeners_remove_2nd_then_dispatch_should_call_1st_not_2nd_listener():void
|
118
|
+
{
|
119
|
+
completed.add(async.add(checkGenericEvent, 10));
|
120
|
+
var delegate:Function = failIfCalled;
|
121
|
+
completed.add(delegate);
|
122
|
+
completed.remove(delegate);
|
123
|
+
completed.dispatch(new GenericEvent());
|
124
|
+
}
|
125
|
+
//////
|
126
|
+
[Test]
|
127
|
+
public function add_2_listeners_should_yield_length_of_2():void
|
128
|
+
{
|
129
|
+
completed.add(newEmptyHandler());
|
130
|
+
completed.add(newEmptyHandler());
|
131
|
+
assertEquals(2, completed.numListeners);
|
132
|
+
}
|
133
|
+
|
134
|
+
private function newEmptyHandler():Function
|
135
|
+
{
|
136
|
+
return function(e:*):void {};
|
137
|
+
}
|
138
|
+
|
139
|
+
|
140
|
+
//////
|
141
|
+
[Test]
|
142
|
+
public function add_2_listeners_then_remove_1_should_yield_length_of_1():void
|
143
|
+
{
|
144
|
+
var firstFunc:Function = newEmptyHandler();
|
145
|
+
completed.add(firstFunc);
|
146
|
+
completed.add(newEmptyHandler());
|
147
|
+
|
148
|
+
completed.remove(firstFunc);
|
149
|
+
|
150
|
+
assertEquals(1, completed.numListeners);
|
151
|
+
}
|
152
|
+
|
153
|
+
[Test]
|
154
|
+
public function add_2_listeners_then_removeAll_should_yield_length_of_0():void
|
155
|
+
{
|
156
|
+
completed.add(newEmptyHandler());
|
157
|
+
completed.add(newEmptyHandler());
|
158
|
+
|
159
|
+
completed.removeAll();
|
160
|
+
|
161
|
+
assertEquals(0, completed.numListeners);
|
162
|
+
}
|
163
|
+
|
164
|
+
[Test]
|
165
|
+
public function add_same_listener_twice_should_only_add_it_once():void
|
166
|
+
{
|
167
|
+
var func:Function = newEmptyHandler();
|
168
|
+
completed.add(func);
|
169
|
+
completed.add(func);
|
170
|
+
assertEquals(1, completed.numListeners);
|
171
|
+
}
|
172
|
+
//////
|
173
|
+
[Test]
|
174
|
+
public function dispatch_object_that_isnt_an_IEvent_should_dispatch_without_error():void
|
175
|
+
{
|
176
|
+
completed.addOnce(checkSprite);
|
177
|
+
// Sprite doesn't have a target property,
|
178
|
+
// so if the signal tried to set .target,
|
179
|
+
// an error would be thrown and this test would fail.
|
180
|
+
completed.dispatch(new Sprite());
|
181
|
+
}
|
182
|
+
|
183
|
+
private function checkSprite(sprite:Sprite):void
|
184
|
+
{
|
185
|
+
assertTrue(sprite is Sprite);
|
186
|
+
}
|
187
|
+
//////
|
188
|
+
|
189
|
+
}
|
190
|
+
}
|
@@ -0,0 +1,62 @@
|
|
1
|
+
package org.osflash.signals
|
2
|
+
{
|
3
|
+
import asunit.asserts.*;
|
4
|
+
|
5
|
+
import org.osflash.signals.events.GenericEvent;
|
6
|
+
import org.osflash.signals.events.IEvent;
|
7
|
+
|
8
|
+
public class GenericEventTest
|
9
|
+
{
|
10
|
+
private var instance:GenericEvent;
|
11
|
+
|
12
|
+
[Before]
|
13
|
+
public function setUp():void
|
14
|
+
{
|
15
|
+
instance = new GenericEvent();
|
16
|
+
}
|
17
|
+
|
18
|
+
[After]
|
19
|
+
public function tearDown():void
|
20
|
+
{
|
21
|
+
instance = null;
|
22
|
+
}
|
23
|
+
|
24
|
+
public function testInstantiated():void
|
25
|
+
{
|
26
|
+
assertTrue("GenericEvent instantiated", instance is GenericEvent);
|
27
|
+
assertNull('target is null by default', instance.target);
|
28
|
+
assertFalse('bubbles is false by default', instance.bubbles);
|
29
|
+
}
|
30
|
+
|
31
|
+
[Test]
|
32
|
+
public function bubbles_roundtrips_through_constructor():void
|
33
|
+
{
|
34
|
+
var bubblingEvent:GenericEvent = new GenericEvent(true);
|
35
|
+
assertTrue(bubblingEvent.bubbles);
|
36
|
+
}
|
37
|
+
|
38
|
+
[Test]
|
39
|
+
public function clone_should_be_instance_of_original_event_class():void
|
40
|
+
{
|
41
|
+
var theClone:IEvent = instance.clone();
|
42
|
+
assertTrue(theClone is GenericEvent);
|
43
|
+
}
|
44
|
+
|
45
|
+
[Test]
|
46
|
+
public function clone_non_bubbling_event_should_have_bubbles_false():void
|
47
|
+
{
|
48
|
+
var theClone:GenericEvent = GenericEvent(instance.clone());
|
49
|
+
assertFalse(theClone.bubbles);
|
50
|
+
}
|
51
|
+
|
52
|
+
[Test]
|
53
|
+
public function clone_bubbling_event_should_have_bubbles_true():void
|
54
|
+
{
|
55
|
+
var bubblingEvent:GenericEvent = new GenericEvent(true);
|
56
|
+
var theClone:IEvent = bubblingEvent.clone();
|
57
|
+
assertTrue(theClone.bubbles);
|
58
|
+
}
|
59
|
+
|
60
|
+
|
61
|
+
}
|
62
|
+
}
|
@@ -0,0 +1,68 @@
|
|
1
|
+
package org.osflash.signals
|
2
|
+
{
|
3
|
+
import asunit.asserts.*;
|
4
|
+
import asunit.framework.IAsync;
|
5
|
+
|
6
|
+
public class PriorityListenersTest
|
7
|
+
{
|
8
|
+
[Inject]
|
9
|
+
public var async:IAsync;
|
10
|
+
|
11
|
+
public var completed:DeluxeSignal;
|
12
|
+
private var listenersCalled:Array;
|
13
|
+
|
14
|
+
[Before]
|
15
|
+
public function setUp():void
|
16
|
+
{
|
17
|
+
completed = new DeluxeSignal(this);
|
18
|
+
listenersCalled = [];
|
19
|
+
}
|
20
|
+
|
21
|
+
[After]
|
22
|
+
public function tearDown():void
|
23
|
+
{
|
24
|
+
completed.removeAll();
|
25
|
+
completed = null;
|
26
|
+
listenersCalled = null;
|
27
|
+
}
|
28
|
+
//////
|
29
|
+
[Test]
|
30
|
+
public function listener_added_second_with_higher_priority_should_be_called_first():void
|
31
|
+
{
|
32
|
+
completed.addWithPriority( async.add(listener1, 5) );
|
33
|
+
completed.addWithPriority( async.add(listener0, 5), 10 );
|
34
|
+
|
35
|
+
completed.dispatch();
|
36
|
+
}
|
37
|
+
|
38
|
+
private function listener0():void
|
39
|
+
{
|
40
|
+
listenersCalled.push(arguments.callee);
|
41
|
+
assertSame('this should be the first listener called', arguments.callee, listenersCalled[0]);
|
42
|
+
}
|
43
|
+
|
44
|
+
private function listener1():void
|
45
|
+
{
|
46
|
+
listenersCalled.push(arguments.callee);
|
47
|
+
assertSame('this should be the second listener called', arguments.callee, listenersCalled[1]);
|
48
|
+
}
|
49
|
+
|
50
|
+
private function listener2():void
|
51
|
+
{
|
52
|
+
listenersCalled.push(arguments.callee);
|
53
|
+
assertSame('this should be the third listener called', arguments.callee, listenersCalled[2]);
|
54
|
+
}
|
55
|
+
//////
|
56
|
+
[Test]
|
57
|
+
public function listeners_added_with_same_priority_should_be_called_in_order_added():void
|
58
|
+
{
|
59
|
+
completed.addWithPriority( async.add(listener0, 5), 10 );
|
60
|
+
completed.addWithPriority( async.add(listener1, 5), 10 );
|
61
|
+
completed.addWithPriority( async.add(listener2, 5), 10 );
|
62
|
+
|
63
|
+
completed.dispatch();
|
64
|
+
}
|
65
|
+
|
66
|
+
|
67
|
+
}
|
68
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
package org.osflash.signals
|
2
|
+
{
|
3
|
+
import asunit.asserts.*;
|
4
|
+
import asunit.framework.IAsync;
|
5
|
+
|
6
|
+
import org.osflash.signals.events.GenericEvent;
|
7
|
+
|
8
|
+
public class RedispatchedEventTest
|
9
|
+
{
|
10
|
+
[Inject]
|
11
|
+
public var async:IAsync;
|
12
|
+
|
13
|
+
public var completed:DeluxeSignal;
|
14
|
+
protected var originalEvent:GenericEvent;
|
15
|
+
|
16
|
+
[Before]
|
17
|
+
public function setUp():void
|
18
|
+
{
|
19
|
+
completed = new DeluxeSignal(this);
|
20
|
+
}
|
21
|
+
|
22
|
+
[After]
|
23
|
+
public function tearDown():void
|
24
|
+
{
|
25
|
+
completed.removeAll();
|
26
|
+
completed = null;
|
27
|
+
}
|
28
|
+
//////
|
29
|
+
[Test]
|
30
|
+
public function dispatch_event_already_dispatched_should_clone_it():void
|
31
|
+
{
|
32
|
+
completed.add(async.add(redispatchEvent, 10));
|
33
|
+
originalEvent = new GenericEvent();
|
34
|
+
completed.dispatch(originalEvent);
|
35
|
+
}
|
36
|
+
|
37
|
+
private function redispatchEvent(e:GenericEvent):void
|
38
|
+
{
|
39
|
+
DeluxeSignal(e.signal).removeAll();
|
40
|
+
assertSame(originalEvent, e);
|
41
|
+
completed.add(async.add(check_redispatched_event_is_not_original, 10));
|
42
|
+
|
43
|
+
completed.dispatch(originalEvent);
|
44
|
+
}
|
45
|
+
|
46
|
+
private function check_redispatched_event_is_not_original(e:GenericEvent):void
|
47
|
+
{
|
48
|
+
assertNotSame(originalEvent, e);
|
49
|
+
}
|
50
|
+
}
|
51
|
+
}
|
@@ -0,0 +1,74 @@
|
|
1
|
+
package org.osflash.signals
|
2
|
+
{
|
3
|
+
import asunit.asserts.*;
|
4
|
+
import asunit.framework.IAsync;
|
5
|
+
|
6
|
+
public class SignalDispatchArgsTest
|
7
|
+
{
|
8
|
+
[Inject]
|
9
|
+
public var async:IAsync;
|
10
|
+
|
11
|
+
public var completed:Signal;
|
12
|
+
|
13
|
+
[Before]
|
14
|
+
public function setUp():void
|
15
|
+
{
|
16
|
+
completed = new Signal();
|
17
|
+
}
|
18
|
+
|
19
|
+
[After]
|
20
|
+
public function tearDown():void
|
21
|
+
{
|
22
|
+
completed.removeAll();
|
23
|
+
completed = null;
|
24
|
+
}
|
25
|
+
|
26
|
+
[Test]
|
27
|
+
public function dispatch_two_correct_value_objects_should_succeed():void
|
28
|
+
{
|
29
|
+
var signal:Signal = new Signal(String, uint);
|
30
|
+
signal.dispatch("the Answer", 42);
|
31
|
+
}
|
32
|
+
|
33
|
+
[Test(expects="ArgumentError")]
|
34
|
+
public function dispatch_fewer_value_objects_than_value_classes_should_should_throw_ArgumentError():void
|
35
|
+
{
|
36
|
+
var signal:Signal = new Signal(Date, Array);
|
37
|
+
signal.dispatch(new Date());
|
38
|
+
}
|
39
|
+
|
40
|
+
[Test]
|
41
|
+
public function dispatch_more_value_objects_than_value_classes_should_succeed():void
|
42
|
+
{
|
43
|
+
var signal:Signal = new Signal(Date, Array);
|
44
|
+
signal.dispatch(new Date(), new Array(), "extra value object");
|
45
|
+
}
|
46
|
+
|
47
|
+
[Test]
|
48
|
+
public function dispatch_values_with_no_value_classes_defined_should_pass_to_listener():void
|
49
|
+
{
|
50
|
+
var signalNoValueClasses:Signal = new Signal();
|
51
|
+
signalNoValueClasses.add( async.add(checkDispatchedValues, 10) );
|
52
|
+
signalNoValueClasses.dispatch(22, 'done', new Date());
|
53
|
+
}
|
54
|
+
|
55
|
+
private function checkDispatchedValues(a:uint, b:String, c:Date):void
|
56
|
+
{
|
57
|
+
assertEquals('correct number of arguments were dispatched', 3, arguments.length);
|
58
|
+
assertEquals('the uint was dispatched', 22, a);
|
59
|
+
assertEquals('the String was dispatched', 'done', b);
|
60
|
+
assertTrue('a Date was dispatched', c is Date);
|
61
|
+
}
|
62
|
+
|
63
|
+
[Test(expects="ArgumentError")]
|
64
|
+
public function dispatch_one_correct_and_one_incorrect_value_object_should_throw_ArgumentError():void
|
65
|
+
{
|
66
|
+
var signal:Signal = new Signal(Date, Array);
|
67
|
+
signal.dispatch(new Date(), "wrong value type");
|
68
|
+
}
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
}
|
74
|
+
}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
package org.osflash.signals
|
2
|
+
{
|
3
|
+
import asunit.asserts.*;
|
4
|
+
import asunit.framework.IAsync;
|
5
|
+
|
6
|
+
public class SignalDispatchNoArgsTest
|
7
|
+
{
|
8
|
+
[Inject]
|
9
|
+
public var async:IAsync;
|
10
|
+
|
11
|
+
public var completed:Signal;
|
12
|
+
|
13
|
+
[Before]
|
14
|
+
public function setUp():void
|
15
|
+
{
|
16
|
+
completed = new Signal();
|
17
|
+
}
|
18
|
+
|
19
|
+
[After]
|
20
|
+
public function tearDown():void
|
21
|
+
{
|
22
|
+
completed.removeAll();
|
23
|
+
completed = null;
|
24
|
+
}
|
25
|
+
//////
|
26
|
+
[Test]
|
27
|
+
public function dispatch_no_args_should_call_listener_with_no_args():void
|
28
|
+
{
|
29
|
+
completed.add( async.add(onCompleted, 10) );
|
30
|
+
completed.dispatch();
|
31
|
+
}
|
32
|
+
|
33
|
+
private function onCompleted():void
|
34
|
+
{
|
35
|
+
assertEquals(0, arguments.length);
|
36
|
+
}
|
37
|
+
//////
|
38
|
+
[Test]
|
39
|
+
public function addOnce_in_handler_and_dispatch_should_call_new_listener():void
|
40
|
+
{
|
41
|
+
completed.addOnce( async.add(addOnceInHandler, 10) );
|
42
|
+
completed.dispatch();
|
43
|
+
}
|
44
|
+
|
45
|
+
protected function addOnceInHandler():void
|
46
|
+
{
|
47
|
+
completed.addOnce( async.add(secondAddOnceListener, 10) );
|
48
|
+
completed.dispatch();
|
49
|
+
}
|
50
|
+
|
51
|
+
protected function secondAddOnceListener():void
|
52
|
+
{
|
53
|
+
}
|
54
|
+
}
|
55
|
+
}
|
@@ -0,0 +1,81 @@
|
|
1
|
+
package org.osflash.signals
|
2
|
+
{
|
3
|
+
import asunit.asserts.*;
|
4
|
+
import asunit.framework.IAsync;
|
5
|
+
|
6
|
+
public class SignalDispatchNonEventTest
|
7
|
+
{
|
8
|
+
[Inject]
|
9
|
+
public var async:IAsync;
|
10
|
+
|
11
|
+
public var completed:Signal;
|
12
|
+
|
13
|
+
[Before]
|
14
|
+
public function setUp():void
|
15
|
+
{
|
16
|
+
completed = new Signal(Date);
|
17
|
+
}
|
18
|
+
|
19
|
+
[After]
|
20
|
+
public function tearDown():void
|
21
|
+
{
|
22
|
+
completed.removeAll();
|
23
|
+
completed = null;
|
24
|
+
}
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Captures bug where dispatching 0 was considered null.
|
28
|
+
*/
|
29
|
+
[Test]
|
30
|
+
public function dispatch_zero_should_call_listener_with_zero():void
|
31
|
+
{
|
32
|
+
completed = new Signal(Number);
|
33
|
+
completed.add( async.add(onZero, 10) );
|
34
|
+
completed.dispatch(0);
|
35
|
+
}
|
36
|
+
|
37
|
+
private function onZero(num:Number):void
|
38
|
+
{
|
39
|
+
assertEquals(0, num);
|
40
|
+
}
|
41
|
+
//////
|
42
|
+
[Test]
|
43
|
+
public function dispatch_2_zeroes_should_call_listener_with_2_zeroes():void
|
44
|
+
{
|
45
|
+
completed = new Signal(Number, Number);
|
46
|
+
completed.add( async.add(onZeroZero, 10) );
|
47
|
+
completed.dispatch(0, 0);
|
48
|
+
}
|
49
|
+
|
50
|
+
private function onZeroZero(a:Object, b:Object):void
|
51
|
+
{
|
52
|
+
assertEquals(0, a);
|
53
|
+
assertEquals(0, b);
|
54
|
+
}
|
55
|
+
//////
|
56
|
+
[Test]
|
57
|
+
public function dispatch_null_should_call_listener_with_null():void
|
58
|
+
{
|
59
|
+
completed.addOnce( async.add(checkNullDate, 10) );
|
60
|
+
completed.dispatch(null);
|
61
|
+
}
|
62
|
+
|
63
|
+
private function checkNullDate(date:Date):void
|
64
|
+
{
|
65
|
+
assertNull(date);
|
66
|
+
}
|
67
|
+
//////
|
68
|
+
[Test]
|
69
|
+
public function dispatch_null_through_int_Signal_should_be_autoconverted_to_zero():void
|
70
|
+
{
|
71
|
+
completed = new Signal(int);
|
72
|
+
completed.addOnce( async.add(checkNullConvertedToZero, 10) );
|
73
|
+
completed.dispatch(null);
|
74
|
+
}
|
75
|
+
|
76
|
+
private function checkNullConvertedToZero(intValue:int):void
|
77
|
+
{
|
78
|
+
assertEquals('null was converted to 0', 0, intValue);
|
79
|
+
}
|
80
|
+
}
|
81
|
+
}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
package org.osflash.signals
|
2
|
+
{
|
3
|
+
import asunit.asserts.*;
|
4
|
+
import asunit.framework.IAsync;
|
5
|
+
|
6
|
+
public class SignalSplitInterfacesTest
|
7
|
+
{
|
8
|
+
[Inject]
|
9
|
+
public var async:IAsync;
|
10
|
+
|
11
|
+
// Notice the use of the ISignal interface, rather than Signal.
|
12
|
+
// This makes dispatch() inaccessible unless the ISignal is cast to IDispatcher or Signal.
|
13
|
+
public var completed:ISignal;
|
14
|
+
|
15
|
+
[Before]
|
16
|
+
public function setUp():void
|
17
|
+
{
|
18
|
+
completed = new Signal();
|
19
|
+
}
|
20
|
+
|
21
|
+
[After]
|
22
|
+
public function tearDown():void
|
23
|
+
{
|
24
|
+
Signal(completed).removeAll();
|
25
|
+
completed = null;
|
26
|
+
}
|
27
|
+
|
28
|
+
[Test]
|
29
|
+
public function cast_ISignal_to_IDispatcher_and_dispatch():void
|
30
|
+
{
|
31
|
+
completed.addOnce( async.add(onCompleted, 10) );
|
32
|
+
IDispatcher(completed).dispatch();
|
33
|
+
}
|
34
|
+
|
35
|
+
private function onCompleted():void
|
36
|
+
{
|
37
|
+
assertEquals(0, arguments.length);
|
38
|
+
}
|
39
|
+
|
40
|
+
[Test]
|
41
|
+
public function cast_ISignal_to_Signal_and_dispatch():void
|
42
|
+
{
|
43
|
+
completed.addOnce( async.add(onCompleted, 10) );
|
44
|
+
Signal(completed).dispatch();
|
45
|
+
}
|
46
|
+
}
|
47
|
+
}
|