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

	<!-- this set of lines ApplicationControlBar 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.containers.ApplicationControlBar;
	import mx.core.IFlexDisplayObject;


	public function testPerformance():void{
	
		for(var i:Number =0;i<100;i++)
		application.addChild(new CustomACB_Integration())
		
	}

	]]>
	</mx:Script>

	<testCases>

		<TestCase testID="ApplicationControlBar_Integration_float"  keywords="[Integration, float, ApplicationControlBar]">
			<setup>
				<ResetComponent target="myCustomACB_Int" className="CustomACB_Integration"  waitEvent="updateComplete" waitTarget="myCustomACB_Int"/>
				<SetProperty target="myCustomACB_Int" propertyName="dock" value="false" />
			</setup>
			<body>
				<AssertPropertyValue target="myCustomACB_Int" propertyName="dock" value="false" />
				
			</body>
		</TestCase>

		<TestCase testID="ApplicationControlBar_Integration_Performance"  keywords="[Integration, float, ApplicationControlBar]">
			<setup>
				<ResetComponent target="myCustomACB_Int" className="CustomACB_Integration"  waitEvent="updateComplete" waitTarget="myCustomACB_Int"/>
				
			</setup>
			<body>
				<RunCode code="testPerformance()"/>
				<AssertMethodValue method="value=application.getChildren().length" value="101" />
			</body>
		</TestCase>		

 
	</testCases>
</UnitTester>
