blob: 9b6f03651da9897d0a955b1192dfffdd96827417 [file] [log] [blame]
package org.eclipse.debug.jdi.tests;
/**********************************************************************
Copyright (c) 2000, 2002 IBM Corp. All rights reserved.
This file is 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
**********************************************************************/
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 getAllTestCases(VMInformation info) {
Vector 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.parseArgs(String[]) for details on the arguments.
*/
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 classes= getAllTestCases(info);
// Run the other tests
Enumeration enumeration= classes.elements();
while (enumeration.hasMoreElements()) {
Class testClass= (Class)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(String[]) 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 (!test.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;
}
}