| module director_protected_runme; |
| |
| import std.exception; |
| import director_protected.Foo; |
| import director_protected.Bar; |
| |
| void main() { |
| Bar b = new Bar(); |
| Foo f = b.create(); |
| auto fb = new FooBar(); |
| scope fb2 = new FooBar2(); |
| |
| enforce(fb.used() == "Foo::pang();Bar::pong();Foo::pong();FooBar::ping();", "bad FooBar::used" ~ " - " ~ fb.used()); |
| enforce(fb2.used() == "FooBar2::pang();Bar::pong();Foo::pong();FooBar2::ping();", "bad FooBar2::used"); |
| enforce(b.pong() == "Bar::pong();Foo::pong();Bar::ping();", "bad Bar::pong"); |
| enforce(f.pong() == "Bar::pong();Foo::pong();Bar::ping();", "bad Foo::pong"); |
| enforce(fb.pong() == "Bar::pong();Foo::pong();FooBar::ping();", "bad FooBar::pong"); |
| } |
| |
| class FooBar : Bar { |
| protected: |
| override string ping() { |
| return "FooBar::ping();"; |
| } |
| } |
| |
| class FooBar2 : Bar { |
| protected: |
| override string ping() { |
| return "FooBar2::ping();"; |
| } |
| |
| override string pang() { |
| return "FooBar2::pang();"; |
| } |
| } |