blob: 2b0411fd423ef849b3845a40c34f845a3bd00780 [file] [log] [blame]
/*
* Copyright (c) 2001, 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.
*/
package nsk.jdi.TypeComponent.isStatic;
import nsk.share.*;
import nsk.share.jpda.*;
import nsk.share.jdi.*;
import com.sun.jdi.*;
import java.util.*;
import java.io.*;
public class isstatic002 {
final static String IS_STATIC = "true";
final static String NOT_STATIC = "false";
final static int TOTAL_METHODS = 208;
final static String METHOD_NAME[][] = {
{"Mv", NOT_STATIC},
{"Mz", NOT_STATIC},
{"Mz1", NOT_STATIC},
{"Mz2", NOT_STATIC},
{"Mb", NOT_STATIC},
{"Mb1", NOT_STATIC},
{"Mb2", NOT_STATIC},
{"Mc", NOT_STATIC},
{"Mc1", NOT_STATIC},
{"Mc2", NOT_STATIC},
{"Md", NOT_STATIC},
{"Md1", NOT_STATIC},
{"Md2", NOT_STATIC},
{"Mf", NOT_STATIC},
{"Mf1", NOT_STATIC},
{"Mf2", NOT_STATIC},
{"Mi", NOT_STATIC},
{"Mi1", NOT_STATIC},
{"Mi2", NOT_STATIC},
{"Ml", NOT_STATIC},
{"Ml1", NOT_STATIC},
{"Ml2", NOT_STATIC},
{"Mr", NOT_STATIC},
{"Mr1", NOT_STATIC},
{"Mr2", NOT_STATIC},
{"MvS", IS_STATIC},
{"MzS", IS_STATIC},
{"Mz1S", IS_STATIC},
{"Mz2S", IS_STATIC},
{"MbS", IS_STATIC},
{"Mb1S", IS_STATIC},
{"Mb2S", IS_STATIC},
{"McS", IS_STATIC},
{"Mc1S", IS_STATIC},
{"Mc2S", IS_STATIC},
{"MdS", IS_STATIC},
{"Md1S", IS_STATIC},
{"Md2S", IS_STATIC},
{"MfS", IS_STATIC},
{"Mf1S", IS_STATIC},
{"Mf2S", IS_STATIC},
{"MiS", IS_STATIC},
{"Mi1S", IS_STATIC},
{"Mi2S", IS_STATIC},
{"MlS", IS_STATIC},
{"Ml1S", IS_STATIC},
{"Ml2S", IS_STATIC},
{"MrS", IS_STATIC},
{"Mr1S", IS_STATIC},
{"Mr2S", IS_STATIC},
{"MvF", NOT_STATIC},
{"MlF", NOT_STATIC},
{"MlF1", NOT_STATIC},
{"MlF2", NOT_STATIC},
{"MvN", NOT_STATIC},
{"MlN", NOT_STATIC},
{"MlN1", NOT_STATIC},
{"MlN2", NOT_STATIC},
{"MvI", NOT_STATIC},
{"MlI", NOT_STATIC},
{"MlI1", NOT_STATIC},
{"MlI2", NOT_STATIC},
{"MvY", NOT_STATIC},
{"MlY", NOT_STATIC},
{"MlY1", NOT_STATIC},
{"MlY2", NOT_STATIC},
{"MvU", NOT_STATIC},
{"MlU", NOT_STATIC},
{"MlU1", NOT_STATIC},
{"MlU2", NOT_STATIC},
{"MvR", NOT_STATIC},
{"MlR", NOT_STATIC},
{"MlR1", NOT_STATIC},
{"MlR2", NOT_STATIC},
{"MvP", NOT_STATIC},
{"MlP", NOT_STATIC},
{"MlP1", NOT_STATIC},
{"MlP2", NOT_STATIC},
{"MvFS", IS_STATIC},
{"MlFS", IS_STATIC},
{"MlF1S", IS_STATIC},
{"MlF2S", IS_STATIC},
{"MvNS", IS_STATIC},
{"MlNS", IS_STATIC},
{"MlN1S", IS_STATIC},
{"MlN2S", IS_STATIC},
{"MvIS", IS_STATIC},
{"MlIS", IS_STATIC},
{"MlI1S", IS_STATIC},
{"MlI2S", IS_STATIC},
{"MvYS", IS_STATIC},
{"MlYS", IS_STATIC},
{"MlY1S", IS_STATIC},
{"MlY2S", IS_STATIC},
{"MvUS", IS_STATIC},
{"MlUS", IS_STATIC},
{"MlU1S", IS_STATIC},
{"MlU2S", IS_STATIC},
{"MvRS", IS_STATIC},
{"MlRS", IS_STATIC},
{"MlR1S", IS_STATIC},
{"MlR2S", IS_STATIC},
{"MvPS", IS_STATIC},
{"MlPS", IS_STATIC},
{"MlP1S", IS_STATIC},
{"MlP2S", IS_STATIC},
{"MX", NOT_STATIC},
{"MX1", NOT_STATIC},
{"MX2", NOT_STATIC},
{"MO", NOT_STATIC},
{"MO1", NOT_STATIC},
{"MO2", NOT_STATIC},
{"MXS", IS_STATIC},
{"MX1S", IS_STATIC},
{"MX2S", IS_STATIC},
{"MOS", IS_STATIC},
{"MO1S", IS_STATIC},
{"MO2S", IS_STATIC},
{"MLF", NOT_STATIC},
{"MLF1", NOT_STATIC},
{"MLF2", NOT_STATIC},
{"MLN", NOT_STATIC},
{"MLN1", NOT_STATIC},
{"MLN2", NOT_STATIC},
{"MLI", NOT_STATIC},
{"MLI1", NOT_STATIC},
{"MLI2", NOT_STATIC},
{"MLY", NOT_STATIC},
{"MLY1", NOT_STATIC},
{"MLY2", NOT_STATIC},
{"MLU", NOT_STATIC},
{"MLU1", NOT_STATIC},
{"MLU2", NOT_STATIC},
{"MLR", NOT_STATIC},
{"MLR1", NOT_STATIC},
{"MLR2", NOT_STATIC},
{"MLP", NOT_STATIC},
{"MLP1", NOT_STATIC},
{"MLP2", NOT_STATIC},
{"MLFS", IS_STATIC},
{"MLF1S", IS_STATIC},
{"MLF2S", IS_STATIC},
{"MLNS", IS_STATIC},
{"MLN1S", IS_STATIC},
{"MLN2S", IS_STATIC},
{"MLIS", IS_STATIC},
{"MLI1S", IS_STATIC},
{"MLI2S", IS_STATIC},
{"MLYS", IS_STATIC},
{"MLY1S", IS_STATIC},
{"MLY2S", IS_STATIC},
{"MLUS", IS_STATIC},
{"MLU1S", IS_STATIC},
{"MLU2S", IS_STATIC},
{"MLRS", IS_STATIC},
{"MLR1S", IS_STATIC},
{"MLR2S", IS_STATIC},
{"MLPS", IS_STATIC},
{"MLP1S", IS_STATIC},
{"MLP2S", IS_STATIC},
{"ME", NOT_STATIC},
{"ME1", NOT_STATIC},
{"ME2", NOT_STATIC},
{"MES", IS_STATIC},
{"ME1S", IS_STATIC},
{"ME2S", IS_STATIC},
{"MEF", NOT_STATIC},
{"MEF1", NOT_STATIC},
{"MEF2", NOT_STATIC},
{"MEN", NOT_STATIC},
{"MEN1", NOT_STATIC},
{"MEN2", NOT_STATIC},
{"MEI", NOT_STATIC},
{"MEI1", NOT_STATIC},
{"MEI2", NOT_STATIC},
{"MEY", NOT_STATIC},
{"MEY1", NOT_STATIC},
{"MEY2", NOT_STATIC},
{"MEU", NOT_STATIC},
{"MEU1", NOT_STATIC},
{"MEU2", NOT_STATIC},
{"MER", NOT_STATIC},
{"MER1", NOT_STATIC},
{"MER2", NOT_STATIC},
{"MEP", NOT_STATIC},
{"MEP1", NOT_STATIC},
{"MEP2", NOT_STATIC},
{"MEFS", IS_STATIC},
{"MEF1S", IS_STATIC},
{"MEF2S", IS_STATIC},
{"MENS", IS_STATIC},
{"MEN1S", IS_STATIC},
{"MEN2S", IS_STATIC},
{"MEIS", IS_STATIC},
{"MEI1S", IS_STATIC},
{"MEI2S", IS_STATIC},
{"MEYS", IS_STATIC},
{"MEY1S", IS_STATIC},
{"MEY2S", IS_STATIC},
{"MEUS", IS_STATIC},
{"MEU1S", IS_STATIC},
{"MEU2S", IS_STATIC},
{"MERS", IS_STATIC},
{"MER1S", IS_STATIC},
{"MER2S", IS_STATIC},
{"MEPS", IS_STATIC},
{"MEP1S", IS_STATIC},
{"MEP2S", IS_STATIC},
};
private static Log log;
private final static String prefix = "nsk.jdi.TypeComponent.isStatic.";
private final static String className = "isstatic002";
private final static String debugerName = prefix + className;
private final static String debugeeName = debugerName + "a";
private final static String classToCheckName = prefix + "isstatic002aClassToCheck";
public static void main(String argv[]) {
System.exit(95 + run(argv, System.out));
}
public static int run(String argv[], PrintStream out) {
ArgumentHandler argHandler = new ArgumentHandler(argv);
log = new Log(out, argHandler);
Binder binder = new Binder(argHandler, log);
Debugee debugee = binder.bindToDebugee(debugeeName
+ (argHandler.verbose() ? " -verbose" : ""));
IOPipe pipe = new IOPipe(debugee);
boolean testFailed = false;
// Connect with debugee and resume it
debugee.redirectStderr(out);
debugee.resume();
String line = pipe.readln();
if (line == null) {
log.complain("debuger FAILURE> UNEXPECTED debugee's signal - null");
return 2;
}
if (!line.equals("ready")) {
log.complain("debuger FAILURE> UNEXPECTED debugee's signal - "
+ line);
return 2;
}
else {
log.display("debuger> debugee's \"ready\" signal recieved.");
}
ReferenceType refType = debugee.classByName(classToCheckName);
if (refType == null) {
log.complain("debuger FAILURE> Class " + classToCheckName
+ " not found.");
return 2;
}
// Check all methods from debugee
for (int i = 0; i < METHOD_NAME.length; i++) {
Method method;
List listOfMethods;
int totalMethodsByName;
String name;
boolean isStatic;
String realIsStatic;
try {
listOfMethods = refType.methodsByName(METHOD_NAME[i][0]);
} catch (Exception e) {
log.complain("debuger FAILURE 1> Can't get method by name "
+ METHOD_NAME[i][0]);
log.complain("debuger FAILURE 1> Exception: " + e);
testFailed = true;
continue;
}
totalMethodsByName = listOfMethods.size();
if (totalMethodsByName != 1) {
log.complain("debuger FAILURE 2> Number of methods by name "
+ METHOD_NAME[i][0] + " is " + totalMethodsByName
+ ", should be 1.");
testFailed = true;
continue;
}
method = (Method)listOfMethods.get(0);
name = method.name();
isStatic = method.isStatic();
realIsStatic = METHOD_NAME[i][1];
log.display("debuger> " + i + " method (" + name + "), "
+ "isStatic = " + isStatic + " read.");
// isStatic() returns true if this type component is declared
// final, returns false otherwise
if ((isStatic && !realIsStatic.equals(IS_STATIC)) ||
(!isStatic && realIsStatic.equals(IS_STATIC))
) {
log.display("debuger FAILURE 3> " + i + " method " + name
+ ": read method.isStatic() = " + isStatic
+ "; real isStatic should be " + realIsStatic);
testFailed = true;
}
}
pipe.println("quit");
debugee.waitFor();
int status = debugee.getStatus();
if (testFailed) {
log.complain("debuger FAILURE> TEST FAILED");
return 2;
} else {
if (status == 95) {
log.display("debuger> expected Debugee's exit "
+ "status - " + status);
return 0;
} else {
log.complain("debuger FAILURE> UNEXPECTED Debugee's exit "
+ "status (not 95) - " + status);
return 2;
}
}
}
}