diff --git a/src/ObjCommon/Obj/GDT/GDT.cpp b/src/ObjCommon/Obj/GDT/GDT.cpp index f56bcfd5..bdcbffe2 100644 --- a/src/ObjCommon/Obj/GDT/GDT.cpp +++ b/src/ObjCommon/Obj/GDT/GDT.cpp @@ -270,7 +270,8 @@ class GdtWriter if (entry.m_parent) m_stream << "[ \"" << entry.m_parent->m_name << "\" ]\n"; else - m_stream << "( \"" << entry.m_gdf_name << " )\n"; + m_stream << "( \"" << entry.m_gdf_name << "\" )\n"; + DoIntendation(); m_stream << "{\n"; m_intendation_level++; @@ -282,6 +283,7 @@ class GdtWriter } m_intendation_level--; + DoIntendation(); m_stream << "}\n"; } diff --git a/test/ObjCommonTests/Obj/Gdt/GdtTests.cpp b/test/ObjCommonTests/Obj/Gdt/GdtTests.cpp index f94b3f7d..020ee19d 100644 --- a/test/ObjCommonTests/Obj/Gdt/GdtTests.cpp +++ b/test/ObjCommonTests/Obj/Gdt/GdtTests.cpp @@ -237,4 +237,59 @@ namespace obj::gdt REQUIRE(entry.m_properties.at("value2") == "22"); } } + + TEST_CASE("Gdt: Ensure can write simple gdt and parse it again", "[gdt]") + { + Gdt gdt; + gdt.m_version.m_game = "whatagame"; + gdt.m_version.m_version = 6969; + + { + auto entry = std::make_unique("sickentry", "verycool.gdf"); + entry->m_properties["hello"] = "world"; + entry->m_properties["hi"] = "universe"; + gdt.m_entries.emplace_back(std::move(entry)); + } + + { + auto entry = std::make_unique("evencoolerentry", gdt.m_entries[0].get()); + entry->m_properties["nope"] = "xd"; + entry->m_properties["idk"] = "whattotypeanymore"; + gdt.m_entries.emplace_back(std::move(entry)); + } + + std::stringstream ss; + gdt.WriteToStream(ss); + + std::cout << ss.str(); + + Gdt gdt2; + REQUIRE(gdt2.ReadFromStream(ss)); + + REQUIRE(gdt2.m_version.m_game == "whatagame"); + REQUIRE(gdt2.m_version.m_version == 6969); + + REQUIRE(gdt2.m_entries.size() == 2); + + { + const auto& entry = *gdt2.m_entries[0]; + REQUIRE(entry.m_name == "sickentry"); + REQUIRE(entry.m_gdf_name == "verycool.gdf"); + REQUIRE(entry.m_parent == nullptr); + REQUIRE(entry.m_properties.size() == 2); + + REQUIRE(entry.m_properties.at("hello") == "world"); + REQUIRE(entry.m_properties.at("hi") == "universe"); + } + + { + const auto& entry = *gdt2.m_entries[1]; + REQUIRE(entry.m_name == "evencoolerentry"); + REQUIRE(entry.m_parent == gdt2.m_entries[0].get()); + REQUIRE(entry.m_properties.size() == 2); + + REQUIRE(entry.m_properties.at("nope") == "xd"); + REQUIRE(entry.m_properties.at("idk") == "whattotypeanymore"); + } + } } \ No newline at end of file