TEST_F (NamespaceTests, ReadOnlyVariables) { int int_ = -10; auto any = luabridge::newTable (L); any ["a"] = 1; ASSERT_THROW ( luabridge::getGlobalNamespace (L).addProperty ("int", &int_), std::logic_error); runLua ("result = int"); ASSERT_TRUE (result ().isNil ()); luabridge::getGlobalNamespace (L) .beginNamespace ("ns") .addProperty ("int", &int_, false) .addProperty ("any", &any, false) .endNamespace (); ASSERT_EQ (-10, variable <int> ("ns.int")); ASSERT_EQ (any, variable <luabridge::LuaRef> ("ns.any")); ASSERT_THROW (runLua ("ns.int = -20"), std::runtime_error); ASSERT_EQ (-10, variable <int> ("ns.int")); ASSERT_THROW (runLua ("ns.any = {b = 2}"), std::runtime_error); ASSERT_EQ (any, variable <luabridge::LuaRef> ("ns.any")); }
TEST_F (NamespaceTests, Variables) { int int_ = -10; auto any = luabridge::newTable (L); any ["a"] = 1; ASSERT_THROW ( luabridge::getGlobalNamespace (L).addProperty ("int", &int_), std::logic_error); runLua ("result = int"); ASSERT_TRUE (result ().isNil ()); luabridge::getGlobalNamespace (L) .beginNamespace ("ns") .addProperty ("int", &int_) .addProperty ("any", &any) .endNamespace (); ASSERT_EQ (-10, variable <int> ("ns.int")); ASSERT_EQ (any, variable <luabridge::LuaRef> ("ns.any")); runLua ("ns.int = -20"); ASSERT_EQ (-20, int_); runLua ("ns.any = {b = 2}"); ASSERT_TRUE (any.isTable ()); ASSERT_TRUE (any ["b"].isNumber ()); ASSERT_EQ (2, any ["b"].cast <int> ()); }
int main(int argc, char** argv) { std::string filename = "scene.lua"; if (argc == 2) { filename = argv[1]; std::cerr << "running " << filename << std::endl; } else if (argc != 1) { goto invalidUsage; } Stats::sharedStats().init(); if (!runLua(filename)) { std::cerr << "Could not open " << filename << std::endl; return 1; } Stats::sharedStats().exit(); return 0; invalidUsage: std::cerr << "Usage:" << std::endl << "rt : \t\twill run non-interactively using scene.lua" << std::endl << "rt -i : \twill run interactively using scene.lua" << std::endl << "rt file.lua : \twill run non-interactively using file.lua" << std::endl << "rt -i file.lua: will run interactively using file.lua" << std::endl; return -1; }
TEST_F (NamespaceTests, StdCallFunctions) { luabridge::getGlobalNamespace (L) .addFunction ("StdCall", &StdCall); runLua ("result = StdCall (2)"); ASSERT_TRUE (result ().isNumber ()); ASSERT_EQ (12, result <int> ()); }
TEST_F (NamespaceTests, Properties) { setProperty <int> (-10); ASSERT_THROW ( luabridge::getGlobalNamespace (L) .addProperty ("int", &getProperty <int>, &setProperty <int>), std::logic_error); runLua ("result = int"); ASSERT_TRUE (result ().isNil ()); luabridge::getGlobalNamespace (L) .beginNamespace ("ns") .addProperty ("int", &getProperty <int>, &setProperty <int>) .endNamespace (); ASSERT_EQ (-10, variable <int> ("ns.int")); runLua ("ns.int = -20"); ASSERT_EQ (-20, getProperty <int> ()); }
T variable (const std::string& name) { runLua ("result = " + name); return result <T> (); }