| module director_protected_runme; |
| |
| import director_protected.Foo; |
| import director_protected.Bar; |
| |
| void main() { |
| Bar b = new Bar(); |
| Foo f = b.create(); |
| auto fb = new FooBar(); |
| auto fb2 = new FooBar2(); |
| |
| char[] s; |
| s = fb.used(); |
| if ( s != ("Foo::pang();Bar::pong();Foo::pong();FooBar::ping();")) |
| throw new Exception("bad FooBar::used" ~ " - " ~ s); |
| |
| s = fb2.used(); |
| if ( s != ("FooBar2::pang();Bar::pong();Foo::pong();FooBar2::ping();")) |
| throw new Exception("bad FooBar2::used"); |
| |
| s = b.pong(); |
| if ( s != ("Bar::pong();Foo::pong();Bar::ping();")) |
| throw new Exception("bad Bar::pong"); |
| |
| s = f.pong(); |
| if ( s != ("Bar::pong();Foo::pong();Bar::ping();")) |
| throw new Exception("bad Foo::pong"); |
| |
| s = fb.pong(); |
| if ( s != ("Bar::pong();Foo::pong();FooBar::ping();")) |
| throw new Exception("bad FooBar::pong"); |
| } |
| |
| class FooBar : Bar { |
| protected: |
| override char[] ping() { |
| return "FooBar::ping();"; |
| } |
| } |
| |
| class FooBar2 : Bar{ |
| protected: |
| override char[] ping() { |
| return "FooBar2::ping();"; |
| } |
| |
| override char[] pang() { |
| return "FooBar2::pang();"; |
| } |
| } |