<?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/MenuBar/Spark/Properties/"  xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" testSWF="MenuBar_Basic_spark.mxml">

    <!-- this set of lines form a template that must be in each unit test -->
    <mx:Script>
    <![CDATA[
    public static function init(o:DisplayObject):void
    {

    }

    public function addData(bool:int):void
    {
        application.mb.dataProvider = myDP;
        application.mb.showRoot = false;
        if(bool ==0)
        {
            application.mb.labelField="@label";
        }
        else
        {
            application.mb.labelField="@data";
        }
    }

    public function addObjData():void
    {
        application.mb.dataProvider = iconDP;
        application.mb.showRoot = false;
        application.mb.iconField = "icon";
    }

    public function changeDP(node:int, bool:String):void
    {
        myDP.node[node].@enabled = bool;
    }

    [Bindable]
    private var rootDP:Object= {label: "top", children: [
        {label: "File", children: [
            {label: "Open"},
            {label: "New File"}
        ]},
        {label: "Edit", children: [
            {label: "Copy"},
            {label: "Paste"},
            {label: "Send"}
        ]},
        {label: "Window"}
    ]};

    [Bindable]
    public var iconDP:Object = [
        {label:"Toys", icon:"dinosaur", icon2: "justbear", children: [
            { label:"Stuffed Animals", children: [
                {label:"Brown Bears"},
                {label:"Dinosaur", icon: "dinosaur"}
            ]},
            {label:"Cars", children: [
                {label:"RacecarA"},
                {label:"RacecarB"}
            ]}
        ]},
        {label:"Games", icon:"racecar", children: [
            { label:"Age 6 and up", children: [
                {label:"Board Games"},
                {label:"Chance Games"},
                {label:"Pool Games" }
            ]},
            {label:"Video Games", children: [
                {label:"Video Game A"},
                {label:"Video Game B"}
            ]}
        ]}
     ];

     public function labelFunc(item:Object):String
     {
         var newLabel:String = item[application.mb.labelField].toUpperCase();
         return newLabel;
     }

     public function testAddChildAt():void
     {
        var newChild:Object = <nodeitem label='France' data='FRANCE' />;
        application.mb.dataDescriptor.addChildAt(myDP.node[0], newChild, 2);
     }

     public function testGetChildren(): void
     {
         application.lengthValue = application.mb.dataDescriptor.getChildren(myDP.node[1]).length;
     }

     public function testRemoveChildAt():void
     {
        var newChild:Object = <nodeitem label='France' data='FRANCE' />;
        application.mb.dataDescriptor.removeChildAt(myDP.node[0], newChild, 2);
     }

     public function testSetEnabled(bool:int): void
     {
        if(bool==0)
        {
            application.mb.dataDescriptor.setEnabled(myDP.node[2], false);
        }
        else
        {
            application.mb.dataDescriptor.setEnabled(myDP.node[1], true);
            application.mb.dataDescriptor.setEnabled(myDP.node[2], true);
        }
     }

     public function testSetToggled(bool:int): void
     {
        if(bool==0)
        {
            application.mb.dataDescriptor.setToggled(myDP.node[0].nodeitem[1], false);
        }
        else
        {
            application.mb.dataDescriptor.setToggled(myDP.node[1].nodeitem[1], true);
        }
     }

    ]]>
    </mx:Script>
    <mx:Metadata>
    <![CDATA[
        [Mixin]
    ]]>
    </mx:Metadata>
    <!-- end of set of lines that must be in each unit test -->

    <mx:Script>
    <![CDATA[
    import mx.controls.MenuBar;
    import mx.styles.StyleManager;
    import mx.managers.SystemManager;
    import mx.events.MenuEvent;

    [Bindable]
    private var myDP:XML =
    <topnode>
        <node label="Europe" enabled="false" data="EUROPE">
            <nodeitem type="check" label="Italy" enabled="false" data="ITALY" />
            <nodeitem type="check" label="England" data="ENGLAND" toggled="true"/>
            <nodeitem type="check" label="Slovenia" data="SLOVENIA" />
        </node>
        <node label="Asia" enabled="true" data="ASIA">
            <nodeitem type="radio" groupName="group1" label="Phillipines" enabled="false" data="PHILIPPINES"/>
            <nodeitem type="radio" groupName="group1" label="Japan" data="JAPAN"/>
            <nodeitem type="radio" groupName="group1" label="China" data="CHINA"/>
        </node>
        <node label="Africa" data="AFRICA">
            <nodeitem label="Uganda" enabled="false" data="UGANDA"/>
            <nodeitem label="South Africa" data="SOUTH AFRICA"/>
            <nodeitem label="Nigeria" data="NIGERIA"/>
        </node>
    </topnode>;
    ]]>
    </mx:Script>

    <testCases>
        <!-- description and keywords needed for this test -->
        <TestCase testID="Enabled_false" description="MenuBar dataProvider item is set to false test." keywords="[enabled, MenuBar]">
            <setup>
                <ResetComponent target="mb" className="mx.controls.MenuBar" />
                <RunCode code="addData(0);" />
                <DispatchKeyEvent key="TAB"  />
                <DispatchKeyEvent key="TAB"  />
                <DispatchKeyEvent key="TAB" waitTarget="mb" waitEvent="focusIn" />
            </setup>
            <body>
                <DispatchKeyEvent key="RIGHT" waitTarget="mb" waitEvent="menuShow" />
                <AssertPropertyValue target="mb" propertyName="selectedIndex" value="1" />
            </body>
        </TestCase>
        <TestCase testID="Enabled_falseToTrue" description="MenuBar dataProvider item is set to false and changed to true test." keywords="[enabled, MenuBar]">
            <setup>
                <ResetComponent target="mb" className="mx.controls.MenuBar" />
                <RunCode code="addData(0);" />
                <RunCode code="changeDP(0,'true');" />
                <DispatchKeyEvent key="TAB"  />
                <DispatchKeyEvent key="TAB"  />
                <DispatchKeyEvent key="TAB" waitTarget="mb" waitEvent="focusIn" />
            </setup>
            <body>
                <DispatchKeyEvent key="RIGHT" waitTarget="mb" waitEvent="menuShow" />
                <AssertPropertyValue target="mb" propertyName="selectedIndex" value="0" />
            </body>
        </TestCase>
        <TestCase testID="Enabled_trueToFalse"  description="MenuBar dataProvider item is set to true and changed to false test." keywords="[enabled, MenuBar]">
            <setup>
                <ResetComponent target="mb" className="mx.controls.MenuBar" />
                <RunCode code="addData(0);" />
                <RunCode code="changeDP(1, 'false');" />
                <DispatchKeyEvent key="TAB"  />
                <DispatchKeyEvent key="TAB"  />
                <DispatchKeyEvent key="TAB" waitTarget="mb" waitEvent="focusIn" />
            </setup>
            <body>
                <DispatchKeyEvent key="RIGHT" />
                <DispatchKeyEvent key="RIGHT" waitTarget="mb" waitEvent="menuShow" />
                <AssertPropertyValue target="mb" propertyName="selectedIndex" value="2" />
            </body>
        </TestCase>
        <TestCase testID="Disabled_PixelCheck"  description="MenuBar visual test of disabled item." keywords="[enabled, MenuBar]">
            <setup>
                <ResetComponent target="mb" className="mx.controls.MenuBar" />
                <RunCode code="addData(0);" waitTarget="mb" waitEvent="updateComplete" />
                <RunCode code="changeDP(1, 'false');" waitEvent="updateComplete" waitTarget="mb"/>
            </setup>
            <body>
                <CompareBitmap url="../Properties/baselines/$testID.png" target="mb" timeout="2400" />
            </body>
        </TestCase>
        <TestCase testID="MenuBar_layoutDirection_RTL"  description="MenuBar sets layoutDirection to rtl." keywords="[Mirroring, layoutDirection, MenuBar]">
            <setup>
                <ResetComponent target="mb" className="mx.controls.MenuBar" waitTarget="mb" waitEvent="updateComplete"/>
                <RunCode code="addData(0);" waitTarget="mb" waitEvent="updateComplete" />
                <SetStyle target="mb" styleName="textFieldClass" valueExpression="value=mx.core.UIFTETextField" />
                <SetStyle target="mb" styleName="direction" value="rtl" />
                <SetStyle target="mb" styleName="layoutDirection" value="rtl" waitEvent="updateComplete" waitTarget="mb"/>
            </setup>
            <body>
                <CompareBitmap url="../Properties/baselines/$testID.png" target="mb" timeout="2400" />
            </body>
        </TestCase>
        <TestCase testID="MenuBar_layoutDirection_RTL_keyboard"  description="MenuBar sets layoutDirection to rtl." keywords="[Mirroring, layoutDirection, MenuBar]">
            <setup>
                <ResetComponent target="mb" className="mx.controls.MenuBar" waitTarget="mb" waitEvent="updateComplete"/>
                <RunCode code="addData(0);" waitTarget="mb" waitEvent="updateComplete" />
                <SetStyle target="mb" styleName="textFieldClass" valueExpression="value=mx.core.UIFTETextField" />
                <SetStyle target="mb" styleName="direction" value="rtl" />
                <SetStyle target="mb" styleName="layoutDirection" value="rtl" waitEvent="updateComplete" waitTarget="mb"/>
                <DispatchKeyEvent key="TAB"  />
                <DispatchKeyEvent key="TAB"  />
                <DispatchKeyEvent key="TAB" waitTarget="mb" waitEvent="focusIn" />
            </setup>
            <body>
                <DispatchKeyEvent key="LEFT" />
                <DispatchKeyEvent key="LEFT" waitTarget="mb" waitEvent="menuShow" />
                <AssertPropertyValue target="mb" propertyName="selectedIndex" value="2" />
            </body>
        </TestCase>
        <TestCase testID="MenuBar_layoutDirection_RTL_onParent_keyboard"  description="MenuBar sets layoutDirection to rtl." keywords="[Mirroring, layoutDirection, MenuBar]">
            <setup>
                <ResetComponent target="mb" className="mx.controls.MenuBar" waitTarget="mb" waitEvent="updateComplete"/>
                <RunCode code="addData(0);" waitTarget="mb" waitEvent="updateComplete" />
                <SetStyle target="mb" styleName="textFieldClass" valueExpression="value=mx.core.UIFTETextField" />
                <SetStyle target="mb" styleName="direction" value="rtl" />
                <SetStyle target="mb" styleName="layoutDirection" value="rtl" waitEvent="updateComplete" waitTarget="mb"/>
                <DispatchKeyEvent key="TAB"  />
                <DispatchKeyEvent key="TAB"  />
                <DispatchKeyEvent key="TAB" waitTarget="mb" waitEvent="focusIn" />
            </setup>
            <body>
                <DispatchKeyEvent key="LEFT" />
                <DispatchKeyEvent key="LEFT" waitTarget="mb" waitEvent="menuShow" />
                <DispatchKeyEvent keys="[DOWN, SPACE]" />
                <AssertEvent target="mb" eventName="itemClick" eventClass="mx.events::MenuEvent"/>
                <AssertEventPropertyValue target="mb" propertyName="label" value="South Africa" />
            </body>
        </TestCase>

    </testCases>
</UnitTester>
