////////////////////////////////////////////////////////////////////////////////
//
//  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 AutomationCoreClasses
	{
		import UnitTest.ExtendedClasses.TestDescriptor; TestDescriptor;
		import UnitTest.ExtendedClasses.TestSuiteExtended; TestSuiteExtended;
		import UnitTest.ExtendedClasses.VellumPerformanceCase; VellumPerformanceCase;
		import UnitTest.ExtendedClasses.VellumTestCase; VellumTestCase;
		import UnitTest.Fixtures.FileRepository; FileRepository;
		import UnitTest.Fixtures.TestApp; TestApp;
		import UnitTest.Fixtures.TestConfig; TestConfig;
		import UnitTest.Fixtures.TestEditManager; TestEditManager;

		import UnitTest.Validation.BoundsChecker; BoundsChecker;
		import UnitTest.Validation.CompositionCompleteEventValidator; CompositionCompleteEventValidator;
		import UnitTest.Validation.CompositionResults; CompositionResults;
		import UnitTest.Validation.DamageEventValidator; DamageEventValidator;
		import UnitTest.Validation.EventValidator; EventValidator;
		import UnitTest.Validation.FlowElementMouseEventValidator; FlowElementMouseEventValidator;
		import UnitTest.Validation.FlowOperationEventValidator; FlowOperationEventValidator;
		import UnitTest.Validation.LineSnapshot; LineSnapshot;
		import UnitTest.Validation.SelectionEventValidator; SelectionEventValidator;
		import UnitTest.Validation.StatusChangeEventValidator; StatusChangeEventValidator;
		import UnitTest.Validation.UpdateCompleteEventValidator; UpdateCompleteEventValidator;
		import UnitTest.Validation.XMLSnapshot; XMLSnapshot;
		// Alphabetical list of classes to be included as part of vellum.swc.
		// This should mirror what's in the .flexLibProperties
	}
}

