Finalize the toml serialization API refactor.
Additionally: Standardize the data structures used in Toml unit tests
This commit is contained in:
parent
2c3b417b40
commit
acee324843
@ -55,7 +55,7 @@ add_toml_field(const TField& obj, const char* fieldName, toml::table& tbl)
|
||||
if constexpr (std::is_enum_v<value_type>) {
|
||||
add_toml_enum_field(obj, fieldName, tbl);
|
||||
} else if constexpr (std::is_same_v<char, value_type>) {
|
||||
tbl.insert_or_assign(fieldName, std::string(1, obj));
|
||||
tbl.insert_or_assign(fieldName, static_cast<int>(obj));
|
||||
return;
|
||||
} else {
|
||||
if constexpr (is_toml_type_t<value_type>) {
|
||||
@ -80,7 +80,7 @@ extract_toml_field(const toml::table& tbl, const char* fieldName, TField& output
|
||||
if constexpr (std::is_enum_v<value_type>) {
|
||||
extract_toml_enum_field(tbl, fieldName, output);
|
||||
} else if constexpr (std::is_same_v<char, value_type>) {
|
||||
output = tbl[fieldName].value<std::string>()->at(0);
|
||||
output = tbl[fieldName].value<int>().value();
|
||||
} else if constexpr (is_toml_type_t<value_type>) {
|
||||
output = tbl[fieldName].value<value_type>().value();
|
||||
} else {
|
||||
|
@ -234,22 +234,23 @@ BEGIN_TEST_SUITE("elemental::TomlConfigFile")
|
||||
{
|
||||
auto config_file = TomlConfigFile(kInputFilePath);
|
||||
config_file.set(ComplexStruct{
|
||||
{ 11, 22 }, { 30, 0 }, { 1, 2, Red }, Blue, ns::Windowed });
|
||||
{ 11, 'c' }, { 30, 0 }, { 1, 2, Red }, Blue, ns::Windowed });
|
||||
auto toml_data = config_file.getTomlTable();
|
||||
|
||||
REQUIRE(toml_data["part1"]["field1"].value<int>() == 11);
|
||||
REQUIRE(
|
||||
toml_data["part1"]["field2"].value<std::string>() == "c"
|
||||
);
|
||||
REQUIRE(toml_data["part2"]["field_a"].value<int>() == 30);
|
||||
REQUIRE(toml_data["part2"]["field_b"].value<int>() == 0);
|
||||
REQUIRE(toml_data["part1"]["field2"].value<int>() == 'c');
|
||||
REQUIRE(toml_data["part2"]["field1"].value<int>() == 30);
|
||||
REQUIRE(toml_data["part2"]["field2"].value<int>() == 0);
|
||||
|
||||
REQUIRE(toml_data["part3"]["field1"].value<int>() == 1);
|
||||
REQUIRE(toml_data["part3"]["field2"].value<int>() == 2);
|
||||
REQUIRE(toml_data["part3"]["foreground"].value<int>() == Red);
|
||||
REQUIRE(
|
||||
toml_data["part3"]["foreground"].value<std::string>() ==
|
||||
"Red"
|
||||
);
|
||||
|
||||
REQUIRE(toml_data["background"].value<int>() == Blue);
|
||||
REQUIRE(toml_data["mode"].value<int>() == ns::Windowed);
|
||||
REQUIRE(toml_data["background"].value<std::string>() == "Blue");
|
||||
REQUIRE(toml_data["mode"].value<std::string>() == "Windowed");
|
||||
}
|
||||
}
|
||||
// clang-format off
|
||||
|
@ -28,7 +28,7 @@ BEGIN_TEST_SUITE("IOCore::TomlTable")
|
||||
auto data = SimpleClass{ 11, 22 };
|
||||
TomlTable table = data;
|
||||
|
||||
CHECK(table.size() == 3);
|
||||
CHECK(table.size() == 2);
|
||||
|
||||
CHECK(table["field1"].value<int>() == 11);
|
||||
CHECK(table["field2"].value<int>() == 22);
|
||||
@ -36,7 +36,7 @@ BEGIN_TEST_SUITE("IOCore::TomlTable")
|
||||
TEST_CASE("IOCore::TomlTable core operators complex struct")
|
||||
{
|
||||
auto data = ComplexStruct{};
|
||||
data.part1 = { 1, 2 };
|
||||
data.part1 = { 1, 'a' };
|
||||
data.part2 = { 3, 4 };
|
||||
data.part3 = { 5, 6, Blue };
|
||||
data.background = Red;
|
||||
@ -48,15 +48,17 @@ BEGIN_TEST_SUITE("IOCore::TomlTable")
|
||||
REQUIRE(table.size() == 5);
|
||||
|
||||
CHECK(table["part1"]["field1"].value<int>() == 1);
|
||||
CHECK(table["part1"]["field2"].value<int>() == 2);
|
||||
CHECK(table["part1"]["field2"].value<int>() == 'a');
|
||||
CHECK(table["part2"]["field1"].value<int>() == 3);
|
||||
CHECK(table["part2"]["field2"].value<int>() == 4);
|
||||
CHECK(table["part3"]["field1"].value<int>() == 5);
|
||||
CHECK(table["part3"]["field2"].value<int>() == 6);
|
||||
|
||||
CHECK(table["part3"]["foreground"].value<int>() == Blue);
|
||||
CHECK(table["background"].value<int>() == Red);
|
||||
CHECK(table["mode"].value<int>() == ns::Windowed);
|
||||
CHECK(
|
||||
table["part3"]["foreground"].value<std::string>() == "Blue"
|
||||
);
|
||||
CHECK(table["background"].value<std::string>() == "Red");
|
||||
CHECK(table["mode"].value<std::string>() == "Windowed");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,11 +42,11 @@ BEGIN_TEST_SUITE("Util.Toml")
|
||||
from_toml(result, deserialized);
|
||||
|
||||
REQUIRE(result.size() == 2);
|
||||
CHECK(result.at("field_a").value<int>() == 1);
|
||||
CHECK(result.at("field_b").value<int>() == 22);
|
||||
CHECK(result.at("field1").value<int>() == 1);
|
||||
CHECK(result.at("field2").value<int>() == 22);
|
||||
|
||||
CHECK(deserialized.field_a == 1);
|
||||
CHECK(deserialized.field_b == 22);
|
||||
CHECK(deserialized.field1 == 1);
|
||||
CHECK(deserialized.field2 == 22);
|
||||
}
|
||||
TEST_CASE("StructWithEnum Serializes")
|
||||
{
|
||||
@ -81,8 +81,8 @@ BEGIN_TEST_SUITE("Util.Toml")
|
||||
|
||||
CHECK(deserialized.part1.field1 == data.part1.field1);
|
||||
CHECK(deserialized.part1.field2 == data.part1.field2);
|
||||
CHECK(deserialized.part2.field_a == data.part2.field_a);
|
||||
CHECK(deserialized.part2.field_b == data.part2.field_b);
|
||||
CHECK(deserialized.part2.field1 == data.part2.field1);
|
||||
CHECK(deserialized.part2.field2 == data.part2.field2);
|
||||
}
|
||||
|
||||
TEST_CASE("ComplexStruct Serializes")
|
||||
@ -103,8 +103,8 @@ BEGIN_TEST_SUITE("Util.Toml")
|
||||
|
||||
CHECK(deserialized.part1.field1 == data.part1.field1);
|
||||
CHECK(deserialized.part1.field2 == data.part1.field2);
|
||||
CHECK(deserialized.part2.field_a == data.part2.field_a);
|
||||
CHECK(deserialized.part2.field_b == data.part2.field_b);
|
||||
CHECK(deserialized.part2.field1 == data.part2.field1);
|
||||
CHECK(deserialized.part2.field2 == data.part2.field2);
|
||||
CHECK(deserialized.part3.field1 == data.part3.field1);
|
||||
CHECK(deserialized.part3.field2 == data.part3.field2);
|
||||
CHECK(deserialized.part3.foreground == data.part3.foreground);
|
||||
|
@ -35,16 +35,16 @@ TOML_STRUCT(SimpleStruct, field1, field2);
|
||||
|
||||
class SimpleClass {
|
||||
public:
|
||||
int field_a;
|
||||
int field_b;
|
||||
int field1;
|
||||
int field2;
|
||||
|
||||
auto operator==(const SimpleClass& other) const -> bool
|
||||
{
|
||||
return field_a == other.field_a && field_b == other.field_b;
|
||||
return field1 == other.field1 && field2 == other.field2;
|
||||
}
|
||||
|
||||
private:
|
||||
TOML_CLASS(SimpleClass, field_a, field_b);
|
||||
TOML_CLASS(SimpleClass, field1, field2);
|
||||
};
|
||||
|
||||
struct StructWithEnum {
|
||||
|
Loading…
Reference in New Issue
Block a user