0N/A/** hard coded linenumbers in other tests - DO NOT CHANGE
0N/A * @test/nodynamiccopyright/
0N/A * @bug 4490824
0N/A * @summary JDI: provide arguments when no debug attributes present
0N/A *
0N/A * @author jjh
0N/A *
0N/A * @run build TestScaffold VMConnection TargetListener TargetAdapter
0N/A * @run compile ArgumentValuesTest.java
0N/A * @run main ArgumentValuesTest
0N/A */
0N/Aimport com.sun.jdi.*;
0N/Aimport com.sun.jdi.event.*;
0N/Aimport com.sun.jdi.request.*;
0N/A
0N/Aimport java.util.*;
0N/A
0N/A /********** target program **********/
0N/A
0N/Aclass ArgumentValuesTarg {
0N/A static char s_char1 = 'a';
0N/A static byte s_byte1 = (byte) 146;
0N/A static short s_short1 = (short) 28123;
0N/A static int s_int1 = 3101246;
0N/A static long s_long1 = 0x0123456789ABCDEFL;
0N/A static float s_float1 = 2.3145f;
0N/A static double s_double1 = 1.469d;
0N/A static int s_iarray1[] = {1, 2, 3};
0N/A static int s_marray1[][] = {{1, 2, 3}, {3, 4, 5}, null, {6, 7}};
0N/A static String s_sarray1[] = {"abc", null, "def", "ghi"};
0N/A static String s_string1 = "abcdef";
0N/A
0N/A static String s_string2 = "xy";
0N/A static String s_string3 = "wz";
0N/A static List<Integer> intList;
0N/A
0N/A public static void noArgs() {
0N/A int index = 0; // line 38
0N/A }
0N/A
0N/A public static void allArgs(char p_char, byte p_byte, short p_short,
0N/A int p_int, long p_long, float p_float,
0N/A double p_double, int p_iarray[], int p_marray[][],
0N/A String p_sarray1[], String p_string) {
0N/A int index = 0; // line 45
0N/A }
0N/A
0N/A public static void varArgs(String ... p1) {
0N/A int index = 0; // line 49
0N/A }
0N/A
0N/A public static void genericArgs(List<Integer> p1) {
0N/A int index = 0; // line 53
0N/A }
0N/A
0N/A public void instanceMethod(char p_char, byte p_byte) {
0N/A int index = 0; // line 57
0N/A }
0N/A
0N/A public static void main(String[] args) {
0N/A System.out.println("Howdy!");
0N/A allArgs(
0N/A s_char1, s_byte1, s_short1, s_int1,
0N/A s_long1, s_float1, s_double1, s_iarray1,
0N/A s_marray1, s_sarray1, s_string1);
0N/A
0N/A noArgs();
0N/A varArgs(s_string1, s_string2, s_string3);
0N/A ArgumentValuesTarg avt = new ArgumentValuesTarg();
0N/A intList = new ArrayList<Integer>(10);
0N/A intList.add(10);
0N/A intList.add(20);
0N/A genericArgs(intList);
0N/A
0N/A avt.instanceMethod(s_char1, s_byte1);
0N/A
0N/A System.out.println("Goodbye from ArgumentValuesTarg!");
0N/A }
0N/A}
0N/A
0N/A /********** test program **********/
0N/A
0N/Apublic class ArgumentValuesTest extends TestScaffold {
0N/A // Must be in same order as args to allArgs(....)
0N/A String fieldNames[] = {"s_char1", "s_byte1", "s_short1", "s_int1",
0N/A "s_long1", "s_float1", "s_double1", "s_iarray1",
0N/A "s_marray1", "s_sarray1", "s_string1"};
0N/A
0N/A String fieldNamesVarArgs[] = {"s_string1", "s_string2", "s_string3"};
0N/A String fieldNamesInstance[] = {"s_char1", "s_byte1"};
0N/A
0N/A ReferenceType targetClass;
0N/A ThreadReference mainThread;
0N/A
0N/A ArgumentValuesTest (String args[]) {
0N/A super(args);
0N/A }
0N/A
0N/A public static void main(String[] args)
0N/A throws Exception
0N/A {
0N/A new ArgumentValuesTest (args).startTests();
0N/A }
0N/A
0N/A /********** test core **********/
0N/A
0N/A protected void runTests()
0N/A throws Exception
0N/A {
0N/A /*
0N/A * Get to the top of main() to determine targetClass and mainThread
0N/A */
0N/A BreakpointEvent bpe = startToMain("ArgumentValuesTarg");
0N/A targetClass = bpe.location().declaringType();
0N/A mainThread = bpe.thread();
0N/A EventRequestManager erm = vm().eventRequestManager();
0N/A
0N/A
0N/A {
0N/A System.out.println("----- Testing each type of arg");
0N/A bpe = resumeTo("ArgumentValuesTarg", 45);
0N/A StackFrame frame = bpe.thread().frame(0);
0N/A
0N/A Method mmm = frame.location().method();
0N/A System.out.println("Arg types are: " + mmm.argumentTypeNames());
0N/A
0N/A List<Value> argVals = frame.getArgumentValues();
0N/A
0N/A if (argVals.size() != fieldNames.length) {
0N/A failure("failure: Varargs: expected length " + fieldNames.length +
0N/A " args, got: " + argVals);
0N/A }
0N/A for (int ii = 0; ii < argVals.size(); ii++) {
0N/A Value gotVal = argVals.get(ii);
0N/A
0N/A Field theField = targetClass.fieldByName(fieldNames[ii]);
0N/A Value expectedVal = targetClass.getValue(theField);
0N/A System.out.println(fieldNames[ii] + ": gotVal = " + gotVal +
0N/A ", expected = " + expectedVal);
0N/A //System.out.println(gotVal.getClass() + ", " + expectedVal.getClass());
0N/A if (!gotVal.equals(expectedVal)) {
0N/A failure(" failure: gotVal != expected");
0N/A }
0N/A }
0N/A }
0N/A
0N/A // a method with no params
0N/A {
0N/A System.out.println("----- Testing no args");
0N/A bpe = resumeTo("ArgumentValuesTarg", 38);
0N/A StackFrame frame = bpe.thread().frame(0);
0N/A
0N/A Method mmm = frame.location().method();
0N/A System.out.println("Arg types are: " + mmm.argumentTypeNames());
0N/A
0N/A List<Value> argVals = frame.getArgumentValues();
0N/A if (argVals.size() == 0) {
0N/A System.out.println("Empty arg list ok");
0N/A } else {
0N/A failure("failure: Expected empty val list, got: " + argVals);
0N/A }
0N/A }
0N/A
0N/A // var args. 3 Strings are passed in and they appear
0N/A // as a String[3] in the method.
0N/A {
0N/A System.out.println("----- Testing var args");
0N/A bpe = resumeTo("ArgumentValuesTarg", 49);
0N/A StackFrame frame = bpe.thread().frame(0);
0N/A
0N/A Method mmm = frame.location().method();
0N/A System.out.println("Arg types are: " + mmm.argumentTypeNames());
0N/A
0N/A List<Value> argVals = frame.getArgumentValues();
0N/A if (argVals.size() != 1) {
0N/A failure("failure: Varargs: expected one arg, got: " + argVals);
0N/A }
0N/A argVals = ((ArrayReference)argVals.get(0)).getValues();
0N/A
0N/A if (argVals.size() != fieldNamesVarArgs.length) {
0N/A failure("failure: Varargs: expected length " + fieldNamesVarArgs.length +
0N/A " array elements, got: " + argVals);
0N/A }
0N/A
0N/A for (int ii = 0; ii < argVals.size(); ii++) {
0N/A Value gotVal = argVals.get(ii);
0N/A
0N/A Field theField = targetClass.fieldByName(fieldNamesVarArgs[ii]);
0N/A Value expectedVal = targetClass.getValue(theField);
0N/A System.out.println(fieldNamesVarArgs[ii] + ": gotVal = " + gotVal +
0N/A ", expected = " + expectedVal);
0N/A //System.out.println(gotVal.getClass() + ", " + expectedVal.getClass());
0N/A if (!gotVal.equals(expectedVal)) {
0N/A failure(" failure: gotVal != expected");
0N/A }
0N/A }
0N/A }
0N/A
0N/A // a method with with one generic param
0N/A {
0N/A System.out.println("----- Testing generic args");
0N/A bpe = resumeTo("ArgumentValuesTarg", 53);
0N/A StackFrame frame = bpe.thread().frame(0);
0N/A
0N/A Method mmm = frame.location().method();
0N/A System.out.println("Arg types are: " + mmm.argumentTypeNames());
0N/A
0N/A List<Value> argVals = frame.getArgumentValues();
0N/A if (argVals.size() != 1) {
0N/A failure("failure: Expected one arg, got: " + argVals);
0N/A } else {
0N/A Value gotVal = argVals.get(0);
0N/A
0N/A Field theField = targetClass.fieldByName("intList");
0N/A Value expectedVal = targetClass.getValue(theField);
0N/A System.out.println("intList " + ": gotVal = " + gotVal +
0N/A ", expected = " + expectedVal);
0N/A if (!gotVal.equals(expectedVal)) {
0N/A failure("failure: gotVal != expected");
0N/A }
0N/A }
0N/A }
0N/A
0N/A // test instance method call
0N/A {
0N/A System.out.println("----- Testing instance method call");
0N/A bpe = resumeTo("ArgumentValuesTarg", 57);
0N/A StackFrame frame = bpe.thread().frame(0);
0N/A
0N/A Method mmm = frame.location().method();
0N/A System.out.println("Arg types are: " + mmm.argumentTypeNames());
0N/A
0N/A List<Value> argVals = frame.getArgumentValues();
0N/A
0N/A if (argVals.size() != fieldNamesInstance.length) {
0N/A failure("failure: Varargs: expected length " + fieldNamesInstance.length +
0N/A " args, got: " + argVals);
0N/A }
0N/A for (int ii = 0; ii < argVals.size(); ii++) {
0N/A Value gotVal = argVals.get(ii);
0N/A
0N/A Field theField = targetClass.fieldByName(fieldNamesInstance[ii]);
0N/A Value expectedVal = targetClass.getValue(theField);
0N/A System.out.println(fieldNamesInstance[ii] + ": gotVal = " + gotVal +
0N/A ", expected = " + expectedVal);
0N/A //System.out.println(gotVal.getClass() + ", " + expectedVal.getClass());
0N/A if (!gotVal.equals(expectedVal)) {
0N/A failure(" failure: gotVal != expected");
0N/A }
0N/A }
0N/A }
0N/A
0N/A
0N/A /*
0N/A * resume the target listening for events
0N/A */
0N/A listenUntilVMDisconnect();
0N/A
0N/A /*
0N/A * deal with results of test if anything has called failure("foo")
0N/A * testFailed will be true
0N/A */
0N/A if (!testFailed) {
0N/A println("ArgumentValuesTest: passed");
0N/A } else {
0N/A throw new Exception("ArgumentValuesTest: failed");
0N/A }
0N/A }
0N/A}
0N/A