From e06308f790dd092e262a3ce995ccab7cb176e84b Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Thu, 23 Aug 2018 19:27:14 +0100 Subject: [PATCH] Add tests to check that the YAML parser supports merge keys This is useful as it's an optional addition to the YAML spec, and LOOT's masterlists heavily rely on it being supported. --- src/tests/api/internals/main.cpp | 6 +++++ src/tests/api/internals/metadata_list_test.h | 27 ++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/tests/api/internals/main.cpp b/src/tests/api/internals/main.cpp index c2ae9e9e..64007d34 100644 --- a/src/tests/api/internals/main.cpp +++ b/src/tests/api/internals/main.cpp @@ -66,6 +66,12 @@ TEST(ModuloOperator, shouldConformToTheCpp11Standard) { EXPECT_EQ(-2, -9 % -7); } +TEST(YamlCpp, shouldSupportMergeKeys) { + YAML::Node node = YAML::Load("{<<: {a: 1}}"); + ASSERT_TRUE(node["a"]); + EXPECT_EQ(1, node["a"].as()); +} + int main(int argc, char **argv) { // Set the locale to get encoding conversions working correctly. std::locale::global(boost::locale::generator().generate("")); diff --git a/src/tests/api/internals/metadata_list_test.h b/src/tests/api/internals/metadata_list_test.h index 73bf5938..2da0e339 100644 --- a/src/tests/api/internals/metadata_list_test.h +++ b/src/tests/api/internals/metadata_list_test.h @@ -142,6 +142,33 @@ TEST_P(MetadataListTest, loadShouldLoadGroups) { groups.find(Group("group2"))->GetAfterGroups()); } +TEST_P(MetadataListTest, loadYamlParsingShouldSupportMergeKeys) { + using std::endl; + + boost::filesystem::ofstream out(metadataPath); + out << "common:" << endl + << " - &earlier" << endl + << " name: earlier" << endl + << " after:" << endl + << " - earliest" << endl + << "groups:" << endl + << " - name: default" << endl + << " <<: *earlier" << endl; + + out.close(); + + MetadataList metadataList; + ASSERT_NO_THROW(metadataList.Load(metadataPath)); + + auto groups = metadataList.Groups(); + + EXPECT_EQ(1, groups.size()); + + EXPECT_EQ(1, groups.count(Group("default"))); + EXPECT_EQ(std::unordered_set({ "earliest" }), + groups.find(Group("default"))->GetAfterGroups()); +} + TEST_P(MetadataListTest, loadShouldThrowIfAnInvalidMetadataFileIsGiven) { MetadataList ml; for (const auto& path : invalidMetadataPaths) {