diff options
author | Andy Belle-Isle <drumsetmonkey@gmail.com> | 2019-08-28 00:57:57 -0400 |
---|---|---|
committer | Andy Belle-Isle <drumsetmonkey@gmail.com> | 2019-08-28 00:57:57 -0400 |
commit | 85fb2bff38b2ef6cb17e86c5f602ee09a365b117 (patch) | |
tree | a8066d33233ec9b6a2b9bb281a1de040ab96be7b /lib/LuaBridge/Tests/Source/RefCountedPtrTests.cpp | |
parent | 787393dd86d6c37b5680847dd4eef14406a86687 (diff) |
Added LuaBridge support
Diffstat (limited to 'lib/LuaBridge/Tests/Source/RefCountedPtrTests.cpp')
-rw-r--r-- | lib/LuaBridge/Tests/Source/RefCountedPtrTests.cpp | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/lib/LuaBridge/Tests/Source/RefCountedPtrTests.cpp b/lib/LuaBridge/Tests/Source/RefCountedPtrTests.cpp new file mode 100644 index 0000000..4e5f582 --- /dev/null +++ b/lib/LuaBridge/Tests/Source/RefCountedPtrTests.cpp @@ -0,0 +1,110 @@ +// https://github.com/vinniefalco/LuaBridge +// +// Copyright 2019, Dmitry Tarakanov +// SPDX-License-Identifier: MIT + +#include "TestBase.h" + +#include "LuaBridge/RefCountedPtr.h" + + +struct RefCountedPtrTests : TestBase +{ + template <class T> + T variable(const std::string& name) + { + runLua("result = " + name); + return result().cast <T>(); + } +}; + +namespace { + +struct RefCounted : luabridge::RefCountedObject +{ + explicit RefCounted(bool& deleted) + : deleted (deleted) + { + deleted = false; + } + + ~RefCounted() + { + deleted = true; + } + + bool isDeleted () const + { + return deleted; + } + + bool& deleted; +}; + +} // namespace + +TEST_F (RefCountedPtrTests, Operators) +{ + bool deleted1 = false; + auto* raw_ptr1 = new RefCounted (deleted1); + luabridge::RefCountedObjectPtr <RefCounted> ptr1 (raw_ptr1); + + bool deleted2 = false; + auto* raw_ptr2 = new RefCounted (deleted2); + luabridge::RefCountedObjectPtr <RefCounted> ptr2 (raw_ptr2); + + ASSERT_TRUE (raw_ptr1 == ptr1.getObject ()); + ASSERT_TRUE (ptr1.getObject () == raw_ptr1); +} + +TEST_F (RefCountedPtrTests, LastReferenceInLua) +{ + luabridge::getGlobalNamespace (L) + .beginClass <RefCounted> ("Class") + .addProperty ("deleted", &RefCounted::isDeleted) + .endClass (); + + bool deleted = false; + + luabridge::RefCountedObjectPtr <RefCounted> object (new RefCounted (deleted)); + + luabridge::setGlobal (L, object, "object"); + runLua("result = object.deleted"); + ASSERT_EQ (true, result ().isBool ()); + ASSERT_EQ (false, result <bool> ()); + + object = nullptr; + runLua("result = object.deleted"); + ASSERT_EQ(true, result ().isBool ()); + ASSERT_EQ(false, result <bool>()); + ASSERT_EQ(false, deleted); + + runLua ("object = nil"); + lua_gc (L, LUA_GCCOLLECT, 1); + + ASSERT_EQ (true, deleted); +} + +TEST_F (RefCountedPtrTests, LastReferenceInCpp) +{ + luabridge::getGlobalNamespace (L) + .beginClass <RefCounted> ("Class") + .addProperty ("deleted", &RefCounted::isDeleted) + .endClass (); + + bool deleted = false; + + luabridge::RefCountedObjectPtr <RefCounted> object (new RefCounted (deleted)); + + luabridge::setGlobal (L, object, "object"); + runLua("result = object.deleted"); + ASSERT_EQ (true, result ().isBool ()); + ASSERT_EQ (false, result <bool> ()); + + runLua ("object = nil"); + lua_gc (L, LUA_GCCOLLECT, 1); + ASSERT_EQ(false, deleted); + + object = nullptr; + ASSERT_EQ (true, deleted); +} |