blob: 15f1d1ff0fc2064f3bb531ae04be0819a7d70036 [file] [log] [blame]
/**
* @test
* @bug 4390869
* @bug 4460328
* @summary Test Stepping in the new SourceDebugExtension facility
* @author Robert Field
*
* @library ..
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter InstallSDE
* @run compile MangleStepTest.java
* @run compile -g onion/pickle/Mangle.java
* @run driver MangleStepTest unset
* @run driver MangleStepTest Java
* @run driver MangleStepTest XYZ
* @run driver MangleStepTest Rats
* @run driver MangleStepTest bogus
*/
import com.sun.jdi.*;
import com.sun.jdi.event.*;
import com.sun.jdi.request.*;
import java.util.*;
import java.io.File;
public class MangleStepTest extends TestScaffold {
static final String op = "onion" + File.separator + "pickle" + File.separator;
ReferenceType targetClass;
final String stratum;
static boolean aTestFailed = false;
MangleStepTest (String stratum) {
super(new String[0]);
this.stratum = stratum;
}
public static void main(String[] args) throws Exception {
testSetUp();
new MangleStepTest(args[0]).startTests();
if (aTestFailed) {
throw new Exception("MangleStepTest: failed");
}
}
/********** test set-up **********/
static void testSetUp() throws Exception {
InstallSDE.install(new File(System.getProperty("test.classes", "."),
op + "Mangle.class"),
new File(System.getProperty("test.src", "."),
"Mangle.sde"));
}
/********** test assist **********/
void lineMatch(Location loc, int javaLine, int defaultLine) {
if (loc.lineNumber() != defaultLine) {
failure("FAIL: at " + loc.lineNumber() +
", expected " + defaultLine);
} else {
println("at: " + loc.lineNumber());
}
if (loc.lineNumber("Java") != javaLine) {
failure("FAIL: at Java line " + loc.lineNumber("Java") +
", expected " + javaLine);
}
}
/********** test core **********/
protected void runTests() throws Exception {
/*
* Get to the top of main()
*/
int[] lines;
int[] jLines;
String targetName = "onion.pickle.Mangle";
startUp(targetName);
if (!stratum.equals("unset")) {
vm().setDefaultStratum(stratum);
}
BreakpointEvent bpe = resumeTo(targetName, "main",
"([Ljava/lang/String;)V");
ThreadReference thread = bpe.thread();
if (stratum.equals("Java")) {
lines = new int[] {4, 5, 6, 7, 8, 9};
jLines = new int[] {4, 5, 6, 7, 8, 9};
} else if (stratum.equals("Rats")) {
lines = new int[] {1000, 1111, 1112};
jLines = new int[] {4, 5, 7};
} else { /* XYZ (the class default) */
lines = new int[] {200, 210, 217, 218};
jLines = new int[] {4, 7, 8, 9};
}
println("Testing stratum: " + stratum);
lineMatch(bpe.location(), jLines[0], lines[0]);
for (int i = 1; i < lines.length; ++i) {
StepEvent se = stepOverLine(thread);
lineMatch(se.location(), jLines[i], lines[i]);
}
/*
* resume the target to completion
*/
listenUntilVMDisconnect();
/*
* deal with results of test
* if anything has called failure("foo") testFailed will be true
*/
if (!testFailed) {
println("MangleStepTest (" + stratum + "): passed");
} else {
println("MangleStepTest (" + stratum + "): failed");
aTestFailed = true;
}
}
}