aboutsummaryrefslogtreecommitdiff
path: root/Examples/test-suite/lua/exception_memory_leak_runme.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/lua/exception_memory_leak_runme.lua')
-rw-r--r--Examples/test-suite/lua/exception_memory_leak_runme.lua29
1 files changed, 29 insertions, 0 deletions
diff --git a/Examples/test-suite/lua/exception_memory_leak_runme.lua b/Examples/test-suite/lua/exception_memory_leak_runme.lua
new file mode 100644
index 000000000..f3fc0f27b
--- /dev/null
+++ b/Examples/test-suite/lua/exception_memory_leak_runme.lua
@@ -0,0 +1,29 @@
+require("import") -- the import fn
+import("exception_memory_leak") -- import code
+eml=exception_memory_leak --alias
+
+-- catch "undefined" global variables
+local env = _ENV -- Lua 5.2
+if not env then env = getfenv () end -- Lua 5.1
+setmetatable(env, {__index=function (t,i) error("undefined global variable `"..i.."'",2) end})
+
+a = eml.Foo()
+assert(eml.Foo_get_count() == 1)
+b = eml.Foo()
+assert(eml.Foo_get_count() == 2)
+
+-- Normal behaviour
+eml.trigger_internal_swig_exception("no problem", a)
+assert(eml.Foo_get_count() == 2)
+assert(eml.Foo_get_freearg_count() == 1)
+
+-- SWIG exception triggered and handled (return new object case)
+ok,ex=pcall(eml.trigger_internal_swig_exception, "null", b)
+assert(ok==false)
+assert(eml.Foo_get_count() == 2)
+assert(eml.Foo_get_freearg_count() == 2)
+
+-- SWIG exception triggered and handled (return by value case).
+ok,ex=pcall(eml.trigger_internal_swig_exception, "null")
+assert(ok==false)
+assert(eml.Foo_get_count() == 2)