aboutsummaryrefslogtreecommitdiffstats
path: root/libtests/qexc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libtests/qexc.cc')
-rw-r--r--libtests/qexc.cc65
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;
+}