#include "./test_lib/test_group.hpp" #include "./test_lib/test_group.def.hpp" namespace c4 { namespace yml { TEST(github, 475_0_space) { Tree t; ExpectError::check_success(&t, [&t]{ parse_in_arena(R"( test: - {a: 1} # next line has a trailing space - {b: 2} # next line has a trailing space - [0, {c: 3}] )", &t); }); ConstNodeRef test = t["test"]; ASSERT_TRUE(test.is_seq()); ASSERT_EQ(test.num_children(), 3u); } TEST(github, 475_1_space_indented) { Tree t; ExpectError::check_success(&t, [&t]{ parse_in_arena(R"( test: - {a: 1} # next line has a trailing space - {b: 2} # next line has a trailing space - [0, {c: 3}] )", &t); }); ConstNodeRef test = t["test"]; ASSERT_TRUE(test.is_seq()); ASSERT_EQ(test.num_children(), 3u); } TEST(github, 475_2_tab) { Tree t; ExpectError::check_success(&t, [&t]{ parse_in_arena(R"( test: - {a: 1} # next line has a trailing tab - {b: 2} # next line has a trailing tab - [0, {c: 3}] )", &t); }); ConstNodeRef test = t["test"]; ASSERT_TRUE(test.is_seq()); ASSERT_EQ(test.num_children(), 3u); } TEST(github, 475_3_tab_indented) { Tree t; ExpectError::check_success(&t, [&t]{ parse_in_arena(R"( test: - {a: 1} # next line has a trailing tab - {b: 2} # next line has a trailing tab - [0, {c: 3}] )", &t); }); ConstNodeRef test = t["test"]; ASSERT_TRUE(test.is_seq()); ASSERT_EQ(test.num_children(), 3u); } TEST(github, 475_4_space_map) { Tree t; ExpectError::check_success(&t, [&t]{ parse_in_arena(R"( test: 0: {a: 1} # next line has a trailing space 1: {b: 2} # next line has a trailing space 2: [0, {c: 3}] )", &t); }); ConstNodeRef test = t["test"]; ASSERT_TRUE(test.is_map()); ASSERT_EQ(test.num_children(), 3u); } TEST(github, 475_5_tab_map) { Tree t; ExpectError::check_success(&t, [&t]{ parse_in_arena(R"( test: 0: {a: 1} # next line has a trailing tab 1: {b: 2} # next line has a trailing tab 2: [0, {c: 3}] )", &t); }); ConstNodeRef test = t["test"]; ASSERT_TRUE(test.is_map()); ASSERT_EQ(test.num_children(), 3u); } //----------------------------------------------------------------------------- TEST(github, 455_0_ok) { Tree t; ExpectError::check_success([&t]{ parse_in_arena(R"( processors: - simple: a sampler: trace_id_ratio_based: ratio: )", &t); }); ConstNodeRef sampler = t["sampler"]; ASSERT_TRUE(sampler.is_map()); ASSERT_TRUE(sampler.has_child("trace_id_ratio_based")); ASSERT_TRUE(sampler["trace_id_ratio_based"].has_child("ratio")); } TEST(github, 455_0) { Tree t; ExpectError::check_success([&t]{ parse_in_arena(R"( processors: - simple: sampler: trace_id_ratio_based: ratio: )", &t); }); ConstNodeRef sampler = t["sampler"]; ASSERT_TRUE(sampler.is_map()); ASSERT_TRUE(sampler.has_child("trace_id_ratio_based")); ASSERT_TRUE(sampler["trace_id_ratio_based"].has_child("ratio")); } TEST(github, 455_1) { Tree t; ExpectError::check_success([&t]{ parse_in_arena(R"( file_format: 0.0 tracer_provider: processors: - simple: exporter: console: sampler: trace_id_ratio_based: ratio: )", &t); }); ConstNodeRef sampler = t["tracer_provider"]["sampler"]; ASSERT_TRUE(sampler.is_map()); ASSERT_TRUE(sampler.has_child("trace_id_ratio_based")); ASSERT_TRUE(sampler["trace_id_ratio_based"].has_child("ratio")); } //----------------------------------------------------------------------------- TEST(github, 268) { Tree tree = parse_in_arena(R"( list: - &bar bar map: node: *bar )"); tree.resolve(); ConstNodeRef root = tree.crootref(); ASSERT_TRUE(root["map"].is_map()); ASSERT_TRUE(root["map"].has_child("node")); ASSERT_EQ(root["map"]["node"], "bar"); } TEST(github, 277) { Tree tree = parse_in_arena(R"( A: &A V: 3 W: 4 B: <<: *A V: 5 X: 6 )"); const char *keys[] = {"V", "W", "X"}; const char *vals[] = {"5", "4", "6"}; #ifdef RYML_DBG print_tree("parsed", tree); #endif test_invariants(tree); tree.resolve(); #ifdef RYML_DBG print_tree("resolved", tree); #endif ConstNodeRef root = tree.crootref(); ASSERT_TRUE(root["B"].is_map()); id_type num_childs = root["B"].num_children(); id_type child = 0; ASSERT_EQ(num_childs, 3); for (const auto node : root["B"].children()) { EXPECT_EQ(node.key(), csubstr(keys[child], 1)); EXPECT_EQ(node.val(), csubstr(vals[child], 1)); child++; } // test whether the tree is corrupted test_invariants(tree); child = num_childs; for (id_type n = tree.last_child(root["B"].id()); n != NONE; n = tree.prev_sibling(n)) { ASSERT_NE(child, 0); EXPECT_EQ(tree.key(n), csubstr(keys[child - 1], 1)); child--; } } TEST(github, 78) { Tree t = parse_in_arena("{foo: 1, bar: [2, 3]}"); EXPECT_EQ(t["foo"].val(), "1"); EXPECT_EQ(t["bar"][0].val(), "2"); EXPECT_EQ(t["bar"][1].val(), "3"); } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- TEST(github, 60) { Tree tree = parse_in_arena(R"( traits: roleBonuses: - bonus: 5 bonusText: de: Bonus auf die Virusstärke von Relikt- und Datenanalysatoren en: bonus to Relic and Data Analyzer virus strength fr: de bonus à la puissance du virus des analyseurs de reliques et des analyseurs de données ja: 遺物アナライザーデータアナライザーのウイルス強度が増加 ru: повышается степень опасности вирусов, применяемых в комплексах анализа данных и комплексах анализа артефактов zh: 遗迹分析仪数据分析仪病毒强度加成 importance: 1 unitID: 139 )"); auto root = tree.rootref(); ASSERT_TRUE(root.is_map()); ASSERT_TRUE(root.has_child("traits")); auto rb = root["traits"]["roleBonuses"][0]; ASSERT_FALSE(rb.invalid()); ASSERT_TRUE(rb.readable()); EXPECT_EQ(rb["bonus"].val(), "5"); auto txt = rb["bonusText"]; ASSERT_TRUE(txt.readable()); ASSERT_TRUE(txt.is_map()); EXPECT_TRUE(txt.has_child("de")); EXPECT_TRUE(txt.has_child("en")); EXPECT_TRUE(txt.has_child("fr")); EXPECT_TRUE(txt.has_child("ja")); EXPECT_TRUE(txt.has_child("ru")); EXPECT_TRUE(txt.has_child("zh")); EXPECT_EQ(txt["de"].val(), "Bonus auf die Virusstärke von Relikt- und Datenanalysatoren"); EXPECT_EQ(txt["en"].val(), "bonus to Relic and Data Analyzer virus strength"); EXPECT_EQ(txt["fr"].val(), "de bonus à la puissance du virus des analyseurs de reliques et des analyseurs de données"); EXPECT_EQ(txt["ja"].val(), "遺物アナライザーデータアナライザーのウイルス強度が増加"); EXPECT_EQ(txt["ru"].val(), "повышается степень опасности вирусов, применяемых в комплексах анализа данных и комплексах анализа артефактов"); EXPECT_EQ(txt["zh"].val(), "遗迹分析仪数据分析仪病毒强度加成"); tree = parse_in_arena(R"(208: basePrice: 3000.0 description: de: Ursprünglich als Rakete für den Fangschuss entworfen, um einem beschädigten Schiff den Todesstoß zu geben, hat die Inferno Heavy Missile seither eine Reihe technischer Upgrades durchlaufen. Die neueste Version hat eine leichtere Sprengladung als das Original, aber stark verbesserte Lenksysteme. en: Originally designed as a 'finisher' - the killing blow to a crippled ship - the Inferno heavy missile has since gone through various technological upgrades. The latest version has a lighter payload than the original, but much improved guidance systems. fr: Conçu à l'origine pour donner le coup de grâce, le missile lourd Inferno a depuis subi de nombreuses améliorations techniques. La dernière version emporte une charge utile réduite par rapport à l'originale, mais est dotée de systèmes de guidage améliorés. ja: 元々「フィニッシャー」―大破した船にとどめを刺す兵器として設計されたインフェルノヘビーミサイルは、以来各種の技術改良を経てきた。現行型は初期型より軽い弾頭を採用しているが、それを補って余りある優れた誘導システムを持つ。 ru: Тяжелая ракета Inferno изначально была спроектирована как «оружие последнего удара» для уничтожения подбитых кораблей. С тех пор было выпущено несколько ее модификаций. В последней модификации используется заряд меньшей мощности, но более совершенная система наведения. zh: 炼狱重型导弹历经多种技术改良,原本被设计为给予落魄敌舰最后一击的“终结者”角色。相比原型,最新版导弹载荷较轻,但装配了大幅改进的制导系统。 graphicID: 20048 groupID: 385 iconID: 188 marketGroupID: 924 mass: 1000.0 name: de: Inferno Heavy Missile en: Inferno Heavy Missile fr: Missile lourd Inferno ja: インフェルノヘビーミサイル ru: Inferno Heavy Missile zh: 炼狱重型导弹 portionSize: 100 published: true radius: 300.0 volume: 0.03 )"); root = tree.rootref()["208"]; EXPECT_EQ(root["description"]["ja"].val(), "元々「フィニッシャー」―大破した船にとどめを刺す兵器として設計されたインフェルノヘビーミサイルは、以来各種の技術改良を経てきた。現行型は初期型より軽い弾頭を採用しているが、それを補って余りある優れた誘導システムを持つ。"); EXPECT_EQ(root["name"]["ja"].val(), "インフェルノヘビーミサイル"); EXPECT_EQ(root["name"]["zh"].val(), "炼狱重型导弹"); } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- TEST(github, 31) { Tree tree; NodeRef r = tree.rootref(); r |= MAP; auto meas = r["meas"]; meas |= MAP; auto plist = meas["createParameterList"]; plist |= SEQ; { NodeRef lumi = plist.append_child(); lumi << "Lumi"; EXPECT_TRUE(lumi.is_val()); } { NodeRef lumi = plist.append_child(); lumi |= MAP; lumi["value"] << 1; lumi["relErr"] << 0.1; EXPECT_TRUE(lumi.is_map()); } { ExpectError::check_assert_basic(&tree, [&](){ NodeRef lumi = plist.append_child(); lumi << "Lumi"; lumi |= MAP; }); } { ExpectError::check_assert_basic(&tree, [&](){ NodeRef lumi = plist.append_child(); lumi << "Lumi"; lumi |= SEQ; }); } { ExpectError::check_assert_basic(&tree, [&](){ NodeRef lumi = plist.append_child(); lumi |= MAP; lumi << "Lumi"; }); } } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- CASE_GROUP(GITHUB_ISSUES) { ADD_CASE_TO_GROUP("github3-problem1", R"( translation: [-2, -2, 5])", N(MB, L{N(KP|SFS, "translation", L{N(VP, "-2"), N(VP, "-2"), N(VP, "5")})}) ); // these must work without quotes ADD_CASE_TO_GROUP("github3-problem2-ex1", R"( audio resource: )", N(MB, L{N(KP|VN, "audio resource", /*"~"*/{})}) ); ADD_CASE_TO_GROUP("github3-problem2-ex2", R"( audio resource: more: example: y )", N(MB, L{N(KP|VN, "audio resource", /*"~"*/{}), N(KP|MB, "more", L{N(KP|VP, "example", "y")})}) ); ADD_CASE_TO_GROUP("github3-problem3", R"(component: type: perspective camera component some_data: {} # this was working data: {} # but this was not working )", N(MB, L{ N(KP|MB, "component", L{ N(KP|VP, "type", "perspective camera component"), N(KP|MFS, "some_data", L{}), N(KP|MFS, "data", L{}) } )}) ); /* THIS IS CAUSING VS TO CRASH OUT OF HEAP SPACE ADD_CASE_TO_GROUP("github3", R"( universe: objects: object: uuid: A7AB039C0EF3A74480A1B398247039A7 components: - component: type: name component data: object name: Root Node - component: type: transform component data: translation: [-2, -2, 5] rotation: [0, 0, 0, 1] scaling: [1, 1, 1] - component: type: perspective camera component data: {} - component: type: mesh component data: mesh resource: TODO - component: type: lua script component data: {} - component: type: audio component data: audio resource: '' type: 0 current sample: 184102 spatialized: true children: - object: uuid: E1C364A925D649408E83C8EEF5179A87 components: - component: type: name component data: object name: Prepend children: [] - object: uuid: 377DBA885AF4CD42B8A56BB3471F60E5 components: - component: type: name component data: object name: pivot children: [] - object: uuid: 6DD1835797DADB4F95232CE7E9DE41BA components: - component: type: name component data: object name: Append children: [] )", L{N("universe", L{ N("objects", L{ N("object", L{ N("uuid", "A7AB039C0EF3A74480A1B398247039A7"), N("components", L{ N(L{N("component", L{N("type", "name component"), N("data", L{N("object name", "Root Node")}), }), }), N(L{N("component", L{N("type", "transform component"), N("data", L{N("translation", L{N("-2"), N("-2"), N("5")}), N("rotation", L{N("0"), N("0"), N("0"), N("1")}), N("scaling", L{N("1"), N("1"), N("1")}),}), }), }), N(L{N("component", L{N("type", "perspective camera component"), N(KEYMAP, "data", L{}), }), }), N(L{N("component", L{N("type", "mesh component"), N("data", L{N("mesh resource", "TODO")}), }), }), N(L{N("component", L{N("type", "lua script component"), N(KEYMAP, "data", L{}), }), }), N(L{N("component", L{N("type", "audio component"), N("data", L{N("audio resource", ""), N("type", "0"), N("current sample", "184102"), N("spatialized", "true"), }), }), }), // component }), // components N("children", L{ N(L{N("object", L{ N("uuid", "E1C364A925D649408E83C8EEF5179A87"), N("components", L{N(L{N("component", L{N("type", "name component"), N("data", L{N("object name", "Prepend")}), }), }), }), N(KEYSEQ, "children", L{}), }), }), // object N(L{N("object", L{ N("uuid", "377DBA885AF4CD42B8A56BB3471F60E5"), N("components", L{N(L{N("component", L{N("type", "name component"), N("data", L{N("object name", "pivot")}), }), }), }), N(KEYSEQ, "children", L{}), }), }), // object N(L{N("object", L{ N("uuid", "6DD1835797DADB4F95232CE7E9DE41BA"), N("components", L{N(L{N("component", L{N("type", "name component"), N("data", L{N("object name", "Append")}), }), }), }), N(KEYSEQ, "children", L{}), }), }), // object }), // children }), // object }) // objects }) // universe } ); */ ADD_CASE_TO_GROUP("github6-problem1", R"( - UQxRibHKEDI: - 0.mp4 - 1.mp4 - 2.mp4 - 3.mp4 - DcYsg8VFdC0: - 0.mp4 - 1.mp4 - 2.mp4 - 3.mp4 - Yt3ymqZXzLY: - 0.mp4 - 1.mp4 - 2.mp4 - 3.mp4 )", N(SB, L{ N(MB, L{N(KP|SB, "UQxRibHKEDI", L{N(VP,"0.mp4"), N(VP,"1.mp4"), N(VP,"2.mp4"), N(VP,"3.mp4")})}), N(MB, L{N(KP|SB, "DcYsg8VFdC0", L{N(VP,"0.mp4"), N(VP,"1.mp4"), N(VP,"2.mp4"), N(VP,"3.mp4")})}), N(MB, L{N(KP|SB, "Yt3ymqZXzLY", L{N(VP,"0.mp4"), N(VP,"1.mp4"), N(VP,"2.mp4"), N(VP,"3.mp4")})}), }) ); ADD_CASE_TO_GROUP("github6", R"(videos: - UQxRibHKEDI: - 0.mp4 - 1.mp4 - 2.mp4 - 3.mp4 - DcYsg8VFdC0: - 0.mp4 - 1.mp4 - 2.mp4 - 3.mp4 - Yt3ymqZXzLY: - 0.mp4 - 1.mp4 - 2.mp4 - 3.mp4 )", N(MB, L{ N(KP|SB, "videos", L{ N(MB, L{N(KP|SB, "UQxRibHKEDI", L{N(VP,"0.mp4"), N(VP,"1.mp4"), N(VP,"2.mp4"), N(VP,"3.mp4")})}), N(MB, L{N(KP|SB, "DcYsg8VFdC0", L{N(VP,"0.mp4"), N(VP,"1.mp4"), N(VP,"2.mp4"), N(VP,"3.mp4")})}), N(MB, L{N(KP|SB, "Yt3ymqZXzLY", L{N(VP,"0.mp4"), N(VP,"1.mp4"), N(VP,"2.mp4"), N(VP,"3.mp4")})}), }) }) ); ADD_CASE_TO_GROUP("github34/ex1", R"( # correct: MessageID1: 'MapRegion_HyrulePrairie' MessageID2: "MapRegion_HyrulePrairie" MessageID3: 'MapRegion_HyrulePrairie' MessageID4: "MapRegion_HyrulePrairie" # incorrect: uninitialised memory? MessageID5: 'MapRegion_HyrulePrairie' MessageID6: "MapRegion_HyrulePrairie" MessageID7: 'MapRegion_HyrulePrairie' MessageID8: "MapRegion_HyrulePrairie" MessageID9: 'MapRegion_HyrulePrairie' MessageID0: "MapRegion_HyrulePrairie" )", N(MB, L{ N(KP|VS, "MessageID1", "MapRegion_HyrulePrairie"), N(KP|VD, "MessageID2", "MapRegion_HyrulePrairie"), N(KP|VS, "MessageID3", "MapRegion_HyrulePrairie"), N(KP|VD, "MessageID4", "MapRegion_HyrulePrairie"), N(KP|VS, "MessageID5", "MapRegion_HyrulePrairie"), N(KP|VD, "MessageID6", "MapRegion_HyrulePrairie"), N(KP|VS, "MessageID7", "MapRegion_HyrulePrairie"), N(KP|VD, "MessageID8", "MapRegion_HyrulePrairie"), N(KP|VS, "MessageID9", "MapRegion_HyrulePrairie"), N(KP|VD, "MessageID0", "MapRegion_HyrulePrairie"), }) ); ADD_CASE_TO_GROUP("github34/ex2", R"( # correct: - MessageID1: 'MapRegion_HyrulePrairie' - MessageID2: "MapRegion_HyrulePrairie" - MessageID3: 'MapRegion_HyrulePrairie' - MessageID4: "MapRegion_HyrulePrairie" # incorrect: uninitialised memory? - MessageID5: 'MapRegion_HyrulePrairie' - MessageID6: "MapRegion_HyrulePrairie" - MessageID7: 'MapRegion_HyrulePrairie' - MessageID8: "MapRegion_HyrulePrairie" - MessageID9: 'MapRegion_HyrulePrairie' - MessageID0: "MapRegion_HyrulePrairie" )", N(SB, L{ N(MB, L{N(KP|VS, "MessageID1", "MapRegion_HyrulePrairie")}), N(MB, L{N(KP|VD, "MessageID2", "MapRegion_HyrulePrairie")}), N(MB, L{N(KP|VS, "MessageID3", "MapRegion_HyrulePrairie")}), N(MB, L{N(KP|VD, "MessageID4", "MapRegion_HyrulePrairie")}), N(MB, L{N(KP|VS, "MessageID5", "MapRegion_HyrulePrairie")}), N(MB, L{N(KP|VD, "MessageID6", "MapRegion_HyrulePrairie")}), N(MB, L{N(KP|VS, "MessageID7", "MapRegion_HyrulePrairie")}), N(MB, L{N(KP|VD, "MessageID8", "MapRegion_HyrulePrairie")}), N(MB, L{N(KP|VS, "MessageID9", "MapRegion_HyrulePrairie")}), N(MB, L{N(KP|VD, "MessageID0", "MapRegion_HyrulePrairie")}), }) ); ADD_CASE_TO_GROUP("github34", R"( # incorrect: uninitialised memory? - MessageID1: 'MapRegion_HyrulePrairie' - MessageID2: "MapRegion_HyrulePrairie" # incorrect: uninitialised memory? - MessageID3: 'MapRegion_HyrulePrairie ' - MessageID4: "MapRegion_HyrulePrairie " # incorrect: for some reason the ' is included in the string - MessageID5: 'MapRegion_HyrulePrairie ' - MessageID6: 'MapRegion_HyrulePrairie ' - MessageID7: "MapRegion_HyrulePrairie " - MessageID8: "MapRegion_HyrulePrairie " # incorrect: same issue - MessageID9: 'MapRegion_HyrulePrairie ' - MessageID10: "MapRegion_HyrulePrairie " # incorrect: still has the trailing quote - MessageID11: 'MapRegion_HyrulePrairie' - MessageID12: "MapRegion_HyrulePrairie" # the string is parsed correctly in this case - key1: true1 MessageID1: 'MapRegion_HyrulePrairie1 ' - key2: true2 MessageID2: "MapRegion_HyrulePrairie2 " )", N(SB, L{ N(MB, L{N(KP|VS, "MessageID1", "MapRegion_HyrulePrairie")}), N(MB, L{N(KP|VD, "MessageID2", "MapRegion_HyrulePrairie")}), N(MB, L{N(KP|VS, "MessageID3", "MapRegion_HyrulePrairie ")}), N(MB, L{N(KP|VD, "MessageID4", "MapRegion_HyrulePrairie ")}), N(MB, L{N(KP|VS, "MessageID5", "MapRegion_HyrulePrairie ")}), N(MB, L{N(KP|VS, "MessageID6", "MapRegion_HyrulePrairie ")}), N(MB, L{N(KP|VD, "MessageID7", "MapRegion_HyrulePrairie ")}), N(MB, L{N(KP|VD, "MessageID8", "MapRegion_HyrulePrairie ")}), N(MB, L{N(KP|VS, "MessageID9", "MapRegion_HyrulePrairie ")}), N(MB, L{N(KP|VD, "MessageID10", "MapRegion_HyrulePrairie ")}), N(MB, L{N(KP|VS, "MessageID11", "MapRegion_HyrulePrairie")}), N(MB, L{N(KP|VD, "MessageID12", "MapRegion_HyrulePrairie")}), N(MB, L{N(KP|VP, "key1", "true1"), N(KP|VS, "MessageID1", "MapRegion_HyrulePrairie1 ")}), N(MB, L{N(KP|VP, "key2", "true2"), N(KP|VD, "MessageID2", "MapRegion_HyrulePrairie2 ")}), }) ); ADD_CASE_TO_GROUP("github35/expected_error11", EXPECT_PARSE_ERROR, R"( # *segfault* // not anymore! - key1: true1 MessageID1: 'MapRegion_HyrulePrairie1 ' )", Location(4, 1) ); ADD_CASE_TO_GROUP("github35/expected_error12", EXPECT_PARSE_ERROR, R"( # *segfault* // not anymore! - key2: true2 MessageID2: "MapRegion_HyrulePrairie2 " )", Location(4, 1) ); ADD_CASE_TO_GROUP("github35/expected_error21", EXPECT_PARSE_ERROR, R"( # *segfault* // not anymore! - key1: true1 MessageID1: 'MapRegion_HyrulePrairie1 ' )", Location(4, 15) ); ADD_CASE_TO_GROUP("github35/expected_error22", EXPECT_PARSE_ERROR, R"( # *segfault* // not anymore! - key2: true2 MessageID2: "MapRegion_HyrulePrairie2 " )", Location(4, 15) ); ADD_CASE_TO_GROUP("github128/1", RESOLVE_REFS | EXPECT_RESOLVE_ERROR, "a: *invalid"); ADD_CASE_TO_GROUP("github128/2", RESOLVE_REFS | EXPECT_RESOLVE_ERROR, "*"); ADD_CASE_TO_GROUP("github128/3", RESOLVE_REFS | EXPECT_RESOLVE_ERROR, "*abc"); ADD_CASE_TO_GROUP("github128/4", "*abc", N(VAL, "*abc", AR(VALREF, "*abc"))); ADD_CASE_TO_GROUP("github129", RESOLVE_REFS, R"( ref: &ref ref_val a: *ref # resolve the reference b: '*ref' # don't resolve, it's just a string c: "*ref" # don't resolve, it's just a string d: > # don't resolve, it's just a string *ref e: >- # don't resolve, it's just a string *ref f: >+ # don't resolve, it's just a string *ref g: | # don't resolve, it's just a string *ref h: |- # don't resolve, it's just a string *ref i: |+ # don't resolve, it's just a string *ref )", N(MB, L{ N(KP|VP, "ref", "ref_val"), N(KP|VP, "a", "ref_val"), // this should be resolved N(KP|VS, "b", "*ref"), // this should not be resolved (just a string) N(KP|VD, "c", "*ref"), // this should not be resolved (just a string) N(KP|VF, "d", "*ref\n"), // this should not be resolved (just a string) N(KP|VF, "e", "*ref"), // this should not be resolved (just a string) N(KP|VF, "f", "*ref\n"), // this should not be resolved (just a string) N(KP|VL, "g", "*ref\n"), // this should not be resolved (just a string) N(KP|VL, "h", "*ref"), // this should not be resolved (just a string) N(KP|VL, "i", "*ref\n"), // this should not be resolved (just a string) }) ); } } // namespace yml } // namespace c4