From 1853e964e96c41e762ca0ab97259ee4e79d86ec7 Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Mon, 3 Nov 2014 13:35:54 -0800 Subject: Use the new ASTs --- src/ast/npc_test.cpp | 214 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 125 insertions(+), 89 deletions(-) (limited to 'src/ast/npc_test.cpp') diff --git a/src/ast/npc_test.cpp b/src/ast/npc_test.cpp index ea4bdf3..7cced35 100644 --- a/src/ast/npc_test.cpp +++ b/src/ast/npc_test.cpp @@ -24,7 +24,7 @@ #include "../tests/fdhack.hpp" -//#include "../poison.hpp" +#include "../poison.hpp" namespace tmwa @@ -54,7 +54,7 @@ namespace npc { io::LineCharReader lr(io::from_string, ""_s, input); auto res = parse_top(lr); - EXPECT_EQ(res.get_success(), Some(std::unique_ptr(nullptr))); + EXPECT_TRUE(res.is_none()); } } TEST(npcast, comment) @@ -70,13 +70,11 @@ namespace npc for (auto input : inputs) { io::LineCharReader lr(io::from_string, ""_s, input); - auto res = parse_top(lr); + auto res = TRY_UNWRAP(parse_top(lr), FAIL()); EXPECT_TRUE(res.get_success().is_some()); auto top = TRY_UNWRAP(std::move(res.get_success()), FAIL()); - if (!top) - FAIL(); - EXPECT_SPAN(top->span, 1,1, 1,8); - auto p = dynamic_cast(top.get()); + EXPECT_SPAN(top.span, 1,1, 1,8); + auto p = top.get_if(); EXPECT_TRUE(p); if (p) { @@ -91,21 +89,19 @@ namespace npc { // 1 2 3 4 //234567890123456789012345678901234567890123456789 - "map.gat,1,2|warp|To Other Map|3,4,other.gat,5,6"_s, - "map.gat,1,2|warp|To Other Map|3,4,other.gat,5,6\n"_s, - "map.gat,1,2|warp|To Other Map|3,4,other.gat,5,6{"_s, + "map.gat,1,2|warp|To Other Map|3,4,other.gat,7,8"_s, + "map.gat,1,2|warp|To Other Map|3,4,other.gat,7,8\n"_s, + "map.gat,1,2|warp|To Other Map|3,4,other.gat,7,8{"_s, // no optional fields in warp }; for (auto input : inputs) { io::LineCharReader lr(io::from_string, ""_s, input); - auto res = parse_top(lr); + auto res = TRY_UNWRAP(parse_top(lr), FAIL()); EXPECT_TRUE(res.get_success().is_some()); auto top = TRY_UNWRAP(std::move(res.get_success()), FAIL()); - if (!top) - FAIL(); - EXPECT_SPAN(top->span, 1,1, 1,47); - auto p = dynamic_cast(top.get()); + EXPECT_SPAN(top.span, 1,1, 1,47); + auto p = top.get_if(); EXPECT_TRUE(p); if (p) { @@ -119,15 +115,15 @@ namespace npc EXPECT_SPAN(p->name.span, 1,18, 1,29); EXPECT_EQ(p->name.data, stringish("To Other Map"_s)); EXPECT_SPAN(p->xs.span, 1,31, 1,31); - EXPECT_EQ(p->xs.data, 3); + EXPECT_EQ(p->xs.data, 5); EXPECT_SPAN(p->ys.span, 1,33, 1,33); - EXPECT_EQ(p->ys.data, 4); + EXPECT_EQ(p->ys.data, 6); EXPECT_SPAN(p->to_m.span, 1,35, 1,43); EXPECT_EQ(p->to_m.data, stringish("other"_s)); EXPECT_SPAN(p->to_x.span, 1,45, 1,45); - EXPECT_EQ(p->to_x.data, 5); + EXPECT_EQ(p->to_x.data, 7); EXPECT_SPAN(p->to_y.span, 1,47, 1,47); - EXPECT_EQ(p->to_y.data, 6); + EXPECT_EQ(p->to_y.data, 8); } } } @@ -146,13 +142,11 @@ namespace npc for (auto input : inputs) { io::LineCharReader lr(io::from_string, ""_s, input); - auto res = parse_top(lr); + auto res = TRY_UNWRAP(parse_top(lr), FAIL()); EXPECT_TRUE(res.get_success().is_some()); auto top = TRY_UNWRAP(std::move(res.get_success()), FAIL()); - if (!top) - FAIL(); - EXPECT_SPAN(top->span, 1,1, 1,54); - auto p = dynamic_cast(top.get()); + EXPECT_SPAN(top.span, 1,1, 1,54); + auto p = top.get_if(); EXPECT_TRUE(p); if (p) { @@ -213,13 +207,11 @@ namespace npc bool third = input.startswith('n'); assert(first + second + third == 1); io::LineCharReader lr(io::from_string, ""_s, input); - auto res = parse_top(lr); + auto res = TRY_UNWRAP(parse_top(lr), FAIL()); EXPECT_TRUE(res.get_success().is_some()); auto top = TRY_UNWRAP(std::move(res.get_success()), FAIL()); - if (!top) - FAIL(); - EXPECT_SPAN(top->span, 1,1, 1,first?65:54); - auto p = dynamic_cast(top.get()); + EXPECT_SPAN(top.span, 1,1, 1,first?65:54); + auto p = top.get_if(); EXPECT_TRUE(p); if (p) { @@ -309,42 +301,63 @@ namespace npc "Map.gat|mapflag|flagname|optval"_s, "Map.gat|mapflag|flagname|optval\n"_s, "Map.gat|mapflag|flagname|optval{"_s, + "nap.gat|mapflag|flagname|aa,b,c"_s, + "nap.gat|mapflag|flagname|aa,b,c\n"_s, + "nap.gat|mapflag|flagname|aa,b,c{"_s, }; for (auto input : inputs) { + bool first = input.startswith('m'); bool second = input.startswith('M'); + bool third = input.startswith('n'); + EXPECT_EQ(first + second + third, 1); io::LineCharReader lr(io::from_string, ""_s, input); - auto res = parse_top(lr); + auto res = TRY_UNWRAP(parse_top(lr), FAIL()); EXPECT_TRUE(res.get_success().is_some()); auto top = TRY_UNWRAP(std::move(res.get_success()), FAIL()); - if (!top) - FAIL(); - EXPECT_SPAN(top->span, 1,1, 1,!second?24:31); - auto p = dynamic_cast(top.get()); + EXPECT_SPAN(top.span, 1,1, 1,first?24:31); + auto p = top.get_if(); EXPECT_TRUE(p); if (p) { EXPECT_SPAN(p->m.span, 1,1, 1,7); - if (!second) + if (first) { EXPECT_EQ(p->m.data, stringish("map"_s)); } - else + if (second) { EXPECT_EQ(p->m.data, stringish("Map"_s)); } + if (third) + { + EXPECT_EQ(p->m.data, stringish("nap"_s)); + } EXPECT_SPAN(p->key_span, 1,9, 1,15); EXPECT_SPAN(p->name.span, 1,17, 1,24); EXPECT_EQ(p->name.data, "flagname"_s); - if (!second) + if (first) { - EXPECT_SPAN(p->opt_extra.span, 1,25, 1,25); - EXPECT_EQ(p->opt_extra.data, ""_s); + EXPECT_SPAN(p->vec_extra.span, 1,25, 1,25); + EXPECT_EQ(p->vec_extra.data.size(), 0); } - else + if (second) { - EXPECT_SPAN(p->opt_extra.span, 1,26, 1,31); - EXPECT_EQ(p->opt_extra.data, "optval"_s); + EXPECT_SPAN(p->vec_extra.span, 1,26, 1,31); + EXPECT_EQ(p->vec_extra.data.size(), 1); + EXPECT_SPAN(p->vec_extra.data[0].span, 1,26, 1,31); + EXPECT_EQ(p->vec_extra.data[0].data, "optval"_s); + } + if (third) + { + EXPECT_SPAN(p->vec_extra.span, 1,26, 1,31); + EXPECT_EQ(p->vec_extra.data.size(), 3); + EXPECT_SPAN(p->vec_extra.data[0].span, 1,26, 1,27); + EXPECT_EQ(p->vec_extra.data[0].data, "aa"_s); + EXPECT_SPAN(p->vec_extra.data[1].span, 1,29, 1,29); + EXPECT_EQ(p->vec_extra.data[1].data, "b"_s); + EXPECT_SPAN(p->vec_extra.data[2].span, 1,31, 1,31); + EXPECT_EQ(p->vec_extra.data[2].data, "c"_s); } } } @@ -366,37 +379,37 @@ namespace npc for (auto input : inputs) { io::LineCharReader lr(io::from_string, ""_s, input); - auto res = parse_top(lr); + auto res = TRY_UNWRAP(parse_top(lr), FAIL()); EXPECT_TRUE(res.get_success().is_some()); auto top = TRY_UNWRAP(std::move(res.get_success()), FAIL()); - if (!top) - FAIL(); - EXPECT_SPAN(top->span, 1,1, 1,24); - auto p = dynamic_cast(top.get()); + EXPECT_SPAN(top.span, 1,1, 1,24); + auto script = top.get_if