local v=require("throw_exception")

function testException(func, except)
    local ret, msg = pcall(func)
    assert(not ret and msg == except)
end

local foo = v.Foo()
testException(function() foo:test_int() end, 37)
testException(function() foo:test_msg() end, "Dead")
testException(function() foo:test_multi(1) end, 37)
testException(function() foo:test_multi(2) end, "Dead")
testException(function() foo:test_cls() end, "object exception:CError")
testException(function() foo:test_cls_ptr() end, "object exception:CError *")
testException(function() foo:test_cls_ref() end, "object exception:CError *")
testException(function() foo:test_cls_td() end, "object exception:CError")
testException(function() foo:test_cls_ptr_td() end, "object exception:CError *")
testException(function() foo:test_cls_ref_td() end, "object exception:CError *")
testException(function() foo:test_array() end, "object exception:int *")
testException(function() foo:test_enum() end, 1)
