jdk/test/com/sun/jdi/GetLocalVariables.java
changeset 2 90ce3da70b43
child 24973 8c4bc3fa4c4e
equal deleted inserted replaced
0:fd16c54261b3 2:90ce3da70b43
       
     1 /** hard coded linenumbers in this test - DO NOT CHANGE
       
     2  *  @test/nodynamiccopyright/
       
     3  *  @bug 4359312 4450091
       
     4  *  @summary Test PTR 1421 JVM exceptions making a call to LocalVariable.type().name()
       
     5  *
       
     6  *  @author Tim Bell (based on the PTR 1421 report submitted by IBM).
       
     7  *
       
     8  *  @run build TestScaffold VMConnection TargetListener TargetAdapter
       
     9  *  @run compile -g GetLocalVariables.java
       
    10  *  @run main GetLocalVariables
       
    11  */
       
    12 import com.sun.jdi.*;
       
    13 import com.sun.jdi.event.*;
       
    14 import com.sun.jdi.request.*;
       
    15 
       
    16 import java.util.*;
       
    17 
       
    18  /********** target program **********/
       
    19 
       
    20 class GetLocalVariablesTarg {
       
    21     private static char s_char1 = 'a';
       
    22     private static char s_char2 = (char) 0;
       
    23     private static char s_char3 = (char) 1;
       
    24     private static char s_char4 = (char) 32;
       
    25     private static char s_char5 = '\u7ffe';
       
    26     private static char s_char6 = '\u7fff';
       
    27     private static char s_char7 = '\u8000';
       
    28     private static char s_char8 = '\u8001';
       
    29     private static char s_char9 = '\ufffe';
       
    30     private static char s_char10 = '\uffff';
       
    31 
       
    32     private static byte s_byte1 = (byte) 146;
       
    33     private static byte s_byte2 = (byte) 0;
       
    34     private static byte s_byte3 = (byte) 1;
       
    35     private static byte s_byte4 = (byte) 15;
       
    36     private static byte s_byte5 = (byte) 127;
       
    37     private static byte s_byte6 = (byte) 128;
       
    38     private static byte s_byte7 = (byte) - 1;
       
    39     private static byte s_byte8 = (byte) - 15;
       
    40     private static byte s_byte9 = (byte) - 127;
       
    41     private static byte s_byte10 = (byte) - 128;
       
    42 
       
    43     private static short s_short1 = (short) 28123;
       
    44     private static short s_short2 = (short) 0;
       
    45     private static short s_short3 = (short) 1;
       
    46     private static short s_short4 = (short) 15;
       
    47     private static short s_short5 = (short) 0x7ffe;
       
    48     private static short s_short6 = (short) 0x7fff;
       
    49     private static short s_short7 = (short) -1;
       
    50     private static short s_short8 = (short) -15;
       
    51     private static short s_short9 = (short) -0x7ffe;
       
    52     private static short s_short10 = (short) -0x7fff;
       
    53 
       
    54     private static int s_int1 = 3101246;
       
    55     private static int s_int2 = 0;
       
    56     private static int s_int3 = 1;
       
    57     private static int s_int4 = 15;
       
    58     private static int s_int5 = 0x7ffffffe;
       
    59     private static int s_int6 = 0x7fffffff;
       
    60     private static int s_int7 = -1;
       
    61     private static int s_int8 = -15;
       
    62     private static int s_int9 = -0x7ffffffe;
       
    63     private static int s_int10 = -0x7fffffff;
       
    64 
       
    65     private static long s_long1 = 0x0123456789ABCDEFL;
       
    66     private static long s_long2 = 0;
       
    67     private static long s_long3 = 1;
       
    68     private static long s_long4 = 15;
       
    69     private static long s_long5 = 0x000000007fffffffL;
       
    70     private static long s_long6 = 0x0000000080000000L;
       
    71     private static long s_long7 = 0x0000000100000000L;
       
    72     private static long s_long8 = 0x7fffffffffffffffL;
       
    73     private static long s_long9 = 0x8000000000000000L;
       
    74     private static long s_long10 = -15;
       
    75 
       
    76     private static float s_float1 = 2.3145f;
       
    77     private static float s_float2 = 0f;
       
    78 
       
    79     private static double s_double1 = 1.469d;
       
    80     private static double s_double2 = 0;
       
    81 
       
    82     private static int s_iarray1[] = {1, 2, 3};
       
    83     private static int s_iarray2[] = null;
       
    84 
       
    85     private static int s_marray1[][] = {{1, 2, 3}, {3, 4, 5}, null, {6, 7}};
       
    86     private static int s_marray2[][] = null;
       
    87 
       
    88     private static String s_sarray1[] = {"abc", null, "def", "ghi"};
       
    89     private static String s_sarray2[] = null;
       
    90     private static Object s_sarray3[] = s_sarray1;
       
    91 
       
    92     private static String s_string1 = "abcdef";
       
    93     private static String s_string2 = null;
       
    94     private static String s_string3 = "a\u1234b\u7777";
       
    95 
       
    96     private char i_char;
       
    97     private byte i_byte;
       
    98     private short i_short;
       
    99     private int i_int;
       
   100     private long i_long;
       
   101     private float i_float;
       
   102     private double i_double;
       
   103     private int i_iarray[];
       
   104     private int i_marray[][];
       
   105     private String i_string;
       
   106 
       
   107     public GetLocalVariablesTarg()
       
   108     {
       
   109         int index;
       
   110 
       
   111         i_char = 'B';
       
   112         i_byte = 120;
       
   113         i_short = 12048;
       
   114         i_int = 0x192842;
       
   115         i_long = 123591230941L;
       
   116         i_float = 235.15e5f;
       
   117         i_double = 176e-1d;
       
   118         i_iarray = new int[5];
       
   119         i_marray = new int[7][];
       
   120         i_string = "empty";
       
   121 
       
   122         for (index = 0; index < i_iarray.length; ++index)
       
   123             i_iarray[index] = index + 1;
       
   124 
       
   125         i_marray[0] = new int[2];
       
   126         i_marray[1] = new int[4];
       
   127         i_marray[2] = null;
       
   128         i_marray[3] = new int[1];
       
   129         i_marray[4] = new int[3];
       
   130         i_marray[5] = null;
       
   131         i_marray[6] = new int[7];
       
   132 
       
   133         for (index = 0; index < i_marray.length; ++index)
       
   134             if (i_marray[index] != null)
       
   135                 for (int index2 = 0; index2 < i_marray[index].length; ++index2)
       
   136                     i_marray[index][index2] = index + index2;
       
   137     }
       
   138 
       
   139     public GetLocalVariablesTarg(char p_char, byte p_byte, short p_short,
       
   140                         int p_int, long p_long, float p_float,
       
   141                         double p_double, int p_iarray[], int p_marray[][],
       
   142                         String p_string)
       
   143     {
       
   144         i_char = p_char;
       
   145         i_byte = p_byte;
       
   146         i_short = p_short;
       
   147         i_int = p_int;
       
   148         i_long = p_long;
       
   149         i_float = p_float;
       
   150         i_double = p_double;
       
   151         i_iarray = p_iarray;
       
   152         i_marray = p_marray;
       
   153         i_string = p_string;
       
   154     }
       
   155 
       
   156     public static void test_expressions()
       
   157     {
       
   158         GetLocalVariablesTarg e1 = new GetLocalVariablesTarg();
       
   159         GetLocalVariablesTarg e2 = null;
       
   160         GetLocalVariablesTarg e3 = e1;
       
   161         GetLocalVariablesTarg e4 = new GetLocalVariablesTarg(s_char1, s_byte1, s_short1, s_int1,
       
   162                                            s_long1, s_float1, s_double1,
       
   163                                            s_iarray1, s_marray1, "e4");
       
   164         GetLocalVariablesTarg e5 = new GetLocalVariablesTarg(s_char2, s_byte2, s_short2, s_int2,
       
   165                                            s_long2, s_float2, s_double2,
       
   166                                            s_iarray2, s_marray2, "e5");
       
   167 
       
   168         char l_char = (char) (
       
   169                            s_char1 + s_char2 + s_char3 + s_char4 + s_char5 +
       
   170                           s_char6 + s_char7 + s_char8 + s_char9 + s_char10);
       
   171         byte l_byte = (byte) (
       
   172                            s_byte1 + s_byte2 + s_byte3 + s_byte4 + s_byte5 +
       
   173                           s_byte6 + s_byte7 + s_byte8 + s_byte9 + s_byte10);
       
   174         short l_short = (short) (
       
   175                       s_short1 + s_short2 + s_short3 + s_short4 + s_short5 +
       
   176                      s_short6 + s_short7 + s_short8 + s_short9 + s_short10);
       
   177         int l_int = s_int1 + s_int2 + s_int3 + s_int4 + s_int5 +
       
   178         s_int6 + s_int7 + s_int8 + s_int9 + s_int10;
       
   179         long l_long = s_long1 + s_long2 + s_long3 + s_long4 + s_long5 +
       
   180         s_long6 + s_long7 + s_long8 + s_long9 + s_long10;
       
   181         float l_float = s_float1 + s_float2;
       
   182         double l_double = s_double1 + s_double2;
       
   183         int[] l_iarray = null;
       
   184         int[][] l_marray = null;
       
   185         String l_string = s_string1 + s_string3 + s_sarray1[0];
       
   186 
       
   187         if (s_sarray2 == null)
       
   188             l_string += "?";
       
   189 
       
   190         if (s_sarray3 instanceof String[])
       
   191             l_string += "<io>";
       
   192 
       
   193         Object e6 = new GetLocalVariablesTarg(l_char, l_byte, l_short, l_int,
       
   194                                      l_long, l_float, l_double, l_iarray,
       
   195                                      l_marray, l_string);
       
   196 
       
   197         e1.test_1();            // <-- this is line 197
       
   198         e3.test_1();
       
   199         e4.test_1();
       
   200         e5.test_1();
       
   201         ((GetLocalVariablesTarg) e6).test_1();
       
   202 
       
   203         e3 = null;
       
   204         if (e3 == e1)
       
   205             e3.test_1();
       
   206         e3 = e4;
       
   207         if (e3 == e2)
       
   208             e3 = e5;
       
   209         e3.test_1();
       
   210 
       
   211     }
       
   212 
       
   213     public void test_1()
       
   214     {
       
   215         double l_add = i_double + i_short;
       
   216         long l_subtract = i_long - i_int;
       
   217         long l_multiply = i_byte * i_int;
       
   218 
       
   219         i_double = l_add + i_float;
       
   220         i_short = (short) l_subtract;
       
   221         i_long = l_multiply + i_byte + i_short;
       
   222     }
       
   223 
       
   224     public static void main(String[] args) {
       
   225         System.out.println("Howdy!");
       
   226         test_expressions();
       
   227         System.out.println("Goodbye from GetLocalVariablesTarg!");
       
   228     }
       
   229 }
       
   230 
       
   231  /********** test program **********/
       
   232 
       
   233 public class GetLocalVariables extends TestScaffold {
       
   234     ReferenceType targetClass;
       
   235     ThreadReference mainThread;
       
   236 
       
   237     GetLocalVariables (String args[]) {
       
   238         super(args);
       
   239     }
       
   240 
       
   241     public static void main(String[] args)
       
   242         throws Exception
       
   243     {
       
   244         new GetLocalVariables (args).startTests();
       
   245     }
       
   246 
       
   247     /********** test core **********/
       
   248 
       
   249     protected void runTests()
       
   250         throws Exception
       
   251     {
       
   252         /*
       
   253          * Get to the top of main() to determine targetClass and mainThread
       
   254          */
       
   255         BreakpointEvent bpe = startToMain("GetLocalVariablesTarg");
       
   256         targetClass = bpe.location().declaringType();
       
   257         mainThread = bpe.thread();
       
   258         EventRequestManager erm = vm().eventRequestManager();
       
   259 
       
   260         bpe = resumeTo("GetLocalVariablesTarg", 197);
       
   261         /*
       
   262          * We've arrived.  Look around at some variables.
       
   263          */
       
   264         StackFrame frame = bpe.thread().frame(0);
       
   265         List localVars = frame.visibleVariables();
       
   266         System.out.println("    Visible variables at this point are: ");
       
   267         for (Iterator it = localVars.iterator(); it.hasNext();) {
       
   268             LocalVariable lv = (LocalVariable) it.next();
       
   269             System.out.print(lv.name());
       
   270             System.out.print(" typeName: ");
       
   271             System.out.print(lv.typeName());
       
   272             System.out.print(" signature: ");
       
   273             System.out.print(lv.type().signature());
       
   274             System.out.print(" primitive type: ");
       
   275             System.out.println(lv.type().name());
       
   276         }
       
   277 
       
   278         /*
       
   279          * resume the target listening for events
       
   280          */
       
   281         listenUntilVMDisconnect();
       
   282 
       
   283         /*
       
   284          * deal with results of test if anything has called failure("foo")
       
   285          * testFailed will be true
       
   286          */
       
   287         if (!testFailed) {
       
   288             println("GetLocalVariables: passed");
       
   289         } else {
       
   290             throw new Exception("GetLocalVariables: failed");
       
   291         }
       
   292     }
       
   293 }