package test.customLayoutList.testCase { import component.list.CustomLayoutList; import flash.events.Event; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.geom.Rectangle; import flash.utils.Timer; import mx.core.UIComponent; import mx.events.FlexEvent; import net.digitalprimates.fluint.sequence.SequenceEventDispatcher; import net.digitalprimates.fluint.sequence.SequenceRunner; import net.digitalprimates.fluint.sequence.SequenceSetter; import net.digitalprimates.fluint.sequence.SequenceWaiter; import test.base.CustomTestCase; import test.customLayoutList.view.CustomLayoutListView; public class TestLayoutChange extends CustomTestCase { private var testView : CustomLayoutListView; private var timer : Timer; public function TestLayoutChange() { super(); } override protected function setUp() : void { timer = new Timer(CustomLayoutList.TWEEN_DURATION_SECONDS * 2000); testView = new CustomLayoutListView(); testView.filterCheckboxVisible = true; testView.addEventListener(FlexEvent.CREATION_COMPLETE, waitingHandler(pendUntilComplete), false, 0, true); addChild(testView); } override protected function tearDown() : void { removeChild(testView); testView = null; timer.stop(); } [Test(description="Asserts that the list is updating its layout when filterring the data provider.")] public function updateLayoutOnFilterChange() : void { var sequenceRunner : SequenceRunner = new SequenceRunner(this); sequenceRunner.addStep(new SequenceWaiter(timer, TimerEvent.TIMER, timer.delay)); sequenceRunner.addStep(new SequenceEventDispatcher(testView.filterCheckbox, new MouseEvent(MouseEvent.CLICK))); sequenceRunner.addStep(new SequenceWaiter(timer, TimerEvent.TIMER, timer.delay)); sequenceRunner.addStep(new SequenceEventDispatcher(testView.filterCheckbox, new MouseEvent(MouseEvent.CLICK))); sequenceRunner.addStep(new SequenceWaiter(timer, TimerEvent.TIMER, timer.delay)); sequenceRunner.addAssertHandler(assertAllItemsArePresent, null); sequenceRunner.run(); timer.start() } private function assertAllItemsArePresent(e : Event, passThroughData : Object) : void { assertTrue(testView.list.removedItems.length == 0); } [Test(description="Asserts that the layout updates when we reassign the layout-property")] public function updataLayoutOnLayoutChange() : void { var sequenceRunner : SequenceRunner = new SequenceRunner(this); sequenceRunner.addStep(new SequenceWaiter(timer, TimerEvent.TIMER, timer.delay)); sequenceRunner.addStep(new SequenceSetter(testView.list, {layout:testView.verticalLayout})); sequenceRunner.addStep(new SequenceWaiter(timer, TimerEvent.TIMER, timer.delay)); sequenceRunner.addAssertHandler(assertLayoutIsApplied, null); sequenceRunner.addStep(new SequenceSetter(testView.list, {layout:testView.fluidLayout})); sequenceRunner.addStep(new SequenceWaiter(timer, TimerEvent.TIMER, timer.delay)); sequenceRunner.addAssertHandler(assertLayoutIsApplied, null); sequenceRunner.run(); timer.start() } private function assertLayoutIsApplied(e : Event, passThroughData : Object) : void { var dimensions : Array = testView.list.layout.updateLayout(testView.list, testView.list.listItems, testView.list.removedItems); for (var i : int = 0; i < dimensions.length; i++) { var dimension : Rectangle = Rectangle(dimensions[i]); var item : UIComponent = UIComponent(testView.list.listItems.getItemAt(i)); assertEquals(dimension.x, item.x); assertEquals(dimension.y, item.y); assertEquals(dimension.width, item.width); assertEquals(dimension.height, item.height); } } } }