package test.customLayoutList.testCase
{
    import component.list.CustomLayoutList;
    
    import flash.events.TimerEvent;
    import flash.geom.Rectangle;
    import flash.utils.Timer;
    
    import mx.core.IDataRenderer;
    import mx.core.UIComponent;
    import mx.events.FlexEvent;
    
    import net.digitalprimates.fluint.tests.TestCase;
    
    import test.customLayoutList.view.CustomLayoutListView;

    public class TestInitialization extends TestCase
    {
        private var testView : CustomLayoutListView;
        
        public function TestInitialization()
        {
            super();
        }
        
        override protected function setUp() : void
        {
            testView = new CustomLayoutListView();
            testView.addEventListener(FlexEvent.CREATION_COMPLETE, asyncHandler(pendUntilComplete, 1000), false, 0, true);
            addChild(testView);
        }
        
        override protected function tearDown() : void
        {
            removeChild(testView);
            testView = null;
        }
        
        [Test]
        public function listItemsAfterCreation() : void 
        {
            assertTrue(testView.list.dataProvider.length == 10);
            
            for (var i : int = 0; i < testView.list.listItems.length; i++)
            {
                var item : IDataRenderer = IDataRenderer(testView.list.listItems.getItemAt(i));
                var itemData : Object = testView.dataProvider.getItemAt(i);
                
                assertEquals(item.data, itemData);
            }
        }
        
        [Test]
        public function layoutAfterCreation() : void 
        {
            var timer : Timer = new Timer(CustomLayoutList.TWEEN_DURATION_SECONDS * 2000, 1);
            timer.addEventListener(TimerEvent.TIMER_COMPLETE, 
                asyncHandler(handleLayoutTimerComplete, CustomLayoutList.TWEEN_DURATION_SECONDS * 2000 + 10), false, 0, true);
            timer.start();
        }
        
        private function handleLayoutTimerComplete(e : TimerEvent, 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);
            }
        }
        
    }
}