<!--
  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.
-->
<TestSuites>
<TestSuite suiteName="SampleDataTest" fileName="testcases/sampleDataTests.xml"/>
<TestSuite suiteName="WritingModeTest" fileName="testcases/WritingModeTests.xml"/>
<TestSuite suiteName="ContainerAttributeTest" fileName="testcases/ContainerAttributeTests.xml"/>
<TestSuite suiteName="ContainerTypeTest" fileName="testcases/ContainerTypeTests.xml"/>
<TestSuite suiteName="FactoryImportTest" fileName="testcases/FactoryImportTests.xml"/>
<TestSuite suiteName="ImportTest" fileName="testcases/ImportTests.xml"/>
<TestSuite suiteName="FETest" fileName="testcases/FETests.xml"/>
<TestSuite suiteName="TCYTests" fileName="testcases/TCYTests.xml"/>
<TestSuite suiteName="LocaleTests" fileName="testcases/LocaleTests.xml"/>
<TestSuite suiteName="MeasurementTest" fileName="testcases/MeasurementTest.xml"/>
<TestSuite suiteName="OperationTest" fileName="testcases/OperationTest.xml"/>
<TestSuite suiteName="ParagraphTest" fileName="testcases/ParagraphTest.xml"/>
<TestSuite suiteName="ScrollingTest" fileName="testcases/ScrollingTest.xml"/>
<TestSuite suiteName="ScrollToRangeTest" fileName="testcases/ScrollToRangeTest.xml"/>
<TestSuite suiteName="SelectionTest" fileName="testcases/SelectionTest.xml"/>
<TestSuite suiteName="StyleTest" fileName="testcases/StyleTests.xml"/>
<TestSuite suiteName="EventOverrideTest" fileName="testcases/EventOverrideTest.xml"/>
<TestSuite suiteName="KeyboardGestureTest" fileName="testcases/KeyboardGestureTest.xml"/>
<TestSuite suiteName="HorizontalScrollingTest" fileName="testcases/HorizontalScrollingTests.xml"/>
<TestSuite suiteName="VerticalScrollingTest" fileName="testcases/VerticalScrollingTests.xml"/>
<TestSuite suiteName="TabTest" fileName="testcases/TabTest.xml"/>
<TestSuite suiteName="AllEventTest" fileName="testcases/AllEventTest.xml"/>
<TestSuite suiteName="TextContainerManagerTest" fileName="testcases/TextContainerManagerTest.xml"/>
<TestSuite suiteName="SWFTest" fileName="testcases/SWFTest.xml"/>
<TestSuite suiteName="ImpliedParagraphTest" fileName="testcases/ImpliedParagraphTest.xml"/>
<TestSuite suiteName="TextFlowTextLineFactoryTest" fileName="testcases/TextFlowTextLineFactoryTest.xml"/>
<TestSuite suiteName="TextLineFilterTest" fileName="testcases/TextLineFilterTest.xml"/>
<TestSuite suiteName="UndoRedoTest" fileName="testcases/UndoRedoTest.xml"/>
</TestSuites>
