<?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/Image/Events/"  xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" testSWF="Image_main.mxml">
	
    <!-- Default script-->
	<mx:Script>
	<![CDATA[public static function init(o:DisplayObject):void{}]]>
	</mx:Script>
    
    <!-- Default metadata -->
	<mx:Metadata>
	<![CDATA[[Mixin]]]>
	</mx:Metadata>	

    <!-- Tests -->
	<testCases>
		<TestCase testID="Components_Image_Events_DataChange" keywords="[Components, Image, Events, DataChange]" description="Verify the DataChange event is raised.">
			<setup>
				<ResetComponent target="myImage" className="mx.controls::Image"/>
			</setup>
			<body>
                <RunCode code="application.myImage.data = 'Foo';" waitEvent="updateComplete" waitTarget="myImage"/>
                <AssertEvent target="myImage" eventName="dataChange" eventClass="mx.events::FlexEvent" numExpectedEvents="1" />
            </body>
		</TestCase>
	</testCases>
</UnitTester>
