<?xml version="1.0" encoding="utf-8"?>
<!--

  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.

-->
<UnitTester testDir="components/TreeDMV/Events/"  xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" testSWF="Tree_Basic.mxml">

    <!-- this set of lines form a template that must be in each unit test -->
    <mx:Script>
    <![CDATA[

    import mx.controls.Tree;
    import data.TreeData;
    import mx.events.TreeEvent;
    import mx.events.ListEvent;


    public static function init(o:DisplayObject):void
    {

    }
    private function addXMLData():void
    {


        application.tree.dataProvider = application.treeXML;
        application.tree.showRoot = false;
        application.tree.labelField = '@label';

    }

    private function addXMLDataGlobal():void
    {

        application.tree.dataProvider = application.treeXML;
        application.tree.showRoot = false;
        application.tree.labelField = '@label';

    }

    public var treeDP:Object;
    private function createNewObjectDP(): void
    {
        var newData:TreeData = new TreeData();
        treeDP = newData.largeObj;
    }

    ]]>
    </mx:Script>
    <mx:Metadata>
    <![CDATA[
        [Mixin]
    ]]>
    </mx:Metadata>

    <testCases>
        <TestCase testID="change_onKeyBoard" description="Change event triggered when select item with keyboard" keywords="[events, change, Tree]">
            <setup>
                <ResetComponent target="tree" className="comps.TreeDMV" />
                <SetProperty target="tree" propertyName="width" value="300" waitEvent="updateComplete" waitTarget="tree" />
                <RunCode code="addXMLData();" waitEvent="updateComplete" waitTarget="tree"/>
            </setup>
            <body>
                <DispatchKeyEvent keys="[TAB]" waitEvent="focusIn" waitTarget="tree" />
                <DispatchKeyEvent keys="[DOWN]" />
                <AssertEvent target="tree" eventName="change" eventClass="mx.events::ListEvent" />
                <AssertEventPropertyValue propertyName="rowIndex" value="0" target="tree" />
            </body>
        </TestCase>
        <TestCase testID="itemClick_onKeyBoard" description="itemClick event triggered when select item with keyboard" keywords="[events, change, Tree]">
            <setup>
                <ResetComponent target="tree" className="comps.TreeDMV" />
                <SetProperty target="tree" propertyName="width" value="300" waitEvent="updateComplete" waitTarget="tree" />
                <RunCode code="addXMLData();" waitEvent="updateComplete" waitTarget="tree"/>
            </setup>
            <body>
                <DispatchMouseClickEvent target="tree" localX="228" localY="9" waitEvent="click" waitTarget="tree"/>
                <AssertEvent target="tree" eventName="itemClick" eventClass="mx.events::ListEvent" />
                <AssertEventPropertyValue propertyName="rowIndex" value="0" target="tree" />
            </body>
        </TestCase>
        <TestCase testID="itemCloseKeyboard" description="itemOpen event triggered when node opened with keyboard" keywords="[events, itemOpen, keyboard, Tree]">
            <setup>
                <ResetComponent target="tree" className="comps.TreeDMV" />
                <SetProperty target="tree" propertyName="width" value="300" waitEvent="updateComplete" waitTarget="tree" />
                <RunCode code="addXMLDataGlobal();" waitEvent="updateComplete" waitTarget="tree"/>
            </setup>
            <body>
                <DispatchKeyEvent keys="[TAB]" waitEvent="focusIn" waitTarget="tree" />
                <DispatchKeyEvent keys="[DOWN, SPACE]" waitEvent="itemOpen" waitTarget="tree" />
                <DispatchKeyEvent keys="[SPACE]"/>
                <AssertEvent target="tree" eventName="itemClose" eventClass="mx.events::TreeEvent" />
                <AssertEventPropertyValue propertyName="item" valueExpression="value=application.treeXML.node[0]" target="tree" />
            </body>
        </TestCase>
        <!--<TestCase testID="itemCloseMouse" description="itemOpen event triggered when node disclosure is clicked" keywords="[events, itemClose, disclosureclick, Tree]">
            <setup>
                <ResetComponent target="tree" className="comps.TreeDMV" />
                <SetProperty target="tree" propertyName="width" value="300" waitEvent="updateComplete" waitTarget="tree" />
                <RunCode code="addXMLDataGlobal();" waitEvent="updateComplete" waitTarget="tree"/>
            </setup>
            <body>
                <displatch mouse event on itemRenderer's disclosure>
                <AssertEvent target="tree" eventName="itemClose" eventClass="mx.events::TreeEvent" />
                <AssertEventPropertyValue propertyName="item" valueExpression="value=application.treeXML.node[0]" target="tree" />
            </body>
        </TestCase>-->
        <TestCase testID="itemOpenKeyboard" description="itemOpen event triggered when node opened with keyboard" keywords="[events, itemOpen, keyboard, Tree]">
            <setup>
                <ResetComponent target="tree" className="comps.TreeDMV" />
                <SetProperty target="tree" propertyName="width" value="300" waitEvent="updateComplete" waitTarget="tree" />
                <RunCode code="addXMLDataGlobal();" waitEvent="updateComplete" waitTarget="tree"/>
            </setup>
            <body>
                <DispatchKeyEvent keys="[TAB]" waitEvent="focusIn" waitTarget="tree" />
                <DispatchKeyEvent keys="[DOWN, DOWN, SPACE]" />
                <AssertEvent target="tree" eventName="itemOpen" eventClass="mx.events::TreeEvent" />
                <AssertEventPropertyValue propertyName="item" valueExpression="value=application.treeXML.node[1]" target="tree" />
            </body>
        </TestCase>
        <!--<TestCase testID="itemOpenMouse" description="itemOpen event triggered when node disclosure is clicked" keywords="[events, itemOpen, disclosureclick, Tree]">
            <setup>
                <ResetComponent target="tree" className="comps.TreeDMV" />
                <SetProperty target="tree" propertyName="width" value="300" waitEvent="updateComplete" waitTarget="tree" />
                <RunCode code="addXMLDataGlobal();" waitEvent="updateComplete" waitTarget="tree"/>
            </setup>
            <body>
                <displatch mouse event on itemRenderer's disclosure>
                <AssertEvent target="tree" eventName="itemOpen" eventClass="mx.events::TreeEvent" />
                <AssertEventPropertyValue propertyName="item" valueExpression="value=application.treeXML.node[1]" target="tree" />
            </body>
        </TestCase>-->
        <TestCase testID="itemOpeningKeyboard" description="itemOpening event triggered when node opened with keyboard" keywords="[events, itemOpening, Tree]">
            <setup>
                <ResetComponent target="tree" className="comps.TreeDMV" />
                <SetProperty target="tree" propertyName="width" value="300" waitEvent="updateComplete" waitTarget="tree" />
                <RunCode code="addXMLDataGlobal();" waitEvent="updateComplete" waitTarget="tree"/>
            </setup>
            <body>
                <DispatchKeyEvent keys="[TAB]" waitEvent="focusIn" waitTarget="tree" />
                <DispatchKeyEvent keys="[DOWN, DOWN, SPACE]" />
                <AssertEvent target="tree" eventName="itemOpening" eventClass="mx.events::TreeEvent" />
                <AssertEventPropertyValue propertyName="item" valueExpression="value=application.treeXML.node[1]" target="tree" />
            </body>
        </TestCase>
        <!--<TestCase testID="itemOpeningMouse" description="itemOpening event triggered when node disclosure is clicked" keywords="[events, itemOpening, disclosureclick, Tree]">
            <setup>
                <ResetComponent target="tree" className="comps.TreeDMV" />
                <SetProperty target="tree" propertyName="width" value="300" waitEvent="updateComplete" waitTarget="tree" />
                <RunCode code="addXMLDataGlobal();" waitEvent="updateComplete" waitTarget="tree"/>
            </setup>
            <body>
                <displatch mouse event on itemRenderer's disclosure>
                <AssertEvent target="tree" eventName="itemOpening" eventClass="mx.events::TreeEvent" />
                <AssertEventPropertyValue propertyName="item" valueExpression="value=application.treeXML.node[1]" target="tree" />
            </body>
        </TestCase>-->
        <TestCase testID="Tree_events_scroll_buttons" description="Ensure that the scroll event triggers when you click on the track."
           keywords="[events, scroll, Tree]">
            <setup>
                <ResetComponent target="tree" className="comps.TreeDMV" />
                <SetProperty target="tree" propertyName="width" value="300" waitEvent="updateComplete" waitTarget="tree" />
                <RunCode code="createNewObjectDP()" />
                <SetProperty propertyName="dataProvider" valueExpression="value=treeDP" target="tree" waitEvent="updateComplete" waitTarget="tree"/>
            </setup>
            <body>
                <DispatchMouseClickEvent target="tree.getChildAt(3).getChildAt(3)" localX="8" localY="8" />
                <AssertEvent target="tree" eventName="scroll" eventClass="mx.events::ScrollEvent" timeout="1000" />
                <AssertPropertyValue target="tree" propertyName="verticalScrollPosition" value="1" />
            </body>
        </TestCase>
        <TestCase testID="Tree_events_scroll_track" description="Ensure that the scroll event triggers when you click on the track."
           keywords="[events, scroll, Tree]">
            <setup>
                <ResetComponent target="tree" className="comps.TreeDMV" />
                <SetProperty target="tree" propertyName="width" value="300" waitEvent="updateComplete" waitTarget="tree" />
                <RunCode code="createNewObjectDP()" />
                <SetProperty propertyName="dataProvider" valueExpression="value=treeDP" target="tree" waitEvent="updateComplete" waitTarget="tree"/>
            </setup>
            <body>
                <DispatchMouseClickEvent target="tree.getChildAt(3)" localX="3" localY="110" waitEvent="scroll" waitTarget="tree" />
                <AssertEvent target="tree" eventName="scroll" eventClass="mx.events::ScrollEvent" numExpectedEvents="2" />
            </body>
        </TestCase>
        <TestCase testID="Tree_events_scroll_bug11120" description="Use case for bug SDK-11120."
           keywords="[Bug, scroll, Tree]">
            <setup>
                <ResetComponent target="tree" className="comps.TreeDMV" />
                <SetProperty target="tree" propertyName="width" value="300" waitEvent="updateComplete" waitTarget="tree" />
                <RunCode code="createNewObjectDP()" />
                <SetProperty propertyName="dataProvider" valueExpression="value=treeDP" target="tree" waitEvent="updateComplete" waitTarget="tree"/>
            </setup>
            <body>
                <SetProperty target="tree" propertyName="verticalScrollPosition" valueExpression="value=application.tree.maxVerticalScrollPosition" />
                <WaitForEffectsToEnd />
                <RunCode code="application.tree.expandItem(application.tree.dataProvider[10], true)" waitEvent="updateComplete" waitTarget="tree" />
                <SetProperty target="tree" propertyName="verticalScrollPosition" value="0" />
                <WaitForEffectsToEnd />
                <SetProperty target="tree" propertyName="verticalScrollPosition" valueExpression="value=application.tree.maxVerticalScrollPosition" />
                <WaitForEffectsToEnd />
                <DispatchMouseClickEvent target="tree.mx_internal:rendererArray.3.0" localX="9" localY="9" waitEvent="updateComplete" waitTarget="tree" />
                <CompareBitmap target="tree.mx_internal:rendererArray.6.0" url="../Events/baselines/tree_scroll_bug.png" timeout="2500" />
        </body>
        </TestCase>
        <TestCase testID="Tree_events_horizontal_scroll_buttons" description="Ensure that the scroll event triggers when you click on the track."
           keywords="[events,horizontal, scroll, Tree]">
            <setup>
                <ResetComponent target="tree" className="comps.TreeDMV" />
                <SetProperty target="tree" propertyName="width" value="300" waitEvent="updateComplete" waitTarget="tree" />
                <SetProperty propertyName="horizontalScrollPolicy" value="on" target="tree" waitEvent="updateComplete" waitTarget="tree"/>
            </setup>
            <body>
                <DispatchMouseClickEvent target="tree" localX="290" localY="150" waitEvent="click" waitTarget="tree" />
                <DispatchMouseClickEvent target="tree.getChildAt(3).getChildAt(3)" localX="8" localY="8" waitEvent="click" waitTarget="tree.getChildAt(3).getChildAt(3)" />
                <AssertEvent target="tree" eventName="scroll" eventClass="mx.events::ScrollEvent"  />
                <AssertPropertyValue target="tree" propertyName="horizontalScrollPosition" value="1" />
            </body>
        </TestCase>
        
        <TestCase testID="change_onKeyBoardLeft" description="Change event triggered when select item with keyboard" keywords="[events, change, Tree, keys]">
            <setup>
                <ResetComponent target="tree" className="comps.TreeDMV" />
                <SetProperty target="tree" propertyName="width" value="300" waitEvent="updateComplete" waitTarget="tree" />
                <RunCode code="addXMLData();" waitEvent="updateComplete" waitTarget="tree"/>
            </setup>
            <body>
                <DispatchKeyEvent keys="[TAB]"  waitEvent="focusIn" waitTarget="tree" />
                <DispatchKeyEvent keys="[DOWN]" waitEvent="change" waitTarget="tree" />
                <DispatchKeyEvent keys="[LEFT]" />
                <WaitForEffectsToEnd />
                <AssertPropertyValue target="tree" propertyName="selectedIndex" value="0" />
            </body>
        </TestCase>

        <TestCase testID="change_onKeyBoardDownLeft" description="Change event triggered when select item with keyboard" keywords="[events, change, Tree, keys]">
            <setup>
                <ResetComponent target="tree" className="comps.TreeDMV" />
                <SetProperty target="tree" propertyName="width" value="300" waitEvent="updateComplete" waitTarget="tree" />
                <RunCode code="addXMLData();" waitEvent="updateComplete" waitTarget="tree"/>
            </setup>
            <body>
                <DispatchKeyEvent keys="[TAB]"  waitEvent="focusIn" waitTarget="tree" />
                <DispatchKeyEvent keys="[DOWN, DOWN]" waitEvent="change" waitTarget="tree" />
                <DispatchKeyEvent keys="[LEFT]" />
                <WaitForEffectsToEnd />
                <AssertPropertyValue target="tree" propertyName="selectedIndex" value="1" />
            </body>
        </TestCase>     
    </testCases>
</UnitTester>
