more convenience methods (needed for following adaption of tests).
&& ((loader2_ == ld2) || ((loader2_ != null) && (ld2 != null) && loader2_.equals(ld2)))
&& class_.equals(cls);
}
&& ((loader2_ == ld2) || ((loader2_ != null) && (ld2 != null) && loader2_.equals(ld2)))
&& class_.equals(cls);
}
+
+ public String toString() {
+ return tag_ + ": " + loader1_ + " " + loader2_ + " class=" + class_;
+ }
}
public void setReportClassIDs(boolean rep) {
}
public void setReportClassIDs(boolean rep) {
expect("loaded", loader, "<" + classname + ">");
}
expect("loaded", loader, "<" + classname + ">");
}
- public void expectDelegationAndDefinition(ClassLoader loader1, ClassLoader loader2, String classname) {
+ public void expectDelegation(ClassLoader loader1, ClassLoader loader2, String classname) {
expect("requested", loader1, classname);
expect("delegated", loader1, loader2, classname);
expect("requested", loader2, classname);
expect("requested", loader1, classname);
expect("delegated", loader1, loader2, classname);
expect("requested", loader2, classname);
+ }
+
+ public void expectDelegationDefinition(ClassLoader loader1, ClassLoader loader2, String classname) {
expect("defined", loader2, "<" + classname + ">");
expect("loaded", loader1, "<" + classname + ">");
}
expect("defined", loader2, "<" + classname + ">");
expect("loaded", loader1, "<" + classname + ">");
}
+ public void expectDelegationAndDefinition(ClassLoader loader1, ClassLoader loader2, String classname) {
+ expectDelegation(loader1, loader2, classname);
+ expectDelegationDefinition(loader1, loader2, classname);
+ }
+
public void expectDelegationAndFound(ClassLoader loader1, ClassLoader loader2, String classname) {
public void expectDelegationAndFound(ClassLoader loader1, ClassLoader loader2, String classname) {
- expect("requested", loader1, classname);
- expect("delegated", loader1, loader2, classname);
- expect("requested", loader2, classname);
+ expectDelegation(loader1, loader2, classname);
expect("found", loader2, "<" + classname + ">");
expect("loaded", loader1, "<" + classname + ">");
}
expect("found", loader2, "<" + classname + ">");
expect("loaded", loader1, "<" + classname + ">");
}
fail(message + ": " + tag + " " + ld1 + " " + ld2 + " class=" + cls);
}
fail(message + ": " + tag + " " + ld1 + " " + ld2 + " class=" + cls);
}
+ void fail(String message, String tag, String ld1, String ld2, String cls, Expectation exp) {
+ fail(message + ": " + tag + " " + ld1 + " " + ld2 + " class=" + cls
+ + " (expected " + exp.toString() + ")");
+ }
+
void ok(String tag, String ld1, String ld2, String cls) {
ok(tag + " " + ld1 + " " + ld2 + " class=" + cls);
}
void ok(String tag, String ld1, String ld2, String cls) {
ok(tag + " " + ld1 + " " + ld2 + " class=" + cls);
}
ok(tag, ld1, ld2, cls);
}
else {
ok(tag, ld1, ld2, cls);
}
else {
- fail("unexpected", tag, ld1, ld2, cls);
+ fail("unmatched", tag, ld1, ld2, cls, exp);
ld3.addParentDelegation("java.lang.String");
ld3.addParentDelegation("java.lang.String");
+ // loading and linking BarPassFoo
ct.expect("requested", ld2, "BarPassFoo");
ct.expect("requested", ld2, "BarPassFoo");
+ ct.expectLoadFromSystem(ld2, "java.lang.Object");
ct.expect("defined", ld2, "<BarPassFoo>");
ct.expect("loaded", ld2, "<BarPassFoo>");
Class cls = ct.loadClass(ld2, "BarPassFoo");
ct.expect("defined", ld2, "<BarPassFoo>");
ct.expect("loaded", ld2, "<BarPassFoo>");
Class cls = ct.loadClass(ld2, "BarPassFoo");
- // linking BarPassFoo
- ct.expectLoadFromSystem(ld2, "java.lang.Object");
-
// executing BarPassFoo.passDerivedFooInstance: new DerivedFoo
// executing BarPassFoo.passDerivedFooInstance: new DerivedFoo
- ct.expectDelegationAndDefinition(ld2, ld3, "DerivedFoo");
+ ct.expectDelegation(ld2, ld3, "DerivedFoo");
// linking (ld3, DerivedFoo)
ct.expect("requested", ld3, "Foo");
// linking (ld3, DerivedFoo)
ct.expect("requested", ld3, "Foo");
- ct.expect("defined", ld3, "<Foo>");
ct.expectLoadFromSystem(ld3, "java.lang.Object");
ct.expectLoadFromSystem(ld3, "java.lang.Object");
+ ct.expect("defined", ld3, "<Foo>");
+ ct.expectDelegationDefinition(ld2, ld3, "DerivedFoo");
// resolving Foo.virtualId
// the deferred subtype check ((ld2, DerivedFoo) subtypeof (ld2, Foo)) is done
// resolving Foo.virtualId
// the deferred subtype check ((ld2, DerivedFoo) subtypeof (ld2, Foo)) is done
- ct.expectDelegationAndDefinition(ld2, ld1, "Foo");
+ ct.expectDelegation(ld2, ld1, "Foo");
// ...linking (ld2, Foo) == (ld1, Foo)
ct.expectLoadFromSystem(ld1, "java.lang.Object");
// ...linking (ld2, Foo) == (ld1, Foo)
ct.expectLoadFromSystem(ld1, "java.lang.Object");
+ ct.expectDelegationDefinition(ld2, ld1, "Foo");
// the subtype constraint ((ld2, DerivedFoo) subtypeof (ld2, Foo)) is violated
ct.expect("exception", "java.lang.LinkageError", "<BarPassFoo>");
// the subtype constraint ((ld2, DerivedFoo) subtypeof (ld2, Foo)) is violated
ct.expect("exception", "java.lang.LinkageError", "<BarPassFoo>");
ld2.addParentDelegation("java.lang.String");
ld2.addParentDelegation("java.lang.String");
+ // loading & linking BarPassFoo
ct.expect("requested", ld2, "BarPassFoo");
ct.expect("requested", ld2, "BarPassFoo");
+ ct.expectLoadFromSystem(ld2, "java.lang.Object");
ct.expect("defined", ld2, "<BarPassFoo>");
ct.expect("loaded", ld2, "<BarPassFoo>");
Class cls = ct.loadClass(ld2, "BarPassFoo");
ct.expect("defined", ld2, "<BarPassFoo>");
ct.expect("loaded", ld2, "<BarPassFoo>");
Class cls = ct.loadClass(ld2, "BarPassFoo");
- // linking BarPassFoo
- ct.expectLoadFromSystem(ld2, "java.lang.Object");
-
// executing BarPassFoo.passit: new Foo
ct.expect("requested", ld2, "Foo");
ct.expect("defined", ld2, "<Foo>");
// executing BarPassFoo.passit: new BarUseFoo
// executing BarPassFoo.passit: new Foo
ct.expect("requested", ld2, "Foo");
ct.expect("defined", ld2, "<Foo>");
// executing BarPassFoo.passit: new BarUseFoo
- ct.expectDelegationAndDefinition(ld2, ld1, "BarUseFoo");
+ ct.expectDelegation(ld2, ld1, "BarUseFoo");
// ...linking BarUseFoo
ct.expectLoadFromSystem(ld1, "java.lang.Object");
// ...linking BarUseFoo
ct.expectLoadFromSystem(ld1, "java.lang.Object");
+ ct.expectDelegationDefinition(ld2, ld1, "BarUseFoo");
// resolving Foo.virtualId() from BarUseFoo
ct.expect("requested", ld1, "Foo");
// resolving Foo.virtualId() from BarUseFoo
ct.expect("requested", ld1, "Foo");
ld3.addParentDelegation("java.lang.String");
ld3.addParentDelegation("java.lang.String");
+ // loading & linking BarPassFoo
ct.expect("requested", ld2, "BarPassFoo");
ct.expect("requested", ld2, "BarPassFoo");
+ ct.expectLoadFromSystem(ld2, "java.lang.Object");
ct.expect("defined", ld2, "<BarPassFoo>");
ct.expect("loaded", ld2, "<BarPassFoo>");
Class cls = ct.loadClass(ld2, "BarPassFoo");
ct.expect("defined", ld2, "<BarPassFoo>");
ct.expect("loaded", ld2, "<BarPassFoo>");
Class cls = ct.loadClass(ld2, "BarPassFoo");
- // linking BarPassFoo
- ct.expectLoadFromSystem(ld2, "java.lang.Object");
-
// executing BarPassFoo.passDerivedFoo: new DerivedFoo
// executing BarPassFoo.passDerivedFoo: new DerivedFoo
- ct.expectDelegationAndDefinition(ld2, ld3, "DerivedFoo");
+ ct.expectDelegation(ld2, ld3, "DerivedFoo");
// linking (ld3, DerivedFoo)
ct.expect("requested", ld3, "Foo");
// linking (ld3, DerivedFoo)
ct.expect("requested", ld3, "Foo");
- ct.expect("defined", ld3, "<Foo>");
ct.expectLoadFromSystem(ld3, "java.lang.Object");
ct.expectLoadFromSystem(ld3, "java.lang.Object");
+ ct.expect("defined", ld3, "<Foo>");
+ ct.expectDelegationDefinition(ld2, ld3, "DerivedFoo");
// executing BarPassFoo.passit: new BarUseFoo
// executing BarPassFoo.passit: new BarUseFoo
- ct.expectDelegationAndDefinition(ld2, ld1, "BarUseFoo");
+ ct.expectDelegation(ld2, ld1, "BarUseFoo");
// linking BarUseFoo
ct.expectLoadFromSystem(ld1, "java.lang.Object");
// linking BarUseFoo
ct.expectLoadFromSystem(ld1, "java.lang.Object");
+ ct.expectDelegationDefinition(ld2, ld1, "BarUseFoo");
// resolving BarUseFoo.useFoo
// the deferred subtype check ((ld2, DerivedFoo) subtypeof (ld2, Foo)) is done
// resolving BarUseFoo.useFoo
// the deferred subtype check ((ld2, DerivedFoo) subtypeof (ld2, Foo)) is done
ld3.addParentDelegation("java.lang.String");
ld3.addParentDelegation("java.lang.String");
+ // loading & linking BarPassFoo
ct.expect("requested", ld2, "BarPassFoo");
ct.expect("requested", ld2, "BarPassFoo");
+ ct.expectLoadFromSystem(ld2, "java.lang.Object");
ct.expect("defined", ld2, "<BarPassFoo>");
ct.expect("loaded", ld2, "<BarPassFoo>");
Class cls = ct.loadClass(ld2, "BarPassFoo");
ct.expect("defined", ld2, "<BarPassFoo>");
ct.expect("loaded", ld2, "<BarPassFoo>");
Class cls = ct.loadClass(ld2, "BarPassFoo");
- // linking BarPassFoo
- ct.expectLoadFromSystem(ld2, "java.lang.Object");
-
// executing BarPassFoo.passDerivedFoo: new DerivedFoo
// executing BarPassFoo.passDerivedFoo: new DerivedFoo
- ct.expectDelegationAndDefinition(ld2, ld3, "DerivedFoo");
+ ct.expectDelegation(ld2, ld3, "DerivedFoo");
// ...linking (ld3, DerivedFoo)
ct.expect("requested", ld3, "Foo");
// ...linking (ld3, DerivedFoo)
ct.expect("requested", ld3, "Foo");
- ct.expect("defined", ld3, "<Foo>");
ct.expectLoadFromSystem(ld3, "java.lang.Object");
ct.expectLoadFromSystem(ld3, "java.lang.Object");
+ ct.expect("defined", ld3, "<Foo>");
+ ct.expectDelegationDefinition(ld2, ld3, "DerivedFoo");
// executing BarPassFoo.passDerivedFoo: new BarUseFoo
// executing BarPassFoo.passDerivedFoo: new BarUseFoo
- ct.expectDelegationAndDefinition(ld2, ld1, "BarUseFoo");
+ ct.expectDelegation(ld2, ld1, "BarUseFoo");
// ...linking BarUseFoo
ct.expectLoadFromSystem(ld1, "java.lang.Object");
// ...linking BarUseFoo
ct.expectLoadFromSystem(ld1, "java.lang.Object");
+ ct.expectDelegationDefinition(ld2, ld1, "BarUseFoo");
// resolving BarUseFoo.useFoo
// the deferred subtype check ((ld2, DerivedFoo) subtypeof (ld2, Foo)) is done
// resolving BarUseFoo.useFoo
// the deferred subtype check ((ld2, DerivedFoo) subtypeof (ld2, Foo)) is done
ld2.addParentDelegation("java.lang.Object");
ld2.addParentDelegation("java.lang.String");
ld2.addParentDelegation("java.lang.Object");
ld2.addParentDelegation("java.lang.String");
+ // loading & linking BarPassFoo
ct.expect("requested", ld2, "BarPassFoo");
ct.expect("requested", ld2, "BarPassFoo");
+ ct.expectLoadFromSystem(ld2, "java.lang.Object");
ct.expect("defined", ld2, "<BarPassFoo>");
ct.expect("loaded", ld2, "<BarPassFoo>");
Class cls = ct.loadClass(ld2, "BarPassFoo");
ct.expect("defined", ld2, "<BarPassFoo>");
ct.expect("loaded", ld2, "<BarPassFoo>");
Class cls = ct.loadClass(ld2, "BarPassFoo");
- // linking BarPassFoo
- ct.expectLoadFromSystem(ld2, "java.lang.Object");
-
// executing createDerivedFoo
// executing createDerivedFoo
- ct.expectDelegationAndDefinition(ld2, ld1, "DerivedFoo");
+ ct.expectDelegation(ld2, ld1, "DerivedFoo");
// ...linking (ld2, DerivedFoo)
ct.expect("requested", ld1, "Foo");
// ...linking (ld2, DerivedFoo)
ct.expect("requested", ld1, "Foo");
- ct.expect("defined", ld1, "<Foo>");
ct.expectLoadFromSystem(ld1, "java.lang.Object");
ct.expectLoadFromSystem(ld1, "java.lang.Object");
+ ct.expect("defined", ld1, "<Foo>");
+ ct.expectDelegationDefinition(ld2, ld1, "DerivedFoo");
ct.checkStringGetter(cls, "getDerivedFoo", "no exception");
ct.expectEnd();
ct.checkStringGetter(cls, "getDerivedFoo", "no exception");
ct.expectEnd();
ld2.addParentDelegation("java.lang.Object");
ld2.addParentDelegation("java.lang.String");
ld2.addParentDelegation("java.lang.Object");
ld2.addParentDelegation("java.lang.String");
+ // loading & linking BarPassFoo
ct.expect("requested", ld2, "BarPassFoo");
ct.expect("requested", ld2, "BarPassFoo");
+ ct.expectLoadFromSystem(ld2, "java.lang.Object");
ct.expect("defined", ld2, "<BarPassFoo>");
ct.expect("loaded", ld2, "<BarPassFoo>");
Class cls = ct.loadClass(ld2, "BarPassFoo");
ct.expect("defined", ld2, "<BarPassFoo>");
ct.expect("loaded", ld2, "<BarPassFoo>");
Class cls = ct.loadClass(ld2, "BarPassFoo");
- // linking BarPassFoo
- ct.expectLoadFromSystem(ld2, "java.lang.Object");
-
// executing createDerivedFoo
// executing createDerivedFoo
- ct.expectDelegationAndDefinition(ld2, ld1, "DerivedFoo");
+ ct.expectDelegation(ld2, ld1, "DerivedFoo");
// ...linking (ld2, DerivedFoo)
ct.expect("requested", ld1, "Foo");
// ...linking (ld2, DerivedFoo)
ct.expect("requested", ld1, "Foo");
- ct.expect("defined", ld1, "<Foo>");
ct.expectLoadFromSystem(ld1, "java.lang.Object");
ct.expectLoadFromSystem(ld1, "java.lang.Object");
+ ct.expect("defined", ld1, "<Foo>");
+ ct.expectDelegationDefinition(ld2, ld1, "DerivedFoo");
ct.checkStringGetter(cls, "getDerivedFoo", "no exception");
ct.expectEnd();
ct.checkStringGetter(cls, "getDerivedFoo", "no exception");
ct.expectEnd();
ld2.addParentDelegation("java.lang.String");
ld2.addParentDelegation("java.lang.String");
+ // loading & linking BarUseFoo
ct.expect("requested", ld1, "BarUseFoo");
ct.expect("requested", ld1, "BarUseFoo");
+ ct.expectLoadFromSystem(ld1, "java.lang.Object");
ct.expect("defined", ld1, "<BarUseFoo>");
ct.expect("loaded", ld1, "<BarUseFoo>");
Class cls = ct.loadClass(ld1, "BarUseFoo");
ct.expect("defined", ld1, "<BarUseFoo>");
ct.expect("loaded", ld1, "<BarUseFoo>");
Class cls = ct.loadClass(ld1, "BarUseFoo");
- // linking BarUseFoo
- ct.expectLoadFromSystem(ld1, "java.lang.Object");
-
// executing BarUseFoo.useReturnedFoo: new BarPassFoo
// executing BarUseFoo.useReturnedFoo: new BarPassFoo
- ct.expectDelegationAndDefinition(ld1, ld2, "BarPassFoo");
+ ct.expectDelegation(ld1, ld2, "BarPassFoo");
// ...linking BarPassFoo
ct.expectLoadFromSystem(ld2, "java.lang.Object");
// ...linking BarPassFoo
ct.expectLoadFromSystem(ld2, "java.lang.Object");
+ ct.expectDelegationDefinition(ld1, ld2, "BarPassFoo");
// resolving BarPassFoo.createFoo
ct.expect("requested", ld2, "Foo");
// resolving BarPassFoo.createFoo
ct.expect("requested", ld2, "Foo");
TestLoader ld1 = new TestLoader(ClassLoader.getSystemClassLoader(), "ld1", ct);
ld1.addClassfile("BarUseFoo", "classes1/BarUseFoo.class");
TestLoader ld1 = new TestLoader(ClassLoader.getSystemClassLoader(), "ld1", ct);
ld1.addClassfile("BarUseFoo", "classes1/BarUseFoo.class");
+ ld1.addParentDelegation("java.lang.Object");
+
ct.expect("requested", ld1, "BarUseFoo");
ct.expect("requested", ld1, "BarUseFoo");
+ ct.expectLoadFromSystem(ld1, "java.lang.Object");
ct.expect("defined", ld1, "<BarUseFoo>");
ct.expect("loaded", ld1, "<BarUseFoo>");
ct.expect("defined", ld1, "<BarUseFoo>");
ct.expect("loaded", ld1, "<BarUseFoo>");
- Class cls = ct.loadClass(ld1, "BarUseFoo");
- ct.expectEnd();
- ld1.addParentDelegation("java.lang.Object");
- ct.expectLoadFromSystem(ld1, "java.lang.Object");
+ Class cls = ct.loadClass(ld1, "BarUseFoo");
ct.checkClassId(cls, "classes1/BarUseFoo");
ct.expectEnd();
ct.checkClassId(cls, "classes1/BarUseFoo");
ct.expectEnd();