/test/org/robotlegs/v2/extensions/mediatorMap/utilities/triggers/RL2MediatorTrigger_strategiesTest.as

https://github.com/justinjmoses/robotlegs-framework · ActionScript · 144 lines · 117 code · 20 blank · 7 comment · 0 complexity · 0b6cbae53c91178761390234a25ae8f8 MD5 · raw file

  1. //------------------------------------------------------------------------------
  2. // Copyright (c) 2011 the original author or authors. All Rights Reserved.
  3. //
  4. // NOTICE: You are permitted to use, modify, and distribute this file
  5. // in accordance with the terms of the license agreement accompanying it.
  6. //------------------------------------------------------------------------------
  7. package org.robotlegs.v2.extensions.mediatorMap.utilities.triggers
  8. {
  9. import flash.display.DisplayObject;
  10. import flash.display.Sprite;
  11. import mockolate.received;
  12. import mockolate.runner.MockolateRule;
  13. import mockolate.runner.MockolateRunner;
  14. import mockolate.stub;
  15. import org.flexunit.asserts.*;
  16. import org.hamcrest.assertThat;
  17. import org.hamcrest.object.strictlyEqualTo;
  18. import org.robotlegs.core.IMediator;
  19. import org.robotlegs.v2.extensions.mediatorMap.api.IMediator;
  20. import org.robotlegs.v2.extensions.mediatorMap.utilities.triggers.support.DuckTypedRL2Mediator;
  21. import mx.core.UIComponent;
  22. import org.robotlegs.v2.extensions.mediatorMap.utilities.strategies.NoWaitStrategy;
  23. import org.robotlegs.v2.core.impl.TypeMatcher;
  24. import org.robotlegs.v2.extensions.mediatorMap.utilities.strategies.WaitForCompleteStrategy;
  25. import flash.events.Event;
  26. import flash.display.MovieClip;
  27. import org.robotlegs.v2.extensions.mediatorMap.utilities.strategies.WaitForCreationCompleteStrategy;
  28. public class RL2MediatorTrigger_strategiesTest
  29. {
  30. [Rule]
  31. public var mocks:MockolateRule = new MockolateRule();
  32. [Mock]
  33. public var rl2Mediator:org.robotlegs.v2.extensions.mediatorMap.api.IMediator;
  34. private const SPRITE:Sprite = new Sprite();
  35. private const UI_COMPONENT:UIComponent = new UIComponent();
  36. private const MOVIE_CLIP:MovieClip = new MovieClip();
  37. private var _callbackRun:Function;
  38. private var strictInstance:RL2MediatorTrigger;
  39. [Before]
  40. public function setUp():void
  41. {
  42. strictInstance = new RL2MediatorTrigger(true);
  43. UI_COMPONENT.initialized = false;
  44. }
  45. [After]
  46. public function tearDown():void
  47. {
  48. strictInstance = null;
  49. }
  50. [Test]
  51. public function startup_calls_initialize_immediately_if_no_strategy_added():void
  52. {
  53. strictInstance.addStartupStrategy(NoWaitStrategy, new TypeMatcher().allOf(Sprite));
  54. strictInstance.startup(rl2Mediator, SPRITE);
  55. assertThat(rl2Mediator, received().method('initialize'));
  56. }
  57. [Test]
  58. public function startup_doesnt_call_initialize_immediately_on_MovieClip_when_matched_to_waitForComplete_strategy():void
  59. {
  60. strictInstance.addStartupStrategy(WaitForCompleteStrategy, new TypeMatcher().allOf(MovieClip));
  61. strictInstance.startup(rl2Mediator, MOVIE_CLIP);
  62. assertThat(rl2Mediator, received().method('initialize').never());
  63. }
  64. [Test]
  65. public function startup_calls_initialize_after_MovieClip_dispatches_complete_when_matched_to_waitForComplete_strategy():void
  66. {
  67. strictInstance.addStartupStrategy(WaitForCompleteStrategy, new TypeMatcher().allOf(MovieClip));
  68. strictInstance.startup(rl2Mediator, MOVIE_CLIP);
  69. MOVIE_CLIP.dispatchEvent(new Event(Event.COMPLETE));
  70. assertThat(rl2Mediator, received().method('initialize').once());
  71. }
  72. [Test]
  73. public function startup_does_NOT_call_initialize_after_MovieClip_dispatches_complete_if_shutdown_has_run_between():void
  74. {
  75. strictInstance.addStartupStrategy(WaitForCompleteStrategy, new TypeMatcher().allOf(MovieClip));
  76. strictInstance.startup(rl2Mediator, MOVIE_CLIP);
  77. strictInstance.shutdown(rl2Mediator, MOVIE_CLIP, benignCallback);
  78. stub(rl2Mediator).getter("destroyed").returns(true);
  79. MOVIE_CLIP.dispatchEvent(new Event(Event.COMPLETE));
  80. assertThat(rl2Mediator, received().method('initialize').never());
  81. }
  82. [Test]
  83. public function startup_doesnt_call_initialize_immediately_on_unready_UIComponent_when_matched_to_waitForCreationComplete_strategy():void
  84. {
  85. strictInstance.addStartupStrategy(WaitForCreationCompleteStrategy, new TypeMatcher().allOf(UIComponent));
  86. strictInstance.startup(rl2Mediator, UI_COMPONENT);
  87. assertThat(rl2Mediator, received().method('initialize').never());
  88. }
  89. [Test]
  90. public function startup_calls_initialize_after_UIComponent_dispatches_creationComplete_when_matched_to_waitForCreationComplete_strategy():void
  91. {
  92. strictInstance.addStartupStrategy(WaitForCreationCompleteStrategy, new TypeMatcher().allOf(UIComponent));
  93. strictInstance.startup(rl2Mediator, UI_COMPONENT);
  94. UI_COMPONENT.dispatchEvent(new Event('creationComplete'));
  95. assertThat(rl2Mediator, received().method('initialize').once());
  96. }
  97. [Test]
  98. public function startup_calls_initialize_immediately_if_UIComponent_is_already_initialised():void
  99. {
  100. strictInstance.addStartupStrategy(WaitForCreationCompleteStrategy, new TypeMatcher().allOf(UIComponent));
  101. UI_COMPONENT.initialized = true;
  102. strictInstance.startup(rl2Mediator, UI_COMPONENT);
  103. assertThat(rl2Mediator, received().method('initialize').once());
  104. }
  105. [Test]
  106. public function startup_does_not_call_initialize_after_creationComplete_if_UIComponent_destroyed_is_true():void
  107. {
  108. strictInstance.addStartupStrategy(WaitForCreationCompleteStrategy, new TypeMatcher().allOf(UIComponent));
  109. strictInstance.startup(rl2Mediator, UI_COMPONENT);
  110. strictInstance.shutdown(rl2Mediator, UI_COMPONENT, benignCallback);
  111. stub(rl2Mediator).getter("destroyed").returns(true);
  112. assertThat(rl2Mediator, received().method('initialize').never());
  113. }
  114. [Test]
  115. public function test_failure_seen():void
  116. {
  117. assertTrue("Failing test", true);
  118. }
  119. protected function benignCallback(mediator:*, view:DisplayObject):void
  120. {
  121. // do nothing
  122. }
  123. }
  124. }