module li_std_except_runme; import tango.core.Exception; import tango.io.Console; import li_std_except.Test; void main() { with (new Test()) { mixin(test("Exception", "throw_bad_exception")); mixin(test("Exception", "throw_domain_error")); mixin(test("Exception", "throw_exception")); mixin(test("IllegalArgumentException", "throw_invalid_argument")); mixin(test("NoSuchElementException", "throw_length_error")); mixin(test("Exception", "throw_logic_error")); mixin(test("NoSuchElementException", "throw_out_of_range")); mixin(test("Exception", "throw_overflow_error")); mixin(test("Exception", "throw_range_error")); mixin(test("Exception", "throw_runtime_error")); mixin(test("Exception", "throw_underflow_error")); } } char[] test(char[] e, char[] f) { return "if (!works!(" ~ e ~ ")(&" ~ f ~ ")) {\n" ~ "throw new Exception(\"" ~ f ~ " failed\");\n" ~ "}"; } bool works(alias E, F)(F f) { try { try { f(); } catch(E) { return true; } } catch(Exception e) { Cerr( "Received wrong exception: " ~ e.classinfo.name ).newline; } return false; }