blob: bb969baa81bf0d098f2023a2173e2e14cc970377 [file] [log] [blame]
package mx.managers {
import mx.core.UIComponentGlobals;
import mx.core.mx_internal;
import mx.events.FlexEvent;
import org.flexunit.asserts.assertFalse;
import org.flexunit.asserts.assertNull;
import org.fluint.uiImpersonation.UIImpersonator;
use namespace mx_internal;
public class LayoutManager_FLEX_35321_Tests
{
private var _objectWhichIsRemovedOnSizeValidation:SomeComponent;
private var _creationCompleteCalled:Boolean;
[Before]
public function setUp():void
{
_creationCompleteCalled = false;
_objectWhichIsRemovedOnSizeValidation = new SomeComponent();
UIImpersonator.addChild(_objectWhichIsRemovedOnSizeValidation);
}
[After]
public function tearDown():void
{
UIImpersonator.removeChild(_objectWhichIsRemovedOnSizeValidation);
_objectWhichIsRemovedOnSizeValidation = null;
}
[Test]
public function test_object_removed_from_stage_via_code_is_not_initialized():void
{
//given
UIComponentGlobals.mx_internal::layoutManager.usePhasedInstantiation = false;
_objectWhichIsRemovedOnSizeValidation.addEventListener(FlexEvent.CREATION_COMPLETE, onCreationComplete);
//when
_objectWhichIsRemovedOnSizeValidation.validateNow();
//then
assertNull("The object was actually not removed from stage. Huh?", _objectWhichIsRemovedOnSizeValidation.parent);
assertFalse("Yep, this is the bug. Why call initialized=true on an object that's not on stage?", _creationCompleteCalled);
}
[Test]
public function test_object_removed_from_stage_via_user_action_is_not_initialized():void
{
//given
UIComponentGlobals.mx_internal::layoutManager.usePhasedInstantiation = true;
_objectWhichIsRemovedOnSizeValidation.addEventListener(FlexEvent.CREATION_COMPLETE, onCreationComplete);
//when
_objectWhichIsRemovedOnSizeValidation.validateNow();
_objectWhichIsRemovedOnSizeValidation.pretendUserAskedForComponentRemoval();
//then
assertNull("The object was actually not removed from stage. Huh?", _objectWhichIsRemovedOnSizeValidation.parent);
assertFalse("Yep, this is the bug. Why call initialized=true on an object that's not on stage?", _creationCompleteCalled);
}
private function onCreationComplete(event:FlexEvent):void
{
_creationCompleteCalled = true;
}
}
}
import flash.events.TimerEvent;
import flash.utils.Timer;
import mx.core.IVisualElementContainer;
import mx.core.UIComponent;
class SomeComponent extends UIComponent
{
private var _timer:Timer = new Timer(1, 1);
override public function validateSize(recursive:Boolean = false):void
{
super.validateSize(recursive);
removeFromStage();
}
private function removeFromStage():void
{
if(this.parent)
{
if(this.parent is IVisualElementContainer)
IVisualElementContainer(this.parent).removeElement(this);
else
this.parent.removeChild(this);
}
}
public function pretendUserAskedForComponentRemoval():void
{
_timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
_timer.start();
}
private function onTimerComplete(event:TimerEvent):void
{
removeFromStage();
}
}