@@ -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}
0 commit comments