blob: 6488c06cf41b6931d96ed96753f12d2624311c56 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2015 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.debug.jdi.tests;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Enumeration;
import java.util.Vector;
/**
* Run all tests
*/
public class TestAll {
/**
* Returns all the test case classes (a Vector of Class) that are
* relevant for the given VM information.
* NB1: This doesn't include the VirtualMachineTest class.
* NB2: The last element must be the VMDeathEventTest class since
* it shuts the VM down.
*/
protected static Vector<Class<?>> getAllTestCases(VMInformation info) {
Vector<Class<?>> classes = new Vector<>();
classes.addElement(AccessibleTest.class);
classes.addElement(ArrayReferenceTest.class);
classes.addElement(ArrayTypeTest.class);
classes.addElement(BooleanValueTest.class);
classes.addElement(BreakpointRequestTest.class);
classes.addElement(ByteValueTest.class);
classes.addElement(CharValueTest.class);
classes.addElement(ClassLoaderReferenceTest.class);
classes.addElement(ClassPrepareEventTest.class);
classes.addElement(ClassPrepareRequestTest.class);
classes.addElement(ClassTypeTest.class);
classes.addElement(DoubleValueTest.class);
classes.addElement(EventRequestManagerTest.class);
classes.addElement(EventRequestTest.class);
classes.addElement(EventTest.class);
classes.addElement(ExceptionEventTest.class);
classes.addElement(ExceptionRequestTest.class);
classes.addElement(FieldTest.class);
classes.addElement(FloatValueTest.class);
classes.addElement(HotCodeReplacementTest.class);
classes.addElement(IntegerValueTest.class);
classes.addElement(InterfaceTypeTest.class);
classes.addElement(LocalVariableTest.class);
classes.addElement(LocatableTest.class);
classes.addElement(LocationTest.class);
classes.addElement(LongValueTest.class);
classes.addElement(MethodTest.class);
classes.addElement(MethodEntryRequestTest.class);
classes.addElement(MethodExitRequestTest.class);
classes.addElement(MirrorTest.class);
if (info.fVM.canWatchFieldModification())
classes.addElement(ModificationWatchpointEventTest.class);
classes.addElement(ObjectReferenceTest.class);
classes.addElement(PrimitiveValueTest.class);
classes.addElement(ReferenceTypeTest.class);
classes.addElement(ShortValueTest.class);
classes.addElement(StackFrameTest.class);
classes.addElement(StepEventTest.class);
classes.addElement(StringReferenceTest.class);
classes.addElement(ThreadDeathEventTest.class);
classes.addElement(ThreadGroupReferenceTest.class);
classes.addElement(ThreadReferenceTest.class);
classes.addElement(ThreadStartEventTest.class);
classes.addElement(TypeComponentTest.class);
classes.addElement(TypeTest.class);
classes.addElement(ValueTest.class);
if (info.fVM.canWatchFieldAccess() && info.fVM.canWatchFieldModification()) {
classes.addElement(WatchpointEventTest.class);
classes.addElement(WatchpointRequestTest.class);
}
classes.addElement(VirtualMachineExitTest.class);
classes.addElement(VMDisconnectEventTest.class);
classes.addElement(VMDisposeTest.class); // note that this test does not restore the state properly.
return classes;
}
/**
* Run all tests with the given arguments.
* @see AbstractJDITest for details on the arguments.
* @param arguments
* @throws Throwable
*/
public static void main(String[] arguments) throws Throwable {
// Create test result
TextTestResult result= new TextTestResult();
// Run the VirtualMachineTest
AbstractJDITest test= run(result, VirtualMachineTest.class, arguments, null);
// Was it possible to run the first test?
if (test == null)
return;
// Get the VM info
VMInformation info = test.getVMInfo();
// Get all test cases
Vector<Class<?>> classes= getAllTestCases(info);
// Run the other tests
Enumeration<Class<?>> enumeration= classes.elements();
while (enumeration.hasMoreElements()) {
Class<?> testClass= enumeration.nextElement();
test= run(result, testClass, arguments, info);
info= test.getVMInfo(); // In case the test has changed this info
}
// Shut down the VM
test.shutDownTarget();
// Show the result
result.print();
}
/**
* Runs the given test with the given arguments.
* Returns the instance that was created.
* Returns null if there was a problem with the arguments.
* @see AbstractJDITest for details on the arguments.
*/
private static AbstractJDITest run(junit.framework.TestResult result, Class<?> testClass, String[] arguments, VMInformation info) throws Throwable {
// Create test
Class<?>[] argTypes= {};
Constructor<?> construct = null;
try {
construct = testClass.getConstructor(argTypes);
} catch (NoSuchMethodException e) {
}
AbstractJDITest test = null;
try {
test = (AbstractJDITest) construct.newInstance(new Object[]{});
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
throw e.getTargetException();
}
if (!AbstractJDITest.parseArgs(arguments))
return null;
test.setVMInfo(info);
test.setInControl(false);
// Run test
System.out.println("\n" + new java.util.Date());
System.out.println("Begin testing " + test.getName() + "...");
long startTime= System.currentTimeMillis();
test.suite().run(result);
long endTime= System.currentTimeMillis();
long runTime= endTime-startTime;
System.out.println("\nTime: "+runTime/1000+"."+runTime%1000);
System.out.println("Done testing " + test.getName() + ".");
return test;
}
}