* tests/regression/resolving/TestController.java: Better error messages and
[cacao.git] / tests / regression / resolving / test_retval_loading_constraint_violated.java
1 public class test_retval_loading_constraint_violated {
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
9         ld1.addClassfile("BarUseFoo", "classes1/BarUseFoo.class");
10         ld1.addClassfile("Foo", "classes1/Foo.class");
11         ld1.addDelegation("BarPassFoo", ld2);
12         ld1.addParentDelegation("java.lang.Object");
13         ld1.addParentDelegation("java.lang.String");
14
15         ld2.addClassfile("BarPassFoo", "classes2/BarPassFoo.class");
16         ld2.addClassfile("Foo", "classes2/Foo.class");
17         ld2.addParentDelegation("java.lang.Object");
18         ld2.addParentDelegation("java.lang.String");
19
20
21         // loading & linking BarUseFoo
22         ct.expect("requested", ld1, "BarUseFoo");
23         ct.expectLoadFromSystem(ld1, "java.lang.Object");
24         ct.expect("defined", ld1, "<BarUseFoo>");
25         ct.expect("loaded", ld1, "<BarUseFoo>");
26
27         Class cls = ct.loadClass(ld1, "BarUseFoo");
28
29         // executing BarUseFoo.useReturnedFoo: new BarPassFoo
30         ct.expectDelegation(ld1, ld2, "BarPassFoo");
31         // ...linking BarPassFoo
32         ct.expectLoadFromSystem(ld2, "java.lang.Object");
33         ct.expectDelegationDefinition(ld1, ld2, "BarPassFoo");
34
35         // resolving BarPassFoo.createFoo
36         ct.expect("requested", ld2, "Foo");
37         ct.expect("defined", ld2, "<Foo>");
38         ct.expect("requested", ld1, "Foo");
39         // ...the loading constraing (ld1,ld2,Foo) is violated
40         ct.expect("exception", "java.lang.LinkageError", "<BarUseFoo>");
41
42         ct.checkStringGetterMustFail(cls, "useReturnedFoo");
43
44         ct.exit();
45     }
46
47 }
48
49 // vim: et sw=4