Skip to content

Commit deea996

Browse files
committed
Merge branch 'lesscontentmoreengagement' into 'master'
Remove dead code See merge request OpenMW/openmw!5062
2 parents 4a062c0 + 71b394b commit deea996

File tree

2 files changed

+68
-137
lines changed

2 files changed

+68
-137
lines changed

apps/components_tests/lua/testuicontent.cpp

Lines changed: 68 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -28,60 +28,56 @@ namespace
2828
}
2929

3030
sol::table makeTable() { return sol::table(mLuaState.unsafeState(), sol::create); }
31-
32-
sol::table makeTable(std::string name)
33-
{
34-
auto result = makeTable();
35-
result["name"] = name;
36-
return result;
37-
}
3831
};
3932

4033
TEST_F(LuaUiContentTest, ProtectedMetatable)
4134
{
4235
sol::state_view sol = mLuaState.unsafeState();
4336
sol["makeContent"] = mNew;
44-
sol["M"] = makeContent(makeTable()).getMetatable();
4537
std::string testScript = R"(
4638
assert(not pcall(function() setmetatable(makeContent{}, {}) end), 'Metatable is not protected')
4739
assert(getmetatable(makeContent{}) == false, 'Metatable is not protected')
4840
)";
4941
EXPECT_NO_THROW(sol.safe_script(testScript));
5042
}
5143

