From 8a880d19bd1bc1928a9ced32218851f7717e7b5e Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Thu, 25 Jul 2019 12:21:17 +0200 Subject: [PATCH] Add tests for `while` and `do-while` statements AST node type --- tests/test_ASTNodeDataTypeBuilder.cpp | 172 ++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) diff --git a/tests/test_ASTNodeDataTypeBuilder.cpp b/tests/test_ASTNodeDataTypeBuilder.cpp index e73e0e7b0..db5584779 100644 --- a/tests/test_ASTNodeDataTypeBuilder.cpp +++ b/tests/test_ASTNodeDataTypeBuilder.cpp @@ -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); + } + } } -- GitLab