/*******************************************************************************
 * Copyright (c) 2000, 2004 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.text.tests.performance;

import junit.framework.Test;
import junit.framework.TestSuite;


/**
 * Depends on {@link PerformanceTestSetup}, which is currently run by
 * {@link PerformanceTestSuite}. {@link PerformanceTestSuite} precedes
 * this suite in the test.xml.
 * 
 * @since 3.1
 */
public class EventDrivenTestSuite extends TestSuite {

	public static Test suite() {
		return new PerformanceTestSetup(new EventDrivenTestSuite());
	}
	
	public EventDrivenTestSuite() {
		addTest(ScrollJavaEditorTest.suite());
		addTest(ScrollTextEditorTest.suite());
		addTest(JavaIndenterTest.suite());
		addTest(JavaNonInitialTypingTest.suite());
		addTest(TextNonInitialTypingTest.suite());
		addTest(OpenPreferencePageTest.suite());
		addTest(ScrollAnnotatedJavaEditorTest.suite());
		addTest(JavaDocIndentStrategyTest.suite());
		addTest(TextMoveLineTest.suite());
		addTest(JavaMoveLineTest.suite());
		addTest(JavaReplaceAllTest.suite());
		// TODO: enable when Bug 72244: "Posting mouse events locks up event handling" is fixed
		// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=72244
//		addTest(MouseScrollJavaEditorTest.suite());
//		addTest(MouseScrollTextEditorTest.suite());
	}
}
