////////////////////////////////////////////////////////////////////////////////
//
//  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
{

    import UnitTest.Tests.AccessibilityMethodsTest;
    import UnitTest.Tests.AllCharAttributeTest;
    import UnitTest.Tests.AllContAttributeTest;
    import UnitTest.Tests.AllEventTest;
    import UnitTest.Tests.AllParaAttributeTest;
    import UnitTest.Tests.AttributeTest;
    import UnitTest.Tests.BoundsAndAlignmentTest;
    import UnitTest.Tests.BoxTest;
    import UnitTest.Tests.CompositionTest;
    import UnitTest.Tests.ContainerAttributeTest;
    import UnitTest.Tests.ContainerTypeTest;
    import UnitTest.Tests.CrossContainerTest;
    import UnitTest.Tests.ElementOperationTest;
    import UnitTest.Tests.EventOverrideTest;
    import UnitTest.Tests.FLEX_34807_Test;
    import UnitTest.Tests.FactoryImportTest;
    import UnitTest.Tests.FloatTest;
    import UnitTest.Tests.FlowModelTest;
    import UnitTest.Tests.GeneralFunctionsTest;
    import UnitTest.Tests.HorizontalScrollingTest;
    import UnitTest.Tests.ImpliedParagraphTest;
    import UnitTest.Tests.ImportAPITest;
    import UnitTest.Tests.KeyboardGestureTest;
    import UnitTest.Tests.LeadingTest;
    import UnitTest.Tests.LinkTest;
    import UnitTest.Tests.ListTest;
    import UnitTest.Tests.LocaleTests;
    import UnitTest.Tests.MeasurementTest;
    import UnitTest.Tests.OperationTest;
    import UnitTest.Tests.ParagraphTest;
    import UnitTest.Tests.PasteWithMutliParagraph_FLEX_34876_Test;
    import UnitTest.Tests.ScrollToRangeTest;
    import UnitTest.Tests.ScrollingTest;
    import UnitTest.Tests.SelectionTest;
    import UnitTest.Tests.SpacingTest;
    import UnitTest.Tests.StyleTest;
    import UnitTest.Tests.TCYTest;
    import UnitTest.Tests.TabTest;
    import UnitTest.Tests.TextContainerManagerTest;
    import UnitTest.Tests.TextFlowEditTest;
    import UnitTest.Tests.TextFlowTextLineFactoryTest;
    import UnitTest.Tests.TextLineFilterTest;
    import UnitTest.Tests.UndoRedoTest;
    import UnitTest.Tests.VerticalScrollingTest;
    import UnitTest.Tests.WritingModeTest;

    [Suite(order=1)]
    [RunWith("org.flexunit.runners.Suite")]
    public dynamic class AllTestsSuite
    {
        public var generalFunctionsTest:GeneralFunctionsTest;
        public var factoryImportTest:FactoryImportTest;
        public var accessibilityMethodsTest:AccessibilityMethodsTest;
        public var allChartAttributeTest:AllCharAttributeTest;
        public var allContAttributeTest:AllContAttributeTest;
        public var allEventTest:AllEventTest;
        public var allParagraphAttributeTest:AllParaAttributeTest;
        public var attributeTest:AttributeTest;
        public var boxTest:BoxTest;
        public var compositionTest:CompositionTest;
        public var containerTypeTest:ContainerTypeTest;
        public var floatTest:FloatTest;
        public var operationTest:OperationTest;
        public var scrollingTest:ScrollingTest;
        public var containerAttributeTest:ContainerAttributeTest;
        public var boundsAndAlignmentTest:BoundsAndAlignmentTest;
        public var crossContainerTest:CrossContainerTest;
        public var elementOperationTest:ElementOperationTest;
        public var eventOverrideTest:EventOverrideTest;
        public var flowModelTest:FlowModelTest;
        public var writingModeTest:WritingModeTest;
        public var undoRedoTest:UndoRedoTest;
        public var textFlowEditTest:TextFlowEditTest;
        public var tabTest:TabTest;
        public var horizontalScrollingTest:HorizontalScrollingTest;
        public var impliedParagraphTest:ImpliedParagraphTest;
        public var importApiTest:ImportAPITest;
        public var keyboardGestureTest:KeyboardGestureTest;
        public var spacingTest:SpacingTest;
        public var verticalScrollingTest:VerticalScrollingTest;
        public var listTest:ListTest;
        public var linkTest:LinkTest;
        public var localeTest:LocaleTests;
        public var textLineFilterTest:TextLineFilterTest;
        public var textFlowTextLineFactoryTest:TextFlowTextLineFactoryTest;
        public var textContainerManagerTest:TextContainerManagerTest;
        public var tcyTest:TCYTest;
        public var styleTest:StyleTest;
        public var selectionTest:SelectionTest;
        public var paragraphTest:ParagraphTest;
        public var measurementTest:MeasurementTest;
        public var leadingTest:LeadingTest;
        public var scrollToRangeTest:ScrollToRangeTest;
        public var pasteWithMultiParagraph:PasteWithMutliParagraph_FLEX_34876_Test;
		public var flex_34807:FLEX_34807_Test;
    }

}
