<?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/SWFLoader/Integration/"  xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" testSWF="SWFLoaderMain.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[
   

        ]]>
        </mx:Script>
    <testCases>
		<!-- FIXME (aharui) Need alternative server 
        <TestCase testID="SWFLoader_security_bugSDK12812"  keywords="[SWFLoader, Security, Bugs]">
            <setup>
                <ResetComponent target="SWFLoad" className="mx.controls::SWFLoader" waitEvent="updateComplete" waitTarget="SWFLoad"/>
                <SetProperty propertyName="source" target="SWFLoad" value="http://flexteam.macromedia.com/Images/flex2.jpg" waitEvent="updateComplete"
                    waitTarget="SWFLoad" />
            </setup>
            <body>
                <SetProperty target="SWFLoad" propertyName="source" value="http://labs.adobe.com/technologies/flex/images/flex3_fx_225x50.jpg" />
                <AssertEvent target="SWFLoad" eventName="complete" eventClass="flash.events::Event" timeout="50000"/>
           </body>
        </TestCase>
		-->
    </testCases>
</UnitTester>

