-- test lua script to be run with the luabridge test program
print("Running LuaBridge tests:");
-- enum from C++
FN_CTOR = 0
FN_DTOR = 1
FN_STATIC = 2
FN_VIRTUAL = 3
FN_PROPGET = 4
FN_PROPSET = 5
FN_STATIC_PROPGET = 6
FN_STATIC_PROPSET = 7
FN_OPERATOR = 8
NUM_FN_TYPES = 9
-- function to print contents of a table
function printtable (t)
for k, v in pairs(t) do
if (type(v) == "table") then
print(k .. " =>", "(table)");
elseif (type(v) == "function") then
print(k .. " =>", "(function)");
elseif (type(v) == "userdata") then
print(k .. " =>", "(userdata)");
else
print(k .. " =>", v);
end
end
end
function assert (expr)
if (not expr) then error("assert failed", 2) end
end
-- test functions registered from C++
assert(testSucceeded());
assert(testRetInt() == 47);
assert(testRetFloat() == 47.0);
assert(testRetConstCharPtr() == "Hello, world");
assert(testRetStdString() == "Hello, world");
testParamInt(47); assert(testSucceeded());
testParamBool(true); assert(testSucceeded());
testParamFloat(47.0); assert(testSucceeded());
testParamConstCharPtr("Hello, world"); assert(testSucceeded());
testParamStdString("Hello, world"); assert(testSucceeded());
testParamStdStringRef("Hello, world"); assert(testSucceeded());
-- test static methods of classes registered from C++
A.testStatic(); assert(testAFnCalled(FN_STATIC));
B.testStatic(); assert(testAFnCalled(FN_STATIC));
B.testStatic2(); assert(testBFnCalled(FN_STATIC));
-- test static properties of classes registered from C++
assert(A.testStaticProp == 47);
assert(A.testStaticProp2 == 47);assert(testAFnCalled(FN_STATIC_PROPGET));
A.testStaticProp = 48; assert(A.testStaticProp == 48);
A.testStaticProp2 = 49; assert(testAFnCalled(FN_STATIC_PROPSET) and A.testStaticProp2 == 49);
-- test classes registered from C++
object1 = A("object1"); assert(testAFnCalled(FN_CTOR));
object1:testVirtual(); assert(testAFnCalled(FN_VIRTUAL));
object2 = B("object2"); assert(testAFnCalled(FN_CTOR) and testBFnCalled(FN_CTOR));
object2:testVirtual(); assert(testBFnCalled(FN_VIRTUAL) and not testAFnCalled(FN_VIRTUAL));
-- test functions taking and returning objects
testParamAPtr(object1); assert(object1:testSucceeded());
testParamAPtrConst(object1); assert(object1:testSucceeded());
testParamConstAPtr(object1); assert(object1:testSucceeded());
testParamSharedPtrA(object1); assert(object1:testSucceeded());
testParamAPtr(object2); assert(object2:testSucceeded());
testParamAPtrConst(object2); assert(object2:testSucceeded());
testParamConstAPtr(object2); assert(object2:testSucceeded());
testParamSharedPtrA(object2); assert(object2:testSucceeded());
result = testRetSharedPtrA(); assert(result:getName() == "from C");
-- test constness
constA = testRetSharedPtrConstA(); assert(constA:getName() == "const A");
assert(constA.testVirtual == nil);
testParamConstAPtr(constA); assert(constA:testSucceeded());
assert(pcall(testParamAPtr, constA) == false, "attempt to call nil value");
-- test properties
assert(object1.testProp == 47);
assert(object1.testProp2 == 47); assert(testAFnCalled(FN_PROPGET));
assert(object2.testProp == 47);
assert(object2.testProp2 == 47); assert(testAFnCalled(FN_PROPGET));
object1.testProp = 48; assert(object1.testProp == 48);
object1.testProp2 = 49; assert(testAFnCalled(FN_PROPSET) and object1.testProp2 == 49);
-- test operator overload
object1a = object1 + object1; assert(testAFnCalled(FN_OPERATOR));
assert(object1a:getName() == "object1 + object1");
print("All tests succeeded.");