<?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="gumbo/components/ButtonBar/Methods/"  xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" testSWF="ButtonBarApp1.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[

        import Assets.*;
        import spark.components.*;

	]]>
	</mx:Script>

	<testCases>

<!--
==============================================================================
private function defaultButtonBarItemRendererFunction(data:Object):IFactory
For these tests, custom skins are used.
- firstButton is an FxCheckBox.
- middleButton is an FxToggleButton.
- lastButton is an FxRadioButton.
==============================================================================
-->

<TestCase testID="customSkinSanityCheck" keywords="[ButtonBar,defaultButtonBarItemRendererFunction]" description="Make sure this custom skin concept looks right." >
    <setup>
        <ResetComponent target="bb1" className="spark.components::ButtonBar" waitEvent="updateComplete" />
        <RunCode code="application.setDataProvider(application.bb1, 1)" waitTarget="bb1" waitEvent="updateComplete" />
        <SetStyle target="bb1" styleName="skinClass" valueExpression="value=CustomSkinClass_Mixed" waitEvent="updateComplete" />
        <SetStyle target="bb1" styleName="fontLookup" value="embeddedCFF" />
        <SetProperty target="bb1" propertyName="height" value="100" />
        <SetProperty target="bb1" propertyName="width" value="300" waitEvent="updateComplete" />
    </setup>
    <body>
        <CompareBitmap url="../Methods/baselines/$testID.png" target="bb1" />
    </body>
</TestCase>

<TestCase testID="defaultButtonBarItemRendererFunction_test1" keywords="[ButtonBar,defaultButtonBarItemRendererFunction]" description="The skin has no firstButton.  Add one item." >
    <setup>
        <ResetComponent target="bb1" className="spark.components::ButtonBar" waitEvent="updateComplete" />
        <RunCode code="application.setDataProvider(application.bb1, 2)" waitTarget="bb1" waitEvent="updateComplete" />
    </setup>
    <body>
        <SetStyle target="bb1" styleName="skinClass" valueExpression="value=CustomSkinClass_MiddleLast" waitEvent="updateComplete" />
        <AssertPropertyValue target="bb1.skin.dataGroup" propertyName="numChildren" value="1" />
        <CompareBitmap url="../Methods/baselines/$testID.png" target="bb1" />
    </body>
</TestCase>

<TestCase testID="defaultButtonBarItemRendererFunction_test3" keywords="[ButtonBar,defaultButtonBarItemRendererFunction]" description="The skin has no lastButton.  Add one item." >
    <setup>
        <ResetComponent target="bb1" className="spark.components::ButtonBar" waitEvent="updateComplete" />
        <RunCode code="application.setDataProvider(application.bb1, 2)" waitTarget="bb1" waitEvent="updateComplete" />
    </setup>
    <body>
        <SetStyle target="bb1" styleName="skinClass" valueExpression="value=CustomSkinClass_FirstMiddle" waitEvent="updateComplete" />
        <AssertPropertyValue target="bb1.skin.dataGroup" propertyName="numChildren" value="1" />
        <CompareBitmap url="../Methods/baselines/$testID.png" target="bb1" />
    </body>
</TestCase>

	</testCases>
</UnitTester>
