/tests/org/osflash/signals/natives/NativeMappedSignalFunctionArgTest.as

https://github.com/creynders/as3-signals
ActionScript | 148 lines | 123 code | 23 blank | 2 comment | 0 complexity | 74d9e72f4614a0b9102bb7aac4dac66d MD5 | raw file
  1. package org.osflash.signals.natives
  2. {
  3. import asunit.asserts.*;
  4. import asunit.framework.IAsync;
  5. import org.osflash.signals.IPrioritySignal;
  6. import flash.display.Sprite;
  7. import flash.events.Event;
  8. import flash.events.MouseEvent;
  9. public class NativeMappedSignalFunctionArgTest
  10. {
  11. [Inject]
  12. public var async:IAsync;
  13. private var signal:NativeMappedSignal;
  14. private var signalMappingToEventType:NativeMappedSignal;
  15. private var signalMappingToIncorrectEventType:NativeMappedSignal;
  16. private var signalMappingToVoid:NativeMappedSignal;
  17. private var sprite:Sprite;
  18. private const EventType:String = MouseEvent.CLICK;
  19. private const MappedObject:String = "mapped " + EventType;
  20. [Before]
  21. public function setUp():void
  22. {
  23. sprite = new Sprite();
  24. signal = new NativeMappedSignal(sprite, EventType, MouseEvent, String).mapTo(
  25. function ():String {
  26. return MappedObject;
  27. }
  28. );
  29. signalMappingToEventType = new NativeMappedSignal(sprite, EventType, MouseEvent, String).mapTo(
  30. function (event:MouseEvent):String {
  31. return event.type;
  32. }
  33. );
  34. signalMappingToIncorrectEventType = new NativeMappedSignal(sprite, EventType, MouseEvent, String).mapTo(
  35. function (event:MouseEvent):int {
  36. return event.delta;
  37. }
  38. );
  39. signalMappingToVoid = new NativeMappedSignal(sprite, EventType).mapTo(function ():void {});
  40. }
  41. [After]
  42. public function tearDown():void
  43. {
  44. signal.removeAll();
  45. signal = null;
  46. signalMappingToEventType.removeAll();
  47. signalMappingToEventType = null;
  48. signalMappingToIncorrectEventType.removeAll();
  49. signalMappingToIncorrectEventType = null;
  50. signalMappingToVoid.removeAll();
  51. signalMappingToVoid = null;
  52. }
  53. [Test]
  54. public function testInstantiated():void
  55. {
  56. assertFalse('sprite has no click event listener to start', sprite.hasEventListener(EventType));
  57. assertTrue("NativeMappedSignal instantiated", signal is NativeMappedSignal);
  58. assertTrue('implements IPrioritySignal', signal is IPrioritySignal);
  59. assertSame('has only one value class', 1, signal.valueClasses.length);
  60. assertSame('single value class is of type String', String, signal.valueClasses[0]);
  61. assertTrue("NativeMappedSignal instantiated", signalMappingToEventType is NativeMappedSignal);
  62. assertTrue('implements IPrioritySignal', signalMappingToEventType is IPrioritySignal);
  63. assertSame('has only one value class', 1, signalMappingToEventType.valueClasses.length);
  64. assertSame('single value class is of type String', String, signalMappingToEventType.valueClasses[0]);
  65. assertTrue("NativeMappedSignal instantiated", signalMappingToIncorrectEventType is NativeMappedSignal);
  66. assertTrue('implements IPrioritySignal', signalMappingToIncorrectEventType is IPrioritySignal);
  67. assertSame('has only one value class', 1, signalMappingToIncorrectEventType.valueClasses.length);
  68. assertSame('single value class is of type String', String, signalMappingToIncorrectEventType.valueClasses[0]);
  69. assertTrue("NativeMappedSignal instantiated", signalMappingToVoid is NativeMappedSignal);
  70. assertTrue('implements IPrioritySignal', signalMappingToVoid is IPrioritySignal);
  71. assertSame('has no value classes', 0, signalMappingToVoid.valueClasses.length);
  72. }
  73. private function dispatchTestEvent():void
  74. {
  75. sprite.dispatchEvent(buildTestEvent());
  76. }
  77. private function buildTestEvent():Event
  78. {
  79. return new MouseEvent(EventType);
  80. }
  81. //////
  82. [Test]
  83. public function signal_add_then_mapped_object_should_be_callback_argument():void
  84. {
  85. signal.add( async.add(checkMappedArgument, 10) );
  86. dispatchTestEvent();
  87. }
  88. private function checkMappedArgument(argument:String):void
  89. {
  90. assertSame(MappedObject, argument);
  91. }
  92. //////
  93. [Test]
  94. public function mapping_function_should_receive_event_as_argument():void
  95. {
  96. signalMappingToEventType.add( async.add(checkMappedEventTypeArgument, 10) );
  97. dispatchTestEvent();
  98. }
  99. private function checkMappedEventTypeArgument(argument:String):void
  100. {
  101. assertSame(EventType, argument);
  102. }
  103. [Test(expects="ArgumentError")]
  104. public function mapping_function_has_to_many_arguments_should_throw_ArgumentError():void
  105. {
  106. var signal:NativeMappedSignal = new NativeMappedSignal(sprite, EventType, MouseEvent, String).mapTo(
  107. function (event:MouseEvent, extraArg:Object):String {
  108. return event.type;
  109. }
  110. );
  111. }
  112. [Test(expects="Error")]
  113. public function mapping_function_returns_incorrectly_typed_argument_should_throw_Error():void
  114. {
  115. signalMappingToIncorrectEventType.dispatch(buildTestEvent());
  116. }
  117. private function emptyHandler(argument:String):void {}
  118. [Test]
  119. public function mapping_to_void():void
  120. {
  121. signalMappingToVoid.add(async.add(emptyHandler, 10));
  122. dispatchTestEvent();
  123. }
  124. }
  125. }