diff options
Diffstat (limited to 'libtests/qexc.cc')
-rw-r--r-- | libtests/qexc.cc | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/libtests/qexc.cc b/libtests/qexc.cc new file mode 100644 index 00000000..db12d39c --- /dev/null +++ b/libtests/qexc.cc @@ -0,0 +1,65 @@ + +#include <qpdf/QEXC.hh> +#include <iostream> +#include <errno.h> + +void do_terminate() +{ + try + { + throw; + } + catch (std::exception& e) + { + std::cerr << "uncaught exception: " << e.what() << std::endl; + exit(3); + } + exit(4); +} + +void f(int n) +{ + switch (n) + { + case 0: + throw QEXC::General("general exception"); + break; + + case 1: + throw QEXC::Internal("internal error"); + break; + + case 2: + throw QEXC::System("doing something", EINVAL); + break; + + case 3: + { + int a = -1; + new char[a]; + } + break; + } +} + +int main(int argc, char* argv[]) +{ + std::set_terminate(do_terminate); + if (argc != 2) + { + std::cerr << "usage: qexc n" << std::endl; + exit(2); + } + + try + { + f(atoi(argv[1])); + } + catch (QEXC::General& e) + { + std::cerr << "exception: " << e.unparse() << std::endl; + std::cerr << "what: " << e.what() << std::endl; + exit(2); + } + return 0; +} |