<?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
    xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns="*"
    testSWF="main.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
            {
            }
        ]]>
    </mx:Script>
    <mx:Metadata>
        <![CDATA[
        [Mixin]
        ]]>
    </mx:Metadata>
    <!-- end of set of lines that must be in each unit test -->
    <mx:Script>
        <![CDATA[
            private function play(target:Object):void
            {
            }
        ]]>
    </mx:Script>
            

	<testCases>

        <TestCase testID="SetupAnimateConstraintsTest" keywords="[animate]" description="Spark.Effects.Animate checkin test setup.">
            <body>
                <SetProperty target="" propertyName="currentState" value="sparkAnimateConstraintsTest" 
                             waitEvent="updateComplete" timeout="500" />
                <Pause timeout="100"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b1" propertyName="x" value="10"/>
            </body>
        </TestCase>
        
<!--        <TestCase testID="AnimateConstraints_CheckinTest_1" keywords="[animate]" description="Spark.Effects.Animate checkin test 1.">
            <body>
                <SetProperty target="sparkAnimateConstraintsTests" propertyName="currentState" 
                             value="s2" />
                <Pause timeout="400"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b1" propertyName="right" value="10"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b2" propertyName="left" value="10"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b3" propertyName="x" value="10"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b3a" propertyName="left" value="100"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b3b" propertyName="right" value="100"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b4" propertyName="bottom" value="100"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b5" propertyName="top" value="100"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b6" propertyName="y" value="100"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b6a" propertyName="top" value="50"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b6b" propertyName="bottom" value="50"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b7" propertyName="horizontalCenter" value="50"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b8" propertyName="horizontalCenter" value="-50"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b9" propertyName="left" value="10"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b10" propertyName="verticalCenter" value="50"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b11" propertyName="verticalCenter" value="-50"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b12" propertyName="bottom" value="100"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b13" propertyName="percentWidth" value="100"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b14" propertyName="percentWidth" value="50"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b15" propertyName="width" value="200"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b16" propertyName="percentHeight" value="50"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b17" propertyName="percentHeight" value="50"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b18" propertyName="height" value="300"/>
            </body>
        </TestCase>
-->
        <TestCase testID="AnimateConstraints_CheckinTest_2" keywords="[animate]" description="Spark.Effects.Animate checkin test 2.">
            <body>
                <SetProperty target="sparkAnimateConstraintsTests" propertyName="currentState" value="s1" />
                <Pause timeout="400"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b1" propertyName="left" value="10"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b2" propertyName="right" value="10"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b3" propertyName="left" value="10"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b3a" propertyName="left" value="10"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b3b" propertyName="right" value="10"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b4" propertyName="top" value="100"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b5" propertyName="bottom" value="100"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b6" propertyName="top" value="100"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b6a" propertyName="top" value="0"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b6b" propertyName="bottom" value="0"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b7" propertyName="horizontalCenter" value="0"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b8" propertyName="horizontalCenter" value="0"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b9" propertyName="horizontalCenter" value="0"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b10" propertyName="verticalCenter" value="0"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b11" propertyName="verticalCenter" value="0"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b12" propertyName="verticalCenter" value="0"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b13" propertyName="percentWidth" value="50"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b14" propertyName="percentWidth" value="100"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b15" propertyName="percentWidth" value="50"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b16" propertyName="percentHeight" value="10"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b17" propertyName="percentHeight" value="100"/>
                <AssertPropertyValue target="sparkAnimateConstraintsTests.b18" propertyName="percentHeight" value="50"/>
            </body>
        </TestCase>
        
	</testCases>

</UnitTester>
