// https://github.com/vinniefalco/LuaBridge
// Copyright 2019, Dmitry Tarakanov
// SPDX-License-Identifier: MIT
#include "TestBase.h"
#include "TestTypes.h"
#include "LuaBridge/List.h"
#include <list>
namespace {
template<class T>
std::list<T> toList(const std::vector<T>& vector)
{
return {vector.begin(), vector.end()};
}
} // namespace
template<class T>
struct ListTest : TestBase
{
};
TYPED_TEST_CASE_P(ListTest);
TYPED_TEST_P(ListTest, LuaRef)
{
using Traits = TypeTraits<TypeParam>;
this->runLua("result = {" + Traits::list() + "}");
std::list<TypeParam> expected = toList(Traits::values());
std::list<TypeParam> actual = this->result();
ASSERT_EQ(expected, actual);
}
REGISTER_TYPED_TEST_CASE_P(ListTest, LuaRef);
INSTANTIATE_TYPED_TEST_CASE_P(ListTest, ListTest, TestTypes);
struct ListTests : TestBase
{
};
TEST_F(ListTests, PassToFunction)
{
runLua("function foo (list) "
" result = list "
"end");
auto foo = luabridge::getGlobal(L, "foo");
resetResult();
std::list<int> lvalue{10, 20, 30};
foo(lvalue);
ASSERT_TRUE(result().isTable());
ASSERT_EQ(lvalue, result<std::list<int>>());
resetResult();
const std::list<int> constLvalue = lvalue;
foo(constLvalue);
ASSERT_TRUE(result().isTable());
ASSERT_EQ(lvalue, result<std::list<int>>());
}