1 module director_protected_runme;
2 
3 import std.exception;
4 import director_protected.Foo;
5 import director_protected.Bar;
6 
main()7 void main() {
8   Bar b = new Bar();
9   Foo f = b.create();
10   auto fb = new FooBar();
11   scope fb2 = new FooBar2();
12 
13   enforce(fb.used() == "Foo::pang();Bar::pong();Foo::pong();FooBar::ping();", "bad FooBar::used" ~ " - " ~ fb.used());
14   enforce(fb2.used() == "FooBar2::pang();Bar::pong();Foo::pong();FooBar2::ping();", "bad FooBar2::used");
15   enforce(b.pong() == "Bar::pong();Foo::pong();Bar::ping();", "bad Bar::pong");
16   enforce(f.pong() == "Bar::pong();Foo::pong();Bar::ping();", "bad Foo::pong");
17   enforce(fb.pong() == "Bar::pong();Foo::pong();FooBar::ping();", "bad FooBar::pong");
18 }
19 
20 class FooBar : Bar {
21 protected:
ping()22   override string ping() {
23     return "FooBar::ping();";
24   }
25 }
26 
27 class FooBar2 : Bar {
28 protected:
ping()29   override string ping() {
30     return "FooBar2::ping();";
31   }
32 
pang()33   override string pang() {
34     return "FooBar2::pang();";
35   }
36 }
37