2486e0815b
Update remaining tests using JDIScaffold to using TestScaffold instead. Reviewed-by: sspitsyn, cjplummer
200 lines
6.2 KiB
Java
200 lines
6.2 KiB
Java
/*
|
|
* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
/**
|
|
* @test
|
|
* @summary Test Method.variables() and the like.
|
|
* @author Robert Field
|
|
*
|
|
* @run build TestScaffold VMConnection
|
|
* @run compile -g Vars.java
|
|
* @run driver Vars
|
|
*/
|
|
|
|
import com.sun.jdi.*;
|
|
import com.sun.jdi.event.*;
|
|
import java.util.*;
|
|
|
|
/*
|
|
* This class is internal
|
|
*/
|
|
abstract class AbstractTestVars {
|
|
abstract float test1(String blah, int i);
|
|
native int test2(double k, boolean b);
|
|
String test3(short sh, long lo) {
|
|
String st = "roses";
|
|
return st;
|
|
}
|
|
}
|
|
|
|
/*
|
|
* This class is internal
|
|
*/
|
|
class TestVars extends AbstractTestVars {
|
|
float test1(String blah, int i) {
|
|
return (float)1.1;
|
|
}
|
|
|
|
void hi() {
|
|
return;
|
|
}
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
new TestVars().hi();
|
|
return;
|
|
}
|
|
}
|
|
|
|
/*
|
|
* "Vars" test runs TestVars and makes LocalVariable queries
|
|
*/
|
|
public class Vars extends TestScaffold {
|
|
|
|
boolean failed = false;
|
|
|
|
Vars(String args[]) {
|
|
super(args);
|
|
}
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
new Vars(args).runTests();
|
|
}
|
|
|
|
static final int VARIABLES = 1;
|
|
static final int BYNAME = 2;
|
|
static final int ARGUMENTS = 3;
|
|
|
|
String testCase(Method method, int which) {
|
|
try {
|
|
List vars;
|
|
switch (which) {
|
|
case VARIABLES:
|
|
vars = method.variables();
|
|
break;
|
|
case BYNAME:
|
|
vars = method.variablesByName("st");
|
|
break;
|
|
case ARGUMENTS:
|
|
vars = method.arguments();
|
|
break;
|
|
default:
|
|
throw new InternalException("should not happen");
|
|
}
|
|
StringBuffer sb = new StringBuffer();
|
|
for (Iterator it = vars.iterator(); it.hasNext(); ) {
|
|
LocalVariable lv = (LocalVariable)it.next();
|
|
if (sb.length() > 0) {
|
|
sb.append(",");
|
|
}
|
|
sb.append(lv.name());
|
|
}
|
|
return sb.toString();
|
|
} catch (Exception exc) {
|
|
String st = exc.getClass().getName();
|
|
int inx = st.lastIndexOf('.');
|
|
return st.substring(inx+1);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets failed if fails.
|
|
*/
|
|
void test(Method method, int which, String name, String expected) {
|
|
String got = testCase(method, which);
|
|
if (got.equals(expected)) {
|
|
System.out.println(name + ": got expected: " + got);
|
|
} else {
|
|
failed = true;
|
|
System.out.println(name + ": ERROR expected: " + expected);
|
|
System.out.println(" got: " + got);
|
|
}
|
|
}
|
|
|
|
void test2(Method method, int which, String name, String expected, String expected2) {
|
|
String got = testCase(method, which);
|
|
if (got.equals(expected) || got.equals(expected2)) {
|
|
System.out.println(name + ": got expected: " + got);
|
|
} else {
|
|
failed = true;
|
|
System.out.println(name + ": ERROR expected: " + expected);
|
|
System.out.println(" got: " + got);
|
|
}
|
|
}
|
|
|
|
protected void runTests() throws Exception {
|
|
/*
|
|
* Get to a point where the classes are loaded.
|
|
*/
|
|
BreakpointEvent bp = startTo("TestVars", "hi", "()V");
|
|
|
|
/*
|
|
* These classes should have no line numbers, except for
|
|
* one in the implicit constructor.
|
|
*/
|
|
ReferenceType rt = findReferenceType("AbstractTestVars");
|
|
if (rt == null) {
|
|
throw new Exception("AbstractTestVars: not loaded");
|
|
}
|
|
Method method = findMethod(rt, "test1", "(Ljava/lang/String;I)F");
|
|
if (method == null) {
|
|
throw new Exception("Method not found");
|
|
}
|
|
test(method, VARIABLES, "abstract/variables",
|
|
"AbsentInformationException");
|
|
test(method, BYNAME, "abstract/variablesByName",
|
|
"AbsentInformationException");
|
|
test(method, ARGUMENTS, "abstract/arguments",
|
|
"AbsentInformationException");
|
|
|
|
method = findMethod(rt, "test2", "(DZ)I");
|
|
if (method == null) {
|
|
throw new Exception("Method not found");
|
|
}
|
|
test(method, VARIABLES, "native/variables",
|
|
"AbsentInformationException");
|
|
test(method, BYNAME, "native/variablesByName",
|
|
"AbsentInformationException");
|
|
test(method, ARGUMENTS, "native/arguments",
|
|
"AbsentInformationException");
|
|
|
|
method = findMethod(rt, "test3", "(SJ)Ljava/lang/String;");
|
|
if (method == null) {
|
|
throw new Exception("Method not found");
|
|
}
|
|
// javac can put these in whatever order it desires. hopper
|
|
// does it one way and mantis another.
|
|
test2(method, VARIABLES, "normal/variables", "sh,lo,st", "st,sh,lo");
|
|
test(method, BYNAME, "normal/variablesByName", "st");
|
|
test(method, ARGUMENTS, "normal/arguments", "sh,lo");
|
|
|
|
// Allow application to complete
|
|
resumeToVMDisconnect();
|
|
|
|
if (failed) {
|
|
throw new Exception("Vars: failed");
|
|
} else {
|
|
System.out.println("Vars: passed");
|
|
}
|
|
}
|
|
}
|