<?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/DataGrid/DataGrid_HaloSkin/Methods/"  xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" testSWF="DataGridApp_halo.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 -->

<!--
This file contains tests for the following methods inherited from listBase.
It's barely started.

    findString:
        - Call it for an item in col. 1.
        - Call it for an item in col. 2.
        - Call it for an item that does not exist.
        - Call it for an item below the selectedIndex.
        - Call it for an item above the selectedIndex.
        - Call it for a string that is part of a word.
        - Call it for a string that is a word in a sentence.
-->

<mx:Script>
<![CDATA[

]]>
</mx:Script>

<testCases>

<!--
================================================================================
findString
To verify:
    - Check selectedItem.
    - Check the return value.
================================================================================
-->

<TestCase testID="findString_col1_halo" keywords="[DataGrid,methods,findString]">
    <setup>
        <ResetComponent target="dg1" className="mx.controls.DataGrid" waitEvent="updateComplete" />
        <RunCode code="application.setDataProvider(application.dg1, 3)" waitTarget="dg1" waitEvent="updateComplete" />
    </setup>
    <body>
        <AssertMethodValue method="value=application.dg1.findString('12')" value="true" />  
        <AssertPropertyValue target="dg1.selectedItem" propertyName="name" value="SubjectF" />
    </body>
</TestCase>

</testCases>         
</UnitTester>
