blob: 0363f0fd99520280c1a4ddae1753e30c4547d369 [file] [log] [blame]
/*******************************************************************************
* 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 Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.core.tests.performance;
import java.lang.reflect.*;
import org.eclipse.jdt.core.tests.junit.extension.PerformanceTestSuite;
import org.eclipse.jdt.core.tests.junit.extension.TestCase;
import org.eclipse.jdt.core.tests.model.NameLookupTests2;
import junit.framework.Test;
/**
* Class to run all JDT/Core performance tests.
*/
public class AllPerformanceTests extends junit.framework.TestCase {
static String LENGTH = System.getProperty("length", "0");
static String ADDITIONAL = System.getProperty("additional");
/**
* Define performance tests classes to be run.
*/
public static Class[] getAllTestClasses() {
return new Class[] {
FullSourceWorkspaceSearchTests.class, // run this test first to be sure that indexing is finished
FullSourceWorkspaceBuildTests.class,
FullSourceWorkspaceASTTests.class,
FullSourceWorkspaceTypeHierarchyTests.class,
NameLookupTests2.class
};
}
/**
* Additional test class(es).
*
* Classes put in this list will be run only if "additional" VM parameter is added
* while running JUnit test suite.
*
* This parameter is an integer to specify position where this additional classes
* list has to be added in main list {@link #getAllTestClasses()}.
*
* For example, set VM parameter -Dadditional=2 will result to run following list of classes:
* - FullSourceWorkspaceSearchTests
* - FullSourceWorkspaceBuildTests
* - FullSourceWorkspaceCompletionTests <-- additional class inserted at position 2
* - FullSourceWorkspaceASTTests
* - FullSourceWorkspaceTypeHierarchyTests
* - NameLookupTests2
*
* @see #ADDITIONAL
*/
public static Class[] getAdditionalTestClasses() {
return new Class[] {
FullSourceWorkspaceCompletionTests.class
};
}
/**
* Build test suite.
* All classes suite method are called and bundle to main test suite.
*
* @see FullSourceWorkspaceSearchTests
* @see FullSourceWorkspaceBuildTests
* @see FullSourceWorkspaceCompletionTests <-- additional class inserted at position 2
* @see FullSourceWorkspaceASTTests
* @see FullSourceWorkspaceTypeHierarchyTests
* @see NameLookupTests2
*/
public static Test suite() {
PerformanceTestSuite perfSuite = new PerformanceTestSuite(AllPerformanceTests.class.getName());
Class[] testSuites = getAllTestClasses();
// Reset subsets of tests (after having test classes loaded
TestCase.TESTS_NAMES = null;
TestCase.TESTS_PREFIX = null;
TestCase.TESTS_NUMBERS = null;
TestCase.TESTS_RANGE = null;
// Get test suites subset
int length = 0;
try {
length = Integer.parseInt(LENGTH);
if (length<=0 || length>testSuites.length)
length = testSuites.length;
} catch (NumberFormatException e1) {
length = testSuites.length;
}
if (ADDITIONAL != null) {
int pos = -1;
try {
pos = Integer.parseInt(ADDITIONAL);
Class[] complete = getAdditionalTestClasses();
int cl = complete.length;
Class[] newSuites = new Class[length+cl];
if (pos <= 0) {
System.arraycopy(complete, 0, newSuites, 0, cl);
System.arraycopy(testSuites, 0, newSuites, cl, length);
} else if (pos >= length) {
System.arraycopy(testSuites, 0, newSuites, 0, length);
System.arraycopy(complete, 0, newSuites, length, cl);
} else {
for (int i=0; i<pos; i++)
newSuites[i] = testSuites[i];
for (int i=pos; i<pos+cl; i++)
newSuites[i] = complete[i-pos];
for (int i=pos+cl; i<length+cl; i++)
newSuites[i] = testSuites[i-cl];
}
testSuites = newSuites;
length = testSuites.length;
} catch (NumberFormatException e1) {
// do nothing
}
}
// Get tests of suites
for (int i = 0; i < length; i++) {
Class testClass = testSuites[i];
// call the suite() method and add the resulting suite to the suite
try {
Method suiteMethod = testClass.getDeclaredMethod("suite", new Class[0]); //$NON-NLS-1$
Test suite = (Test) suiteMethod.invoke(null, new Object[0]);
perfSuite.addTest(suite);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.getTargetException().printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
return perfSuite;
}
}