blob: 2519591f56e5d728f73f3d2b9543b47a7972d60b [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
//
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////////
package spark.layouts {
import flash.events.Event;
import flash.events.EventDispatcher;
import mx.containers.utilityClasses.ConstraintColumn;
import mx.containers.utilityClasses.ConstraintRow;
import mx.effects.Resize;
import mx.states.SetProperty;
import mx.states.State;
import mx.states.Transition;
import org.flexunit.asserts.assertTrue;
import org.flexunit.async.Async;
import org.fluint.uiImpersonation.UIImpersonator;
import spark.components.DropDownList;
import spark.components.Group;
import spark.events.DropDownEvent;
public class ConstraintLayout_FLEX_33311_Tests {
private static const NO_ENTER_FRAMES_TO_ALLOW:int = 3;
private static var noEnterFramesRemaining:int = NaN;
private static const _finishNotifier:EventDispatcher = new EventDispatcher();
private var _sut:ConstraintLayout;
private var _parentGroup:Group;
private var _childGroup1:Group;
private var _childGroup2:Group;
private var _dropDown:DropDownList;
[Before]
public function setUp():void
{
_sut = new ConstraintLayout();
_sut.constraintColumns = new <ConstraintColumn>[new ConstraintColumn()];
var row:ConstraintRow = new ConstraintRow();
row.id = "row1";
_sut.constraintRows = new <ConstraintRow>[row];
_parentGroup = new Group();
_childGroup1 = new Group();
_childGroup2 = new Group();
_dropDown = new DropDownList();
_childGroup1.addElement(_dropDown);
_parentGroup.addElement(_childGroup1);
_parentGroup.addElement(_childGroup2);
_parentGroup.states = [
new State({name:"closed", overrides:[new SetProperty(_dropDown, "width", "200")]}),
new State({name:"open", overrides:[new SetProperty(_dropDown, "width", "400")]})];
_parentGroup.currentState = "closed";
var _transition:Transition = new Transition();
_transition.fromState = "*";
_transition.toState = "*";
_transition.effect = new Resize(_childGroup1);
_parentGroup.transitions = [_transition];
}
[After]
public function tearDown():void
{
_sut = null;
_parentGroup = null;
_childGroup1 = null;
_childGroup2 = null;
_dropDown = null;
}
[Test(async, timeout=1000)]
public function reproduce_bug():void
{
function onDropDownOpen(event:DropDownEvent):void
{
_parentGroup.currentState = "open";
}
function onDropDownClose(event:DropDownEvent):void
{
_parentGroup.currentState = "closed";
}
//given
_childGroup1.baseline = "row1:0";
_childGroup2.baseline = "row1:0";
_dropDown.addEventListener(DropDownEvent.CLOSE, onDropDownClose);
_dropDown.addEventListener(DropDownEvent.OPEN, onDropDownOpen);
//when
_parentGroup.layout = _sut;
UIImpersonator.addChild(_parentGroup);
_dropDown.openDropDown();
//then - wait a few frames
noEnterFramesRemaining = NO_ENTER_FRAMES_TO_ALLOW;
UIImpersonator.testDisplay.addEventListener(Event.ENTER_FRAME, onEnterFrame);
Async.handleEvent(this, _finishNotifier, Event.COMPLETE, then_no_fatal_was_thrown, 800);
}
private static function then_no_fatal_was_thrown(event:Event, passThroughData:Object):void
{
assertTrue(true);
}
private function onEnterFrame(event:Event):void
{
if(!--noEnterFramesRemaining)
{
UIImpersonator.testDisplay.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
_finishNotifier.dispatchEvent(new Event(Event.COMPLETE));
}
else if(NO_ENTER_FRAMES_TO_ALLOW - noEnterFramesRemaining == 2)
{
_dropDown.closeDropDown(true);
}
}
}
}