////////////////////////////////////////////////////////////////////////////////
//
//  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.
//
////////////////////////////////////////////////////////////////////////////////
package
{
 	internal class AutomationTestClasses
	{
		/*import perfAppTests.FTEGridTestCanvas; FTEGridTestCanvas;
		import perfAppTests.InputManagerTestSprite; InputManagerTestSprite;
		import perfAppTests.TextFlowTestSprite; TextFlowTestSprite;

		import UnitTest.PerformanceTests.FTEGridTests; FTEGridTests;
		import UnitTest.PerformanceTests.InputTests; InputTests;
		import UnitTest.PerformanceTests.TweenTests; TweenTests;
		import UnitTest.PerformanceTests.TextGridTests; TextGridTests;
		import UnitTest.PerformanceTests.VellumAliceScroll; VellumAliceScroll;
		import UnitTest.PerformanceTests.VellumAliceTests; VellumAliceTests;
		import UnitTest.PerformanceTests.VellumParaTests; VellumParaTests;
		import UnitTest.PerformanceTests.VellumWordTests; VellumWordTests;
                                                            */
		import AllTestsSuite; AllTestsSuite;
        import MinimalTestsSuite; MinimalTestsSuite;
       // import UnitTest.Tests.AccessibilityMethodsTest; AccessibilityMethodsTest;
		/*import UnitTest.Tests.AllAttributeTest; AllAttributeTest;
		import UnitTest.Tests.AllCharAttributeTest; AllCharAttributeTest;
		import UnitTest.Tests.AllContAttributeTest; AllContAttributeTest;
		import UnitTest.Tests.AllParaAttributeTest; AllParaAttributeTest;
		import UnitTest.Tests.AttributeTest; AttributeTest;
		import UnitTest.Tests.BoundsAndAlignmentTest; BoundsAndAlignmentTest;
		import UnitTest.Tests.BoxTest; BoxTest;
		import UnitTest.Tests.CompositionTest; CompositionTest;
		import UnitTest.Tests.ContainerAttributeTest; ContainerAttributeTest;
		import UnitTest.Tests.ContainerTypeTest; ContainerTypeTest;
		import UnitTest.Tests.CrossContainerTest; CrossContainerTest;
		import UnitTest.Tests.ElementOperationTests; ElementOperationTests;
		import UnitTest.Tests.EventOverrideTest; EventOverrideTest;
		import UnitTest.Tests.FactoryImportTest; FactoryImportTest;
		import UnitTest.Tests.FETest; FETest;
		import UnitTest.Tests.FloatTest; FloatTest;
		import UnitTest.Tests.FlowModelTest; FlowModelTest;
		import UnitTest.Tests.FontEmbedTest; FontEmbedTest;
		import UnitTest.Tests.GeneralFunctionsTest; GeneralFunctionsTest;
		import UnitTest.Tests.HorizontalScrollingTest; HorizontalScrollingTest;
		import UnitTest.Tests.ImportAPITest; ImportAPITest;
		import UnitTest.Tests.ImportTest; ImportTest;
		import UnitTest.Tests.KeyboardGestureTest; KeyboardGestureTest;
		import UnitTest.Tests.LeadingTest; LeadingTest;
		import UnitTest.Tests.LinkTest; LinkTest;
		import UnitTest.Tests.ListTest; ListTest;
		import UnitTest.Tests.LocaleTests; LocaleTests;
		import UnitTest.Tests.MeasurementTest; MeasurementTest;
		import UnitTest.Tests.MeasurementGridTest; MeasurementGridTest;
		import UnitTest.Tests.OperationTest; OperationTest;
		import UnitTest.Tests.ParagraphTest; ParagraphTest;
		import UnitTest.Tests.ScrollingTest; ScrollingTest;
		import UnitTest.Tests.ScrollToRangeTest; ScrollToRangeTest;
		import UnitTest.Tests.SelectionTest; SelectionTest;
		import UnitTest.Tests.SpacingTest; SpacingTest;
		import UnitTest.Tests.StyleTest; StyleTest;
		import UnitTest.Tests.TCYTests; TCYTests;
		import UnitTest.Tests.TextContainerManagerTest; TextContainerManagerTest;
		import UnitTest.Tests.TableBackgroundTest; TableBackgroundTest;		
        import UnitTest.Tests.TableTests; TableTests;
		import UnitTest.Tests.TabTest; TabTest;
		import UnitTest.Tests.TextFlowEditTest; TextFlowEditTest;
		import UnitTest.Tests.VerticalScrollingTest; VerticalScrollingTest;
		import UnitTest.Tests.WritingModeTest; WritingModeTest;
		import UnitTest.Tests.AllEventTest; AllEventTest;
		import UnitTest.Tests.SWFTest; SWFTest;
		import UnitTest.Tests.ImpliedParagraphTest; ImpliedParagraphTest;
		import UnitTest.Tests.TextFlowTextLineFactoryTest; TextFlowTextLineFactoryTest;
		import UnitTest.Tests.TextLineFilterTest; TextLineFilterTest;
		import UnitTest.Tests.UndoRedoTest; UndoRedoTest;
		import UnitTest.Tests.ScrollToRangeTest; ScrollToRangeTest;   */
	}
}

