1 /**
   2  * @test
   3  * @bug 4390869
   4  * @bug 4460328
   5  * @summary Test the new SourceDebugExtension facility
   6  * @author Robert Field
   7  *
   8  * @library ..
   9  *
  10  * @run build TestScaffold VMConnection TargetListener TargetAdapter InstallSDE
  11  * @run compile SourceDebugExtensionTest.java
  12  * @run compile -g SourceDebugExtensionTarg.java
  13  * @run driver SourceDebugExtensionTest
  14  */
  15 import com.sun.jdi.*;
  16 import com.sun.jdi.event.*;
  17 import com.sun.jdi.request.*;
  18 
  19 import java.util.*;
  20 import java.io.File;
  21 
  22 public class SourceDebugExtensionTest extends TestScaffold {
  23     ReferenceType targetClass;
  24 
  25     SourceDebugExtensionTest (String args[]) {
  26         super(args);
  27     }
  28 
  29     public static void main(String[] args)      throws Exception {
  30         testSetUp();
  31         new SourceDebugExtensionTest(args).startTests();
  32     }
  33 
  34     /********** test set-up **********/
  35 
  36     static void testSetUp() throws Exception {
  37         InstallSDE.install(new File(System.getProperty("test.classes", "."),
  38                                     "SourceDebugExtensionTarg.class"),
  39                            new File(System.getProperty("test.src", "."),
  40                                     "testString"));
  41     }
  42 
  43     /********** test core **********/
  44 
  45     protected void runTests() throws Exception {
  46         /*
  47          * Get to the top of main()
  48          * to determine targetClass
  49          */
  50         BreakpointEvent bpe = startToMain("SourceDebugExtensionTarg");
  51         targetClass = bpe.location().declaringType();
  52 
  53         if (!vm().canGetSourceDebugExtension()) {
  54             failure("FAIL: canGetSourceDebugExtension() is false");
  55         } else {
  56             println("canGetSourceDebugExtension() is true");
  57         }
  58 
  59         String expected = "An expected attribute string";
  60         String sde = targetClass.sourceDebugExtension();
  61         if (!sde.equals(expected)) {
  62             failure("FAIL: got '" + sde +
  63                     "' expected: '" + expected + "'");
  64         }
  65 
  66         /*
  67          * resume the target listening for events
  68          */
  69         listenUntilVMDisconnect();
  70 
  71         /*
  72          * deal with results of test
  73          * if anything has called failure("foo") testFailed will be true
  74          */
  75         if (!testFailed) {
  76             println("SourceDebugExtensionTest: passed");
  77         } else {
  78             throw new Exception("SourceDebugExtensionTest: failed");
  79         }
  80     }
  81 }