<?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="containers/Panel/Styles/"  xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" testSWF="SkinImprovements_Panel_Basic_Spark.mxml">

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

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

    }
    
    public function setPercentWidthAndHeight():void{
        application.componentPanelGifBorderSkinscale9.myPanelBSGif.percentHeight=100;
        application.componentPanelGifBorderSkinscale9.myPanelBSGif.percentWidth=100;
    }


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

    <testCases>
        <TestCase testID="Spark_Test_Panel_BorderSkin_scale9_gif" description="Skinning Improvements phase I being validated." keywords="[SkinImprovement, Panel, BorderSkin, Gif, scale9]">
            <setup>
                <SetProperty target="skinningVS" propertyName="selectedIndex" valueExpression="value=application.skinningVS.numChildren-1" 
                    waitTarget="skinningVS" waitEvent="change" />
                <SetProperty target="skinningVS" propertyName="selectedIndex" value="1" 
                    waitTarget="skinningVS" waitEvent="change" />
                <ResetComponent target="componentPanelGifBorderSkinscale9" className="component_Panel_Gif_BorderSkin_scale9" 
                    waitTarget="componentPanelGifBorderSkinscale9" waitEvent="updateComplete"/>
                <WaitForEffectsToEnd />
            </setup>
            <body>
                <CompareBitmap target="componentPanelGifBorderSkinscale9" url="../Styles/Baselines/Panel_BorderSkin_scale9_Gif_Spark.png" />
            </body>
        </TestCase>
        <TestCase testID="Spark_Test_Panel_BorderSkin_scale9_gif_width_height" description="Skinning Improvements phase I being validated." keywords="[SkinImprovement, Panel, BorderSkin, Gif, width, height, scale9]">
            <setup>
                <SetProperty target="skinningVS" propertyName="selectedIndex" valueExpression="value=application.skinningVS.numChildren-1" 
                    waitTarget="skinningVS" waitEvent="change" />
                <SetProperty target="skinningVS" propertyName="selectedIndex" value="1" 
                    waitTarget="skinningVS" waitEvent="change" />
                <ResetComponent target="componentPanelGifBorderSkinscale9" className="component_Panel_Gif_BorderSkin_scale9" 
                    waitTarget="componentPanelGifBorderSkinscale9" waitEvent="updateComplete"/>
                <DispatchMouseClickEvent localX="10" localY="10" target="componentPanelGifBorderSkinscale9.myBtnGif" timeout="2000" waitTarget="componentPanelGifBorderSkinscale9.myPanelBSGif" waitEvent="updateComplete"/>
                <WaitForEffectsToEnd />
            </setup>
            <body>
                <CompareBitmap target="componentPanelGifBorderSkinscale9" url="../Styles/Baselines/Panel_BorderSkin_scale9_Gif1_Spark.png" />
            </body>
        </TestCase>
        <TestCase testID="Spark_Test_Panel_BorderSkin_scale9_gif_percent_width_height" description="Skinning Improvements phase I being validated." keywords="[SkinImprovement, Panel, BorderSkin, Gif, percentWidth, percentHeight, scale9]">
            <setup>
                <SetProperty target="skinningVS" propertyName="selectedIndex" valueExpression="value=application.skinningVS.numChildren-1" 
                    waitTarget="skinningVS" waitEvent="change" />
                <SetProperty target="skinningVS" propertyName="selectedIndex" value="1" 
                    waitTarget="skinningVS" waitEvent="change" />
                <ResetComponent target="componentPanelGifBorderSkinscale9" className="component_Panel_Gif_BorderSkin_scale9" 
                    waitTarget="componentPanelGifBorderSkinscale9" waitEvent="updateComplete"/>
                <RunCode code="setPercentWidthAndHeight()" waitTarget="componentPanelGifBorderSkinscale9.myPanelBSGif" waitEvent="updateComplete"/>
                <WaitForEffectsToEnd />
            </setup>
            <body>
                <CompareBitmap target="componentPanelGifBorderSkinscale9" url="../Styles/Baselines/Panel_BorderSkin_scale9_Gif2_Spark.png" />
            </body>
        </TestCase>
    </testCases>
</UnitTester>
