Path: blob/master/test/hotspot/jtreg/vmTestbase/nsk/jdi/Field/equals/equals003.java
41161 views
/*1* Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/222324package nsk.jdi.Field.equals;2526import nsk.share.*;27import nsk.share.jpda.*;28import nsk.share.jdi.*;2930import com.sun.jdi.*;31import java.util.*;32import java.io.*;3334public class equals003 {35private static Log log;36private final static String prefix = "nsk.jdi.Field.equals.";37private final static String className = "equals003";38private final static String debugerName = prefix + className;39private final static String debugeeName = debugerName + "a";40private final static String mainClassName = prefix + "MainClass";41private final static String sameClass1Name = prefix + "SameClass1";42private final static String sameClass2Name = prefix + "SameClass2";43private final static String overridenClassName = prefix + "OverridenClass";4445public static void main(String argv[]) {46System.exit(95 + run(argv, System.out));47}4849public static int run(String argv[], PrintStream out) {50ArgumentHandler argHandler = new ArgumentHandler(argv);51log = new Log(out, argHandler);52Binder binder = new Binder(argHandler, log);53Debugee debugee = binder.bindToDebugee(debugeeName54+ (argHandler.verbose() ? " -verbose" : ""));55IOPipe pipe = new IOPipe(debugee);56boolean testFailed = false;57List mainFields;58Field mainField;59Field same1Field;60Field same2Field;61Field overridenField;6263// Connect with debugee and resume it64debugee.redirectStderr(out);65debugee.resume();66String line = pipe.readln();67if (line == null) {68log.complain("debuger FAILURE> UNEXPECTED debugee's signal - null");69return 2;70}71if (!line.equals("ready")) {72log.complain("debuger FAILURE> UNEXPECTED debugee's signal - "73+ line);74return 2;75}76else {77log.display("debuger> debugee's \"ready\" signal recieved.");78}7980// Get all fields from all classes81ReferenceType mainClassRefType = debugee.classByName(mainClassName);82if (mainClassRefType == null) {83log.complain("debuger FAILURE> Class " + mainClassName + " not "84+ "found.");85return 2;86}87ReferenceType sameClass1RefType = debugee.classByName(sameClass1Name);88if (sameClass1RefType == null) {89log.complain("debuger FAILURE> Class " + sameClass1Name + " not "90+ "found.");91return 2;92}93ReferenceType sameClass2RefType = debugee.classByName(sameClass2Name);94if (sameClass2RefType == null) {95log.complain("debuger FAILURE> Class " + sameClass2Name + " not "96+ "found.");97return 2;98}99ReferenceType overridenClassRefType =100debugee.classByName(overridenClassName);101if (overridenClassRefType == null) {102log.complain("debuger FAILURE> Class " + overridenClassName103+ " not found.");104return 2;105}106107try {108mainFields = mainClassRefType.allFields();109} catch (Exception e) {110log.complain("debuger FAILURE> Can't get fields from class "111+ mainClassName);112log.complain("debuger FAILURE> Exception: " + e);113return 2;114}115int totalFields = mainFields.size();116if (totalFields < 1) {117log.complain("debuger FAILURE> Total number of fields in class "118+ mainClassName + " read: " + totalFields);119return 2;120}121log.display("debuger> Total number of fields in class "122+ mainClassName + " read: " + totalFields);123Iterator fieldsIterator = mainFields.iterator();124125// Check each field of MainClass with fields from classes126// SameClass1, SameClass2, OverridenClass127for (int i = 0; fieldsIterator.hasNext(); i++) {128mainField = (Field)fieldsIterator.next();129String name = mainField.name();130131if (name == null) {132log.complain("debuger FAILURE 1> Name is null for " + i133+ " field");134testFailed = true;135continue;136}137log.display("debuger> " + i + " field " + name + " from class "138+ mainClassName + " read.");139140// Compare fields from classes MainClass and SameClass1141log.display("debuger> Compare classes " + mainClassName + " and "142+ sameClass1Name);143try {144same1Field = sameClass1RefType.fieldByName(name);145} catch (Exception e) {146log.complain("debuger FAILURE 2> Can't get field by name "147+ name + " in class " + sameClass1Name);148log.complain("debuger FAILURE 2> Exception: " + e);149testFailed = true;150continue;151}152log.display("debuger> Field " + name + " from class "153+ sameClass1Name + " read.");154// Fields in different classes but defined in same class are equal155if (! mainField.equals(same1Field)) {156log.complain("debuger FAILURE 3> Fields " + name + " from "157+ "classes " + mainClassName + " and "158+ sameClass1Name + " are not equal. Expected "159+ "result: equal.");160testFailed = true;161continue;162}163164// Compare fields from classes MainClass and OverridenClass165log.display("debuger> Compare classes " + mainClassName166+ " and " + overridenClassName);167try {168overridenField = overridenClassRefType.fieldByName(name);169} catch (Exception e) {170log.complain("debuger FAILURE 4> Can't get field by name "171+ name + " in class " + overridenClassName);172log.complain("debuger FAILURE 4> Exception: " + e);173testFailed = true;174continue;175}176log.display("debuger> Field " + name + " from class "177+ overridenClassName + " read.");178// Fields in different classes are not equal179if (mainField.equals(overridenField)) {180log.complain("debuger FAILURE 5> Fields " + name181+ " from classes " + mainClassName + " and "182+ overridenClassName + " are equal. Expected "183+ "result: not equal.");184testFailed = true;185continue;186}187188// Compare fields from classes SameClass1 and SameClass2189log.display("debuger> Compare classes " + sameClass1Name190+ " and " + sameClass2Name);191try {192same2Field = sameClass2RefType.fieldByName(name);193} catch (Exception e) {194log.complain("debuger FAILURE 6> Can't get field by name "195+ name + " in class " + sameClass2Name);196log.complain("debuger FAILURE 6> Exception: " + e);197testFailed = true;198continue;199}200log.display("debuger> Field " + name + " from class "201+ sameClass2Name + " read.");202// Fields in different classes but defined in same class are equal203if (!same1Field.equals(same2Field)) {204log.complain("debuger FAILURE 7> Fields " + name205+ " from classes " + sameClass1Name + " and "206+ sameClass2Name + " are not equal. Expected "207+ "result: equal.");208testFailed = true;209continue;210}211}212pipe.println("quit");213debugee.waitFor();214int status = debugee.getStatus();215if (testFailed) {216log.complain("debuger FAILURE> TEST FAILED");217return 2;218} else {219if (status == 95) {220log.display("debuger> expected Debugee's exit "221+ "status - " + status);222return 0;223} else {224log.complain("debuger FAILURE> UNEXPECTED Debugee's exit "225+ "status (not 95) - " + status);226return 2;227}228}229}230}231232233