mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-06-10 14:58:10 -05:00
Add Gdt parsing
This commit is contained in:
240
test/ObjCommonTests/Obj/Gdt/GdtTests.cpp
Normal file
240
test/ObjCommonTests/Obj/Gdt/GdtTests.cpp
Normal file
@ -0,0 +1,240 @@
|
||||
#include <catch2/catch.hpp>
|
||||
|
||||
#include <sstream>
|
||||
|
||||
#include "Obj/Gdt/Gdt.h"
|
||||
|
||||
namespace obj::gdt
|
||||
{
|
||||
TEST_CASE("Gdt: Ensure can parse simple gdt", "[gdt]")
|
||||
{
|
||||
std::string gdtString = "{\n"
|
||||
"\t\"test_entry\" ( \"test.gdf\" )\n"
|
||||
"\t{\n"
|
||||
"\t\t\"testkey\" \"testvalue\"\n"
|
||||
"\t\t\"test2key\" \"test2value\"\n"
|
||||
"\t}\n"
|
||||
"}";
|
||||
std::istringstream ss(gdtString);
|
||||
|
||||
Gdt gdt;
|
||||
REQUIRE(gdt.ReadFromStream(ss));
|
||||
|
||||
REQUIRE(gdt.m_entries.size() == 1);
|
||||
|
||||
{
|
||||
const auto& entry = *gdt.m_entries[0];
|
||||
REQUIRE(entry.m_name == "test_entry");
|
||||
REQUIRE(entry.m_gdf_name == "test.gdf");
|
||||
REQUIRE(entry.m_parent == nullptr);
|
||||
REQUIRE(entry.m_properties.size() == 2);
|
||||
|
||||
REQUIRE(entry.m_properties.at("testkey") == "testvalue");
|
||||
REQUIRE(entry.m_properties.at("test2key") == "test2value");
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("Gdt: Ensure can parse compact gdt", "[gdt]")
|
||||
{
|
||||
std::string gdtString = "{"
|
||||
R"("test_entry"("test.gdf"))"
|
||||
"{"
|
||||
R"("testkey""testvalue")"
|
||||
R"("test2key""test2value")"
|
||||
"}"
|
||||
"}";
|
||||
std::istringstream ss(gdtString);
|
||||
|
||||
Gdt gdt;
|
||||
REQUIRE(gdt.ReadFromStream(ss));
|
||||
|
||||
REQUIRE(gdt.m_entries.size() == 1);
|
||||
|
||||
{
|
||||
const auto& entry = *gdt.m_entries[0];
|
||||
REQUIRE(entry.m_name == "test_entry");
|
||||
REQUIRE(entry.m_gdf_name == "test.gdf");
|
||||
REQUIRE(entry.m_parent == nullptr);
|
||||
REQUIRE(entry.m_properties.size() == 2);
|
||||
|
||||
REQUIRE(entry.m_properties.at("testkey") == "testvalue");
|
||||
REQUIRE(entry.m_properties.at("test2key") == "test2value");
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("Gdt: Ensure can parse version section", "[gdt]")
|
||||
{
|
||||
std::string gdtString = "{"
|
||||
R"("version" ( "version.gdf" ))"
|
||||
"{"
|
||||
R"("game" "t6")"
|
||||
R"("version" "1337")"
|
||||
"}"
|
||||
"}";
|
||||
std::istringstream ss(gdtString);
|
||||
|
||||
Gdt gdt;
|
||||
REQUIRE(gdt.ReadFromStream(ss));
|
||||
|
||||
REQUIRE(gdt.m_entries.empty());
|
||||
REQUIRE(gdt.m_version.m_game == "t6");
|
||||
REQUIRE(gdt.m_version.m_version == 1337);
|
||||
}
|
||||
|
||||
TEST_CASE("Gdt: Ensure can parse version section and entries", "[gdt]")
|
||||
{
|
||||
std::string gdtString = "{"
|
||||
R"("version" ( "version.gdf" ))"
|
||||
"{"
|
||||
R"("game" "t6")"
|
||||
R"("version" "1337")"
|
||||
"}"
|
||||
R"("test_entry" ( "another_test.gdf" ))"
|
||||
"{"
|
||||
R"("game" "t6")"
|
||||
R"("version" "420")"
|
||||
"}"
|
||||
"}";
|
||||
std::istringstream ss(gdtString);
|
||||
|
||||
Gdt gdt;
|
||||
REQUIRE(gdt.ReadFromStream(ss));
|
||||
|
||||
REQUIRE(gdt.m_version.m_game == "t6");
|
||||
REQUIRE(gdt.m_version.m_version == 1337);
|
||||
|
||||
REQUIRE(gdt.m_entries.size() == 1);
|
||||
|
||||
{
|
||||
const auto& entry = *gdt.m_entries[0];
|
||||
REQUIRE(entry.m_name == "test_entry");
|
||||
REQUIRE(entry.m_gdf_name == "another_test.gdf");
|
||||
REQUIRE(entry.m_parent == nullptr);
|
||||
REQUIRE(entry.m_properties.size() == 2);
|
||||
|
||||
REQUIRE(entry.m_properties.at("game") == "t6");
|
||||
REQUIRE(entry.m_properties.at("version") == "420");
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("Gdt: Ensure can parse multiple entries", "[gdt]")
|
||||
{
|
||||
std::string gdtString = "{"
|
||||
R"("version" ( "version.gdf" ))"
|
||||
"{"
|
||||
R"("game" "t6")"
|
||||
R"("version" "1337")"
|
||||
"}"
|
||||
R"("test_entry" ( "another_test.gdf" ))"
|
||||
"{"
|
||||
R"("game" "t6")"
|
||||
R"("version" "420")"
|
||||
"}"
|
||||
R"("yet_another_entry" ( "super_kewl_asset_type.gdf" ))"
|
||||
"{"
|
||||
R"("name" "hello")"
|
||||
R"("value" "asdf")"
|
||||
R"("value2" "22")"
|
||||
"}"
|
||||
R"("final_entry" ( "quite_boring.gdf" ))"
|
||||
"{"
|
||||
R"("_HI_" "Hello World")"
|
||||
"}"
|
||||
"}";
|
||||
std::istringstream ss(gdtString);
|
||||
|
||||
Gdt gdt;
|
||||
REQUIRE(gdt.ReadFromStream(ss));
|
||||
|
||||
REQUIRE(gdt.m_version.m_game == "t6");
|
||||
REQUIRE(gdt.m_version.m_version == 1337);
|
||||
|
||||
REQUIRE(gdt.m_entries.size() == 3);
|
||||
|
||||
{
|
||||
const auto& entry = *gdt.m_entries[0];
|
||||
REQUIRE(entry.m_name == "test_entry");
|
||||
REQUIRE(entry.m_gdf_name == "another_test.gdf");
|
||||
REQUIRE(entry.m_parent == nullptr);
|
||||
REQUIRE(entry.m_properties.size() == 2);
|
||||
|
||||
REQUIRE(entry.m_properties.at("game") == "t6");
|
||||
REQUIRE(entry.m_properties.at("version") == "420");
|
||||
}
|
||||
|
||||
{
|
||||
const auto& entry = *gdt.m_entries[1];
|
||||
REQUIRE(entry.m_name == "yet_another_entry");
|
||||
REQUIRE(entry.m_gdf_name == "super_kewl_asset_type.gdf");
|
||||
REQUIRE(entry.m_parent == nullptr);
|
||||
REQUIRE(entry.m_properties.size() == 3);
|
||||
|
||||
REQUIRE(entry.m_properties.at("name") == "hello");
|
||||
REQUIRE(entry.m_properties.at("value") == "asdf");
|
||||
REQUIRE(entry.m_properties.at("value2") == "22");
|
||||
}
|
||||
|
||||
{
|
||||
const auto& entry = *gdt.m_entries[2];
|
||||
REQUIRE(entry.m_name == "final_entry");
|
||||
REQUIRE(entry.m_gdf_name == "quite_boring.gdf");
|
||||
REQUIRE(entry.m_parent == nullptr);
|
||||
REQUIRE(entry.m_properties.size() == 1);
|
||||
|
||||
REQUIRE(entry.m_properties.at("_HI_") == "Hello World");
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("Gdt: Ensure can parse entries with parent", "[gdt]")
|
||||
{
|
||||
std::string gdtString = "{"
|
||||
R"("version" ( "version.gdf" ))"
|
||||
"{"
|
||||
R"("game" "t6")"
|
||||
R"("version" "1337")"
|
||||
"}"
|
||||
R"("test_entry" ( "another_test.gdf" ))"
|
||||
"{"
|
||||
R"("game" "t6")"
|
||||
R"("version" "420")"
|
||||
"}"
|
||||
R"("yet_another_entry" [ "test_entry" ])"
|
||||
"{"
|
||||
R"("name" "hello")"
|
||||
R"("value" "asdf")"
|
||||
R"("value2" "22")"
|
||||
"}"
|
||||
"}";
|
||||
std::istringstream ss(gdtString);
|
||||
|
||||
Gdt gdt;
|
||||
REQUIRE(gdt.ReadFromStream(ss));
|
||||
|
||||
REQUIRE(gdt.m_version.m_game == "t6");
|
||||
REQUIRE(gdt.m_version.m_version == 1337);
|
||||
|
||||
REQUIRE(gdt.m_entries.size() == 2);
|
||||
|
||||
{
|
||||
const auto& entry = *gdt.m_entries[0];
|
||||
REQUIRE(entry.m_name == "test_entry");
|
||||
REQUIRE(entry.m_gdf_name == "another_test.gdf");
|
||||
REQUIRE(entry.m_parent == nullptr);
|
||||
REQUIRE(entry.m_properties.size() == 2);
|
||||
|
||||
REQUIRE(entry.m_properties.at("game") == "t6");
|
||||
REQUIRE(entry.m_properties.at("version") == "420");
|
||||
}
|
||||
|
||||
{
|
||||
const auto& entry = *gdt.m_entries[1];
|
||||
REQUIRE(entry.m_name == "yet_another_entry");
|
||||
REQUIRE(entry.m_parent == gdt.m_entries[0].get());
|
||||
REQUIRE(entry.m_properties.size() == 3);
|
||||
|
||||
REQUIRE(entry.m_properties.at("name") == "hello");
|
||||
REQUIRE(entry.m_properties.at("value") == "asdf");
|
||||
REQUIRE(entry.m_properties.at("value2") == "22");
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user