< prev index next >
test/hotspot/jtreg/runtime/Nestmates/membership/TestNestmateMembership.java
Print this page
*** 22,93 ****
*/
/*
* @test
* @bug 8046171
! * @summary Test the various rules for nest members and nest-tops
* @compile TestNestmateMembership.java
! * PackagedNestTop.java
! * PackagedNestTop2.java
* NotAMember2.java
! * @compile MissingNestTop.jcod
! * ArrayNestTop.jcod
* NotAMember.jcod
* NotAMember2.jcod
! * PackagedNestTop.jcod
! * PackagedNestTop2Member.jcod
* @run main/othervm TestNestmateMembership
*/
! // We test all the "illegal" relationships between a nest member and its nest-top
// except for the case where the name of the nest-member matches the name listed
! // in the nest-top, but resolves to a different class. There doesn't seem to
// be a way to construct that scenario.
// For each nested class below there is a corresponding .jcod file which breaks one
// of the rules regarding nest membership. For the package related tests we have
! // additional PackageNestTop*.java sources. We also have NotAMember2.java.
// Note that all the .java files must be compiled in the same step, while all
// .jcod files must be compiled in a later step.
public class TestNestmateMembership {
! // jcod modified to have non-existent nest-top
! static class MissingNestTop {
private static void m() {
! System.out.println("MissingNestTop.m() - java version");
}
}
! // jcod modified to have non-instance class Object[] as nest-top
! static class ArrayNestTop {
Object[] oa; // create CP entry
private static void m() {
! System.out.println("ArrayTop.m() - java version");
}
}
! // jcod modified to have Object as nest-top, which has no nest-members
static class NotAMember {
private static void m() {
System.out.println("NotAMember.m() - java version");
}
}
public static void main(String[] args) throws Throwable {
! test_MissingNestTop();
! test_ArrayNestTop();
test_WrongPackageForNestMember();
test_NotAMember();
test_NotAMember2();
}
static void test_WrongPackageForNestMember() {
! System.out.println("Testing for nest-top and nest-member in different packages");
! String msg = "Class P2.PackagedNestTop2$Member is in a different" +
! " package to its nest top class P1.PackagedNestTop";
try {
! P1.PackagedNestTop.doAccess();
throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
catch (IncompatibleClassChangeError expected) {
if (!expected.getMessage().contains(msg))
throw new Error("Wrong IncompatibleClassChangeError: \"" +
--- 22,93 ----
*/
/*
* @test
* @bug 8046171
! * @summary Test the various rules for nest members and nest-hosts
* @compile TestNestmateMembership.java
! * PackagedNestHost.java
! * PackagedNestHost2.java
* NotAMember2.java
! * @compile MissingNestHost.jcod
! * ArrayNestHost.jcod
* NotAMember.jcod
* NotAMember2.jcod
! * PackagedNestHost.jcod
! * PackagedNestHost2Member.jcod
* @run main/othervm TestNestmateMembership
*/
! // We test all the "illegal" relationships between a nest member and its nest-host
// except for the case where the name of the nest-member matches the name listed
! // in the nest-host, but resolves to a different class. There doesn't seem to
// be a way to construct that scenario.
// For each nested class below there is a corresponding .jcod file which breaks one
// of the rules regarding nest membership. For the package related tests we have
! // additional PackageNestHost*.java sources. We also have NotAMember2.java.
// Note that all the .java files must be compiled in the same step, while all
// .jcod files must be compiled in a later step.
public class TestNestmateMembership {
! // jcod modified to have non-existent nest-host
! static class MissingNestHost {
private static void m() {
! System.out.println("MissingNestHost.m() - java version");
}
}
! // jcod modified to have non-instance class Object[] as nest-host
! static class ArrayNestHost {
Object[] oa; // create CP entry
private static void m() {
! System.out.println("ArrayNestHost.m() - java version");
}
}
! // jcod modified to have Object as nest-host, which has no nest-members
static class NotAMember {
private static void m() {
System.out.println("NotAMember.m() - java version");
}
}
public static void main(String[] args) throws Throwable {
! test_MissingNestHost();
! test_ArrayNestHost();
test_WrongPackageForNestMember();
test_NotAMember();
test_NotAMember2();
}
static void test_WrongPackageForNestMember() {
! System.out.println("Testing for nest-host and nest-member in different packages");
! String msg = "Class P2.PackagedNestHost2$Member is in a different" +
! " package to its nest-host class P1.PackagedNestHost";
try {
! P1.PackagedNestHost.doAccess();
throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
catch (IncompatibleClassChangeError expected) {
if (!expected.getMessage().contains(msg))
throw new Error("Wrong IncompatibleClassChangeError: \"" +
*** 95,109 ****
msg + "\"");
System.out.println("OK - got expected exception: " + expected);
}
}
! static void test_MissingNestTop() throws Throwable {
! System.out.println("Testing for nest-top class that does not exist");
String msg = "NoSuchClass";
try {
! MissingNestTop.m();
throw new Error("Missing NoClassDefFoundError: " + msg);
}
catch (NoClassDefFoundError expected) {
if (!expected.getMessage().contains(msg))
throw new Error("Wrong NoClassDefFoundError: \"" +
--- 95,109 ----
msg + "\"");
System.out.println("OK - got expected exception: " + expected);
}
}
! static void test_MissingNestHost() throws Throwable {
! System.out.println("Testing for nest-host class that does not exist");
String msg = "NoSuchClass";
try {
! MissingNestHost.m();
throw new Error("Missing NoClassDefFoundError: " + msg);
}
catch (NoClassDefFoundError expected) {
if (!expected.getMessage().contains(msg))
throw new Error("Wrong NoClassDefFoundError: \"" +
*** 111,125 ****
msg + "\"");
System.out.println("OK - got expected exception: " + expected);
}
}
! static void test_ArrayNestTop() throws Throwable {
! System.out.println("Testing for nest-top class that is not an instance class");
! String msg = "ArrayNestTop has non-instance class [Ljava.lang.Object; as nest-top";
try {
! ArrayNestTop.m();
throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
catch (IncompatibleClassChangeError expected) {
if (!expected.getMessage().contains(msg))
throw new Error("Wrong IncompatibleClassChangeError: \"" +
--- 111,125 ----
msg + "\"");
System.out.println("OK - got expected exception: " + expected);
}
}
! static void test_ArrayNestHost() throws Throwable {
! System.out.println("Testing for nest-host class that is not an instance class");
! String msg = "ArrayNestHost has non-instance class [Ljava.lang.Object; as nest-host";
try {
! ArrayNestHost.m();
throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
catch (IncompatibleClassChangeError expected) {
if (!expected.getMessage().contains(msg))
throw new Error("Wrong IncompatibleClassChangeError: \"" +
*** 128,138 ****
System.out.println("OK - got expected exception: " + expected);
}
}
static void test_NotAMember() throws Throwable {
! System.out.println("Testing for nest-top class that has no nest");
String msg = "NotAMember is not a nest member of java.lang.Object";
try {
NotAMember.m();
throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
--- 128,138 ----
System.out.println("OK - got expected exception: " + expected);
}
}
static void test_NotAMember() throws Throwable {
! System.out.println("Testing for nest-host class that has no nest");
String msg = "NotAMember is not a nest member of java.lang.Object";
try {
NotAMember.m();
throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
*** 144,154 ****
System.out.println("OK - got expected exception: " + expected);
}
}
static void test_NotAMember2() throws Throwable {
! System.out.println("Testing for nest-top class that doesn't list this class as a member");
String msg = "NotAMember2$Member is not a nest member of TestNestmateMembership";
try {
NotAMember2.Member.m();
throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
--- 144,154 ----
System.out.println("OK - got expected exception: " + expected);
}
}
static void test_NotAMember2() throws Throwable {
! System.out.println("Testing for nest-host class that doesn't list this class as a member");
String msg = "NotAMember2$Member is not a nest member of TestNestmateMembership";
try {
NotAMember2.Member.m();
throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
< prev index next >