<?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="spark/effects/Move/Methods/"  
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns="*" 
    testSWF="../SWFs/Move_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[
        import spark.effects.Move;
        import Controls.*;
        import Containers.*;
        ]]>
    </mx:Script>

    <testCases>

        <!-- Construtor - Move -->
        <TestCase testID="Move_Constructor_Empty"  keywords="[Move, method, constructor]" description="Try to initialize the constructor with an empty arg.">
            <body>
                <RunCode code="application.testEffect = new Move();"/>
            </body>
        </TestCase>

        <TestCase testID="Move_Constructor_Null"  keywords="[Move, method, constructor]" description="Try to initialize the constructor with the null arg.">
            <body>
                <RunCode code="application.testEffect = new Move(null);"/>
            </body>
        </TestCase>

        <TestCase testID="Move_Constructor_Object"  keywords="[Move, method, constructor]" description="Try to initialize the constructor with an object.">
            <body>
                <RunCode code="application.testEffect = new Move(new Object());" />
            </body>
        </TestCase>

        <!-- Move.getAffectedProperties -->
        <TestCase testID="Move_GetAffectedProperties"  keywords="[Move, method, GetAffectedProperties]" description="Test the return values from GetAffectedProperties.">
            <body>
                <AssertMethodValue 
					method="value=application.testEffect.getAffectedProperties()" 
					value="translationX,translationY,postLayoutTranslationX,postLayoutTranslationY,left,right,top,bottom,horizontalCenter,verticalCenter,baseline,width,height" />
            </body>
        </TestCase>

    </testCases>

</UnitTester>
