void LoggerSingleton::LoggerBinder::reg( LuaStatePtr state ) { using namespace luabind; module( state.get() ) [ def( "log", &LoggerSingleton::LoggerBinder::logWrapper ) ]; }
TEST(UserDataTest, MethodsOnly) { auto L = GL.get(); const char chunk[] = "return function(obj)\n" " return obj:value()\n" "end\n"; ASSERT_EQ(0, luaL_loadstring(L, chunk)); ASSERT_EQ(0, lua_pcall(L, 0, 1, 0)) << luaGetChecked<folly::StringPiece>(L, -1); pushUserData<TestObjectMethodsOnly>(L); ASSERT_EQ(0, lua_pcall(L, 1, 1, 0)) << luaGetChecked<folly::StringPiece>(L, -1); EXPECT_EQ(42, luaGetChecked<int>(L, -1)); lua_pop(L, 1); }
TEST(UserDataTest, Destruction) { TestObject::destructorCalled = false; TestObject::gcCalled = false; auto L = GL.get(); auto& obj = pushUserData<TestObject>(L, 42); EXPECT_EQ(42, obj.x); auto p = getUserData<TestObject>(L, -1); EXPECT_EQ(&obj, p); EXPECT_FALSE(TestObject::gcCalled); EXPECT_FALSE(TestObject::destructorCalled); lua_pop(L, 1); lua_gc(L, LUA_GCCOLLECT, 0); lua_gc(L, LUA_GCCOLLECT, 0); EXPECT_TRUE(TestObject::gcCalled); EXPECT_TRUE(TestObject::destructorCalled); }
TEST(SimpleObjectTest, Simple) { auto L = GL.get(); auto& obj = pushObject<SimpleTestObject>(L, 42); EXPECT_EQ(42, obj.x); EXPECT_EQ(&obj, getObject<SimpleTestObject>(L, -1)); EXPECT_EQ(&obj, &getObjectChecked<SimpleTestObject>(L, -1)); lua_gc(L, LUA_GCCOLLECT, 0); lua_gc(L, LUA_GCCOLLECT, 0); EXPECT_FALSE(SimpleTestObject::destructorCalled); lua_pop(L, 1); lua_gc(L, LUA_GCCOLLECT, 0); lua_gc(L, LUA_GCCOLLECT, 0); EXPECT_TRUE(SimpleTestObject::destructorCalled); }
TEST(UserDataTest, MethodsAndIndex) { auto L = GL.get(); const char chunk[] = "return function(obj)\n" " obj.y = 100\n" " return obj:value(), #obj, obj.y\n" "end\n"; ASSERT_EQ(0, luaL_loadstring(L, chunk)); ASSERT_EQ(0, lua_pcall(L, 0, 1, 0)) << luaGetChecked<folly::StringPiece>(L, -1); pushUserData<TestObject>(L, 42); ASSERT_EQ(0, lua_pcall(L, 1, 3, 0)) << luaGetChecked<folly::StringPiece>(L, -1); EXPECT_EQ(42, luaGetChecked<int>(L, -3)); EXPECT_EQ(10, luaGetChecked<int>(L, -2)); EXPECT_EQ(100, luaGetChecked<int>(L, -1)); lua_pop(L, 3); }
void OsgAppProxy::bindToLua(LuaStatePtr & state) { // Bind this class if (state) { #ifdef VERBOSE VRJLUA_MSG_START(dbgVRJLUA_PROXY, MSG_STATUS) << "Registering vrj.OsgAppProxy with Lua" << VRJLUA_MSG_END(dbgVRJLUA_PROXY, MSG_STATUS); #endif using namespace luabind; module(state.get(), "vrjApp") [ class_<OsgAppProxy>("OsgAppProxy") .def(constructor<>()) .def("setAppDelegate", & OsgAppProxy::setAppDelegate) .def("getAppDelegate", & OsgAppProxy::getAppDelegate) .def("setActiveApplication", & OsgAppProxy::setActiveApplication) .def("getScene", & OsgAppProxy::getScene) .def("getTimeDelta", & OsgAppProxy::getTimeDelta) ]; } }
SynchronizedRunBuffer::SynchronizedRunBuffer(LuaStatePtr const& state) : _init(false) { /// @todo own this state? How? _state = state.get(); }
void LuaPath::addLuaRequirePath(LuaStatePtr state, std::string const& dirEndingInSlash) { LuaSearchPathUpdater searchpath(state.get()); searchpath.extend(SearchDirectory(dirEndingInSlash)); }