     {
         _removeFromStageOnValidateProperties = value;
     }
+
+    public function get numValidateDisplayListCalls():int
+    {
+        return _numValidateDisplayListCalls;
+    }
+
+    public function get numValidateSizeCalls():int
+    {
+        return _numValidateSizeCalls;
+    }
+
+    public function get numValidatePropertiesCalls():int
+    {
+        return _numValidatePropertiesCalls;
+    }
 }
    override public function validateSize(recursive:Boolean = false):void
    {
        super.validateSize(recursive);
    }

    override public function validateDisplayList():void
    {
        super.validateDisplayList();
    }

    private function removeFromStage():void

        private function then_assert_one_initialization_only(event:Event, passThroughData:Object):void
        {
            //then
            assertNotNull("The object should be on stage...", _objectWhichIsRemovedAtValidation.parent);
            assertEquals("When validation is interrupted half-way it should be complete once the object is re-added to stage", 1, _creationCompleteCalls);
        }


        //--------------------------------------------------------------------------
        //
        //  Shared test methods
        //
        //--------------------------------------------------------------------------

        private function then_remove_from_stage_via_callLater(event:Event, passThroughData:Object):void
        {
            //then
            assertEquals("The first validation step should have completed by now", 1, _objectWhichIsRemovedAtValidation.numValidatePropertiesCalls);
            assertEquals("But not validateSize()", 0, _objectWhichIsRemovedAtValidation.numValidateSizeCalls);
            assertEquals("Nor validateDisplayList()", 0, _objectWhichIsRemovedAtValidation.numValidateDisplayListCalls);

            //given
            const whereToGoNext:Function = passThroughData as Function;

            //when
            _objectWhichIsRemovedAtValidation.pretendUserAskedForComponentRemovalInNextFrame();

            //then wait 2 frames
            noEnterFramesRemaining = 3;
            UIImpersonator.testDisplay.addEventListener(Event.ENTER_FRAME, onEnterFrame);
            Async.handleEvent(this, _finishNotifier, Event.COMPLETE, whereToGoNext, 300);
        }

        private function then_assert_not_initialized(event:Event = null, passThroughData:Object = null):void
        {
            //then
            assertNull("The object was actually not removed from stage. Huh?", _objectWhichIsRemovedAtValidation.parent);
            assertEquals("Yep, this is the bug. Why call initialized=true on an object that's not on stage?", 0, _creationCompleteCalls);
        }



