< prev index next >
test/hotspot/jtreg/runtime/Nestmates/membership/TestNestmateMembership.java
Print this page
*** 27,45 ****
* @summary Test the various rules for nest members and nest-hosts by
* triggering nestmate access checks on all possible paths
* @compile TestNestmateMembership.java
* PackagedNestHost.java
* PackagedNestHost2.java
*
* @compile TargetNoHost.jcod
* CallerNoHost.jcod
* TargetMissingHost.jcod
* CallerMissingHost.jcod
- * CallerNotInstanceHost.jcod
* TargetNotInstanceHost.jcod
! * CallerNotOurHost.jcod
* TargetNotOurHost.jcod
* PackagedNestHost.jcod
* PackagedNestHost2Member.jcod
* PackagedNestHostMember.jcod
*
* @run main/othervm TestNestmateMembership method
--- 27,48 ----
* @summary Test the various rules for nest members and nest-hosts by
* triggering nestmate access checks on all possible paths
* @compile TestNestmateMembership.java
* PackagedNestHost.java
* PackagedNestHost2.java
+ * InvalidNestHost.java
*
* @compile TargetNoHost.jcod
* CallerNoHost.jcod
+ * TargetSelfHost.jcod
+ * CallerSelfHost.jcod
* TargetMissingHost.jcod
* CallerMissingHost.jcod
* TargetNotInstanceHost.jcod
! * CallerNotInstanceHost.jcod
* TargetNotOurHost.jcod
+ * CallerNotOurHost.jcod
* PackagedNestHost.jcod
* PackagedNestHost2Member.jcod
* PackagedNestHostMember.jcod
*
* @run main/othervm TestNestmateMembership method
*** 53,63 ****
// 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.
// Note that all the .java files must be compiled in the same step, while all
// .jcod files must be compiled in a later step.
// We test all the different nestmate access check paths: method invocation, constructor
// invocations, field get and field put. The test is invoked four times with each using
--- 56,67 ----
// 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.[1]
! //
// Note that all the .java files must be compiled in the same step, while all
// .jcod files must be compiled in a later step.
// We test all the different nestmate access check paths: method invocation, constructor
// invocations, field get and field put. The test is invoked four times with each using
*** 66,87 ****
// As access checking requires resolution and validation of the nest-host of
// both the caller class and the target class, we must check that all
// combinations of good/bad caller/target are checked for each of the
// possible errors:
// - no nest-host attribute
// - nest-host class can not be found
! // - nest-host class is not an instance class
! // - class is not a member of nest-host's nest
// - class and nest-host are in different packages
//
// To provide coverage for reflection and MethodHandle paths through
// JVM_AreNestmates, we add reflection/MH accesses to a subset of the tests.
// We only need to test one case (for Caller.xxx) as all cases use the same path; further
// we don't need to test all failure cases, as all exceptions are equivalent in that regard,
// but for good measure we test the four basic error situations (eliding the different
// package test for simplicity).
//
import java.lang.invoke.*;
import static java.lang.invoke.MethodHandles.*;
import static java.lang.invoke.MethodType.*;
--- 70,98 ----
// As access checking requires resolution and validation of the nest-host of
// both the caller class and the target class, we must check that all
// combinations of good/bad caller/target are checked for each of the
// possible errors:
// - no nest-host attribute
+ // - nest-host refers to self
// - nest-host class can not be found
! // - nest-host class is not an instance class (but is in same package)
! // - class is not a member of nest-host's nest (but is in same package)
// - class and nest-host are in different packages
//
// To provide coverage for reflection and MethodHandle paths through
// JVM_AreNestmates, we add reflection/MH accesses to a subset of the tests.
// We only need to test one case (for Caller.xxx) as all cases use the same path; further
// we don't need to test all failure cases, as all exceptions are equivalent in that regard,
// but for good measure we test the four basic error situations (eliding the different
// package test for simplicity).
//
+ // [1] In earlier versions the package-test was the final check done in nest membership
+ // validation, so we needed actual test classes in different packages that claimed
+ // membership. The final spec requires the package test to be done first, so it can
+ // be trivially tested by using Object as the nest-host. But we leave the explicit
+ // package tests as they are, and adjust the other tests so that a "bad host" is
+ // always in the same package.
import java.lang.invoke.*;
import static java.lang.invoke.MethodHandles.*;
import static java.lang.invoke.MethodType.*;
*** 103,112 ****
--- 114,126 ----
Target.m();
}
public static void invokeTargetNoHost() {
TargetNoHost.m();
}
+ public static void invokeTargetSelfHost() {
+ TargetSelfHost.m();
+ }
public static void invokeTargetMissingHost() {
TargetMissingHost.m();
}
public static void invokeTargetNotInstanceHost() {
TargetNotInstanceHost.m();
*** 118,127 ****
--- 132,144 ----
// reflective static method invocations
public static void invokeTargetNoHostReflectively() throws Throwable {
TargetNoHost.class.getDeclaredMethod("m", new Class<?>[0]).invoke(null, new Object[0]);
}
+ public static void invokeTargetSelfHostReflectively() throws Throwable {
+ TargetSelfHost.class.getDeclaredMethod("m", new Class<?>[0]).invoke(null, new Object[0]);
+ }
public static void invokeTargetMissingHostReflectively() throws Throwable {
TargetMissingHost.class.getDeclaredMethod("m", new Class<?>[0]).invoke(null, new Object[0]);
}
public static void invokeTargetNotInstanceHostReflectively() throws Throwable {
TargetNotInstanceHost.class.getDeclaredMethod("m", new Class<?>[0]).invoke(null, new Object[0]);
*** 133,142 ****
--- 150,162 ----
// MethodHandle static method lookup (no invoke as the lookup should fail)
public static void invokeTargetNoHostMH() throws Throwable {
MethodHandle mh = lookup().findStatic(TargetNoHost.class, "m", VOID_T);
}
+ public static void invokeTargetSelfHostMH() throws Throwable {
+ MethodHandle mh = lookup().findStatic(TargetSelfHost.class, "m", VOID_T);
+ }
public static void invokeTargetMissingHostMH() throws Throwable {
MethodHandle mh = lookup().findStatic(TargetMissingHost.class, "m", VOID_T);
}
public static void invokeTargetNotInstanceHostMH() throws Throwable {
MethodHandle mh = lookup().findStatic(TargetNotInstanceHost.class, "m", VOID_T);
*** 152,161 ****
--- 172,184 ----
Object o = new Target();
}
public static void newTargetNoHost() {
Object o = new TargetNoHost();
}
+ public static void newTargetSelfHost() {
+ Object o = new TargetSelfHost();
+ }
public static void newTargetMissingHost() {
Object o = new TargetMissingHost();
}
public static void newTargetNotInstanceHost() {
Object o = new TargetNotInstanceHost();
*** 167,176 ****
--- 190,202 ----
// reflective constructor invocations
public static void newTargetNoHostReflectively() throws Throwable {
Object o = TargetNoHost.class.getDeclaredConstructor(new Class<?>[0]).newInstance(new Object[0]);
}
+ public static void newTargetSelfHostReflectively() throws Throwable {
+ Object o = TargetSelfHost.class.getDeclaredConstructor(new Class<?>[0]).newInstance(new Object[0]);
+ }
public static void newTargetMissingHostReflectively() throws Throwable {
Object o = TargetMissingHost.class.getDeclaredConstructor(new Class<?>[0]).newInstance(new Object[0]);
}
public static void newTargetNotInstanceHostReflectively() throws Throwable {
Object o = TargetNotInstanceHost.class.getDeclaredConstructor(new Class<?>[0]).newInstance(new Object[0]);
*** 182,191 ****
--- 208,220 ----
// MethodHandle constructor lookup (no invoke as the lookup should fail)
public static void newTargetNoHostMH() throws Throwable {
MethodHandle mh = lookup().findConstructor(TargetNoHost.class, VOID_T);
}
+ public static void newTargetSelfHostMH() throws Throwable {
+ MethodHandle mh = lookup().findConstructor(TargetSelfHost.class, VOID_T);
+ }
public static void newTargetMissingHostMH() throws Throwable {
MethodHandle mh = lookup().findConstructor(TargetMissingHost.class, VOID_T);
}
public static void newTargetNotInstanceHostMH() throws Throwable {
MethodHandle mh = lookup().findConstructor(TargetNotInstanceHost.class, VOID_T);
*** 202,211 ****
--- 231,243 ----
int x = Target.f;
}
public static void getFieldTargetNoHost() {
int x = TargetNoHost.f;
}
+ public static void getFieldTargetSelfHost() {
+ int x = TargetSelfHost.f;
+ }
public static void getFieldTargetMissingHost() {
int x = TargetMissingHost.f;
}
public static void getFieldTargetNotInstanceHost() {
int x = TargetNotInstanceHost.f;
*** 218,227 ****
--- 250,262 ----
Target.f = 42;
}
public static void putFieldTargetNoHost() {
TargetNoHost.f = 42;
}
+ public static void putFieldTargetSelfHost() {
+ TargetSelfHost.f = 42;
+ }
public static void putFieldTargetMissingHost() {
TargetMissingHost.f = 42;
}
public static void putFieldTargetNotInstanceHost() {
TargetNotInstanceHost.f = 42;
*** 233,242 ****
--- 268,280 ----
// reflective field accesses
public static void getFieldTargetNoHostReflectively() throws Throwable {
int x = TargetNoHost.class.getDeclaredField("f").getInt(null);
}
+ public static void getFieldTargetSelfHostReflectively() throws Throwable {
+ int x = TargetSelfHost.class.getDeclaredField("f").getInt(null);
+ }
public static void getFieldTargetMissingHostReflectively() throws Throwable {
int x = TargetMissingHost.class.getDeclaredField("f").getInt(null);
}
public static void getFieldTargetNotInstanceHostReflectively() throws Throwable {
int x = TargetNotInstanceHost.class.getDeclaredField("f").getInt(null);
*** 246,255 ****
--- 284,296 ----
}
public static void putFieldTargetNoHostReflectively() throws Throwable {
TargetNoHost.class.getDeclaredField("f").setInt(null, 42);
}
+ public static void putFieldTargetSelfHostReflectively() throws Throwable {
+ TargetSelfHost.class.getDeclaredField("f").setInt(null, 42);
+ }
public static void putFieldTargetMissingHostReflectively() throws Throwable {
TargetMissingHost.class.getDeclaredField("f").setInt(null, 42);
}
public static void putFieldTargetNotInstanceHostReflectively() throws Throwable {
TargetNotInstanceHost.class.getDeclaredField("f").setInt(null, 42);
*** 261,270 ****
--- 302,314 ----
// MethodHandle field lookup (no access as the lookup will fail)
public static void getFieldTargetNoHostMH() throws Throwable {
MethodHandle mh = lookup().findStaticGetter(TargetNoHost.class, "f", int.class);
}
+ public static void getFieldTargetSelfHostMH() throws Throwable {
+ MethodHandle mh = lookup().findStaticGetter(TargetSelfHost.class, "f", int.class);
+ }
public static void getFieldTargetMissingHostMH() throws Throwable {
MethodHandle mh = lookup().findStaticGetter(TargetMissingHost.class, "f", int.class);
}
public static void getFieldTargetNotInstanceHostMH() throws Throwable {
MethodHandle mh = lookup().findStaticGetter(TargetNotInstanceHost.class, "f", int.class);
*** 274,283 ****
--- 318,330 ----
}
public static void putFieldTargetNoHostMH() throws Throwable {
MethodHandle mh = lookup().findStaticSetter(TargetNoHost.class, "f", int.class);
}
+ public static void putFieldTargetSelfHostMH() throws Throwable {
+ MethodHandle mh = lookup().findStaticSetter(TargetSelfHost.class, "f", int.class);
+ }
public static void putFieldTargetMissingHostMH() throws Throwable {
MethodHandle mh = lookup().findStaticSetter(TargetMissingHost.class, "f", int.class);
}
public static void putFieldTargetNotInstanceHostMH() throws Throwable {
MethodHandle mh = lookup().findStaticSetter(TargetNotInstanceHost.class, "f", int.class);
*** 331,340 ****
--- 378,432 ----
TargetNoHost.f = 42;
}
}
+ static class CallerSelfHost {
+
+ // method invocations
+
+ private static void m() {
+ System.out.println("CallerSelfHost.m() - java version");
+ }
+ public static void invokeTarget() {
+ Target.m();
+ }
+ public static void invokeTargetSelfHost() {
+ TargetSelfHost.m();
+ }
+
+ // constructor invocations
+
+ private CallerSelfHost() {}
+
+ public static void newTarget() {
+ Object o = new Target();
+ }
+ public static void newTargetSelfHost() {
+ Object o = new TargetSelfHost();
+ }
+
+ // field accesses
+
+ private static int f;
+
+ public static void getFieldTarget() {
+ int x = Target.f;
+ }
+ public static void getFieldTargetSelfHost() {
+ int x = TargetSelfHost.f;
+ }
+
+ public static void putFieldTarget() {
+ Target.f = 42;
+ }
+ public static void putFieldTargetSelfHost() {
+ TargetSelfHost.f = 42;
+ }
+
+ }
+
static class CallerMissingHost {
String msg = "NoCallerMissingHost"; // for cp entry
// method invocations
*** 480,489 ****
--- 572,589 ----
private static void m() {
System.out.println("TargetNoHost.m() - java version");
}
}
+ static class TargetSelfHost {
+ private TargetSelfHost() {}
+ private static int f;
+ private static void m() {
+ System.out.println("TargetSelfHost.m() - java version");
+ }
+ }
+
static class TargetMissingHost {
String msg = "NoTargetMissingHost"; // for cp entry
private TargetMissingHost() {}
private static int f;
private static void m() {
*** 515,551 ****
--- 615,655 ----
switch(args[0]) {
case "method":
System.out.println("TESTING METHOD INVOCATIONS:");
test_GoodInvoke();
test_NoHostInvoke();
+ test_SelfHostInvoke();
test_MissingHostInvoke();
test_NotInstanceHostInvoke();
test_NotOurHostInvoke();
test_WrongPackageHostInvoke();
break;
case "constructor":
System.out.println("TESTING CONSTRUCTOR INVOCATIONS:");
test_GoodConstruct();
test_NoHostConstruct();
+ test_SelfHostConstruct();
test_MissingHostConstruct();
test_NotInstanceHostConstruct();
test_NotOurHostConstruct();
test_WrongPackageHostConstruct();
break;
case "getField":
System.out.println("TESTING GETFIELD INVOCATIONS:");
test_GoodGetField();
test_NoHostGetField();
+ test_SelfHostGetField();
test_MissingHostGetField();
test_NotInstanceHostGetField();
test_NotOurHostGetField();
test_WrongPackageHostGetField();
break;
case "putField":
System.out.println("TESTING PUTFIELD INVOCATIONS:");
test_GoodPutField();
test_NoHostPutField();
+ test_SelfHostPutField();
test_MissingHostPutField();
test_NotInstanceHostPutField();
test_NotOurHostPutField();
test_WrongPackageHostPutField();
break;
*** 612,621 ****
--- 716,772 ----
catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
+ static void test_SelfHostInvoke() throws Throwable {
+ System.out.println("Testing for class that lists itself as nest-host");
+ String msg = "Type TestNestmateMembership$TargetSelfHost is not a nest member" +
+ " of TestNestmateMembership$TargetSelfHost: current type is not listed as a nest member";
+ try {
+ Caller.invokeTargetSelfHost();
+ throw new Error("Missing IncompatibleClassChangeError: " + msg);
+ }
+ catch (IncompatibleClassChangeError expected) {
+ check_expected(expected, msg);
+ }
+ try {
+ Caller.invokeTargetSelfHostReflectively();
+ throw new Error("Missing IncompatibleClassChangeError: " + msg);
+ }
+ catch (IncompatibleClassChangeError expected) {
+ check_expected(expected, msg);
+ }
+ msg = "no such method: TestNestmateMembership$TargetSelfHost.m()void/invokeStatic";
+ try {
+ Caller.invokeTargetSelfHostMH();
+ throw new Error("Missing IllegalAccessException: " + msg);
+ }
+ catch (IllegalAccessException expected) {
+ check_expected(expected, msg);
+ }
+
+ msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
+ " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
+ try {
+ CallerSelfHost.invokeTarget();
+ throw new Error("Missing IncompatibleClassChangeError: " + msg);
+ }
+ catch (IncompatibleClassChangeError expected) {
+ check_expected(expected, msg);
+ }
+ msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
+ " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
+ try {
+ CallerSelfHost.invokeTargetSelfHost();
+ throw new Error("Missing IncompatibleClassChangeError: " + msg);
+ }
+ catch (IncompatibleClassChangeError expected) {
+ check_expected(expected, msg);
+ }
+ }
+
static void test_MissingHostInvoke() throws Throwable {
System.out.println("Testing for nest-host class that does not exist");
String msg = "Unable to load nest-host class (NoTargetMissingHost) of " +
"TestNestmateMembership$TargetMissingHost";
String cause_msg = "NoTargetMissingHost";
*** 673,695 ****
}
static void test_NotInstanceHostInvoke() throws Throwable {
System.out.println("Testing for nest-host class that is not an instance class");
String msg = "Type TestNestmateMembership$TargetNotInstanceHost is not a "+
! "nest member of [Ljava.lang.Object;: nest-host is not an instance class";
try {
Caller.invokeTargetNotInstanceHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
Caller.invokeTargetNotInstanceHostReflectively();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "no such method: TestNestmateMembership$TargetNotInstanceHost.m()void/invokeStatic";
try {
Caller.invokeTargetNotInstanceHostMH();
--- 824,846 ----
}
static void test_NotInstanceHostInvoke() throws Throwable {
System.out.println("Testing for nest-host class that is not an instance class");
String msg = "Type TestNestmateMembership$TargetNotInstanceHost is not a "+
! "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
try {
Caller.invokeTargetNotInstanceHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
Caller.invokeTargetNotInstanceHostReflectively();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "no such method: TestNestmateMembership$TargetNotInstanceHost.m()void/invokeStatic";
try {
Caller.invokeTargetNotInstanceHostMH();
*** 698,742 ****
catch (IllegalAccessException expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [Ljava.lang.Object;: nest-host is not an instance class";
try {
CallerNotInstanceHost.invokeTarget();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [Ljava.lang.Object;: nest-host is not an instance class";
try {
CallerNotInstanceHost.invokeTargetNotInstanceHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
static void test_NotOurHostInvoke() throws Throwable {
System.out.println("Testing for nest-host class that does not list us in its nest");
String msg = "Type TestNestmateMembership$TargetNotOurHost is not a nest member" +
! " of java.lang.Object: current type is not listed as a nest member";
try {
Caller.invokeTargetNotOurHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
Caller.invokeTargetNotOurHostReflectively();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "no such method: TestNestmateMembership$TargetNotOurHost.m()void/invokeStatic";
try {
Caller.invokeTargetNotOurHostMH();
--- 849,893 ----
catch (IllegalAccessException expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
try {
CallerNotInstanceHost.invokeTarget();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
try {
CallerNotInstanceHost.invokeTargetNotInstanceHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
}
static void test_NotOurHostInvoke() throws Throwable {
System.out.println("Testing for nest-host class that does not list us in its nest");
String msg = "Type TestNestmateMembership$TargetNotOurHost is not a nest member" +
! " of InvalidNestHost: current type is not listed as a nest member";
try {
Caller.invokeTargetNotOurHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
Caller.invokeTargetNotOurHostReflectively();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "no such method: TestNestmateMembership$TargetNotOurHost.m()void/invokeStatic";
try {
Caller.invokeTargetNotOurHostMH();
*** 745,789 ****
catch (IllegalAccessException expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of java.lang.Object: current type is not listed as a nest member";
try {
CallerNotOurHost.invokeTarget();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of java.lang.Object: current type is not listed as a nest member";
try {
CallerNotOurHost.invokeTargetNotOurHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
static void test_WrongPackageHostInvoke() {
System.out.println("Testing for nest-host and nest-member in different packages");
String msg = "Type P2.PackagedNestHost2$Member is not a nest member of " +
"P1.PackagedNestHost: types are in different packages";
try {
P1.PackagedNestHost.doInvoke();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
P2.PackagedNestHost2.Member.doInvoke();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
// constructor tests
--- 896,940 ----
catch (IllegalAccessException expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of InvalidNestHost: current type is not listed as a nest member";
try {
CallerNotOurHost.invokeTarget();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of InvalidNestHost: current type is not listed as a nest member";
try {
CallerNotOurHost.invokeTargetNotOurHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
}
static void test_WrongPackageHostInvoke() {
System.out.println("Testing for nest-host and nest-member in different packages");
String msg = "Type P2.PackagedNestHost2$Member is not a nest member of " +
"P1.PackagedNestHost: types are in different packages";
try {
P1.PackagedNestHost.doInvoke();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
P2.PackagedNestHost2.Member.doInvoke();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
}
// constructor tests
*** 801,813 ****
System.out.println("Testing for missing nest-host attribute");
String msg = "tried to access method TestNestmateMembership$TargetNoHost.<init>()V" +
" from class TestNestmateMembership$Caller";
try {
Caller.newTargetNoHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "class TestNestmateMembership$Caller cannot access a member of class " +
"TestNestmateMembership$TargetNoHost with modifiers \"private\"";
try {
--- 952,964 ----
System.out.println("Testing for missing nest-host attribute");
String msg = "tried to access method TestNestmateMembership$TargetNoHost.<init>()V" +
" from class TestNestmateMembership$Caller";
try {
Caller.newTargetNoHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "class TestNestmateMembership$Caller cannot access a member of class " +
"TestNestmateMembership$TargetNoHost with modifiers \"private\"";
try {
*** 828,849 ****
msg = "tried to access method TestNestmateMembership$Target.<init>()V" +
" from class TestNestmateMembership$CallerNoHost";
try {
CallerNoHost.newTarget();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "tried to access method TestNestmateMembership$TargetNoHost.<init>()V" +
" from class TestNestmateMembership$CallerNoHost";
try {
CallerNoHost.newTargetNoHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
static void test_MissingHostConstruct() throws Throwable {
--- 979,1047 ----
msg = "tried to access method TestNestmateMembership$Target.<init>()V" +
" from class TestNestmateMembership$CallerNoHost";
try {
CallerNoHost.newTarget();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "tried to access method TestNestmateMembership$TargetNoHost.<init>()V" +
" from class TestNestmateMembership$CallerNoHost";
try {
CallerNoHost.newTargetNoHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
! check_expected(expected, msg);
! }
! }
!
! static void test_SelfHostConstruct() throws Throwable {
! System.out.println("Testing for class that lists itself as nest-host");
! String msg = "Type TestNestmateMembership$TargetSelfHost is not a nest member" +
! " of TestNestmateMembership$TargetSelfHost: current type is not listed as a nest member";
! try {
! Caller.newTargetSelfHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
! }
! catch (IncompatibleClassChangeError expected) {
! check_expected(expected, msg);
! }
! try {
! Caller.newTargetSelfHostReflectively();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
! }
! catch (IncompatibleClassChangeError expected) {
! check_expected(expected, msg);
! }
! msg = "no such constructor: TestNestmateMembership$TargetSelfHost.<init>()void/newInvokeSpecial";
! try {
! Caller.newTargetSelfHostMH();
! throw new Error("Missing IllegalAccessException: " + msg);
! }
! catch (IllegalAccessException expected) {
! check_expected(expected, msg);
! }
!
! msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
! " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
! try {
! CallerSelfHost.newTarget();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
! }
! catch (IncompatibleClassChangeError expected) {
! check_expected(expected, msg);
! }
! msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
! " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
! try {
! CallerSelfHost.newTargetSelfHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
! }
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
}
static void test_MissingHostConstruct() throws Throwable {
*** 897,919 ****
}
static void test_NotInstanceHostConstruct() throws Throwable {
System.out.println("Testing for nest-host class that is not an instance class");
String msg = "Type TestNestmateMembership$TargetNotInstanceHost is not a "+
! "nest member of [Ljava.lang.Object;: nest-host is not an instance class";
try {
Caller.newTargetNotInstanceHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
Caller.newTargetNotInstanceHostReflectively();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "no such constructor: TestNestmateMembership$TargetNotInstanceHost.<init>()void/newInvokeSpecial";
try {
Caller.newTargetNotInstanceHostMH();
--- 1095,1117 ----
}
static void test_NotInstanceHostConstruct() throws Throwable {
System.out.println("Testing for nest-host class that is not an instance class");
String msg = "Type TestNestmateMembership$TargetNotInstanceHost is not a "+
! "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
try {
Caller.newTargetNotInstanceHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
Caller.newTargetNotInstanceHostReflectively();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "no such constructor: TestNestmateMembership$TargetNotInstanceHost.<init>()void/newInvokeSpecial";
try {
Caller.newTargetNotInstanceHostMH();
*** 922,966 ****
catch (IllegalAccessException expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [Ljava.lang.Object;: nest-host is not an instance class";
try {
CallerNotInstanceHost.newTarget();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [Ljava.lang.Object;: nest-host is not an instance class";
try {
CallerNotInstanceHost.newTargetNotInstanceHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
static void test_NotOurHostConstruct() throws Throwable {
System.out.println("Testing for nest-host class that does not list us in its nest");
String msg = "Type TestNestmateMembership$TargetNotOurHost is not a nest member" +
! " of java.lang.Object: current type is not listed as a nest member";
try {
Caller.newTargetNotOurHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
Caller.newTargetNotOurHostReflectively();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "no such constructor: TestNestmateMembership$TargetNotOurHost.<init>()void/newInvokeSpecial";
try {
Caller.newTargetNotOurHostMH();
--- 1120,1164 ----
catch (IllegalAccessException expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
try {
CallerNotInstanceHost.newTarget();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
try {
CallerNotInstanceHost.newTargetNotInstanceHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
}
static void test_NotOurHostConstruct() throws Throwable {
System.out.println("Testing for nest-host class that does not list us in its nest");
String msg = "Type TestNestmateMembership$TargetNotOurHost is not a nest member" +
! " of InvalidNestHost: current type is not listed as a nest member";
try {
Caller.newTargetNotOurHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
Caller.newTargetNotOurHostReflectively();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "no such constructor: TestNestmateMembership$TargetNotOurHost.<init>()void/newInvokeSpecial";
try {
Caller.newTargetNotOurHostMH();
*** 969,1013 ****
catch (IllegalAccessException expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of java.lang.Object: current type is not listed as a nest member";
try {
CallerNotOurHost.newTarget();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of java.lang.Object: current type is not listed as a nest member";
try {
CallerNotOurHost.newTargetNotOurHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
static void test_WrongPackageHostConstruct() {
System.out.println("Testing for nest-host and nest-member in different packages");
String msg = "Type P2.PackagedNestHost2$Member is not a nest member of " +
"P1.PackagedNestHost: types are in different packages";
try {
P1.PackagedNestHost.doConstruct();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
P2.PackagedNestHost2.Member.doConstruct();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
// field tests
--- 1167,1211 ----
catch (IllegalAccessException expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of InvalidNestHost: current type is not listed as a nest member";
try {
CallerNotOurHost.newTarget();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of InvalidNestHost: current type is not listed as a nest member";
try {
CallerNotOurHost.newTargetNotOurHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
}
static void test_WrongPackageHostConstruct() {
System.out.println("Testing for nest-host and nest-member in different packages");
String msg = "Type P2.PackagedNestHost2$Member is not a nest member of " +
"P1.PackagedNestHost: types are in different packages";
try {
P1.PackagedNestHost.doConstruct();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
P2.PackagedNestHost2.Member.doConstruct();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
}
// field tests
*** 1025,1037 ****
System.out.println("Testing for missing nest-host attribute");
String msg = "tried to access field TestNestmateMembership$TargetNoHost.f" +
" from class TestNestmateMembership$Caller";
try {
Caller.getFieldTargetNoHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "class TestNestmateMembership$Caller cannot access a member of class " +
"TestNestmateMembership$TargetNoHost with modifiers \"private static\"";
try {
--- 1223,1235 ----
System.out.println("Testing for missing nest-host attribute");
String msg = "tried to access field TestNestmateMembership$TargetNoHost.f" +
" from class TestNestmateMembership$Caller";
try {
Caller.getFieldTargetNoHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "class TestNestmateMembership$Caller cannot access a member of class " +
"TestNestmateMembership$TargetNoHost with modifiers \"private static\"";
try {
*** 1052,1073 ****
msg = "tried to access field TestNestmateMembership$Target.f" +
" from class TestNestmateMembership$CallerNoHost";
try {
CallerNoHost.getFieldTarget();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "tried to access field TestNestmateMembership$TargetNoHost.f" +
" from class TestNestmateMembership$CallerNoHost";
try {
CallerNoHost.getFieldTargetNoHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
static void test_MissingHostGetField() throws Throwable {
--- 1250,1317 ----
msg = "tried to access field TestNestmateMembership$Target.f" +
" from class TestNestmateMembership$CallerNoHost";
try {
CallerNoHost.getFieldTarget();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "tried to access field TestNestmateMembership$TargetNoHost.f" +
" from class TestNestmateMembership$CallerNoHost";
try {
CallerNoHost.getFieldTargetNoHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
! check_expected(expected, msg);
! }
! }
!
! static void test_SelfHostGetField() throws Throwable {
! System.out.println("Testing for class that lists itself as nest-host");
! String msg = "Type TestNestmateMembership$TargetSelfHost is not a nest member" +
! " of TestNestmateMembership$TargetSelfHost: current type is not listed as a nest member";
! try {
! Caller.getFieldTargetSelfHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
! }
! catch (IncompatibleClassChangeError expected) {
! check_expected(expected, msg);
! }
! try {
! Caller.getFieldTargetSelfHostReflectively();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
! }
! catch (IncompatibleClassChangeError expected) {
! check_expected(expected, msg);
! }
! try {
! Caller.getFieldTargetSelfHostMH();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
! }
! catch (IncompatibleClassChangeError expected) {
! check_expected(expected, msg);
! }
!
! msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
! " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
! try {
! CallerSelfHost.getFieldTarget();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
! }
! catch (IncompatibleClassChangeError expected) {
! check_expected(expected, msg);
! }
! msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
! " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
! try {
! CallerSelfHost.getFieldTargetSelfHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
! }
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
}
static void test_MissingHostGetField() throws Throwable {
*** 1120,1234 ****
}
static void test_NotInstanceHostGetField() throws Throwable {
System.out.println("Testing for nest-host class that is not an instance class");
String msg = "Type TestNestmateMembership$TargetNotInstanceHost is not a "+
! "nest member of [Ljava.lang.Object;: nest-host is not an instance class";
try {
Caller.getFieldTargetNotInstanceHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
Caller.getFieldTargetNotInstanceHostReflectively();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
Caller.getFieldTargetNotInstanceHostMH();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [Ljava.lang.Object;: nest-host is not an instance class";
try {
CallerNotInstanceHost.getFieldTarget();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [Ljava.lang.Object;: nest-host is not an instance class";
try {
CallerNotInstanceHost.getFieldTargetNotInstanceHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
static void test_NotOurHostGetField() throws Throwable {
System.out.println("Testing for nest-host class that does not list us in its nest");
String msg = "Type TestNestmateMembership$TargetNotOurHost is not a nest member" +
! " of java.lang.Object: current type is not listed as a nest member";
try {
Caller.getFieldTargetNotOurHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
Caller.getFieldTargetNotOurHostReflectively();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
Caller.getFieldTargetNotOurHostMH();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of java.lang.Object: current type is not listed as a nest member";
try {
CallerNotOurHost.getFieldTarget();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of java.lang.Object: current type is not listed as a nest member";
try {
CallerNotOurHost.getFieldTargetNotOurHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
static void test_WrongPackageHostGetField() {
System.out.println("Testing for nest-host and nest-member in different packages");
String msg = "Type P2.PackagedNestHost2$Member is not a nest member of " +
"P1.PackagedNestHost: types are in different packages";
try {
P1.PackagedNestHost.doGetField();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
P2.PackagedNestHost2.Member.doGetField();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
static void test_GoodPutField(){
--- 1364,1478 ----
}
static void test_NotInstanceHostGetField() throws Throwable {
System.out.println("Testing for nest-host class that is not an instance class");
String msg = "Type TestNestmateMembership$TargetNotInstanceHost is not a "+
! "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
try {
Caller.getFieldTargetNotInstanceHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
Caller.getFieldTargetNotInstanceHostReflectively();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
Caller.getFieldTargetNotInstanceHostMH();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
try {
CallerNotInstanceHost.getFieldTarget();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
try {
CallerNotInstanceHost.getFieldTargetNotInstanceHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
}
static void test_NotOurHostGetField() throws Throwable {
System.out.println("Testing for nest-host class that does not list us in its nest");
String msg = "Type TestNestmateMembership$TargetNotOurHost is not a nest member" +
! " of InvalidNestHost: current type is not listed as a nest member";
try {
Caller.getFieldTargetNotOurHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
Caller.getFieldTargetNotOurHostReflectively();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
Caller.getFieldTargetNotOurHostMH();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of InvalidNestHost: current type is not listed as a nest member";
try {
CallerNotOurHost.getFieldTarget();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of InvalidNestHost: current type is not listed as a nest member";
try {
CallerNotOurHost.getFieldTargetNotOurHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
}
static void test_WrongPackageHostGetField() {
System.out.println("Testing for nest-host and nest-member in different packages");
String msg = "Type P2.PackagedNestHost2$Member is not a nest member of " +
"P1.PackagedNestHost: types are in different packages";
try {
P1.PackagedNestHost.doGetField();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
P2.PackagedNestHost2.Member.doGetField();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
}
static void test_GoodPutField(){
*** 1244,1256 ****
System.out.println("Testing for missing nest-host attribute");
String msg = "tried to access field TestNestmateMembership$TargetNoHost.f" +
" from class TestNestmateMembership$Caller";
try {
Caller.putFieldTargetNoHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "class TestNestmateMembership$Caller cannot access a member of class " +
"TestNestmateMembership$TargetNoHost with modifiers \"private static\"";
try {
--- 1488,1500 ----
System.out.println("Testing for missing nest-host attribute");
String msg = "tried to access field TestNestmateMembership$TargetNoHost.f" +
" from class TestNestmateMembership$Caller";
try {
Caller.putFieldTargetNoHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "class TestNestmateMembership$Caller cannot access a member of class " +
"TestNestmateMembership$TargetNoHost with modifiers \"private static\"";
try {
*** 1271,1292 ****
msg = "tried to access field TestNestmateMembership$Target.f" +
" from class TestNestmateMembership$CallerNoHost";
try {
CallerNoHost.putFieldTarget();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "tried to access field TestNestmateMembership$TargetNoHost.f" +
" from class TestNestmateMembership$CallerNoHost";
try {
CallerNoHost.putFieldTargetNoHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
static void test_MissingHostPutField() throws Throwable {
--- 1515,1582 ----
msg = "tried to access field TestNestmateMembership$Target.f" +
" from class TestNestmateMembership$CallerNoHost";
try {
CallerNoHost.putFieldTarget();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "tried to access field TestNestmateMembership$TargetNoHost.f" +
" from class TestNestmateMembership$CallerNoHost";
try {
CallerNoHost.putFieldTargetNoHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
! check_expected(expected, msg);
! }
! }
!
! static void test_SelfHostPutField() throws Throwable {
! System.out.println("Testing for class that lists itself as nest-host");
! String msg = "Type TestNestmateMembership$TargetSelfHost is not a nest member" +
! " of TestNestmateMembership$TargetSelfHost: current type is not listed as a nest member";
! try {
! Caller.putFieldTargetSelfHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
! }
! catch (IncompatibleClassChangeError expected) {
! check_expected(expected, msg);
! }
! try {
! Caller.putFieldTargetSelfHostReflectively();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
! }
! catch (IncompatibleClassChangeError expected) {
! check_expected(expected, msg);
! }
! try {
! Caller.putFieldTargetSelfHostMH();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
! }
! catch (IncompatibleClassChangeError expected) {
! check_expected(expected, msg);
! }
!
! msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
! " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
! try {
! CallerSelfHost.putFieldTarget();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
! }
! catch (IncompatibleClassChangeError expected) {
! check_expected(expected, msg);
! }
! msg = "Type TestNestmateMembership$CallerSelfHost is not a nest member" +
! " of TestNestmateMembership$CallerSelfHost: current type is not listed as a nest member";
! try {
! CallerSelfHost.putFieldTargetSelfHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
! }
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
}
static void test_MissingHostPutField() throws Throwable {
*** 1339,1453 ****
}
static void test_NotInstanceHostPutField() throws Throwable {
System.out.println("Testing for nest-host class that is not an instance class");
String msg = "Type TestNestmateMembership$TargetNotInstanceHost is not a "+
! "nest member of [Ljava.lang.Object;: nest-host is not an instance class";
try {
Caller.putFieldTargetNotInstanceHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
Caller.putFieldTargetNotInstanceHostReflectively();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
Caller.putFieldTargetNotInstanceHostMH();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [Ljava.lang.Object;: nest-host is not an instance class";
try {
CallerNotInstanceHost.putFieldTarget();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [Ljava.lang.Object;: nest-host is not an instance class";
try {
CallerNotInstanceHost.putFieldTargetNotInstanceHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
static void test_NotOurHostPutField() throws Throwable {
System.out.println("Testing for nest-host class that does not list us in its nest");
String msg = "Type TestNestmateMembership$TargetNotOurHost is not a nest member" +
! " of java.lang.Object: current type is not listed as a nest member";
try {
Caller.putFieldTargetNotOurHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
Caller.putFieldTargetNotOurHostReflectively();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
Caller.putFieldTargetNotOurHostMH();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of java.lang.Object: current type is not listed as a nest member";
try {
CallerNotOurHost.putFieldTarget();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of java.lang.Object: current type is not listed as a nest member";
try {
CallerNotOurHost.putFieldTargetNotOurHost();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
static void test_WrongPackageHostPutField() {
System.out.println("Testing for nest-host and nest-member in different packages");
String msg = "Type P2.PackagedNestHost2$Member is not a nest member of " +
"P1.PackagedNestHost: types are in different packages";
try {
P1.PackagedNestHost.doPutField();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
try {
P2.PackagedNestHost2.Member.doPutField();
! throw new Error("Missing IllegalAccessError: " + msg);
}
! catch (IllegalAccessError expected) {
check_expected(expected, msg);
}
}
// utilities
--- 1629,1743 ----
}
static void test_NotInstanceHostPutField() throws Throwable {
System.out.println("Testing for nest-host class that is not an instance class");
String msg = "Type TestNestmateMembership$TargetNotInstanceHost is not a "+
! "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
try {
Caller.putFieldTargetNotInstanceHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
Caller.putFieldTargetNotInstanceHostReflectively();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
Caller.putFieldTargetNotInstanceHostMH();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
try {
CallerNotInstanceHost.putFieldTarget();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotInstanceHost is not a "+
! "nest member of [LInvalidNestHost;: current type is not listed as a nest member";
try {
CallerNotInstanceHost.putFieldTargetNotInstanceHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
}
static void test_NotOurHostPutField() throws Throwable {
System.out.println("Testing for nest-host class that does not list us in its nest");
String msg = "Type TestNestmateMembership$TargetNotOurHost is not a nest member" +
! " of InvalidNestHost: current type is not listed as a nest member";
try {
Caller.putFieldTargetNotOurHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
Caller.putFieldTargetNotOurHostReflectively();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
Caller.putFieldTargetNotOurHostMH();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of InvalidNestHost: current type is not listed as a nest member";
try {
CallerNotOurHost.putFieldTarget();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
msg = "Type TestNestmateMembership$CallerNotOurHost is not a nest member" +
! " of InvalidNestHost: current type is not listed as a nest member";
try {
CallerNotOurHost.putFieldTargetNotOurHost();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
}
static void test_WrongPackageHostPutField() {
System.out.println("Testing for nest-host and nest-member in different packages");
String msg = "Type P2.PackagedNestHost2$Member is not a nest member of " +
"P1.PackagedNestHost: types are in different packages";
try {
P1.PackagedNestHost.doPutField();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
try {
P2.PackagedNestHost2.Member.doPutField();
! throw new Error("Missing IncompatibleClassChangeError: " + msg);
}
! catch (IncompatibleClassChangeError expected) {
check_expected(expected, msg);
}
}
// utilities
< prev index next >