mirror of https://github.com/swig/swig.git
59 lines
2.1 KiB
Lua
59 lines
2.1 KiB
Lua
-- Test director_exception for Lua
|
|
-- Tests exception handling with directors
|
|
|
|
require("director_exception")
|
|
|
|
-- Use the SWIG-provided helper function for cleaner code
|
|
-- swig_override(obj, methodName, func) - sets a method override
|
|
|
|
--print("=== Test 1: Director method that throws an error ===")
|
|
local foo1 = director_exception.Foo()
|
|
swig_override(foo1, "ping", function(self)
|
|
error("MyFoo::ping() EXCEPTION")
|
|
end)
|
|
|
|
local laundered1 = director_exception.launder(foo1)
|
|
local ok, err = pcall(function()
|
|
laundered1:pong()
|
|
end)
|
|
assert(not ok, "Exception should have been thrown")
|
|
--print("Caught expected exception: " .. tostring(err))
|
|
assert(string.find(tostring(err), "EXCEPTION") ~= nil, "Exception message should contain 'EXCEPTION'")
|
|
|
|
--print("\n=== Test 2: Director method that returns wrong type ===")
|
|
local foo2 = director_exception.Foo()
|
|
swig_override(foo2, "ping", function(self)
|
|
return 12345 -- Wrong type: number instead of string
|
|
end)
|
|
|
|
local laundered2 = director_exception.launder(foo2)
|
|
local ok2, err2 = pcall(function()
|
|
laundered2:pong()
|
|
end)
|
|
-- This might or might not throw depending on how strict the type checking is
|
|
--[[if not ok2 then
|
|
print("Caught type mismatch error (expected): " .. tostring(err2))
|
|
else
|
|
print("No error thrown for type mismatch (might be ok if auto-conversion happens)")
|
|
end]]
|
|
|
|
--print("\n=== Test 3: Normal director method call ===")
|
|
local foo3 = director_exception.Foo()
|
|
swig_override(foo3, "ping", function(self)
|
|
return "LuaFoo::ping()"
|
|
end)
|
|
|
|
local laundered3 = director_exception.launder(foo3)
|
|
local result = laundered3:pong()
|
|
--print("foo3:pong() = " .. result)
|
|
assert(result == "Foo::pong();LuaFoo::ping()", "Expected 'Foo::pong();LuaFoo::ping()' but got '" .. result .. "'")
|
|
|
|
--print("\n=== Test 4: Base class method (no override) ===")
|
|
local foo4 = director_exception.Foo()
|
|
local laundered4 = director_exception.launder(foo4)
|
|
local result4 = laundered4:pong()
|
|
--print("foo4:pong() (no override) = " .. result4)
|
|
assert(result4 == "Foo::pong();Foo::ping()", "Expected 'Foo::pong();Foo::ping()' but got '" .. result4 .. "'")
|
|
|
|
--print("\n=== All director_exception tests passed! ===")
|