summaryrefslogtreecommitdiffhomepage
path: root/DefinitionEx/test/parse_utils_like.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'DefinitionEx/test/parse_utils_like.cpp')
-rw-r--r--DefinitionEx/test/parse_utils_like.cpp106
1 files changed, 106 insertions, 0 deletions
diff --git a/DefinitionEx/test/parse_utils_like.cpp b/DefinitionEx/test/parse_utils_like.cpp
new file mode 100644
index 0000000..fc943f7
--- /dev/null
+++ b/DefinitionEx/test/parse_utils_like.cpp
@@ -0,0 +1,106 @@
+#include <gtest/gtest.h>
+
+#include <Parser_ss.h>
+#include <Term.h>
+#include <Token.h>
+
+
+TEST(DefinitionEx, ParseUtilsLike)
+{
+ std::string content {
+ "TEST\n\n"
+ "number: 3\n"
+ "bool: true\n"
+ "short: hello\n"
+ "longer: \"hello there\"\n"
+ "array: (0.98, -1.0, 0.35)\n"
+ "struct: {\n"
+ " name: \"trailing comma\",\n"
+ "}\n"
+ };
+ Parser parser({content.data(), content.size()});
+ Term* term = parser.ParseTerm();
+ ASSERT_NE(nullptr, term);
+ {
+ TermText* text = term->isText();
+ ASSERT_NE(nullptr, text);
+ EXPECT_STREQ("TEST", text->value());
+ }
+ {
+ delete term;
+ term = parser.ParseTerm();
+ ASSERT_NE(nullptr, term);
+ TermDef* def = term->isDef();
+ ASSERT_NE(nullptr, def);
+ EXPECT_STREQ("number", def->name()->value());
+ TermNumber* num = def->term()->isNumber();
+ ASSERT_NE(nullptr, num);
+ EXPECT_EQ(3, static_cast<int>(num->value()));
+ }
+ {
+ delete term;
+ term = parser.ParseTerm();
+ ASSERT_NE(nullptr, term);
+ TermDef* def = term->isDef();
+ ASSERT_NE(nullptr, def);
+ EXPECT_STREQ("bool", def->name()->value());
+ TermBool* boolean = def->term()->isBool();
+ ASSERT_NE(nullptr, boolean);
+ EXPECT_TRUE(boolean->value());
+ }
+ {
+ delete term;
+ term = parser.ParseTerm();
+ ASSERT_NE(nullptr, term);
+ TermDef* def = term->isDef();
+ ASSERT_NE(nullptr, def);
+ EXPECT_STREQ("short", def->name()->value());
+ TermText* text = def->term()->isText();
+ ASSERT_NE(nullptr, text);
+ EXPECT_STREQ("hello", text->value());
+ }
+ {
+ delete term;
+ term = parser.ParseTerm();
+ ASSERT_NE(nullptr, term);
+ TermDef* def = term->isDef();
+ ASSERT_NE(nullptr, def);
+ EXPECT_STREQ("longer", def->name()->value());
+ TermText* text = def->term()->isText();
+ ASSERT_NE(nullptr, text);
+ EXPECT_STREQ("hello there", text->value());
+ }
+ {
+ delete term;
+ term = parser.ParseTerm();
+ ASSERT_NE(nullptr, term);
+ TermDef* def = term->isDef();
+ ASSERT_NE(nullptr, def);
+ EXPECT_STREQ("array", def->name()->value());
+ TermArray* array = def->term()->isArray();
+ ASSERT_NE(nullptr, array);
+ ASSERT_EQ(3, array->elements()->size());
+ EXPECT_FLOAT_EQ(0.98, array->elements()->at(0)->isNumber()->value()); // what if not a number?
+ EXPECT_FLOAT_EQ(-1.0, array->elements()->at(1)->isNumber()->value());
+ EXPECT_FLOAT_EQ(0.35, array->elements()->at(2)->isNumber()->value());
+ }
+ {
+ delete term;
+ term = parser.ParseTerm();
+ ASSERT_NE(nullptr, term);
+ TermDef* def = term->isDef();
+ ASSERT_NE(nullptr, def);
+ EXPECT_STREQ("struct", def->name()->value());
+ ASSERT_NE(nullptr, def->term());
+ TermStruct* strukt = def->term()->isStruct();
+ ASSERT_NE(nullptr, strukt);
+ ASSERT_EQ(1, strukt->elements()->size());
+ def = strukt->elements()->at(0)->isDef();
+ ASSERT_NE(nullptr, def);
+ EXPECT_STREQ("name", def->name()->value());
+ TermText* text = def->term()->isText();
+ ASSERT_NE(nullptr, text);
+ EXPECT_STREQ("trailing comma", text->value());
+ }
+ Token::close();
+}