swig/Examples/test-suite/ocaml/throw_exception_runme.ml
Zackery Spytz e5b8b5a164 [OCaml] Some exception improvements
The OCaml module's exception handling code was poorly designed,
gave confusing exception messages, and was vulnerable to buffer
overflows.

The OCaml module's SWIG_exception_() was adding a useless newline to
the end of the exception message.

In some cases, the integer value of f.e. SWIG_TypeError was being added
to the exception message.

The unneeded else in the OCaml module's SWIG_contract_assert() macro
was causing -Wmisleading-indentation warnings.

The OCaml module's exception handling code now mirrors that of the
Java module.

Add Lib/ocaml/std_except.i.
Add multiple runtime tests.
2019-02-07 16:25:10 -07:00

25 lines
983 B
OCaml

open Swig
open Throw_exception
let x = new_Foo '()
let check meth args expected =
try
let _ = ((invoke x) meth (C_list [ args ])) in assert false
with Failure msg -> assert (msg = expected)
let _ =
check "test_int" '() "C++ int exception thrown, value: 37";
check "test_msg" '() "Dead";
check "test_cls" '() "C++ CError exception thrown";
check "test_cls_ptr" '() "C++ CError * exception thrown";
check "test_cls_ref" '() "C++ CError & exception thrown";
check "test_cls_td" '() "C++ Namespace::ErrorTypedef exception thrown";
check "test_cls_ptr_td" '() "C++ Namespace::ErrorPtr exception thrown";
check "test_cls_ref_td" '() "C++ Namespace::ErrorRef exception thrown";
check "test_array" '() "C++ int [10] exception thrown";
check "test_enum" '() "C++ Namespace::EnumTest exception thrown";
check "test_multi" '(1) "C++ int exception thrown, value: 37";
check "test_multi" '(2) "Dead";
check "test_multi" '(3) "C++ CError exception thrown";
;;