<?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/Alert/Properties/"  xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" testSWF="Alert_Spark_wireframe.mxml">

	<!-- this set of lines Alert 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 mx.controls.Alert;

	public var curAlert:Alert;
	
	[Bindable]
	[Embed(source="../../../../Assets/Images/darkgreeniconwithlabel.jpg")]
	public var myIcon:Class;
	

	]]>
	</mx:Script>

	<testCases>
		<TestCase testID="Alert_layoutDirection_direction_rtl_spark_wireframe" description="Verify Alert mirrors correctly" keywords="[Alert,Mirroring]" >
			<setup>
				<RunCode code="application.curAlert= Alert.show('Alert String', 'Alert title', 3);" />
				<RunCode code="application.curAlert.status='Alert status'"/>
				<SetProperty propertyName="layoutDirection" target="curAlert" value="rtl"/>
				<SetStyle styleName="direction" target="curAlert" value="rtl"/>
				<WaitForEffectsToEnd />
			</setup>
			<body>
				<CompareBitmap url="../Properties/baselines/$testID.png" target="curAlert"/>
			</body>
		</TestCase>
		<TestCase testID="Alert_layoutDirection_direction_rtl_with_alertIcon_spark_wireframe" description="Verify Alert mirrors correctly" keywords="[Alert,Mirroring]" >
			<setup>
				<RunCode code="application.curAlert= Alert.show('Alert String', 'Alert title', 3, null, null, myIcon);" />
				<RunCode code="application.curAlert.status='Alert status'"/>
				<SetProperty propertyName="layoutDirection" target="curAlert" value="rtl"/>
				<SetStyle styleName="direction" target="curAlert" value="rtl"/>
				<WaitForEffectsToEnd />
			</setup>
			<body>
				<CompareBitmap url="../Properties/baselines/$testID.png" target="curAlert"/>
			</body>
		</TestCase>

	</testCases>
	
</UnitTester>
