diff options
| author | Stefan Boberg <[email protected]> | 2026-02-24 15:02:58 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2026-02-24 15:02:58 +0100 |
| commit | 2af00d3ff720969fb3b4d471778efcf8c7b3fad4 (patch) | |
| tree | 9193eb3ff8cc9f3fb5e3342d94bde8c193a977ce /thirdparty/ryml/test/test_location.cpp | |
| parent | added zencore/filesystem.h include (diff) | |
| parent | Various bug fixes (#778) (diff) | |
| download | zen-sb/spdlog-out.tar.xz zen-sb/spdlog-out.zip | |
Merge branch 'main' into sb/spdlog-outsb/spdlog-out
Diffstat (limited to 'thirdparty/ryml/test/test_location.cpp')
| -rw-r--r-- | thirdparty/ryml/test/test_location.cpp | 720 |
1 files changed, 0 insertions, 720 deletions
diff --git a/thirdparty/ryml/test/test_location.cpp b/thirdparty/ryml/test/test_location.cpp deleted file mode 100644 index e05407eeb..000000000 --- a/thirdparty/ryml/test/test_location.cpp +++ /dev/null @@ -1,720 +0,0 @@ -#ifndef RYML_SINGLE_HEADER -#include <c4/yml/std/std.hpp> -#include <c4/yml/yml.hpp> -#endif -#include "./test_case.hpp" -#include <gtest/gtest.h> - - -namespace c4 { -namespace yml { - -TEST(locations, default_is_no_location) -{ - { - ParserOptions opts; - EXPECT_EQ(opts.locations(), false); - } - { - Parser parser; - EXPECT_EQ(parser.options().locations(), false); - } - { - Parser parser(ParserOptions{}); - EXPECT_EQ(parser.options().locations(), false); - } - { - Parser parser(ParserOptions().locations(false)); - EXPECT_EQ(parser.options().locations(), false); - } - { - Parser parser(ParserOptions().locations(true)); - EXPECT_EQ(parser.options().locations(), true); - } -} - - -TEST(locations, error_is_triggered_querying_with_locations_disabled) -{ - bool parsed_ok = false; - ExpectError::do_check([&]{ - Parser parser(ParserOptions().locations(false)); - Tree t = parser.parse_in_arena("test", "foo: bar"); - parsed_ok = true; - (void)parser.location(t["foo"]); - }); - EXPECT_TRUE(parsed_ok); -} - - - -#define _checkloc(node, line_, col_, str) \ - { \ - const Location loc = parser.location(node); \ - EXPECT_EQ(loc.name, "myfile.yml"); \ - EXPECT_EQ(loc.line, line_); \ - EXPECT_EQ(loc.col, col_); \ - EXPECT_EQ(t.arena().sub(loc.offset, csubstr(str).len), csubstr(str)); \ - } - -TEST(locations, no_error_is_triggered_querying_with_locations) -{ - Parser parser(ParserOptions().locations(true)); - EXPECT_EQ(parser.options().locations(), true); - Tree t = parser.parse_in_arena("myfile.yml", "foo: bar"); - _checkloc(t["foo"], 0, 0, "foo"); -} - - -TEST(locations, docval) -{ - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - Tree t = parser.parse_in_arena("myfile.yml", "docval"); - _checkloc(t.rootref(), 0u, 0u, "docval"); - t = parser.parse_in_arena("myfile.yml", "\n docval"); - _checkloc(t.rootref(), 1u, 1u, "docval"); - t = parser.parse_in_arena("myfile.yml", "\n\n docval"); - _checkloc(t.rootref(), 2u, 1u, "docval"); -} - -TEST(locations, docval_null) -{ - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - Tree t = parser.parse_in_arena("myfile.yml", "~"); - _checkloc(t.rootref(), 0u, 0u, "~"); - t = parser.parse_in_arena("myfile.yml", ""); - _checkloc(t.rootref(), 0u, 0u, ""); - t = parser.parse_in_arena("myfile.yml", R"(# -# -# -# -# -)"); - _checkloc(t.rootref(), 0u, 0u, ""); -} - -TEST(locations, seq_block) -{ - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - csubstr yaml = R"( -- this -- is -- a -- seq -- - and - - this - - - as - - well - - - # this one works as well - # even with a comment in between - the scalar value is here - - and here's another value - - - - another val - - yet another val -)"; - Tree t = parser.parse_in_arena("myfile.yml", yaml); - ConstNodeRef seq = t.rootref(); - ASSERT_TRUE(seq.is_seq()); - _checkloc(seq , 1u, 0u, "- "); - _checkloc(seq[0] , 1u, 2u, "this"); - _checkloc(seq[1] , 2u, 2u, "is"); - _checkloc(seq[2] , 3u, 2u, "a"); - _checkloc(seq[3] , 4u, 2u, "seq"); - _checkloc(seq[4] , 5u, 2u, "- "); - _checkloc(seq[4][0] , 5u, 4u, "and"); - _checkloc(seq[4][1] , 6u, 4u, "this"); - _checkloc(seq[4][2] , 7u, 4u, "- "); - _checkloc(seq[4][2][0], 7u, 6u, "as"); - _checkloc(seq[4][2][1], 8u, 6u, "well"); - _checkloc(seq[4][3] , 9u, 4u, "- # this one works as well"); - _checkloc(seq[4][3][0], 11u, 6u, "the scalar value is here"); - _checkloc(seq[4][3][1], 12u, 8u, "and here's another value"); - _checkloc(seq[4][3][2], 14u, 6u, "- "); - _checkloc(seq[4][3][2][0], 14u, 8u, "another val"); - _checkloc(seq[4][3][2][1], 15u, 8u, "yet another val"); -} - -TEST(locations, map_block) -{ - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - csubstr yaml = R"( -this: ~ -is: ~ -a: ~ -map: ~ -and: - this: - as: ~ - well: ~ - aswell: # this one works as well - # even with a comment in between - val: here - hah: here -)"; - Tree t = parser.parse_in_arena("myfile.yml", yaml); - ConstNodeRef map = t.rootref(); - ASSERT_TRUE(map.is_map()); - _checkloc(map , 1u, 0u, "this:"); - _checkloc(map["this"] , 1u, 0u, "this:"); - _checkloc(map["is"] , 2u, 0u, "is:"); - _checkloc(map["a"] , 3u, 0u, "a:"); - _checkloc(map["map"] , 4u, 0u, "map:"); - _checkloc(map["and"] , 5u, 0u, "and:"); - _checkloc(map["and"]["this"] , 6u, 2u, "this:"); - _checkloc(map["and"]["this"]["as"] , 7u, 4u, "as:"); - _checkloc(map["and"]["this"]["well"] , 8u, 4u, "well:"); - _checkloc(map["and"]["aswell"] , 9u, 2u, "aswell:"); - _checkloc(map["and"]["aswell"]["val"] , 11u, 4u, "val:"); - _checkloc(map["and"]["aswell"]["hah"] , 12u, 4u, "hah:"); -} - -TEST(locations, seq_block_null) -{ - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - const Tree t = parser.parse_in_arena("myfile.yml", R"(--- -- ~ -- ~ -- notnull -- ~ -- ~ ---- -- ~ -- - ~ -- - - ~ -- - - - ~ -- - - - - ~ -- - - - ~ -- - - ~ -- - ~ -- ~ ---- -- -- -- -- - - - - - - - - - - - - - - - - - - - - - - - - -- -)"); - _checkloc(t.rootref() , 0u, 0u, "---"); - _checkloc(t.docref(0) , 1u, 0u, "- "); - _checkloc(t.docref(0)[0], 1u, 2u, "~"); - _checkloc(t.docref(0)[1], 2u, 2u, "~"); - _checkloc(t.docref(0)[2], 3u, 2u, "notnull"); - _checkloc(t.docref(0)[3], 4u, 2u, "~"); - _checkloc(t.docref(0)[4], 5u, 2u, "~"); - _checkloc(t.docref(1) , 7u, 0u, "- "); - _checkloc(t.docref(1)[0], 7u, 2u, "~"); - _checkloc(t.docref(1)[1], 8u, 2u, "- "); - _checkloc(t.docref(1)[1][0], 8u, 4u, "~"); - _checkloc(t.docref(1)[2], 9u, 2u, "- "); - _checkloc(t.docref(1)[2][0], 9u, 4u, "- "); - _checkloc(t.docref(1)[2][0][0], 9u, 6u, "~"); - _checkloc(t.docref(1)[3], 10u, 2u, "- "); - _checkloc(t.docref(1)[3][0], 10u, 4u, "- "); - _checkloc(t.docref(1)[3][0][0], 10u, 6u, "- "); - _checkloc(t.docref(1)[3][0][0][0], 10u, 8u, "~"); - _checkloc(t.docref(1)[4], 11u, 2u, "- "); - _checkloc(t.docref(1)[4][0], 11u, 4u, "- "); - _checkloc(t.docref(1)[4][0][0], 11u, 6u, "- "); - _checkloc(t.docref(1)[4][0][0][0], 11u, 8u, "- "); - _checkloc(t.docref(1)[4][0][0][0][0], 11u, 10u, "~"); - _checkloc(t.docref(1)[5], 12u, 2u, "- "); - _checkloc(t.docref(1)[5][0], 12u, 4u, "- "); - _checkloc(t.docref(1)[5][0][0], 12u, 6u, "- "); - _checkloc(t.docref(1)[5][0][0][0], 12u, 8u, "~"); - _checkloc(t.docref(1)[6], 13u, 2u, "- "); - _checkloc(t.docref(1)[6][0], 13u, 4u, "- "); - _checkloc(t.docref(1)[6][0][0], 13u, 6u, "~"); - _checkloc(t.docref(1)[7], 14u, 2u, "- "); - _checkloc(t.docref(1)[7][0], 14u, 4u, "~"); - _checkloc(t.docref(1)[8], 15u, 2u, "~"); - _checkloc(t.docref(2) , 17u, 0u, "-"); - _checkloc(t.docref(2)[0], 17u, 0u, "-"); - _checkloc(t.docref(2)[1], 17u, 0u, "-"); - _checkloc(t.docref(2)[2], 21u, 2u, "-"); - _checkloc(t.docref(2)[3], 21u, 2u, "-"); - _checkloc(t.docref(2)[3][0], 21u, 2u, "-"); - _checkloc(t.docref(2)[3][1], 24u, 4u, "-"); - _checkloc(t.docref(2)[3][2], 24u, 4u, "-"); - _checkloc(t.docref(2)[3][2][0], 25u, 6u, "-"); - _checkloc(t.docref(2)[3][2][0][0], 26u, 8u, "-"); - _checkloc(t.docref(2)[3][2][0][0][0], 26u, 8u, "-"); - _checkloc(t.docref(2)[3][2][0][0][1], 26u, 8u, "-"); - _checkloc(t.docref(2)[3][2][1], 25u, 6u, "-"); - _checkloc(t.docref(2)[3][3], 24u, 4u, "-"); // fix: this should be after the previous child - _checkloc(t.docref(2)[3][4], 21u, 2u, "-"); // fix: this should be after the previous child - _checkloc(t.docref(2)[3][5], 21u, 2u, "-"); // fix: this should be after the previous child -} - -TEST(locations, map_block_null) -{ - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - Tree t = parser.parse_in_arena("myfile.yml", R"(--- -~: v ---- -null: v ---- - : v -)"); - _checkloc(t.rootref() , 0u, 0u, "---"); - _checkloc(t.docref(0) , 1u, 0u, ""); - _checkloc(t.docref(0)[0], 1u, 0u, "~"); - _checkloc(t.docref(1) , 3u, 0u, "null"); - _checkloc(t.docref(1)[0], 3u, 0u, "null"); - _checkloc(t.docref(2) , 5u, 1u, ""); - _checkloc(t.docref(2)[0], 5u, 3u, ""); -} - -TEST(locations, empty_seq) -{ - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - Tree t = parser.parse_in_arena("myfile.yml", R"(--- -- [] -- [] -- notnull -- [] -- [] ---- -- [] ---- -[] ---- -key0: [] -key1: [] -key2: notnull -key3: [] -key4: [] ---- -key: [] -)"); - _checkloc(t.rootref() , 0u, 0u, "---"); - _checkloc(t.docref(0) , 1u, 0u, "- "); - _checkloc(t.docref(0)[0], 1u, 2u, "[]"); - _checkloc(t.docref(0)[1], 2u, 2u, "[]"); - _checkloc(t.docref(0)[2], 3u, 2u, "notnull"); - _checkloc(t.docref(0)[3], 4u, 2u, "[]"); - _checkloc(t.docref(0)[4], 5u, 2u, "[]"); - _checkloc(t.docref(1) , 7u, 0u, "- "); - _checkloc(t.docref(1)[0], 7u, 2u, "[]"); - _checkloc(t.docref(2) , 9u, 0u, "[]"); - _checkloc(t.docref(3) , 11u, 0u, "key0"); // WTF - _checkloc(t.docref(3)["key0"], 11u, 0u, "key0"); - _checkloc(t.docref(3)["key1"], 12u, 0u, "key1"); - _checkloc(t.docref(3)["key2"], 13u, 0u, "key2"); - _checkloc(t.docref(3)["key3"], 14u, 0u, "key3"); - _checkloc(t.docref(3)["key4"], 15u, 0u, "key4"); -} - -TEST(locations, empty_map) -{ - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - Tree t = parser.parse_in_arena("myfile.yml", R"(--- -- {} -- {} -- notnull -- {} -- {} ---- -- {} ---- -{} ---- -key0: {} -key1: {} -key2: notnull -key3: {} -key4: {} ---- -key: {} -)"); - _checkloc(t.rootref() , 0u, 0u, "---"); - _checkloc(t.docref(0) , 1u, 0u, "- "); - _checkloc(t.docref(0)[0], 1u, 2u, "{}"); - _checkloc(t.docref(0)[1], 2u, 2u, "{}"); - _checkloc(t.docref(0)[2], 3u, 2u, "notnull"); - _checkloc(t.docref(0)[3], 4u, 2u, "{}"); - _checkloc(t.docref(0)[4], 5u, 2u, "{}"); - _checkloc(t.docref(1) , 7u, 0u, "- "); - _checkloc(t.docref(1)[0], 7u, 2u, "{}"); - _checkloc(t.docref(2) , 9u, 0u, "{}"); - _checkloc(t.docref(3) , 11u, 0u, "key0"); // WTF - _checkloc(t.docref(3)["key0"], 11u, 0u, "key0"); - _checkloc(t.docref(3)["key1"], 12u, 0u, "key1"); - _checkloc(t.docref(3)["key2"], 13u, 0u, "key2"); - _checkloc(t.docref(3)["key3"], 14u, 0u, "key3"); - _checkloc(t.docref(3)["key4"], 15u, 0u, "key4"); -} - - -TEST(locations, seq_flow) -{ - Tree t; - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - csubstr yaml = R"([one,two,three,four,items])"; - parser.parse_in_arena("myfile.yml", yaml, &t); - ConstNodeRef seq = t.rootref(); - ASSERT_TRUE(seq.is_seq()); - _checkloc(seq , 0u, 0u, "["); - _checkloc(seq[0], 0u, 1u, "one"); - _checkloc(seq[1], 0u, 5u, "two"); - _checkloc(seq[2], 0u, 9u, "three"); - _checkloc(seq[3], 0u, 15u, "four"); - _checkloc(seq[4], 0u, 20u, "items"); -} - -TEST(locations, map_flow) -{ - Tree t; - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - csubstr yaml = R"({one: item,two: items,three: items,four: items})"; - parser.parse_in_arena("myfile.yml", yaml, &t); - ConstNodeRef map = t.rootref(); - ASSERT_TRUE(map.is_map()); - _checkloc(map , 0u, 0u, "{"); - _checkloc(map[0], 0u, 1u, "one:"); - _checkloc(map[1], 0u, 11u, "two:"); - _checkloc(map[2], 0u, 22u, "three:"); - _checkloc(map[3], 0u, 35u, "four:"); -} - -TEST(locations, seq_flow_nested) -{ - Tree t; - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - csubstr yaml = R"([ - one, - two, - [woops, there, [ goes, master]], - five, - {wait: is, this: { really: a map? }, nope: [ a seq!, { had: you there, eehh: no. } ]}, - yep, - it, - was -])"; - parser.parse_in_arena("myfile.yml", yaml, &t); - ConstNodeRef seq = t.rootref(); - ASSERT_TRUE(seq.is_seq()); - _checkloc(seq , 0u, 0u, "["); - _checkloc(seq[0] , 1u, 2u, "one"); - _checkloc(seq[1] , 2u, 2u, "two"); - _checkloc(seq[2] , 3u, 2u, "["); - _checkloc(seq[2][0] , 3u, 3u, "woops"); - _checkloc(seq[2][1] , 3u, 14u, "there"); - _checkloc(seq[2][2] , 3u, 24u, "["); - _checkloc(seq[2][2][0] , 3u, 27u, "goes"); - _checkloc(seq[2][2][1] , 3u, 37u, "master"); - _checkloc(seq[3] , 4u, 2u, "five"); - _checkloc(seq[4] , 5u, 2u, "{"); - _checkloc(seq[4]["wait"] , 5u, 3u, "wait"); - _checkloc(seq[4]["this"] , 5u, 15u, "this"); - _checkloc(seq[4]["this"]["really"] , 5u, 27u, "really"); - _checkloc(seq[4]["nope"] , 5u, 47u, "nope"); - _checkloc(seq[4]["nope"][0] , 5u, 56u, "a seq!"); - _checkloc(seq[4]["nope"][1] , 5u, 64u, "{"); - _checkloc(seq[4]["nope"][1]["had"] , 5u, 66u, "had"); - _checkloc(seq[4]["nope"][1]["eehh"], 5u, 83u, "eehh"); - _checkloc(seq[5] , 6u, 2u, "yep"); - _checkloc(seq[6] , 7u, 2u, "it"); - _checkloc(seq[7] , 8u, 2u, "was"); -} - -TEST(locations, grow_array) -{ - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - Tree t = parser.parse_in_arena("myfile.yml", "docval"); - _checkloc(t.rootref(), 0u, 0u, "docval"); - t = parser.parse_in_arena("myfile.yml", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ndocval"); - _checkloc(t.rootref(), 47u, 0u, "docval"); -} - -// do a test with a buffer size up to 30 lines to ensure hitting -// the binary search path -TEST(locations, small_array) -{ - Tree t; - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - csubstr yaml = R"(--- -foo: yes -bar: - - 1 - - 2 -baz: - - 1_ - - 2_ - - 3_ -)"; - parser.parse_in_arena("myfile.yml", yaml, &t); - ConstNodeRef stream = t.rootref(); - ConstNodeRef map = t.docref(0); - ASSERT_TRUE(map.is_map()); - ASSERT_TRUE(map.is_doc()); - _checkloc(stream , 0u, 0u, "---"); - _checkloc(map , 1u, 0u, "foo"); - _checkloc(map["foo"] , 1u, 0u, "foo"); - _checkloc(map["bar"] , 2u, 0u, "bar"); - _checkloc(map["bar"][0], 3u, 4u, "1"); - _checkloc(map["bar"][1], 4u, 4u, "2"); - _checkloc(map["baz"] , 5u, 0u, "baz"); - _checkloc(map["baz"][0], 6u, 6u, "1_"); - _checkloc(map["baz"][1], 7u, 6u, "2_"); - _checkloc(map["baz"][2], 8u, 10u, "3_"); -} - -// do a test with a buffer of at least 30 lines to ensure hitting -// the binary search path -TEST(locations, large_array) -{ - Tree t; - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - csubstr yaml = R"(--- -foo1: definitely # 1 -bar1: - - 1 - - 2 -baz1: - - 1_ - - 2_ - - 3_ - - - -foo2: definitely # 12 -bar2: - - 1 - - 2 -baz2: - - 1_ - - 2_ - - 3_ - - - -foo3: definitely # 23 -bar3: - - 1 - - 2 -baz3: - - 1_ - - 2_ - - 3_ - - - -foo4: definitely # 34 -bar4: - - 1 - - 2 -baz4: - - 1_ - - 2_ - - 3_ - - - -foo5: definitely # 45 -bar5: - - 1 - - 2 -baz5: - - 1_ - - 2_ - - 3_ - - - -foo6: definitely # 56 -bar6: - - 1 - - 2 -baz6: - - 1_ - - 2_ - - 3_ -)"; - parser.parse_in_arena("myfile.yml", yaml, &t); - ConstNodeRef map = t.docref(0); - ASSERT_TRUE(map.is_map()); - ASSERT_TRUE(map.is_doc()); - _checkloc(t.rootref() , 0u, 0u, "---"); - _checkloc(map , 1u, 0u, "foo1"); - _checkloc(map["foo1"] , 0u+1u, 0u, "foo1"); - _checkloc(map["bar1"] , 0u+2u, 0u, "bar1"); - _checkloc(map["bar1"][0], 0u+3u, 4u, "1"); - _checkloc(map["bar1"][1], 0u+4u, 4u, "2"); - _checkloc(map["baz1"] , 0u+5u, 0u, "baz"); - _checkloc(map["baz1"][0], 0u+6u, 6u, "1_"); - _checkloc(map["baz1"][1], 0u+7u, 6u, "2_"); - _checkloc(map["baz1"][2], 0u+8u, 10u, "3_"); - // - _checkloc(map["foo2"] , 11u+1u, 0u, "foo2"); - _checkloc(map["bar2"] , 11u+2u, 0u, "bar2"); - _checkloc(map["bar2"][0], 11u+3u, 4u, "1"); - _checkloc(map["bar2"][1], 11u+4u, 4u, "2"); - _checkloc(map["baz2"] , 11u+5u, 0u, "baz2"); - _checkloc(map["baz2"][0], 11u+6u, 6u, "1_"); - _checkloc(map["baz2"][1], 11u+7u, 6u, "2_"); - _checkloc(map["baz2"][2], 11u+8u, 10u, "3_"); - // - _checkloc(map["foo3"] , 22u+1u, 0u, "foo3"); - _checkloc(map["bar3"] , 22u+2u, 0u, "bar3"); - _checkloc(map["bar3"][0], 22u+3u, 4u, "1"); - _checkloc(map["bar3"][1], 22u+4u, 4u, "2"); - _checkloc(map["baz3"] , 22u+5u, 0u, "baz3"); - _checkloc(map["baz3"][0], 22u+6u, 6u, "1_"); - _checkloc(map["baz3"][1], 22u+7u, 6u, "2_"); - _checkloc(map["baz3"][2], 22u+8u, 10u, "3_"); - // - _checkloc(map["foo4"] , 33u+1u, 0u, "foo4"); - _checkloc(map["bar4"] , 33u+2u, 0u, "bar4"); - _checkloc(map["bar4"][0], 33u+3u, 4u, "1"); - _checkloc(map["bar4"][1], 33u+4u, 4u, "2"); - _checkloc(map["baz4"] , 33u+5u, 0u, "baz4"); - _checkloc(map["baz4"][0], 33u+6u, 6u, "1_"); - _checkloc(map["baz4"][1], 33u+7u, 6u, "2_"); - _checkloc(map["baz4"][2], 33u+8u, 10u, "3_"); - // - _checkloc(map["foo5"] , 44u+1u, 0u, "foo5"); - _checkloc(map["bar5"] , 44u+2u, 0u, "bar5"); - _checkloc(map["bar5"][0], 44u+3u, 4u, "1"); - _checkloc(map["bar5"][1], 44u+4u, 4u, "2"); - _checkloc(map["baz5"] , 44u+5u, 0u, "baz5"); - _checkloc(map["baz5"][0], 44u+6u, 6u, "1_"); - _checkloc(map["baz5"][1], 44u+7u, 6u, "2_"); - _checkloc(map["baz5"][2], 44u+8u, 10u, "3_"); - // - _checkloc(map["foo6"] , 55u+1u, 0u, "foo6"); - _checkloc(map["bar6"] , 55u+2u, 0u, "bar6"); - _checkloc(map["bar6"][0], 55u+3u, 4u, "1"); - _checkloc(map["bar6"][1], 55u+4u, 4u, "2"); - _checkloc(map["baz6"] , 55u+5u, 0u, "baz6"); - _checkloc(map["baz6"][0], 55u+6u, 6u, "1_"); - _checkloc(map["baz6"][1], 55u+7u, 6u, "2_"); - _checkloc(map["baz6"][2], 55u+8u, 10u, "3_"); -} - - -TEST(locations, issue260_0) -{ - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - Tree tree = parser.parse_in_arena("source.yml", R"(Body: - - Id: 1 - Name: Apple - Script: | - Line One - Line Two - - Id: 2 - Name: Cat - Script: | - Line One - Line Two - - Id: 3 - Name: Dog - Script: | - Line One - Line Two)"); - EXPECT_EQ(tree["Body"][2]["Name"].val(), "Dog"); - EXPECT_EQ(parser.location(tree["Body"][2]["Name"]).line, 12u); -} - -TEST(locations, issue260_1) -{ - ParserOptions opts = ParserOptions().locations(true); - Parser parser(opts); - Tree tree = parser.parse_in_arena("source.yml", R"(Body: # 0 - - Id: 1 # line 1 - Name: Apple - - Id: 2 # line 3 - Name: Cat - Script: | - Line One - Line Two - - Id: 3 # line 8 - Name: Cat2 - Script: > - Line One - Line Two - - Id: 4 # line 13 - Name: Cat3 - Script: " - Line One - Line Two" - - Id: 5 # line 18 - Name: Cat4 - Script: ' - Line One - Line Two' - - Id: 5 # line 23 - Name: Cat5 - Script: - Line One - Line Two - - Id: 6 # line 28 - Name: Dog - Script: | - Line One - Line Two)"); - EXPECT_EQ(parser.location(tree["Body"][0]).line, 1u); - EXPECT_EQ(parser.location(tree["Body"][1]).line, 3u); - EXPECT_EQ(parser.location(tree["Body"][2]).line, 8u); - EXPECT_EQ(parser.location(tree["Body"][3]).line, 13u); - EXPECT_EQ(parser.location(tree["Body"][4]).line, 18u); - EXPECT_EQ(parser.location(tree["Body"][5]).line, 23u); - EXPECT_EQ(parser.location(tree["Body"][6]).line, 28u); - EXPECT_EQ(parser.location(tree["Body"][0]["Id"]).line, 1u); - EXPECT_EQ(parser.location(tree["Body"][1]["Id"]).line, 3u); - EXPECT_EQ(parser.location(tree["Body"][2]["Id"]).line, 8u); - EXPECT_EQ(parser.location(tree["Body"][3]["Id"]).line, 13u); - EXPECT_EQ(parser.location(tree["Body"][4]["Id"]).line, 18u); - EXPECT_EQ(parser.location(tree["Body"][5]["Id"]).line, 23u); - EXPECT_EQ(parser.location(tree["Body"][6]["Id"]).line, 28u); - EXPECT_EQ(parser.location(tree["Body"][0]["Name"]).line, 1u+1u); - EXPECT_EQ(parser.location(tree["Body"][1]["Name"]).line, 3u+1u); - EXPECT_EQ(parser.location(tree["Body"][2]["Name"]).line, 8u+1u); - EXPECT_EQ(parser.location(tree["Body"][3]["Name"]).line, 13u+1u); - EXPECT_EQ(parser.location(tree["Body"][4]["Name"]).line, 18u+1u); - EXPECT_EQ(parser.location(tree["Body"][5]["Name"]).line, 23u+1u); - EXPECT_EQ(parser.location(tree["Body"][6]["Name"]).line, 28u+1u); -} - - - -// The other test executables are written to contain the declarative-style -// YmlTestCases. This executable does not have any but the build setup -// assumes it does, and links with the test lib, which requires an existing -// get_case() function. So this is here to act as placeholder until (if?) -// proper test cases are added here. This was detected in #47 (thanks -// @cburgard). -Case const* get_case(csubstr) -{ - return nullptr; -} - -} // namespace yml -} // namespace c4 |