1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-28 08:39:41 +00:00
openmw/apps/components_tests/lua/test_async.cpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

58 lines
1.8 KiB
C++
Raw Normal View History

#include <gmock/gmock.h>
2022-10-17 15:53:13 +00:00
#include <gtest/gtest.h>
#include <components/lua/asyncpackage.hpp>
2022-10-17 15:53:13 +00:00
#include <components/lua/luastate.hpp>
#include <components/testing/expecterror.hpp>
2022-10-17 15:53:13 +00:00
namespace
{
using namespace testing;
struct LuaCoroutineCallbackTest : Test
{
void SetUp() override
{
2024-08-23 20:40:39 +00:00
mLua.protectedCall([&](LuaUtil::LuaView& view) {
sol::table hiddenData(view.sol(), sol::create);
hiddenData[LuaUtil::ScriptsContainer::sScriptIdKey] = LuaUtil::ScriptId{};
view.sol()["async"] = LuaUtil::getAsyncPackageInitializer(
view.sol(), []() { return 0.; }, []() { return 0.; })(hiddenData);
view.sol()["pass"] = [&](const sol::table& t) { mCb = LuaUtil::Callback::fromLua(t); };
2024-08-23 20:40:39 +00:00
});
2022-10-17 15:53:13 +00:00
}
LuaUtil::LuaState mLua{ nullptr, nullptr };
2022-10-17 15:53:13 +00:00
LuaUtil::Callback mCb;
};
TEST_F(LuaCoroutineCallbackTest, CoroutineCallbacks)
{
internal::CaptureStdout();
2024-08-23 20:40:39 +00:00
mLua.protectedCall([&](LuaUtil::LuaView& view) {
view.sol().safe_script(R"X(
2024-08-24 07:10:23 +00:00
local s = 'test'
coroutine.wrap(function()
pass(async:callback(function(v) print(s) end))
2024-08-24 07:10:23 +00:00
end)()
)X");
2024-08-23 20:40:39 +00:00
view.sol().collect_garbage();
mCb.call();
});
2022-10-17 15:53:13 +00:00
EXPECT_THAT(internal::GetCapturedStdout(), "test\n");
}
TEST_F(LuaCoroutineCallbackTest, ErrorInCoroutineCallbacks)
{
2024-08-23 20:40:39 +00:00
mLua.protectedCall([&](LuaUtil::LuaView& view) {
view.sol().safe_script(R"X(
2024-08-24 07:10:23 +00:00
coroutine.wrap(function()
pass(async:callback(function() error('COROUTINE CALLBACK') end))
2024-08-24 07:10:23 +00:00
end)()
)X");
2024-08-23 20:40:39 +00:00
view.sol().collect_garbage();
});
2022-10-17 15:53:13 +00:00
EXPECT_ERROR(mCb.call(), "COROUTINE CALLBACK");
}
}