52-
TEST_F(LuaUiContentTest, Create)
44+
TEST_F(LuaUiContentTest, Insert)
5345
{
54-
auto table = makeTable();
55-
table.add(makeTable());
56-
table.add(makeTable());
57-
table.add(makeTable());
58-
LuaUi::ContentView content = makeContent(table);
59-
EXPECT_EQ(content.size(), 3);
46+
mLuaState.protectedCall([&](LuaUtil::LuaView& state) {
47+
sol::state_view& sol = state.sol();
48+
sol["makeContent"] = mNew;
49+
EXPECT_NO_THROW(sol.safe_script(R"(
50+
local content = makeContent({ {}, {}, {} })
51+
content:insert(2, { name = 'inserted' })
52+
assert(#content == 4, 'Not inserted')
53+
local inserted = content:indexOf('inserted')
54+
local index = content:indexOf(content[inserted])
55+
assert(index ~= nil, 'Failed to find inserted')
56+
assert(index == 2, 'Inserted at the wrong index')
57+
)"));
58+
});
6059
}
6160

62-
TEST_F(LuaUiContentTest, Insert)
61+
TEST_F(LuaUiContentTest, MakeHole)
6362
{
64-
auto table = makeTable();
65-
table.add(makeTable());
66-
table.add(makeTable());
67-
table.add(makeTable());
68-
LuaUi::ContentView content = makeContent(table);
69-
content.insert(2, makeTable("inserted"));
70-
EXPECT_EQ(content.size(), 4);
71-
auto inserted = content.at("inserted");
72-
auto index = content.indexOf(inserted);
73-
EXPECT_TRUE(index.has_value());
74-
EXPECT_EQ(index.value(), 2);
63+
mLuaState.protectedCall([&](LuaUtil::LuaView& state) {
64+
sol::state_view& sol = state.sol();
65+
sol["makeContent"] = mNew;
66+
EXPECT_NO_THROW(sol.safe_script(R"(
67+
local content = makeContent({ {}, {} })
68+
assert(not pcall(function() content[4] = {} end), 'Allowed to make hole')
69+
)"));
70+
});
7571
}
7672

77-
TEST_F(LuaUiContentTest, MakeHole)
73+
TEST_F(LuaUiContentTest, Create)
7874
{
7975
auto table = makeTable();
8076
table.add(makeTable());
8177
table.add(makeTable());
78+
table.add(makeTable());
8279
LuaUi::ContentView content = makeContent(table);
83-
sol::table t = makeTable();
84-
EXPECT_ANY_THROW(content.assign(3, t));
80+
EXPECT_EQ(content.size(), 3);
8581
}
8682

8783
TEST_F(LuaUiContentTest, WrongType)
@@ -95,52 +91,55 @@ namespace
9591

9692
TEST_F(LuaUiContentTest, NameAccess)
9793
{
98-
auto table = makeTable();
99-
table.add(makeTable());
100-
table.add(makeTable("a"));
101-
LuaUi::ContentView content = makeContent(table);
102-
EXPECT_NO_THROW(content.at("a"));
103-
content.remove("a");
104-
EXPECT_EQ(content.size(), 1);
105-
content.assign(content.size(), makeTable("b"));
106-
content.assign("b", makeTable());
107-
EXPECT_ANY_THROW(content.at("b"));
108-
EXPECT_EQ(content.size(), 2);
109-
content.assign(content.size(), makeTable("c"));
110-
content.assign(content.size(), makeTable("c"));
111-
content.remove("c");
112-
EXPECT_ANY_THROW(content.at("c"));
94+
mLuaState.protectedCall([&](LuaUtil::LuaView& state) {
95+
sol::state_view& sol = state.sol();
96+
sol["makeContent"] = mNew;
97+
EXPECT_NO_THROW(sol.safe_script(R"(
98+
local content = makeContent({ {}, { name = 'a' } })
99+
assert(content:indexOf('a') ~= nil, 'Could not find named table')
100+
content['a'] = nil
101+
assert(#content == 1, 'Failed to remove')
102+
content:add({ name = 'b' })
103+
content['b'] = {}
104+
assert(#content == 2, 'Failed to insert')
105+
content:add({ name = 'c' })
106+
content:add({ name = 'c' })
107+
content['c'] = nil
108+
assert(content:indexOf('c') == nil, 'Failed to remove value inserted twice'..#content)
109+
)"));
110+
});
113111
}
114112

115113
TEST_F(LuaUiContentTest, IndexOf)
116114
{
117-
auto table = makeTable();
118-
table.add(makeTable());
119-
table.add(makeTable());
120-
table.add(makeTable());
121-
LuaUi::ContentView content = makeContent(table);
122-
auto child = makeTable();
123-
content.assign(2, child);
124-
EXPECT_EQ(content.indexOf(child).value(), 2);
125-
EXPECT_TRUE(!content.indexOf(makeTable()).has_value());
115+
mLuaState.protectedCall([&](LuaUtil::LuaView& state) {
116+
sol::state_view& sol = state.sol();
117+
sol["makeContent"] = mNew;
118+
EXPECT_NO_THROW(sol.safe_script(R"(
119+
local content = makeContent({ {}, {}, {} })
120+
local child = {}
121+
content[3] = child
122+
assert(content:indexOf(child) == 3, 'Failed to assign')
123+
assert(content:indexOf({}) == nil, 'Found non-existent child')
124+
)"));
125+
});
126126
}
127127

128128
TEST_F(LuaUiContentTest, BoundsChecks)
129129
{
130-
auto table = makeTable();
131-
LuaUi::ContentView content = makeContent(table);
132-
EXPECT_ANY_THROW(content.at(0));
133-
EXPECT_EQ(content.size(), 0);
134-
content.assign(content.size(), makeTable());
135-
EXPECT_EQ(content.size(), 1);
136-
content.assign(content.size(), makeTable());
137-
EXPECT_EQ(content.size(), 2);
138-
content.assign(content.size(), makeTable());
139-
EXPECT_EQ(content.size(), 3);
140-
EXPECT_ANY_THROW(content.at(3));
141-
EXPECT_ANY_THROW(content.remove(3));
142-
content.remove(2);
143-
EXPECT_EQ(content.size(), 2);
144-
EXPECT_ANY_THROW(content.at(2));
130+
{
131+
auto table = makeTable();
132+
LuaUi::ContentView content = makeContent(table);
133+
EXPECT_ANY_THROW(content.at(0));
134+
EXPECT_EQ(content.size(), 0);
135+
}
136+
{
137+
auto table = makeTable();
138+
table[1] = makeTable();
139+
LuaUi::ContentView content = makeContent(table);
140+
EXPECT_EQ(content.size(), 1);
141+
EXPECT_ANY_THROW(content.at(1));
142+
content.at(0);
143+
}
145144
}
146145
}

components/lua_ui/content.hpp

Lines changed: 0 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
#ifndef COMPONENTS_LUAUI_CONTENT
22
#define COMPONENTS_LUAUI_CONTENT
33

4-
#include <map>
5-
#include <string>
6-
74
#include <sol/sol.hpp>
85

96
#include <components/lua/luastate.hpp>
@@ -27,83 +24,18 @@ namespace LuaUi
2724

2825
size_t size() const { return mTable.size(); }
2926

30-
void assign(std::string_view name, const sol::table& table)
31-
{
32-
if (indexOf(name).has_value())
33-
mTable[name] = table;
34-
else
35-
throw std::domain_error("Invalid Content key");
36-
}
37-
void assign(size_t index, const sol::table& table)
38-
{
39-
if (index <= size())
40-
mTable[toLua(index)] = table;
41-
else
42-
throw std::range_error("Invalid Content index");
43-
}
44-
void insert(size_t index, const sol::table& table) { callMethod("insert", toLua(index), table); }
45-
4627
sol::object at(size_t index) const
4728
{
4829
if (index < size())
4930
return mTable.get<sol::object>(toLua(index));
5031
else
5132
throw std::range_error("Invalid Content index");
5233
}
53-
sol::object at(std::string_view name) const
54-
{
55-
if (indexOf(name).has_value())
56-
return mTable.get<sol::object>(name);
57-
else
58-
throw std::range_error("Invalid Content key");
59-
}
60-
void remove(size_t index)
61-
{
62-
if (index < size())
63-
// for some reason mTable[key] = value doesn't call __newindex
64-
getMetatable()[sol::meta_function::new_index].get<sol::protected_function>()(
65-
mTable, toLua(index), sol::nil);
66-
else
67-
throw std::range_error("Invalid Content index");
68-
}
69-
void remove(std::string_view name)
70-
{
71-
auto index = indexOf(name);
72-
if (index.has_value())
73-
remove(index.value());
74-
else
75-
throw std::domain_error("Invalid Content key");
76-
}
77-
std::optional<size_t> indexOf(std::string_view name) const
78-
{
79-
sol::object result = callMethod("indexOf", name);
80-
if (result.is<size_t>())
81-
return fromLua(LuaUtil::cast<size_t>(result));
82-
else
83-
return std::nullopt;
84-
}
85-
std::optional<size_t> indexOf(const sol::table& table) const
86-
{
87-
sol::object result = callMethod("indexOf", table);
88-
if (result.is<size_t>())
89-
return fromLua(LuaUtil::cast<size_t>(result));
90-
else
91-
return std::nullopt;
92-
}
93-
94-
sol::table getMetatable() const { return mTable[sol::metatable_key].get<sol::table>(); }
9534

9635
private:
9736
sol::main_table mTable;
9837

99-
template <typename... Arg>
100-
sol::object callMethod(std::string_view name, Arg&&... arg) const
101-
{
102-
return mTable.get<sol::protected_function>(name)(mTable, arg...);
103-
}
104-
10538
static inline size_t toLua(size_t index) { return index + 1; }
106-
static inline size_t fromLua(size_t index) { return index - 1; }
10739
};
10840
}
10941

0 commit comments

Comments
 (0)