| /** |
| * @test |
| * @bug 4390869 |
| * @bug 4460328 |
| * @summary Test the new SourceDebugExtension facility |
| * |
| * @author Robert Field |
| * |
| * @library .. |
| * @modules jdk.jdi |
| * @run build TestScaffold VMConnection TargetListener TargetAdapter InstallSDE HelloWorld |
| * @run compile TemperatureTableTest.java |
| * @run compile -g TemperatureTableServlet.java |
| * @run driver TemperatureTableTest |
| */ |
| import com.sun.jdi.*; |
| import com.sun.jdi.event.*; |
| import com.sun.jdi.request.*; |
| |
| import java.util.*; |
| import java.io.File; |
| |
| public class TemperatureTableTest extends TestScaffold { |
| ReferenceType targetClass; |
| |
| TemperatureTableTest (String args[]) { |
| super(args); |
| } |
| |
| public static void main(String[] args) throws Exception { |
| testSetUp(); |
| new TemperatureTableTest(args).startTests(); |
| } |
| |
| /********** test set-up **********/ |
| |
| static void testSetUp() throws Exception { |
| InstallSDE.install(new File(System.getProperty("test.classes", "."), |
| "TemperatureTableServlet.class"), |
| new File(System.getProperty("test.src", "."), |
| "TemperatureTable.sde")); |
| } |
| |
| /********** test assist **********/ |
| |
| void checkLocation(Location loc, String label, |
| String expectedSourceName, |
| String expectedSourcePath, |
| int expectedLinenumber) throws Exception { |
| String sourceName = loc.sourceName(); |
| if (sourceName.equals(expectedSourceName)) { |
| println(label + " sourceName: " + sourceName); |
| } else { |
| failure("FAIL: " + label + |
| " expected sourceName " + expectedSourceName + |
| " got - " + sourceName); |
| } |
| |
| String sourcePath = loc.sourcePath(); |
| if (sourcePath.equals(expectedSourcePath)) { |
| println(label + " sourcePath: " + sourcePath); |
| } else { |
| failure("FAIL: " + label + |
| " expected sourcePath " + expectedSourcePath + |
| " got - " + sourcePath); |
| } |
| |
| int ln = loc.lineNumber(); |
| if (ln == expectedLinenumber) { |
| println(label + " line number: " + ln); |
| } else { |
| failure("FAIL: " + label + |
| " expected line number " + expectedLinenumber + |
| " got - " + ln); |
| } |
| } |
| |
| void checkLocation(String stratum, Location loc, String label, |
| String expectedSourceName, |
| String expectedSourcePath, |
| int expectedLinenumber) throws Exception { |
| String sourceName = loc.sourceName(stratum); |
| if (sourceName.equals(expectedSourceName)) { |
| println(label + "(" + stratum + ")" + |
| " sourceName: " + sourceName); |
| } else { |
| failure("FAIL: " + label + "(" + stratum + ")" + |
| " expected sourceName " + expectedSourceName + |
| " got " + sourceName); |
| } |
| |
| String sourcePath = loc.sourcePath(stratum); |
| if (sourcePath.equals(expectedSourcePath)) { |
| println(label + "(" + stratum + ")" + |
| " sourcePath: " + sourcePath); |
| } else { |
| failure("FAIL: " + label + "(" + stratum + ")" + |
| " expected sourcePath " + expectedSourcePath + |
| " got " + sourcePath); |
| } |
| |
| int ln = loc.lineNumber(stratum); |
| if (ln == expectedLinenumber) { |
| println(label + "(" + stratum + ")" + |
| " line number: " + ln); |
| } else { |
| failure("FAIL: " + label + "(" + stratum + ")" + |
| " expected line number " + expectedLinenumber + |
| " got " + ln); |
| } |
| } |
| |
| /********** test core **********/ |
| |
| protected void runTests() throws Exception { |
| /* |
| * Get to the top of main() |
| * to determine targetClass |
| */ |
| BreakpointEvent bpe = startToMain("TemperatureTableServlet"); |
| targetClass = bpe.location().declaringType(); |
| |
| if (!vm().canGetSourceDebugExtension()) { |
| failure("FAIL: canGetSourceDebugExtension() is false"); |
| } else { |
| println("canGetSourceDebugExtension() is true"); |
| } |
| |
| checkLocation(bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation("JSP", bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation("bogus", bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation(null, bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation("Java", bpe.location(), "main BP", |
| "TemperatureTableServlet.java", |
| "TemperatureTableServlet.java", 11); |
| |
| // ref type source name |
| String sourceName = targetClass.sourceName(); |
| if (sourceName.equals("TemperatureTable.jsp")) { |
| println("ref type sourceName: " + sourceName); |
| } else { |
| failure("FAIL: unexpected ref type sourceName - " + sourceName); |
| } |
| |
| List allLines = targetClass.allLineLocations(); |
| for (Iterator it = allLines.iterator(); it.hasNext(); ) { |
| Location loc = (Location)it.next(); |
| println("Location: " + loc); |
| } |
| |
| List locs = targetClass.locationsOfLine(7); |
| if (locs.size() != 1) { |
| failure("FAIL: expect on elocation, got " + locs.size()); |
| } |
| Location loc7 = (Location)locs.get(0); |
| |
| checkLocation(loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation("JSP", loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation("bogus", loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation(null, loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation("Java", loc7, "line7", |
| "TemperatureTableServlet.java", |
| "TemperatureTableServlet.java", 28); |
| |
| List availSt = targetClass.availableStrata(); |
| List avail = new ArrayList(availSt); |
| if (avail.size() == 2 && |
| avail.remove("JSP") && |
| avail.remove("Java") && |
| avail.size() == 0) { |
| println("availableStrata: " + availSt); |
| } else { |
| failure("FAIL: unexpected availableStrata - " + availSt); |
| } |
| |
| String def = targetClass.defaultStratum(); |
| if (def.equals("JSP")) { |
| println("defaultStratum: " + def); |
| } else { |
| failure("FAIL: unexpected defaultStratum - " + def); |
| } |
| |
| // Test HelloWorld |
| BreakpointEvent bpHello = resumeTo("HelloWorld", "main", |
| "([Ljava/lang/String;)V"); |
| Location hello = bpHello.location(); |
| |
| checkLocation(hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation("JSP", hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation("bogus", hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation(null, hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation("Java", hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| /******** test VM default *************/ |
| |
| vm().setDefaultStratum("Java"); |
| println("VM default set to Java"); |
| |
| checkLocation(bpe.location(), "main BP", |
| "TemperatureTableServlet.java", |
| "TemperatureTableServlet.java", 11); |
| |
| checkLocation("JSP", bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation("bogus", bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation(null, bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation("Java", bpe.location(), "main BP", |
| "TemperatureTableServlet.java", |
| "TemperatureTableServlet.java", 11); |
| |
| checkLocation(loc7, "line7", |
| "TemperatureTableServlet.java", |
| "TemperatureTableServlet.java", 28); |
| |
| checkLocation("JSP", loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation("bogus", loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation(null, loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation("Java", loc7, "line7", |
| "TemperatureTableServlet.java", |
| "TemperatureTableServlet.java", 28); |
| |
| checkLocation(hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation("JSP", hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation("bogus", hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation(null, hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation("Java", hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| vm().setDefaultStratum(null); |
| println("VM default set to null"); |
| |
| checkLocation(bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation("JSP", bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation("bogus", bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation(null, bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation("Java", bpe.location(), "main BP", |
| "TemperatureTableServlet.java", |
| "TemperatureTableServlet.java", 11); |
| |
| checkLocation(loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation("JSP", loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation("bogus", loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation(null, loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation("Java", loc7, "line7", |
| "TemperatureTableServlet.java", |
| "TemperatureTableServlet.java", 28); |
| |
| checkLocation(hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation("JSP", hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation("bogus", hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation(null, hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation("Java", hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| |
| vm().setDefaultStratum("bogus"); |
| println("VM default set to bogus"); |
| |
| checkLocation(bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation("JSP", bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation("bogus", bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation(null, bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation("Java", bpe.location(), "main BP", |
| "TemperatureTableServlet.java", |
| "TemperatureTableServlet.java", 11); |
| |
| checkLocation(loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation("JSP", loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation("bogus", loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation(null, loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation("Java", loc7, "line7", |
| "TemperatureTableServlet.java", |
| "TemperatureTableServlet.java", 28); |
| |
| |
| checkLocation(hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation("JSP", hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation("bogus", hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation(null, hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation("Java", hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| vm().setDefaultStratum("JSP"); |
| println("VM default set to JSP"); |
| |
| checkLocation(bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation("JSP", bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation("bogus", bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation(null, bpe.location(), "main BP", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 1); |
| |
| checkLocation("Java", bpe.location(), "main BP", |
| "TemperatureTableServlet.java", |
| "TemperatureTableServlet.java", 11); |
| |
| checkLocation(loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation("JSP", loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation("bogus", loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation(null, loc7, "line7", |
| "TemperatureTable.jsp", |
| "tst" + File.separatorChar + "TemperatureTable.jsp", 7); |
| |
| checkLocation("Java", loc7, "line7", |
| "TemperatureTableServlet.java", |
| "TemperatureTableServlet.java", 28); |
| |
| checkLocation(hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation("JSP", hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation("bogus", hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation(null, hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| checkLocation("Java", hello, "hello BP", |
| "HelloWorld.java", |
| "HelloWorld.java", 3); |
| |
| /* |
| * resume the target listening for events |
| */ |
| listenUntilVMDisconnect(); |
| |
| /* |
| * deal with results of test |
| * if anything has called failure("foo") testFailed will be true |
| */ |
| if (!testFailed) { |
| println("TemperatureTableTest: passed"); |
| } else { |
| throw new Exception("TemperatureTableTest: failed"); |
| } |
| } |
| } |