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

Begin tests for ASTPrinter

parent 3117bac5
No related branches found
No related tags found
1 merge request!37Feature/language
......@@ -9,6 +9,7 @@ add_executable (unit_tests
test_ASTBuilder.cpp
test_ASTNodeDataType.cpp
test_ASTNodeDataTypeBuilder.cpp
test_ASTPrinter.cpp
test_ASTSymbolTableBuilder.cpp
test_ASTSymbolInitializationChecker.cpp
test_ItemType.cpp
......
// -*- coding: utf-8 -*-
#include <catch2/catch.hpp>
#include <ASTBuilder.hpp>
#include <ASTPrinter.hpp>
#include <sstream>
#define CHECK_OUTPUT(data, expected_output, format) \
{ \
static_assert(std::is_same_v<std::decay_t<decltype(data)>, std::string_view>); \
static_assert(std::is_same_v<std::decay_t<decltype(expected_output)>, std::string_view>); \
\
string_input input{data, "test.pgs"}; \
auto ast = ASTBuilder::build(input); \
\
std::stringstream ast_output; \
ast_output << '\n' << ASTPrinter{*ast, format}; \
\
REQUIRE(ast_output.str() == expected_output); \
}
TEST_CASE("ASTPrinter", "[language]")
{
rang::setControlMode(rang::control::Off);
SECTION("raw output")
{
std::string_view data = R"(
N n = 2 + 3;
)";
std::string_view result = R"(
(root:undefined:--)
`-(language::declaration:undefined:--)
+-(language::N_set:undefined:--)
+-(language::name:n:undefined:--)
`-(language::plus_op:undefined:--)
+-(language::integer:2:undefined:--)
`-(language::integer:3:undefined:--)
)";
CHECK_OUTPUT(data, result, ASTPrinter::Format::raw);
}
SECTION("pretty output")
{
std::string_view data = R"(
N n = 2 + 3;
)";
std::string_view result = R"(
(root:undefined:--)
└──(language::declaration:undefined:--)
├──(language::N_set:undefined:--)
├──(language::name:n:undefined:--)
└──(language::plus_op:undefined:--)
├──(language::integer:2:undefined:--)
└──(language::integer:3:undefined:--)
)";
CHECK_OUTPUT(data, result, ASTPrinter::Format::pretty);
}
SECTION("escaped sequences")
{
std::string_view data = R"(
string s = "a string";
)";
std::string_view result = R"(
(root:undefined:--)
`-(language::declaration:undefined:--)
+-(language::string_type:undefined:--)
+-(language::name:s:undefined:--)
`-(language::literal:"a string":undefined:--)
)";
CHECK_OUTPUT(data, result, ASTPrinter::Format::raw);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment