25 #include "gtest/gtest.h" 31 std::unique_ptr<LuaParameterDictionary> MakeNonReferenceCounted(
32 const std::string& code) {
34 code, common::make_unique<DummyFileResolver>());
37 class LuaParameterDictionaryTest :
public ::testing::Test {
39 void ReferenceAllKeysAsIntegers(LuaParameterDictionary* dict) {
40 for (
const std::string& key : dict->GetKeys()) {
46 TEST_F(LuaParameterDictionaryTest, GetInt) {
48 ASSERT_EQ(dict->GetInt(
"blah"), 100);
51 TEST_F(LuaParameterDictionaryTest, GetString) {
53 ASSERT_EQ(dict->GetString(
"blah"),
"is_a_string");
56 TEST_F(LuaParameterDictionaryTest, GetDouble) {
58 ASSERT_DOUBLE_EQ(dict->GetDouble(
"blah"), 3.1415);
61 TEST_F(LuaParameterDictionaryTest, GetBoolTrue) {
63 ASSERT_TRUE(dict->GetBool(
"blah"));
66 TEST_F(LuaParameterDictionaryTest, GetBoolFalse) {
68 ASSERT_FALSE(dict->GetBool(
"blah"));
71 TEST_F(LuaParameterDictionaryTest, GetDictionary) {
73 MakeDictionary(
"return { blah = { blue = 100, red = 200 }, fasel = 10 }");
75 std::unique_ptr<LuaParameterDictionary> sub_dict(dict->GetDictionary(
"blah"));
76 std::vector<std::string> keys = sub_dict->GetKeys();
77 ASSERT_EQ(keys.size(), 2);
78 std::sort(keys.begin(), keys.end());
79 ASSERT_EQ(keys[0],
"blue");
80 ASSERT_EQ(keys[1],
"red");
81 ASSERT_TRUE(sub_dict->HasKey(
"blue"));
82 ASSERT_TRUE(sub_dict->HasKey(
"red"));
83 ASSERT_EQ(sub_dict->GetInt(
"blue"), 100);
84 ASSERT_EQ(sub_dict->GetInt(
"red"), 200);
86 ASSERT_EQ(dict->GetString(
"fasel"),
"10");
89 TEST_F(LuaParameterDictionaryTest, GetKeys) {
92 std::vector<std::string> keys = dict->GetKeys();
93 ASSERT_EQ(keys.size(), 2);
94 std::sort(keys.begin(), keys.end());
95 ASSERT_EQ(keys[0],
"blah");
96 ASSERT_EQ(keys[1],
"blah1");
98 ReferenceAllKeysAsIntegers(dict.get());
101 TEST_F(LuaParameterDictionaryTest, NonExistingKey) {
103 ReferenceAllKeysAsIntegers(dict.get());
104 ASSERT_DEATH(dict->GetInt(
"blah_fasel"),
"Key.* not in dictionary.");
107 TEST_F(LuaParameterDictionaryTest, UintNegative) {
109 ASSERT_DEATH(dict->GetNonNegativeInt(
"blah"),
".*-100 is negative.");
110 ReferenceAllKeysAsIntegers(dict.get());
113 TEST_F(LuaParameterDictionaryTest, ToString) {
115 ceta = { yolo = "hurray" }, 125 const std::string golden = R
"({ 129 blubber = 123.000000, 137 EXPECT_EQ(golden, dict->ToString()); 141 EXPECT_EQ(dict1->GetBool(
"alpha"),
true);
142 EXPECT_EQ(dict1->GetBool(
"alpha1"),
false);
143 EXPECT_EQ(dict1->GetInt(
"blubber"), 123);
144 EXPECT_EQ(dict1->GetString(
"blub"),
"hello");
145 EXPECT_EQ(dict1->GetDictionary(
"ceta")->GetString(
"yolo"),
"hurray");
146 EXPECT_NEAR(dict1->GetDouble(
"fasel"), 1234.456786, 1e-3);
147 EXPECT_TRUE(std::isinf(-dict1->GetDouble(
"fasel1")));
148 EXPECT_TRUE(std::isinf(dict1->GetDouble(
"fasel2")));
150 EXPECT_EQ(dict->GetBool(
"alpha"),
true);
151 EXPECT_EQ(dict->GetBool(
"alpha1"),
false);
152 EXPECT_EQ(dict->GetInt(
"blubber"), 123);
153 EXPECT_EQ(dict->GetString(
"blub"),
"hello");
154 EXPECT_EQ(dict->GetDictionary(
"ceta")->GetString(
"yolo"),
"hurray");
155 EXPECT_NEAR(dict->GetDouble(
"fasel"), 1234.456786, 1e-3);
156 EXPECT_TRUE(std::isinf(-dict->GetDouble(
"fasel1")));
157 EXPECT_TRUE(std::isinf(dict->GetDouble(
"fasel2")));
160 TEST_F(LuaParameterDictionaryTest, ToStringForArrays) {
161 auto dict = MakeNonReferenceCounted(
167 const std::string golden = R
"({ 173 EXPECT_EQ(golden, dict->ToString()); 176 TEST_F(LuaParameterDictionaryTest, GetArrayValuesAsStrings) { 178 EXPECT_EQ(0, dict->GetKeys().size());
179 const std::vector<std::string> values = dict->GetArrayValuesAsStrings();
180 EXPECT_EQ(3, values.size());
181 EXPECT_EQ(
"a", values[0]);
182 EXPECT_EQ(
"b", values[1]);
183 EXPECT_EQ(
"c", values[2]);
186 TEST_F(LuaParameterDictionaryTest, GetArrayValuesAsDoubles) {
188 EXPECT_EQ(0, dict->GetKeys().size());
189 const std::vector<double> values = dict->GetArrayValuesAsDoubles();
190 EXPECT_EQ(3, values.size());
191 EXPECT_NEAR(1., values[0], 1e-7);
192 EXPECT_NEAR(2., values[1], 1e-7);
193 EXPECT_NEAR(3., values[2], 1e-7);
196 TEST_F(LuaParameterDictionaryTest, GetArrayValuesAsDictionaries) {
198 EXPECT_EQ(0, dict->GetKeys().size());
199 const std::vector<std::unique_ptr<LuaParameterDictionary>> values =
200 dict->GetArrayValuesAsDictionaries();
201 EXPECT_EQ(2, values.size());
202 EXPECT_EQ(1., values[0]->GetInt(
"a"));
203 EXPECT_EQ(3., values[1]->GetInt(
"b"));
206 TEST_F(LuaParameterDictionaryTest, TestChooseTrue) {
208 EXPECT_EQ(1, dict->GetInt(
"a"));
211 TEST_F(LuaParameterDictionaryTest, TestChoseFalse) {
213 EXPECT_EQ(0, dict->GetInt(
"a"));
216 TEST_F(LuaParameterDictionaryTest, TestChooseInvalidArgument) {
217 EXPECT_DEATH(
MakeDictionary(
"return { a = choose('truish', 1, 0) }"),
218 "condition is not a boolean value.");
std::unique_ptr< LuaParameterDictionary > MakeDictionary(const std::string &code)
static std::unique_ptr< LuaParameterDictionary > NonReferenceCounted(const std::string &code, std::unique_ptr< FileResolver > file_resolver)