* tests/regression/resolving/TestController.java: Better error messages and
[cacao.git] / tests / regression / resolving / test_param_loading_constraint_violated_derived.java
1 public class test_param_loading_constraint_violated_derived {
2
3     public static void main(String[] args) {
4         TestController ct = new TestController();
5
6         TestLoader ld1 = new TestLoader(ClassLoader.getSystemClassLoader(), "ld1", ct);
7         TestLoader ld2 = new TestLoader(ClassLoader.getSystemClassLoader(), "ld2", ct);
8         TestLoader ld3 = new TestLoader(ClassLoader.getSystemClassLoader(), "ld3", ct);
9
10         ld1.addClassfile("BarUseFoo", "classes1/BarUseFoo.class");
11         ld1.addClassfile("Foo", "classes1/Foo.class");
12         ld1.addParentDelegation("java.lang.Object");
13         ld1.addParentDelegation("java.lang.String");
14
15         ld2.addClassfile("BarPassFoo", "classes2/BarPassFoo.class");
16         ld2.addDelegation("BarUseFoo", ld1);
17         ld2.addDelegation("Foo", ld3);
18         ld2.addDelegation("DerivedFoo", ld3);
19         ld2.addParentDelegation("java.lang.Object");
20         ld2.addParentDelegation("java.lang.String");
21
22         ld3.addClassfile("Foo", "classes3/Foo.class");
23         ld3.addClassfile("DerivedFoo", "classes3/DerivedFoo.class");
24         ld3.addParentDelegation("java.lang.Object");
25         ld3.addParentDelegation("java.lang.String");
26
27
28         // loading & linking BarPassFoo
29         ct.expect("requested", ld2, "BarPassFoo");
30         ct.expectLoadFromSystem(ld2, "java.lang.Object");
31         ct.expect("defined", ld2, "<BarPassFoo>");
32         ct.expect("loaded", ld2, "<BarPassFoo>");
33
34         Class cls = ct.loadClass(ld2, "BarPassFoo");
35
36         // executing BarPassFoo.passDerivedFoo: new DerivedFoo
37         ct.expectDelegation(ld2, ld3, "DerivedFoo");
38
39         // linking (ld3, DerivedFoo)
40         ct.expect("requested", ld3, "Foo");
41         ct.expectLoadFromSystem(ld3, "java.lang.Object");
42         ct.expect("defined", ld3, "<Foo>");
43         ct.expectDelegationDefinition(ld2, ld3, "DerivedFoo");
44
45         // executing BarPassFoo.passit: new BarUseFoo
46         ct.expectDelegation(ld2, ld1, "BarUseFoo");
47
48         // linking BarUseFoo
49         ct.expectLoadFromSystem(ld1, "java.lang.Object");
50         ct.expectDelegationDefinition(ld2, ld1, "BarUseFoo");
51
52         // resolving BarUseFoo.useFoo
53         // the deferred subtype check ((ld2, DerivedFoo) subtypeof (ld2, Foo)) is done
54         ct.expectDelegationAndFound(ld2, ld3, "Foo");
55
56         // resolving Foo.virtualId() from BarUseFoo
57         ct.expect("requested", ld1, "Foo");
58
59         // the loading constraint (ld1,ld2,Foo) is violated
60         ct.expect("exception", "java.lang.LinkageError", "<BarPassFoo>");
61
62         ct.checkStringGetterMustFail(cls, "passDerivedFoo");
63
64         ct.exit();
65     }
66
67 }
68
69 // vim: et sw=4