<?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[
	]]>
	</mx:Script>

	<testCases>
<!--
-->
		<TestCase testID="SetupFocusManagerTest">
			<body>
				<SetProperty target="" propertyName="currentState" value="haloFocusManagerTest" 
                    waitEvent="updateComplete" />
				<AssertPropertyValue target="haloFocusManagerTests.testRadio1" propertyName="label" value="test Radio1" />
				<AssertPropertyValue target="haloFocusManagerTests.testRadio2" propertyName="label" value="test Radio2" />
			</body>
		</TestCase>
		<TestCase testID="TabFocusTest1">
			<body>
				<DispatchMouseEvent target="haloFocusManagerTests.testButton" type="mouseOver" localX="10" localY="10" />
				<DispatchMouseClickEvent target="haloFocusManagerTests.testButton" localX="10" localY="10" />
				<AssertPropertyValue target="stage" propertyName="focus" valueExpression="value=application.haloFocusManagerTests.testButton" />
			</body>
		</TestCase>
		<TestCase testID="TabFocusTest2">
			<body>
				<DispatchKeyEvent key="TAB" />
				<AssertPropertyValue target="stage" propertyName="focus" valueExpression="value=application.haloFocusManagerTests.testCheckBox" />
			</body>
		</TestCase>
		<TestCase testID="TabFocusTest3">
			<body>
				<DispatchKeyEvent key="TAB" />
				<AssertPropertyValue target="stage" propertyName="focus" valueExpression="value=application.haloFocusManagerTests.testRadio2" />
			</body>
		</TestCase>
	</testCases>
</UnitTester>
