as3signals 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/CHANGELOG.textile +51 -0
  2. data/Gemfile +6 -0
  3. data/MIT-LICENSE.txt +22 -0
  4. data/README.textile +43 -0
  5. data/Rakefile +52 -0
  6. data/as3-signals.as3proj +87 -0
  7. data/as3-signals.docproj +9 -0
  8. data/as3signals.gemspec +24 -0
  9. data/build-asunit.properties +7 -0
  10. data/build-asunit.xml +34 -0
  11. data/build.properties +20 -0
  12. data/build.xml +53 -0
  13. data/lib/as3signals.rb +15 -0
  14. data/src/org/osflash/signals/DeluxeSignal.as +260 -0
  15. data/src/org/osflash/signals/IDeluxeSignal.as +34 -0
  16. data/src/org/osflash/signals/IDispatcher.as +15 -0
  17. data/src/org/osflash/signals/ISignal.as +44 -0
  18. data/src/org/osflash/signals/ISignalOwner.as +13 -0
  19. data/src/org/osflash/signals/Signal.as +206 -0
  20. data/src/org/osflash/signals/events/GenericEvent.as +44 -0
  21. data/src/org/osflash/signals/events/IBubbleEventHandler.as +14 -0
  22. data/src/org/osflash/signals/events/IEvent.as +27 -0
  23. data/src/org/osflash/signals/natives/INativeDispatcher.as +34 -0
  24. data/src/org/osflash/signals/natives/NativeMappedSignal.as +230 -0
  25. data/src/org/osflash/signals/natives/NativeRelaySignal.as +71 -0
  26. data/src/org/osflash/signals/natives/NativeSignal.as +176 -0
  27. data/tests/org/osflash/signals/AllTests.as +44 -0
  28. data/tests/org/osflash/signals/AllTestsRunner.as +19 -0
  29. data/tests/org/osflash/signals/AmbiguousRelationshipTest.as +60 -0
  30. data/tests/org/osflash/signals/DeluxeSignalAmbiguousRelationshipTest.as +60 -0
  31. data/tests/org/osflash/signals/DeluxeSignalDispatchExtraArgsTest.as +43 -0
  32. data/tests/org/osflash/signals/DeluxeSignalDispatchNoArgsTest.as +55 -0
  33. data/tests/org/osflash/signals/DeluxeSignalDispatchNonEventTest.as +67 -0
  34. data/tests/org/osflash/signals/DeluxeSignalSplitInterfacesTest.as +41 -0
  35. data/tests/org/osflash/signals/DeluxeSignalTest.as +134 -0
  36. data/tests/org/osflash/signals/DeluxeSignalWithBubblingEventTest.as +129 -0
  37. data/tests/org/osflash/signals/DeluxeSignalWithCustomEventTest.as +84 -0
  38. data/tests/org/osflash/signals/DeluxeSignalWithGenericEventTest.as +190 -0
  39. data/tests/org/osflash/signals/GenericEventTest.as +62 -0
  40. data/tests/org/osflash/signals/PriorityListenersTest.as +68 -0
  41. data/tests/org/osflash/signals/RedispatchedEventTest.as +51 -0
  42. data/tests/org/osflash/signals/SignalDispatchArgsTest.as +74 -0
  43. data/tests/org/osflash/signals/SignalDispatchNoArgsTest.as +55 -0
  44. data/tests/org/osflash/signals/SignalDispatchNonEventTest.as +81 -0
  45. data/tests/org/osflash/signals/SignalSplitInterfacesTest.as +47 -0
  46. data/tests/org/osflash/signals/SignalTest.as +267 -0
  47. data/tests/org/osflash/signals/SignalWithCustomEventTest.as +107 -0
  48. data/tests/org/osflash/signals/natives/AmbiguousRelationshipInNativeSignalTest.as +63 -0
  49. data/tests/org/osflash/signals/natives/NativeMappedSignalBoundaryUseTest.as +100 -0
  50. data/tests/org/osflash/signals/natives/NativeMappedSignalDefaultsTest.as +78 -0
  51. data/tests/org/osflash/signals/natives/NativeMappedSignalFunctionArgTest.as +148 -0
  52. data/tests/org/osflash/signals/natives/NativeMappedSignalFunctionNoArgsTest.as +95 -0
  53. data/tests/org/osflash/signals/natives/NativeMappedSignalObjectArgTest.as +85 -0
  54. data/tests/org/osflash/signals/natives/NativeRelaySignalTest.as +174 -0
  55. data/tests/org/osflash/signals/natives/NativeSignalTest.as +312 -0
  56. metadata +152 -0
