test(plugins): check unwinding and version (#6586)
This commit is contained in:
@@ -14,6 +14,7 @@ Checks: "-*,
|
|||||||
cert-*,
|
cert-*,
|
||||||
cppcoreguidelines-*,
|
cppcoreguidelines-*,
|
||||||
-cppcoreguidelines-pro-type-cstyle-cast,
|
-cppcoreguidelines-pro-type-cstyle-cast,
|
||||||
|
-cppcoreguidelines-pro-type-vararg,
|
||||||
-cppcoreguidelines-pro-bounds-pointer-arithmetic,
|
-cppcoreguidelines-pro-bounds-pointer-arithmetic,
|
||||||
-cppcoreguidelines-pro-bounds-array-to-pointer-decay,
|
-cppcoreguidelines-pro-bounds-array-to-pointer-decay,
|
||||||
-cppcoreguidelines-owning-memory,
|
-cppcoreguidelines-owning-memory,
|
||||||
|
|||||||
@@ -47,6 +47,7 @@
|
|||||||
- Dev: Refactored split container nodes to use shared pointers. (#6435)
|
- Dev: Refactored split container nodes to use shared pointers. (#6435)
|
||||||
- Dev: Mock headers are now added as a header set if supported by CMake. (#6561)
|
- Dev: Mock headers are now added as a header set if supported by CMake. (#6561)
|
||||||
- Dev: Set settings directory to temporary one used in tests. (#6584)
|
- Dev: Set settings directory to temporary one used in tests. (#6584)
|
||||||
|
- Dev: Check Lua unwinding and version in tests. (#6586)
|
||||||
|
|
||||||
## 2.5.4
|
## 2.5.4
|
||||||
|
|
||||||
|
|||||||
@@ -973,6 +973,59 @@ TEST_F(PluginTest, ChannelAddMessage)
|
|||||||
ASSERT_EQ(added[5].first, logged[2]);
|
ASSERT_EQ(added[5].first, logged[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Test that both C++ exceptions and luaL_error properly unwind the stack.
|
||||||
|
TEST_F(PluginTest, LuaUnwind)
|
||||||
|
{
|
||||||
|
configure();
|
||||||
|
|
||||||
|
size_t i = 0;
|
||||||
|
lua->set_function(
|
||||||
|
"do_something",
|
||||||
|
[&](sol::this_state state, bool should_error, bool use_lua_error) {
|
||||||
|
auto g = qScopeGuard([&] {
|
||||||
|
++i;
|
||||||
|
});
|
||||||
|
if (should_error)
|
||||||
|
{
|
||||||
|
if (use_lua_error)
|
||||||
|
{
|
||||||
|
luaL_error(state.lua_state(), "My message");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw std::runtime_error("My message");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
ASSERT_EQ(i, 0);
|
||||||
|
|
||||||
|
ASSERT_TRUE(lua->do_string("do_something(false, false)").valid());
|
||||||
|
ASSERT_EQ(i, 1);
|
||||||
|
|
||||||
|
ASSERT_TRUE(lua->do_string("do_something(false, true)").valid());
|
||||||
|
ASSERT_EQ(i, 2);
|
||||||
|
|
||||||
|
ASSERT_FALSE(lua->do_string("do_something(true, false)").valid());
|
||||||
|
ASSERT_EQ(i, 3);
|
||||||
|
|
||||||
|
ASSERT_FALSE(lua->do_string("do_something(true, true)").valid());
|
||||||
|
ASSERT_EQ(i, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Test that we're running with the Lua version we're compiled against.
|
||||||
|
TEST_F(PluginTest, LuaVersion)
|
||||||
|
{
|
||||||
|
configure();
|
||||||
|
|
||||||
|
lua->set_function("check_it", [](sol::this_state state) {
|
||||||
|
luaL_checkversion(state.lua_state());
|
||||||
|
});
|
||||||
|
ASSERT_TRUE(lua->script("check_it()").valid());
|
||||||
|
|
||||||
|
static_assert(LUA_VERSION_NUM >= 504);
|
||||||
|
}
|
||||||
|
|
||||||
class PluginMessageConstructionTest
|
class PluginMessageConstructionTest
|
||||||
: public PluginTest,
|
: public PluginTest,
|
||||||
public ::testing::WithParamInterface<QString>
|
public ::testing::WithParamInterface<QString>
|
||||||
|
|||||||
Reference in New Issue
Block a user