// https://github.com/vinniefalco/LuaBridge // // Copyright 2018, Dmitry Tarakanov // SPDX-License-Identifier: MIT #include "TestBase.h" #include "LuaBridge/detail/Iterator.h" struct IteratorTests : TestBase { }; TEST_F (IteratorTests, DictionaryIteration) { runLua ( "result = {" " bool = true," " int = 5," " c = 3.14," " [true] = 'D'," " [8] = 'abc'," " fn = function (i)" " result = i + 1" " end" "}"); std::map expected { {{L, "bool"}, {L, true}}, {{L, "int"}, {L, 5}}, {{L, 'c'}, {L, 3.14}}, {{L, true}, {L, 'D'}}, {{L, 8}, {L, "abc"}}, {{L, "fn"}, {L, result () ["fn"]}}, }; std::map actual; for (luabridge::Iterator iterator (result ()); !iterator.isNil (); ++iterator) { actual.emplace(iterator.key (), iterator.value ()); } ASSERT_EQ (expected, actual); actual.clear (); for (auto&& pair : pairs (result ())) { actual.emplace (pair.first, pair.second); } ASSERT_EQ (expected, actual); } TEST_F (IteratorTests, SequenceIteration) { runLua ( "result = {" " true," " 5," " 3.14," " 'D'," " 'abc'," " function (i)" " result = i + 1" " end" "}"); std::map expected { {{L, 1}, {L, true}}, {{L, 2}, {L, 5}}, {{L, 3}, {L, 3.14}}, {{L, 4}, {L, 'D'}}, {{L, 5}, {L, "abc"}}, {{L, 6}, {L, result () [6]}}, }; std::map actual; for (luabridge::Iterator iterator (result ()); !iterator.isNil (); ++iterator) { actual.emplace (iterator.key (), iterator.value ()); } ASSERT_EQ (expected, actual); actual.clear (); for (auto&& pair : pairs (result ())) { actual.emplace (pair.first, pair.second); } ASSERT_EQ (expected, actual); }