@@ -0,0 +1,312 @@
1
+ package org.osflash.signals.natives
2
+ {
3
+ import asunit.asserts.*;
4
+ import asunit.framework.IAsync;
5
+ import flash.events.EventDispatcher;
6
+
7
+ import org.osflash.signals.IDeluxeSignal;
8
+
9
+ import flash.display.Sprite;
10
+ import flash.events.Event;
11
+ import flash.events.IEventDispatcher;
12
+ import flash.events.MouseEvent;
13
+
14
+ public class NativeSignalTest
15
+ {
16
+ [Inject]
17
+ public var async:IAsync;
18
+
19
+ private var clicked:NativeSignal;
20
+ private var sprite:IEventDispatcher;
21
+
22
+ [Before]
23
+ public function setUp():void
24
+ {
25
+ sprite = new Sprite();
26
+ clicked = new NativeSignal(sprite, 'click', MouseEvent);
27
+ }
28
+
29
+ [After]
30
+ public function tearDown():void
31
+ {
32
+ clicked.removeAll();
33
+ clicked = null;
34
+ }
35
+
36
+ protected function verifyNoListeners():void
37
+ {
38
+ assertFalse('the EventDispatcher should not have listeners for the event', sprite.hasEventListener('click'));
39
+ assertEquals('the NativeSignal should have no listeners', 0, clicked.numListeners);
40
+ }
41
+ //////
42
+ public function testInstantiated():void
43
+ {
44
+ assertTrue("NativeSignal instantiated", clicked is NativeSignal);
45
+ assertTrue('implements IDeluxeSignal', clicked is IDeluxeSignal);
46
+ assertTrue('implements INativeDispatcher', clicked is INativeDispatcher);
47
+ assertFalse('sprite has no click event listener to start', sprite.hasEventListener('click'));
48
+ assertSame('target round-trips through constructor', sprite, clicked.target);
49
+ }
50
+ //////
51
+ [Test]
52
+ public function signal_add_then_EventDispatcher_dispatch_should_call_signal_listener():void
53
+ {
54
+ clicked.add( async.add(onClicked) );
55
+ sprite.dispatchEvent(new MouseEvent('click'));
56
+ }
57
+
58
+ private function onClicked(e:MouseEvent):void
59
+ {
60
+ assertSame(sprite, e.currentTarget);
61
+ }
62
+ //////
63
+ [Test]
64
+ public function when_signal_adds_listener_then_target_should_have_listener():void
65
+ {
66
+ clicked.add(emptyHandler);
67
+ assertEquals(1, clicked.numListeners);
68
+ assertTrue(sprite.hasEventListener('click'));
69
+ }
70
+
71
+ private function emptyHandler(e:MouseEvent):void {}
72
+
73
+ [Test]
74
+ public function when_signal_adds_then_removes_listener_then_target_should_not_have_listeners():void
75
+ {
76
+ clicked.add(emptyHandler);
77
+ clicked.remove(emptyHandler);
78
+ verifyNoListeners();
79
+ }
80
+
81
+ [Test]
82
+ public function when_signal_removes_all_listeners_then_target_should_not_have_listeners():void
83
+ {
84
+ clicked.add(emptyHandler);
85
+ clicked.add( function(e:*):void {} );
86
+ clicked.removeAll();
87
+ verifyNoListeners();
88
+ }
89
+
90
+ [Test]
91
+ public function when_addOnce_and_removeAll_listeners_then_target_should_not_have_listeners():void
92
+ {
93
+ clicked.addOnce(emptyHandler);
94
+ clicked.addOnce( function(e:*):void {} );
95
+ clicked.removeAll();
96
+ verifyNoListeners();
97
+ }
98
+ //////
99
+
100
+ [Test]
101
+ public function add_listener_then_remove_function_not_in_listeners_should_do_nothing():void
102
+ {
103
+ clicked.add(newEmptyHandler());
104
+ clicked.remove(newEmptyHandler());
105
+ assertEquals(1, clicked.numListeners);
106
+ }
107
+
108
+ private function newEmptyHandler():Function
109
+ {
110
+ return function(e:*):void {};
111
+ }
112
+
113
+ //////
114
+ [Test]
115
+ public function addOnce_and_dispatch_from_signal_should_remove_listener_automatically():void
116
+ {
117
+ clicked.addOnce( async.add(emptyHandler) );
118
+ clicked.dispatch(new MouseEvent('click'));
119
+ verifyNoListeners();
120
+ }
121
+ //////
122
+ [Test]
123
+ public function addOnce_normal_priority_and_dispatch_from_EventDispatcher_should_remove_listener_automatically():void
124
+ {
125
+ var normalPriority:int = 0;
126
+ clicked.addOnceWithPriority( async.add(emptyHandler) , normalPriority);
127
+ sprite.dispatchEvent(new MouseEvent('click'));
128
+ verifyNoListeners();
129
+ }
130
+ //////
131
+ [Test]
132
+ public function addOnce_lowest_priority_and_dispatch_from_EventDispatcher_should_remove_listener_automatically():void
133
+ {
134
+ var lowestPriority:int = int.MIN_VALUE;
135
+ clicked.addOnceWithPriority( async.add(emptyHandler) , lowestPriority);
136
+ sprite.dispatchEvent(new MouseEvent('click'));
137
+ verifyNoListeners();
138
+ }
139
+ //////
140
+ [Test]
141
+ public function addOnce_highest_priority_and_dispatch_from_EventDispatcher_should_remove_listener_automatically():void
142
+ {
143
+ var highestPriority:int = int.MAX_VALUE;
144
+ clicked.addOnceWithPriority( async.add(emptyHandler) , highestPriority);
145
+ sprite.dispatchEvent(new MouseEvent('click'));
146
+ verifyNoListeners();
147
+ }
148
+ //////
149
+ [Test(expects="ArgumentError")]
150
+ public function adding_listener_without_args_should_throw_ArgumentError():void
151
+ {
152
+ clicked.add(function():void {});
153
+ }
154
+
155
+ [Test(expects="ArgumentError")]
156
+ public function adding_listener_with_two_args_should_throw_ArgumentError():void
157
+ {
158
+ clicked.add(function(a:*, b:*):void {});
159
+ }
160
+
161
+ [Test(expects="ArgumentError")]
162
+ public function dispatch_wrong_event_class_should_throw_ArgumentError():void
163
+ {
164
+ clicked.dispatch(new Event('click'));
165
+ }
166
+
167
+ [Test(expects="ArgumentError")]
168
+ public function dispatch_event_with_type_not_matching_signal_name_should_throw_ArgumentError():void
169
+ {
170
+ var wrongType:String = 'rollOver';
171
+ clicked.dispatch(new MouseEvent(wrongType));
172
+ }
173
+
174
+ [Test(expects="ArgumentError")]
175
+ public function dispatch_null_should_throw_ArgumentError():void
176
+ {
177
+ clicked.dispatch(null);
178
+ }
179
+
180
+ [Test]
181
+ public function eventClass_defaults_to_native_Event_class():void
182
+ {
183
+ var added:NativeSignal = new NativeSignal(sprite, Event.ADDED);
184
+ assertSame(Event, added.eventClass);
185
+ }
186
+
187
+ [Test]
188
+ public function eventClass_roundtrips_through_constructor():void
189
+ {
190
+ var clicked:NativeSignal = new NativeSignal(sprite, MouseEvent.CLICK, MouseEvent);
191
+ assertSame(MouseEvent, clicked.eventClass);
192
+ }
193
+
194
+ [Test]
195
+ public function valueClasses_contains_only_eventClass():void
196
+ {
197
+ var clicked:NativeSignal = new NativeSignal(sprite, MouseEvent.CLICK, MouseEvent);
198
+ assertEquals(1, clicked.valueClasses.length);
199
+ assertSame(MouseEvent, clicked.valueClasses[0]);
200
+ assertSame(clicked.eventClass, clicked.valueClasses[0]);
201
+ }
202
+
203
+ //////
204
+ // Captures Issue #5 - You can't addOnce to a signal from a function called by the same signal.
205
+ [Test]
206
+ public function addOnce_in_handler_and_dispatch_should_call_new_listener():void
207
+ {
208
+ clicked.addOnce( async.add(addOnceInHandler, 10) );
209
+ clicked.dispatch(new MouseEvent('click'));
210
+ }
211
+
212
+ protected function addOnceInHandler(e:MouseEvent):void
213
+ {
214
+ clicked.addOnce( async.add(secondAddOnceListener, 10) );
215
+ clicked.dispatch(new MouseEvent('click'));
216
+ }
217
+
218
+ protected function secondAddOnceListener(e:MouseEvent):void
219
+ {
220
+ }
221
+
222
+ //////
223
+ // Captures Issue #14
224
+ [Test]
225
+ public function addOnce_same_handler_in_handler_and_dispatch_should_call_it_again():void
226
+ {
227
+ assertEquals(0, clicked.numListeners);
228
+
229
+ clicked.addOnce( onClickAddOnceAgain );
230
+
231
+ assertEquals(1, clicked.numListeners);
232
+
233
+ clicked.dispatch(new MouseEvent('click'));
234
+ }
235
+
236
+ protected function onClickAddOnceAgain(e:MouseEvent):void
237
+ {
238
+ assertEquals(0, clicked.numListeners);
239
+
240
+ clicked.addOnce( onClickAddOnceAgain );
241
+
242
+ assertEquals(1, clicked.numListeners);
243
+ }
244
+
245
+
246
+ //////
247
+ [Test]
248
+ public function can_use_anonymous_listeners():void
249
+ {
250
+ var listeners:Array = [];
251
+
252
+ for ( var i:int = 0; i < 100; i++ )
253
+ {
254
+ listeners.push(clicked.add(function(e:MouseEvent):void{}));
255
+ }
256
+
257
+ assertTrue("there should be 100 listeners", clicked.numListeners == 100);
258
+
259
+ for each( var fnt:Function in listeners )
260
+ {
261
+ clicked.remove(fnt);
262
+ }
263
+ assertTrue("all anonymous listeners removed", clicked.numListeners == 0);
264
+ }
265
+
266
+ //////
267
+ [Test]
268
+ public function can_use_anonymous_listeners_in_addOnce():void
269
+ {
270
+ var listeners:Array = [];
271
+
272
+ for ( var i:int = 0; i < 100; i++ )
273
+ {
274
+ listeners.push(clicked.addOnce(function(e:MouseEvent):void{}));
275
+ }
276
+
277
+ assertTrue("there should be 100 listeners", clicked.numListeners == 100);
278
+
279
+ for each( var fnt:Function in listeners )
280
+ {
281
+ clicked.remove(fnt);
282
+ }
283
+ assertTrue("all anonymous listeners removed", clicked.numListeners == 0);
284
+ }
285
+
286
+ //////
287
+ [Test]
288
+ public function removed_listener_should_be_returned():void
289
+ {
290
+ var listener:Function = clicked.add(function(e:MouseEvent):void{});
291
+
292
+ assertTrue("Listener is returned", listener == clicked.remove(listener));
293
+ }
294
+ ////// Captures Issue #24
295
+ [Test]
296
+ public function setting_target_to_a_different_object_should_remove_all_listeners_from_1st_target():void
297
+ {
298
+ clicked.add(emptyHandler);
299
+ clicked.target = new EventDispatcher();
300
+ assertFalse(sprite.hasEventListener('click'));
301
+ }
302
+ //////
303
+ [Test]
304
+ public function setting_target_to_the_same_object_should_not_remove_listeners():void
305
+ {
306
+ clicked.add(emptyHandler);
307
+ var numListenersBefore:uint = clicked.numListeners;
308
+ clicked.target = sprite;
309
+ assertEquals(numListenersBefore, clicked.numListeners);
310
+ }
311
+ }
312
+ }
metadata ADDED
@@ -0,0 +1,152 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: as3signals
3
+ version: !ruby/object:Gem::Version
4
+ hash: 3
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 7
9
+ - 0
10
+ version: 0.7.0
11
+ platform: ruby
12
+ authors: []
13
+
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-10-09 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: sprout
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 961915964
30
+ segments:
31
+ - 1
32
+ - 0
33
+ - 26
34
+ - pre
35
+ version: 1.0.26.pre
36
+ type: :runtime
37
+ version_requirements: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ name: asunit4
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ hash: 3
47
+ segments:
48
+ - 0
49
+ version: "0"
50
+ type: :development
51
+ version_requirements: *id002
52
+ description:
53
+ email:
54
+ - amoslanka@gmail.com
55
+ executables: []
56
+
57
+ extensions: []
58
+
59
+ extra_rdoc_files: []
60
+
61
+ files:
62
+ - lib/as3signals.rb
63
+ - src/org/osflash/signals/DeluxeSignal.as
64
+ - src/org/osflash/signals/events/GenericEvent.as
65
+ - src/org/osflash/signals/events/IBubbleEventHandler.as
66
+ - src/org/osflash/signals/events/IEvent.as
67
+ - src/org/osflash/signals/IDeluxeSignal.as
68
+ - src/org/osflash/signals/IDispatcher.as
69
+ - src/org/osflash/signals/ISignal.as
70
+ - src/org/osflash/signals/ISignalOwner.as
71
+ - src/org/osflash/signals/natives/INativeDispatcher.as
72
+ - src/org/osflash/signals/natives/NativeMappedSignal.as
73
+ - src/org/osflash/signals/natives/NativeRelaySignal.as
74
+ - src/org/osflash/signals/natives/NativeSignal.as
75
+ - src/org/osflash/signals/Signal.as
76
+ - as3-signals.as3proj
77
+ - as3-signals.docproj
78
+ - as3signals.gemspec
79
+ - build-asunit.properties
80
+ - build-asunit.xml
81
+ - build.properties
82
+ - build.xml
83
+ - CHANGELOG.textile
84
+ - Gemfile
85
+ - MIT-LICENSE.txt
86
+ - Rakefile
87
+ - README.textile
88
+ - tests/org/osflash/signals/AllTests.as
89
+ - tests/org/osflash/signals/AllTestsRunner.as
90
+ - tests/org/osflash/signals/AmbiguousRelationshipTest.as
91
+ - tests/org/osflash/signals/DeluxeSignalAmbiguousRelationshipTest.as
92
+ - tests/org/osflash/signals/DeluxeSignalDispatchExtraArgsTest.as
93
+ - tests/org/osflash/signals/DeluxeSignalDispatchNoArgsTest.as
94
+ - tests/org/osflash/signals/DeluxeSignalDispatchNonEventTest.as
95
+ - tests/org/osflash/signals/DeluxeSignalSplitInterfacesTest.as
96
+ - tests/org/osflash/signals/DeluxeSignalTest.as
97
+ - tests/org/osflash/signals/DeluxeSignalWithBubblingEventTest.as
98
+ - tests/org/osflash/signals/DeluxeSignalWithCustomEventTest.as
99
+ - tests/org/osflash/signals/DeluxeSignalWithGenericEventTest.as
100
+ - tests/org/osflash/signals/GenericEventTest.as
101
+ - tests/org/osflash/signals/natives/AmbiguousRelationshipInNativeSignalTest.as
102
+ - tests/org/osflash/signals/natives/NativeMappedSignalBoundaryUseTest.as
103
+ - tests/org/osflash/signals/natives/NativeMappedSignalDefaultsTest.as
104
+ - tests/org/osflash/signals/natives/NativeMappedSignalFunctionArgTest.as
105
+ - tests/org/osflash/signals/natives/NativeMappedSignalFunctionNoArgsTest.as
106
+ - tests/org/osflash/signals/natives/NativeMappedSignalObjectArgTest.as
107
+ - tests/org/osflash/signals/natives/NativeRelaySignalTest.as
108
+ - tests/org/osflash/signals/natives/NativeSignalTest.as
109
+ - tests/org/osflash/signals/PriorityListenersTest.as
110
+ - tests/org/osflash/signals/RedispatchedEventTest.as
111
+ - tests/org/osflash/signals/SignalDispatchArgsTest.as
112
+ - tests/org/osflash/signals/SignalDispatchNoArgsTest.as
113
+ - tests/org/osflash/signals/SignalDispatchNonEventTest.as
114
+ - tests/org/osflash/signals/SignalSplitInterfacesTest.as
115
+ - tests/org/osflash/signals/SignalTest.as
116
+ - tests/org/osflash/signals/SignalWithCustomEventTest.as
117
+ has_rdoc: true
118
+ homepage: http://www.github.com/amoslanka/sprout-as3-signals
119
+ licenses: []
120
+
121
+ post_install_message:
122
+ rdoc_options: []
123
+
124
+ require_paths:
125
+ - lib
126
+ required_ruby_version: !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ hash: 3
132
+ segments:
133
+ - 0
134
+ version: "0"
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ hash: 3
141
+ segments:
142
+ - 0
143
+ version: "0"
144
+ requirements: []
145
+
146
+ rubyforge_project:
147
+ rubygems_version: 1.3.7
148
+ signing_key:
149
+ specification_version: 3
150
+ summary: AS3-Signals ActionScript 3 source wrapped in a Sprout::Specification for implementation into a sprout project and Gem::Specification for distribution as a gem.
151
+ test_files: []
152
+