Skip to content
Snippets Groups Projects
Commit 8a880d19 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add tests for `while` and `do-while` statements AST node type

parent 25fbc9f5
No related branches found
No related tags found
1 merge request!37Feature/language
......@@ -528,4 +528,176 @@ if ("string");
REQUIRE_THROWS_AS(ASTNodeDataTypeBuilder{*ast}, parse_error);
}
}
SECTION("while statements")
{
SECTION("empty while")
{
std::string_view data = R"(
while (true);
)";
std::string_view result = R"(
(root:void)
`-(language::while_statement:void)
+-(language::true_kw:B)
`-(language::statement_bloc:void)
)";
CHECK_AST(data, result);
}
SECTION("simple while")
{
std::string_view data = R"(
while (true) 1;
)";
std::string_view result = R"(
(root:void)
`-(language::while_statement:void)
+-(language::true_kw:B)
`-(language::integer:1:Z)
)";
CHECK_AST(data, result);
}
SECTION("while simplified bloc")
{
std::string_view data = R"(
while (true) {
1;
}
)";
std::string_view result = R"(
(root:void)
`-(language::while_statement:void)
+-(language::true_kw:B)
`-(language::integer:1:Z)
)";
CHECK_AST(data, result);
}
SECTION("while bloc_statement")
{
std::string_view data = R"(
while (true) {
1;
2;
}
)";
std::string_view result = R"(
(root:void)
`-(language::while_statement:void)
+-(language::true_kw:B)
`-(language::bloc:void)
+-(language::integer:1:Z)
`-(language::integer:2:Z)
)";
CHECK_AST(data, result);
}
SECTION("while invalid condition")
{
std::string_view data = R"(
while ("string");
)";
string_input input{data, "test.pgs"};
auto ast = ASTBuilder::build(input);
ASTSymbolTableBuilder{*ast};
REQUIRE_THROWS_AS(ASTNodeDataTypeBuilder{*ast}, parse_error);
}
}
SECTION("do-while statements")
{
SECTION("empty do-while")
{
std::string_view data = R"(
do ; while (true);
)";
std::string_view result = R"(
(root:void)
`-(language::do_while_statement:void)
+-(language::statement_bloc:void)
`-(language::true_kw:B)
)";
CHECK_AST(data, result);
}
SECTION("simple do-while")
{
std::string_view data = R"(
do 1; while (true);
)";
std::string_view result = R"(
(root:void)
`-(language::do_while_statement:void)
+-(language::integer:1:Z)
`-(language::true_kw:B)
)";
CHECK_AST(data, result);
}
SECTION("do-while simplified bloc")
{
std::string_view data = R"(
do {
1;
} while (true);
)";
std::string_view result = R"(
(root:void)
`-(language::do_while_statement:void)
+-(language::integer:1:Z)
`-(language::true_kw:B)
)";
CHECK_AST(data, result);
}
SECTION("do-while bloc")
{
std::string_view data = R"(
do {
1;
2;
} while (true);
)";
std::string_view result = R"(
(root:void)
`-(language::do_while_statement:void)
+-(language::bloc:void)
| +-(language::integer:1:Z)
| `-(language::integer:2:Z)
`-(language::true_kw:B)
)";
CHECK_AST(data, result);
}
SECTION("do-while invalid condition")
{
std::string_view data = R"(
do 1; while ("string");
)";
string_input input{data, "test.pgs"};
auto ast = ASTBuilder::build(input);
ASTSymbolTableBuilder{*ast};
REQUIRE_THROWS_AS(ASTNodeDataTypeBuilder{*ast}, parse_error);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment