| /** |
| * @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; |
| } |
| } |
| } |