Mihai, The http://apacheflexbuild.cloudapp.net:8080/job/flex-sdk_test/ job keeps hanging on this new test. I have disabled the job. Please investigate and re-enable the job when things are working again.
Thanks, -Alex On 9/19/16, 4:36 AM, "mih...@apache.org" <mih...@apache.org> wrote: >FLEX-35126 Added a unit test to reprouce the bug. Currently it passes, as >expected. (But if I manually put back the fix for FLEX-34088, it fails, >as it should, meaning it actually tests the correct bug.) > > >Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo >Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/3d71f1b5 >Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/3d71f1b5 >Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/3d71f1b5 > >Branch: refs/heads/develop >Commit: 3d71f1b5e458ee39f439ef68db092ed08a8935df >Parents: a797884 >Author: Mihai Chira <mih...@apache.org> >Authored: Mon Sep 19 13:24:17 2016 +0200 >Committer: Mihai Chira <mih...@apache.org> >Committed: Mon Sep 19 13:24:17 2016 +0200 > >---------------------------------------------------------------------- > .../components/DropDownList_FLEX_35126_Tests.as | 182 +++++++++++++++++++ > 1 file changed, 182 insertions(+) >---------------------------------------------------------------------- > > >http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/3d71f1b5/frameworks/p >rojects/spark/tests/spark/components/DropDownList_FLEX_35126_Tests.as >---------------------------------------------------------------------- >diff --git >a/frameworks/projects/spark/tests/spark/components/DropDownList_FLEX_35126 >_Tests.as >b/frameworks/projects/spark/tests/spark/components/DropDownList_FLEX_35126 >_Tests.as >new file mode 100644 >index 0000000..82ab10e >--- /dev/null >+++ >b/frameworks/projects/spark/tests/spark/components/DropDownList_FLEX_35126 >_Tests.as >@@ -0,0 +1,182 @@ >+///////////////////////////////////////////////////////////////////////// >/////// >+// >+// 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.components { >+ import flash.events.Event; >+ import flash.events.EventDispatcher; >+ import flash.events.MouseEvent; >+ >+ import mx.events.FlexMouseEvent; >+ >+ import org.flexunit.assertThat; >+ import org.flexunit.asserts.assertEquals; >+ import org.flexunit.asserts.assertFalse; >+ import org.flexunit.asserts.assertTrue; >+ import org.flexunit.async.Async; >+ import org.fluint.uiImpersonation.UIImpersonator; >+ >+ public class DropDownList_FLEX_35126_Tests >+ { >+ private static const NO_ENTER_FRAMES_TO_ALLOW:int = 2; >+ private static var noEnterFramesRemaining:int = NaN; >+ private static const _finishNotifier:EventDispatcher = new >EventDispatcher(); >+ >+ private static var _sut:DropDownListInspectable; >+ private static var _dropDownListOnStage:DropDownList; >+ private var _popUp:PopUpAnchor; >+ >+ [Before] >+ public function setUp():void >+ { >+ _popUp = new PopUpAnchor(); >+ _popUp.displayPopUp = true; >+ >+ _sut = new DropDownListInspectable(); >+ _sut.addEventListener(FlexMouseEvent.MOUSE_DOWN_OUTSIDE, >onMouseDownOutsidePopup); >+ >+ _popUp.popUp = _sut; >+ >+ _dropDownListOnStage = new DropDownList(); >+ } >+ >+ private function >onMouseDownOutsidePopup(event:FlexMouseEvent):void >+ { >+ _popUp.displayPopUp = false; >+ } >+ >+ [After] >+ public function tearDown():void >+ { >+ _sut = null; >+ _popUp = null; >+ _dropDownListOnStage = null; >+ } >+ >+ [Test(async, timeout=1000)] >+ public function >test_dropdown_doesnt_close_when_item_selected_from_DropDownList():void >+ { >+ //given >+ _popUp.width = _sut.width = 150; >+ _dropDownListOnStage.x = 200; >+ UIImpersonator.addChild(_popUp); >+ UIImpersonator.addChild(_dropDownListOnStage); >+ >+ //then >+ assertTrue(_popUp.displayPopUp); >+ >assertThat(isNaN(_sut.dropDownController_.rollOverOpenDelay)); >+ >+ //when >+ _sut.openButton.dispatchEvent(new >MouseEvent(MouseEvent.ROLL_OVER)); >+ _sut.openButton.dispatchEvent(new >MouseEvent(MouseEvent.MOUSE_DOWN)); >+ >+ //then - wait a frame >+ noEnterFramesRemaining = NO_ENTER_FRAMES_TO_ALLOW; >+ >UIImpersonator.testDisplay.addEventListener(Event.ENTER_FRAME, >onEnterFrame); >+ Async.handleEvent(this, _finishNotifier, Event.COMPLETE, >then_open_drop_down, 300); >+ } >+ >+ private function then_open_drop_down(event:Event, >passThroughData:Object):void >+ { >+ //when - MOUSE_UP to signify the lifting of the mouse button >+ _sut.openButton.dispatchEvent(new >MouseEvent(MouseEvent.MOUSE_UP)); >+ >+ //then >+ assertTrue(_sut.isDropDownOpen); >+ >+ //when - MOUSE_DOWN on the stage dropDownList >+ _dropDownListOnStage.openButton.dispatchEvent(new >MouseEvent(MouseEvent.ROLL_OVER)); >+ _dropDownListOnStage.openButton.dispatchEvent(new >MouseEvent(MouseEvent.MOUSE_DOWN)); >+ >+ //then - wait a frame >+ noEnterFramesRemaining = NO_ENTER_FRAMES_TO_ALLOW; >+ >UIImpersonator.testDisplay.addEventListener(Event.ENTER_FRAME, >onEnterFrame); >+ Async.handleEvent(this, _finishNotifier, Event.COMPLETE, >then_select_item_in_drop_down, 300); >+ } >+ >+ private function then_select_item_in_drop_down(event:Event, >passThroughData:Object):void >+ { >+ //when - MOUSE_UP to signify the lifting of the mouse button >+ _dropDownListOnStage.openButton.dispatchEvent(new >MouseEvent(MouseEvent.MOUSE_UP)); >+ >+ //then >+ assertFalse("PopUpAnchor should be closed", >_popUp.displayPopUp); >+ assertTrue(_dropDownListOnStage.isDropDownOpen); >+ >+ //when - second click on stage dropdown >+ _dropDownListOnStage.openButton.dispatchEvent(new >MouseEvent(MouseEvent.ROLL_OVER)); >+ _dropDownListOnStage.openButton.dispatchEvent(new >MouseEvent(MouseEvent.MOUSE_DOWN)); >+ >+ //then >+ assertEquals("The DropDownController should have closed the >DropDownList at the first click on the other DropDownList, and stopped >listening to mouse events", 1, _sut.noReactionsToOutsideClick); >+ } >+ >+ private static function onEnterFrame(event:Event):void >+ { >+ if(!--noEnterFramesRemaining) >+ { >+ >UIImpersonator.testDisplay.removeEventListener(Event.ENTER_FRAME, >onEnterFrame); >+ _finishNotifier.dispatchEvent(new Event(Event.COMPLETE)); >+ } >+ } >+ } >+} >+ >+import flash.events.Event; >+ >+import mx.core.mx_internal; >+ >+import spark.components.DropDownList; >+import spark.components.supportClasses.DropDownController; >+import spark.skins.spark.DropDownListSkin; >+ >+use namespace mx_internal; >+ >+class DropDownListInspectable extends DropDownList >+{ >+ public var noReactionsToOutsideClick:int = 0; >+ >+ public function DropDownListInspectable() >+ { >+ super(); >+ this.setStyle("skinClass", DropDownListSkin); >+ this.dropDownController = new DropDownControllerInspectable(); >+ >this.dropDownController.addEventListener(DropDownControllerInspectable.REA >CT_TO_MOUSE_DOWN, onControllerReactedToMouseDown); >+ } >+ >+ private function onControllerReactedToMouseDown(event:Event):void >+ { >+ noReactionsToOutsideClick++; >+ } >+ >+ public function get dropDownController_():DropDownController >+ { >+ return this.dropDownController; >+ } >+} >+ >+class DropDownControllerInspectable extends DropDownController >+{ >+ public static const REACT_TO_MOUSE_DOWN:String = >"justReactedToMouseDown"; >+ >+ override mx_internal function >systemManager_mouseDownHandler(event:Event):void >+ { >+ super.mx_internal::systemManager_mouseDownHandler(event); >+ dispatchEvent(new Event(REACT_TO_MOUSE_DOWN)); >+ } >+} >\ No newline at end of file >