|
@@ -12,16 +12,6 @@ struct A {
|
|
|
TEST_CASE("UserTypeRegistration") {
|
|
TEST_CASE("UserTypeRegistration") {
|
|
|
luwra::StateWrapper state;
|
|
luwra::StateWrapper state;
|
|
|
luwra::registerUserType<A>(state);
|
|
luwra::registerUserType<A>(state);
|
|
|
-
|
|
|
|
|
- // Reference
|
|
|
|
|
- A* instance = new A;
|
|
|
|
|
- luwra::Value<A*>::push(state, instance);
|
|
|
|
|
-
|
|
|
|
|
- // Type checks
|
|
|
|
|
- REQUIRE(luwra::internal::check_user_type<A>(state, -1) == instance);
|
|
|
|
|
- REQUIRE(luwra::Value<A*>::read(state, -1) == instance);
|
|
|
|
|
-
|
|
|
|
|
- delete instance;
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST_CASE("UserTypeConstruction") {
|
|
TEST_CASE("UserTypeConstruction") {
|
|
@@ -68,39 +58,42 @@ TEST_CASE("UserTypeFields") {
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
// Instantiation
|
|
// Instantiation
|
|
|
- B value(1338);
|
|
|
|
|
- luwra::setGlobal(state, "val", &value);
|
|
|
|
|
|
|
+ luwra::Value<B&>::push(state, 1338);
|
|
|
|
|
+ lua_setglobal(state, "value");
|
|
|
|
|
+
|
|
|
|
|
+ B& value = luwra::getGlobal<B&>(state, "value");
|
|
|
|
|
|
|
|
// Unqualified get
|
|
// Unqualified get
|
|
|
- REQUIRE(luaL_dostring(state, "return val:n()") == 0);
|
|
|
|
|
|
|
+ REQUIRE(luaL_dostring(state, "return value:n()") == 0);
|
|
|
|
|
+ puts(lua_tostring(state, -1));
|
|
|
REQUIRE(luwra::read<int>(state, -1) == value.n);
|
|
REQUIRE(luwra::read<int>(state, -1) == value.n);
|
|
|
|
|
|
|
|
// Unqualified set
|
|
// Unqualified set
|
|
|
- REQUIRE(luaL_dostring(state, "val:n(42)") == 0);
|
|
|
|
|
|
|
+ REQUIRE(luaL_dostring(state, "value:n(42)") == 0);
|
|
|
REQUIRE(value.n == 42);
|
|
REQUIRE(value.n == 42);
|
|
|
|
|
|
|
|
// 'const'-qualified get
|
|
// 'const'-qualified get
|
|
|
- REQUIRE(luaL_dostring(state, "return val:cn()") == 0);
|
|
|
|
|
|
|
+ REQUIRE(luaL_dostring(state, "return value:cn()") == 0);
|
|
|
REQUIRE(luwra::read<int>(state, -1) == value.cn);
|
|
REQUIRE(luwra::read<int>(state, -1) == value.cn);
|
|
|
|
|
|
|
|
// 'const'-qualified set
|
|
// 'const'-qualified set
|
|
|
- REQUIRE(luaL_dostring(state, "val:cn(42)") == 0);
|
|
|
|
|
|
|
+ REQUIRE(luaL_dostring(state, "value:cn(42)") == 0);
|
|
|
REQUIRE(value.cn == 1338);
|
|
REQUIRE(value.cn == 1338);
|
|
|
|
|
|
|
|
// 'volatile' get
|
|
// 'volatile' get
|
|
|
- REQUIRE(luaL_dostring(state, "return val:vn()") == 0);
|
|
|
|
|
|
|
+ REQUIRE(luaL_dostring(state, "return value:vn()") == 0);
|
|
|
REQUIRE(luwra::read<int>(state, -1) == value.vn);
|
|
REQUIRE(luwra::read<int>(state, -1) == value.vn);
|
|
|
|
|
|
|
|
// 'volatile' set
|
|
// 'volatile' set
|
|
|
- REQUIRE(luaL_dostring(state, "val:vn(42)") == 0);
|
|
|
|
|
|
|
+ REQUIRE(luaL_dostring(state, "value:vn(42)") == 0);
|
|
|
REQUIRE(value.vn == 42);
|
|
REQUIRE(value.vn == 42);
|
|
|
|
|
|
|
|
// 'const volatile'-qualified get
|
|
// 'const volatile'-qualified get
|
|
|
- REQUIRE(luaL_dostring(state, "return val:cvn()") == 0);
|
|
|
|
|
|
|
+ REQUIRE(luaL_dostring(state, "return value:cvn()") == 0);
|
|
|
REQUIRE(luwra::read<int>(state, -1) == value.cvn);
|
|
REQUIRE(luwra::read<int>(state, -1) == value.cvn);
|
|
|
|
|
|
|
|
// 'const volatile'-qualified set
|
|
// 'const volatile'-qualified set
|
|
|
- REQUIRE(luaL_dostring(state, "val:cvn(42)") == 0);
|
|
|
|
|
|
|
+ REQUIRE(luaL_dostring(state, "value:cvn(42)") == 0);
|
|
|
REQUIRE(value.cvn == 1338);
|
|
REQUIRE(value.cvn == 1338);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -143,8 +136,10 @@ TEST_CASE("UserTypeMethods") {
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
// Instantiation
|
|
// Instantiation
|
|
|
- C value(1337);
|
|
|
|
|
- luwra::setGlobal(state, "value", &value);
|
|
|
|
|
|
|
+ luwra::Value<C&>::push(state, 1337);
|
|
|
|
|
+ lua_setglobal(state, "value");
|
|
|
|
|
+
|
|
|
|
|
+ C& value = luwra::getGlobal<C&>(state, "value");
|
|
|
|
|
|
|
|
// Unqualified method
|
|
// Unqualified method
|
|
|
REQUIRE(luaL_dostring(state, "return value:foo1(63)") == 0);
|
|
REQUIRE(luaL_dostring(state, "return value:foo1(63)") == 0);
|
|
@@ -185,22 +180,3 @@ TEST_CASE("UserTypeGarbageCollectionRef") {
|
|
|
lua_close(state);
|
|
lua_close(state);
|
|
|
REQUIRE(shared_var.use_count() == 1);
|
|
REQUIRE(shared_var.use_count() == 1);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-TEST_CASE("UserTypeGarbageCollectionPtr") {
|
|
|
|
|
- lua_State* state = luaL_newstate();
|
|
|
|
|
-
|
|
|
|
|
- // Registration
|
|
|
|
|
- luwra::registerUserType<std::shared_ptr<int>>(state);
|
|
|
|
|
-
|
|
|
|
|
- // Instantiation
|
|
|
|
|
- std::shared_ptr<int> shared_var = std::make_shared<int>(1337);
|
|
|
|
|
- REQUIRE(shared_var.use_count() == 1);
|
|
|
|
|
-
|
|
|
|
|
- // Reference
|
|
|
|
|
- luwra::push(state, &shared_var);
|
|
|
|
|
- REQUIRE(shared_var.use_count() == 1);
|
|
|
|
|
-
|
|
|
|
|
- // Garbage collection
|
|
|
|
|
- lua_close(state);
|
|
|
|
|
- REQUIRE(shared_var.use_count() == 1);
|
|
|
|
|
-}
|
|
|