1 module director_protected_runme; 2 3 import std.exception; 4 import director_protected.Foo; 5 import director_protected.Bar; 6 main()7void 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