Пример #1
0
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"));
}
Пример #2
0
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> ());
}
Пример #3
0
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;
}
Пример #4
0
TEST_F (NamespaceTests, StdCallFunctions)
{
  luabridge::getGlobalNamespace (L)
    .addFunction ("StdCall", &StdCall);

  runLua ("result = StdCall (2)");
  ASSERT_TRUE (result ().isNumber ());
  ASSERT_EQ (12, result <int> ());
}
Пример #5
0
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> ());
}
Пример #6
0
 T variable (const std::string& name)
 {
   runLua ("result = " + name);
   return result <T> ();
 }