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.
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
+