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,148 @@
|
|
1
|
+
package org.osflash.signals.natives
|
2
|
+
{
|
3
|
+
import asunit.asserts.*;
|
4
|
+
import asunit.framework.IAsync;
|
5
|
+
|
6
|
+
import org.osflash.signals.IDeluxeSignal;
|
7
|
+
|
8
|
+
import flash.display.Sprite;
|
9
|
+
import flash.events.Event;
|
10
|
+
import flash.events.MouseEvent;
|
11
|
+
|
12
|
+
public class NativeMappedSignalFunctionArgTest
|
13
|
+
{
|
14
|
+
[Inject]
|
15
|
+
public var async:IAsync;
|
16
|
+
|
17
|
+
private var signal:NativeMappedSignal;
|
18
|
+
private var signalMappingToEventType:NativeMappedSignal;
|
19
|
+
private var signalMappingToIncorrectEventType:NativeMappedSignal;
|
20
|
+
private var signalMappingToVoid:NativeMappedSignal;
|
21
|
+
private var sprite:Sprite;
|
22
|
+
private const EventType:String = MouseEvent.CLICK;
|
23
|
+
private const MappedObject:String = "mapped " + EventType;
|
24
|
+
|
25
|
+
[Before]
|
26
|
+
public function setUp():void
|
27
|
+
{
|
28
|
+
sprite = new Sprite();
|
29
|
+
signal = new NativeMappedSignal(sprite, EventType, MouseEvent, String).mapTo(
|
30
|
+
function ():String {
|
31
|
+
return MappedObject;
|
32
|
+
}
|
33
|
+
);
|
34
|
+
|
35
|
+
signalMappingToEventType = new NativeMappedSignal(sprite, EventType, MouseEvent, String).mapTo(
|
36
|
+
function (event:MouseEvent):String {
|
37
|
+
return event.type;
|
38
|
+
}
|
39
|
+
);
|
40
|
+
|
41
|
+
signalMappingToIncorrectEventType = new NativeMappedSignal(sprite, EventType, MouseEvent, String).mapTo(
|
42
|
+
function (event:MouseEvent):int {
|
43
|
+
return event.delta;
|
44
|
+
}
|
45
|
+
);
|
46
|
+
|
47
|
+
signalMappingToVoid = new NativeMappedSignal(sprite, EventType).mapTo(function ():void {});
|
48
|
+
}
|
49
|
+
|
50
|
+
[After]
|
51
|
+
public function tearDown():void
|
52
|
+
{
|
53
|
+
signal.removeAll();
|
54
|
+
signal = null;
|
55
|
+
signalMappingToEventType.removeAll();
|
56
|
+
signalMappingToEventType = null;
|
57
|
+
signalMappingToIncorrectEventType.removeAll();
|
58
|
+
signalMappingToIncorrectEventType = null;
|
59
|
+
signalMappingToVoid.removeAll();
|
60
|
+
signalMappingToVoid = null;
|
61
|
+
}
|
62
|
+
|
63
|
+
[Test]
|
64
|
+
public function testInstantiated():void
|
65
|
+
{
|
66
|
+
assertFalse('sprite has no click event listener to start', sprite.hasEventListener(EventType));
|
67
|
+
|
68
|
+
assertTrue("NativeMappedSignal instantiated", signal is NativeMappedSignal);
|
69
|
+
assertTrue('implements IDeluxeSignal', signal is IDeluxeSignal);
|
70
|
+
assertSame('has only one value class', 1, signal.valueClasses.length);
|
71
|
+
assertSame('single value class is of type String', String, signal.valueClasses[0]);
|
72
|
+
|
73
|
+
assertTrue("NativeMappedSignal instantiated", signalMappingToEventType is NativeMappedSignal);
|
74
|
+
assertTrue('implements IDeluxeSignal', signalMappingToEventType is IDeluxeSignal);
|
75
|
+
assertSame('has only one value class', 1, signalMappingToEventType.valueClasses.length);
|
76
|
+
assertSame('single value class is of type String', String, signalMappingToEventType.valueClasses[0]);
|
77
|
+
|
78
|
+
assertTrue("NativeMappedSignal instantiated", signalMappingToIncorrectEventType is NativeMappedSignal);
|
79
|
+
assertTrue('implements IDeluxeSignal', signalMappingToIncorrectEventType is IDeluxeSignal);
|
80
|
+
assertSame('has only one value class', 1, signalMappingToIncorrectEventType.valueClasses.length);
|
81
|
+
assertSame('single value class is of type String', String, signalMappingToIncorrectEventType.valueClasses[0]);
|
82
|
+
|
83
|
+
assertTrue("NativeMappedSignal instantiated", signalMappingToVoid is NativeMappedSignal);
|
84
|
+
assertTrue('implements IDeluxeSignal', signalMappingToVoid is IDeluxeSignal);
|
85
|
+
assertSame('has no value classes', 0, signalMappingToVoid.valueClasses.length);
|
86
|
+
}
|
87
|
+
|
88
|
+
private function dispatchTestEvent():void
|
89
|
+
{
|
90
|
+
sprite.dispatchEvent(buildTestEvent());
|
91
|
+
}
|
92
|
+
|
93
|
+
private function buildTestEvent():Event
|
94
|
+
{
|
95
|
+
return new MouseEvent(EventType);
|
96
|
+
}
|
97
|
+
|
98
|
+
//////
|
99
|
+
[Test]
|
100
|
+
public function signal_add_then_mapped_object_should_be_callback_argument():void
|
101
|
+
{
|
102
|
+
signal.add( async.add(checkMappedArgument, 10) );
|
103
|
+
dispatchTestEvent();
|
104
|
+
}
|
105
|
+
|
106
|
+
private function checkMappedArgument(argument:String):void
|
107
|
+
{
|
108
|
+
assertSame(MappedObject, argument);
|
109
|
+
}
|
110
|
+
//////
|
111
|
+
[Test]
|
112
|
+
public function mapping_function_should_receive_event_as_argument():void
|
113
|
+
{
|
114
|
+
signalMappingToEventType.add( async.add(checkMappedEventTypeArgument, 10) );
|
115
|
+
dispatchTestEvent();
|
116
|
+
}
|
117
|
+
|
118
|
+
private function checkMappedEventTypeArgument(argument:String):void
|
119
|
+
{
|
120
|
+
assertSame(EventType, argument);
|
121
|
+
}
|
122
|
+
|
123
|
+
[Test(expects="ArgumentError")]
|
124
|
+
public function mapping_function_has_to_many_arguments_should_throw_ArgumentError():void
|
125
|
+
{
|
126
|
+
var signal:NativeMappedSignal = new NativeMappedSignal(sprite, EventType, MouseEvent, String).mapTo(
|
127
|
+
function (event:MouseEvent, extraArg:Object):String {
|
128
|
+
return event.type;
|
129
|
+
}
|
130
|
+
);
|
131
|
+
}
|
132
|
+
|
133
|
+
[Test(expects="Error")]
|
134
|
+
public function mapping_function_returns_incorrectly_typed_argument_should_throw_Error():void
|
135
|
+
{
|
136
|
+
signalMappingToIncorrectEventType.dispatch(buildTestEvent());
|
137
|
+
}
|
138
|
+
|
139
|
+
private function emptyHandler(argument:String):void {}
|
140
|
+
|
141
|
+
[Test]
|
142
|
+
public function mapping_to_void():void
|
143
|
+
{
|
144
|
+
signalMappingToVoid.add(async.add(emptyHandler, 10));
|
145
|
+
dispatchTestEvent();
|
146
|
+
}
|
147
|
+
}
|
148
|
+
}
|
@@ -0,0 +1,95 @@
|
|
1
|
+
package org.osflash.signals.natives
|
2
|
+
{
|
3
|
+
import asunit.asserts.*;
|
4
|
+
import asunit.framework.IAsync;
|
5
|
+
|
6
|
+
import org.osflash.signals.IDeluxeSignal;
|
7
|
+
|
8
|
+
import flash.display.Sprite;
|
9
|
+
import flash.events.MouseEvent;
|
10
|
+
|
11
|
+
public class NativeMappedSignalFunctionNoArgsTest
|
12
|
+
{
|
13
|
+
[Inject]
|
14
|
+
public var async:IAsync;
|
15
|
+
|
16
|
+
private var signalSingle:NativeMappedSignal;
|
17
|
+
private var signalList:NativeMappedSignal;
|
18
|
+
private var sprite:Sprite;
|
19
|
+
private const EventType:String = MouseEvent.CLICK;
|
20
|
+
private const MappedObject:String = "mapped " + EventType;
|
21
|
+
private const MappedObject2:int = 3;
|
22
|
+
private const MappedObject3:Number = 3.1415;
|
23
|
+
|
24
|
+
[Before]
|
25
|
+
public function setUp():void
|
26
|
+
{
|
27
|
+
sprite = new Sprite();
|
28
|
+
signalSingle = new NativeMappedSignal(sprite, EventType, MouseEvent, String).mapTo(
|
29
|
+
function ():String {
|
30
|
+
return MappedObject;
|
31
|
+
}
|
32
|
+
);
|
33
|
+
|
34
|
+
signalList = new NativeMappedSignal(sprite, EventType, MouseEvent, String, int, Number).mapTo(
|
35
|
+
function ():Array
|
36
|
+
{
|
37
|
+
return [MappedObject, MappedObject2, MappedObject3];
|
38
|
+
}
|
39
|
+
);
|
40
|
+
}
|
41
|
+
|
42
|
+
[After]
|
43
|
+
public function tearDown():void
|
44
|
+
{
|
45
|
+
signalSingle.removeAll();
|
46
|
+
signalSingle = null;
|
47
|
+
signalList.removeAll();
|
48
|
+
signalList = null;
|
49
|
+
}
|
50
|
+
|
51
|
+
[Test]
|
52
|
+
public function testInstantiated():void
|
53
|
+
{
|
54
|
+
assertFalse('sprite has no click event listener to start', sprite.hasEventListener(EventType));
|
55
|
+
|
56
|
+
assertTrue("NativeMappedSignal instantiated", signalSingle is NativeMappedSignal);
|
57
|
+
assertTrue('implements IDeluxeSignal', signalSingle is IDeluxeSignal);
|
58
|
+
assertSame('has only one value class', 1, signalSingle.valueClasses.length);
|
59
|
+
assertSame('single value class is of type String', String, signalSingle.valueClasses[0]);
|
60
|
+
|
61
|
+
assertTrue("NativeMappedSignal instantiated", signalList is NativeMappedSignal);
|
62
|
+
assertTrue('implements IDeluxeSignal', signalList is IDeluxeSignal);
|
63
|
+
assertSame('has three value classes', 3, signalList.valueClasses.length);
|
64
|
+
assertSame('first value class is of type String', String, signalList.valueClasses[0]);
|
65
|
+
assertSame('second value class is of type int', int, signalList.valueClasses[1]);
|
66
|
+
assertSame('third value class is of type Number', Number, signalList.valueClasses[2]);
|
67
|
+
}
|
68
|
+
//////
|
69
|
+
[Test]
|
70
|
+
public function signal_add_then_mapped_object_should_be_callback_argument():void
|
71
|
+
{
|
72
|
+
signalSingle.add( async.add(checkMappedArgumentSingle, 10) );
|
73
|
+
sprite.dispatchEvent(new MouseEvent(EventType));
|
74
|
+
}
|
75
|
+
|
76
|
+
private function checkMappedArgumentSingle(argument:String):void
|
77
|
+
{
|
78
|
+
assertSame(MappedObject, argument);
|
79
|
+
}
|
80
|
+
//////
|
81
|
+
[Test]
|
82
|
+
public function signal_list_add_then_mapped_object_should_be_callback_argument():void
|
83
|
+
{
|
84
|
+
signalList.add( async.add(checkMappedArgumentList, 10) );
|
85
|
+
sprite.dispatchEvent(new MouseEvent(EventType));
|
86
|
+
}
|
87
|
+
|
88
|
+
private function checkMappedArgumentList(argument1:String, argument2:int, argument3:Number):void
|
89
|
+
{
|
90
|
+
assertSame(MappedObject, argument1);
|
91
|
+
assertSame(MappedObject2, argument2);
|
92
|
+
assertSame(MappedObject3, argument3);
|
93
|
+
}
|
94
|
+
}
|
95
|
+
}
|
@@ -0,0 +1,85 @@
|
|
1
|
+
package org.osflash.signals.natives
|
2
|
+
{
|
3
|
+
import asunit.asserts.*;
|
4
|
+
import asunit.framework.IAsync;
|
5
|
+
|
6
|
+
import org.osflash.signals.IDeluxeSignal;
|
7
|
+
|
8
|
+
import flash.display.Sprite;
|
9
|
+
import flash.events.MouseEvent;
|
10
|
+
|
11
|
+
public class NativeMappedSignalObjectArgTest
|
12
|
+
{
|
13
|
+
[Inject]
|
14
|
+
public var async:IAsync;
|
15
|
+
|
16
|
+
private var signalSingle:NativeMappedSignal;
|
17
|
+
private var signalList:NativeMappedSignal;
|
18
|
+
private var sprite:Sprite;
|
19
|
+
private const EventType:String = MouseEvent.CLICK;
|
20
|
+
private const MappedObject:String = "mapped " + EventType;
|
21
|
+
private const MappedObject2:int = 3;
|
22
|
+
private const MappedObject3:Number = 3.1415;
|
23
|
+
|
24
|
+
[Before]
|
25
|
+
public function setUp():void
|
26
|
+
{
|
27
|
+
sprite = new Sprite();
|
28
|
+
signalSingle = new NativeMappedSignal(sprite, EventType, MouseEvent, String).mapTo(MappedObject);
|
29
|
+
signalList = new NativeMappedSignal(sprite, EventType, MouseEvent, String, int, Number).mapTo(MappedObject, MappedObject2, MappedObject3);
|
30
|
+
}
|
31
|
+
|
32
|
+
[After]
|
33
|
+
public function tearDown():void
|
34
|
+
{
|
35
|
+
signalSingle.removeAll();
|
36
|
+
signalSingle = null;
|
37
|
+
signalList.removeAll();
|
38
|
+
signalList = null;
|
39
|
+
}
|
40
|
+
|
41
|
+
[Test]
|
42
|
+
public function testInstantiated():void
|
43
|
+
{
|
44
|
+
assertFalse('sprite has no click event listener to start', sprite.hasEventListener(EventType));
|
45
|
+
|
46
|
+
assertTrue("NativeMappedSignal instantiated", signalSingle is NativeMappedSignal);
|
47
|
+
assertTrue('implements ISignal', signalSingle is IDeluxeSignal);
|
48
|
+
assertSame('has only one value class', 1, signalSingle.valueClasses.length);
|
49
|
+
assertSame('single value class is of type String', String, signalSingle.valueClasses[0]);
|
50
|
+
|
51
|
+
assertTrue("NativeMappedSignal instantiated", signalList is NativeMappedSignal);
|
52
|
+
assertTrue('implements IDeluxeSignal', signalList is IDeluxeSignal);
|
53
|
+
assertSame('has three value classes', 3, signalList.valueClasses.length);
|
54
|
+
assertSame('first value class is of type String', String, signalList.valueClasses[0]);
|
55
|
+
assertSame('second value class is of type int', int, signalList.valueClasses[1]);
|
56
|
+
assertSame('third value class is of type Number', Number, signalList.valueClasses[2]);
|
57
|
+
}
|
58
|
+
//////
|
59
|
+
[Test]
|
60
|
+
public function signal_single_add_then_mapped_object_should_be_callback_argument():void
|
61
|
+
{
|
62
|
+
signalSingle.add( async.add(checkMappedArgumentSingle, 10) );
|
63
|
+
sprite.dispatchEvent(new MouseEvent(EventType));
|
64
|
+
}
|
65
|
+
|
66
|
+
private function checkMappedArgumentSingle(argument:String):void
|
67
|
+
{
|
68
|
+
assertSame(MappedObject, argument);
|
69
|
+
}
|
70
|
+
//////
|
71
|
+
[Test]
|
72
|
+
public function signal_list_add_then_mapped_object_should_be_callback_argument():void
|
73
|
+
{
|
74
|
+
signalList.add( async.add(checkMappedArgumentList, 10) );
|
75
|
+
sprite.dispatchEvent(new MouseEvent(EventType));
|
76
|
+
}
|
77
|
+
|
78
|
+
private function checkMappedArgumentList(argument1:String, argument2:int, argument3:Number):void
|
79
|
+
{
|
80
|
+
assertSame(MappedObject, argument1);
|
81
|
+
assertSame(MappedObject2, argument2);
|
82
|
+
assertSame(MappedObject3, argument3);
|
83
|
+
}
|
84
|
+
}
|
85
|
+
}
|
@@ -0,0 +1,174 @@
|
|
1
|
+
package org.osflash.signals.natives
|
2
|
+
{
|
3
|
+
import asunit.asserts.*;
|
4
|
+
import asunit.framework.IAsync;
|
5
|
+
|
6
|
+
import org.osflash.signals.ISignal;
|
7
|
+
|
8
|
+
import flash.display.Sprite;
|
9
|
+
import flash.events.EventDispatcher;
|
10
|
+
import flash.events.MouseEvent;
|
11
|
+
|
12
|
+
public class NativeRelaySignalTest
|
13
|
+
{
|
14
|
+
[Inject]
|
15
|
+
public var async:IAsync;
|
16
|
+
|
17
|
+
private var clicked:NativeRelaySignal;
|
18
|
+
private var sprite:Sprite;
|
19
|
+
|
20
|
+
[Before]
|
21
|
+
public function setUp():void
|
22
|
+
{
|
23
|
+
sprite = new Sprite();
|
24
|
+
clicked = new NativeRelaySignal(sprite, 'click', MouseEvent);
|
25
|
+
}
|
26
|
+
|
27
|
+
[After]
|
28
|
+
public function tearDown():void
|
29
|
+
{
|
30
|
+
clicked.removeAll();
|
31
|
+
clicked = null;
|
32
|
+
}
|
33
|
+
|
34
|
+
public function testInstantiated():void
|
35
|
+
{
|
36
|
+
assertTrue("NativeRelaySignal instantiated", clicked is NativeRelaySignal);
|
37
|
+
assertTrue('implements ISignal', clicked is ISignal);
|
38
|
+
assertFalse('sprite has no click event listener to start', sprite.hasEventListener('click'));
|
39
|
+
}
|
40
|
+
//////
|
41
|
+
[Test]
|
42
|
+
public function signal_add_then_EventDispatcher_dispatch_should_call_signal_listener():void
|
43
|
+
{
|
44
|
+
clicked.add( async.add(checkSpriteAsCurrentTarget, 10) );
|
45
|
+
sprite.dispatchEvent(new MouseEvent('click'));
|
46
|
+
}
|
47
|
+
|
48
|
+
private function checkSpriteAsCurrentTarget(e:MouseEvent):void
|
49
|
+
{
|
50
|
+
assertSame(sprite, e.currentTarget);
|
51
|
+
}
|
52
|
+
//////
|
53
|
+
[Test]
|
54
|
+
public function signal_addOnce_then_EventDispatcher_dispatch_should_call_signal_listener():void
|
55
|
+
{
|
56
|
+
clicked.addOnce( async.add(checkSpriteAsCurrentTarget, 10) );
|
57
|
+
sprite.dispatchEvent(new MouseEvent('click'));
|
58
|
+
}
|
59
|
+
//////
|
60
|
+
[Test]
|
61
|
+
public function when_signal_adds_listener_then_hasEventListener_should_be_true():void
|
62
|
+
{
|
63
|
+
clicked.add(emptyHandler);
|
64
|
+
assertTrue(sprite.hasEventListener('click'));
|
65
|
+
}
|
66
|
+
|
67
|
+
private function emptyHandler(e:MouseEvent):void { }
|
68
|
+
|
69
|
+
[Test]
|
70
|
+
public function when_signal_addOnce_listener_then_hasEventListener_should_be_true():void
|
71
|
+
{
|
72
|
+
clicked.addOnce(emptyHandler);
|
73
|
+
assertTrue(sprite.hasEventListener('click'));
|
74
|
+
}
|
75
|
+
|
76
|
+
[Test]
|
77
|
+
public function when_signal_adds_then_removes_listener_then_hasEventListener_should_be_false():void
|
78
|
+
{
|
79
|
+
clicked.add(emptyHandler);
|
80
|
+
clicked.remove(emptyHandler);
|
81
|
+
assertFalse(sprite.hasEventListener('click'));
|
82
|
+
}
|
83
|
+
|
84
|
+
[Test]
|
85
|
+
public function when_signal_addOnce_then_removes_listener_then_hasEventListener_should_be_false():void
|
86
|
+
{
|
87
|
+
clicked.addOnce(emptyHandler);
|
88
|
+
clicked.remove(emptyHandler);
|
89
|
+
assertFalse(sprite.hasEventListener('click'));
|
90
|
+
}
|
91
|
+
|
92
|
+
[Test]
|
93
|
+
public function when_signal_adds_then_removeAll_listeners_then_hasEventListener_should_be_false():void
|
94
|
+
{
|
95
|
+
clicked.add(emptyHandler);
|
96
|
+
clicked.removeAll();
|
97
|
+
assertFalse(sprite.hasEventListener('click'));
|
98
|
+
}
|
99
|
+
//////
|
100
|
+
[Test]
|
101
|
+
public function setting_target_to_a_different_object_should_remove_all_listeners_from_1st_target():void
|
102
|
+
{
|
103
|
+
clicked.add(emptyHandler);
|
104
|
+
clicked.target = new EventDispatcher();
|
105
|
+
assertFalse(sprite.hasEventListener('click'));
|
106
|
+
}
|
107
|
+
//////
|
108
|
+
[Test]
|
109
|
+
public function setting_target_to_the_same_object_should_not_remove_listeners():void
|
110
|
+
{
|
111
|
+
clicked.add(emptyHandler);
|
112
|
+
var numListenersBefore:uint = clicked.numListeners;
|
113
|
+
clicked.target = sprite;
|
114
|
+
assertEquals(numListenersBefore, clicked.numListeners);
|
115
|
+
}
|
116
|
+
//////
|
117
|
+
[Test]
|
118
|
+
public function addOnce_and_dispatch_should_remove_listener_automatically():void
|
119
|
+
{
|
120
|
+
clicked.addOnce(emptyHandler);
|
121
|
+
clicked.dispatch(new MouseEvent('click'));
|
122
|
+
assertEquals('there should be no listeners', 0, clicked.numListeners);
|
123
|
+
}
|
124
|
+
|
125
|
+
//////
|
126
|
+
[Test]
|
127
|
+
public function can_use_anonymous_listeners():void
|
128
|
+
{
|
129
|
+
var listeners:Array = [];
|
130
|
+
|
131
|
+
for ( var i:int = 0; i < 100; i++ )
|
132
|
+
{
|
133
|
+
listeners.push(clicked.add(function(e:MouseEvent):void{}));
|
134
|
+
}
|
135
|
+
|
136
|
+
assertTrue("there should be 100 listeners", clicked.numListeners == 100);
|
137
|
+
|
138
|
+
for each( var fnt:Function in listeners )
|
139
|
+
{
|
140
|
+
clicked.remove(fnt);
|
141
|
+
}
|
142
|
+
assertTrue("all anonymous listeners removed", clicked.numListeners == 0);
|
143
|
+
}
|
144
|
+
|
145
|
+
//////
|
146
|
+
[Test]
|
147
|
+
public function can_use_anonymous_listeners_in_addOnce():void
|
148
|
+
{
|
149
|
+
var listeners:Array = [];
|
150
|
+
|
151
|
+
for ( var i:int = 0; i < 100; i++ )
|
152
|
+
{
|
153
|
+
listeners.push(clicked.addOnce(function(e:MouseEvent):void{}));
|
154
|
+
}
|
155
|
+
|
156
|
+
assertTrue("there should be 100 listeners", clicked.numListeners == 100);
|
157
|
+
|
158
|
+
for each( var fnt:Function in listeners )
|
159
|
+
{
|
160
|
+
clicked.remove(fnt);
|
161
|
+
}
|
162
|
+
assertTrue("all anonymous listeners removed", clicked.numListeners == 0);
|
163
|
+
}
|
164
|
+
|
165
|
+
//////
|
166
|
+
[Test]
|
167
|
+
public function removed_listener_should_be_returned():void
|
168
|
+
{
|
169
|
+
var listener:Function = clicked.add(function(e:MouseEvent):void{});
|
170
|
+
|
171
|
+
assertTrue("Listener is returned", listener == clicked.remove(listener));
|
172
|
+
}
|
173
|
+
}
|
174
|
+
}
|