From fba39f1d3d5acc83ea1bb6d2f9527c503a48a94e Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Tue, 9 Jul 2019 18:52:00 +0200
Subject: [PATCH] Begin test for ASTNodeDataTypeBuilder

---
 tests/CMakeLists.txt                  |  1 +
 tests/test_ASTNodeDataTypeBuilder.cpp | 83 +++++++++++++++++++++++++++
 2 files changed, 84 insertions(+)
 create mode 100644 tests/test_ASTNodeDataTypeBuilder.cpp

diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index de029d999..4f6c06b02 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -8,6 +8,7 @@ add_executable (unit_tests
   test_ASTDotPrinter.cpp
   test_ASTBuilder.cpp
   test_ASTNodeDataType.cpp
+  test_ASTNodeDataTypeBuilder.cpp
   test_ASTSymbolTableBuilder.cpp
   test_ASTSymbolInitializationChecker.cpp
   test_ItemType.cpp
diff --git a/tests/test_ASTNodeDataTypeBuilder.cpp b/tests/test_ASTNodeDataTypeBuilder.cpp
new file mode 100644
index 000000000..a4bcd80b2
--- /dev/null
+++ b/tests/test_ASTNodeDataTypeBuilder.cpp
@@ -0,0 +1,83 @@
+#include <catch2/catch.hpp>
+
+#include <ASTBuilder.hpp>
+#include <ASTNodeDataTypeBuilder.hpp>
+#include <ASTSymbolTableBuilder.hpp>
+
+#include <ASTPrinter.hpp>
+
+#define CHECK_AST(data, expected_output)                                                            \
+  {                                                                                                 \
+    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);                                                            \
+                                                                                                    \
+    ASTSymbolTableBuilder{*ast};                                                                    \
+    ASTNodeDataTypeBuilder{*ast};                                                                   \
+                                                                                                    \
+    std::stringstream ast_output;                                                                   \
+    ast_output << '\n' << ASTPrinter{*ast, ASTPrinter::Format::raw, {ASTPrinter::Info::data_type}}; \
+                                                                                                    \
+    REQUIRE(ast_output.str() == expected_output);                                                   \
+  }
+
+TEST_CASE("ASTNodeDataTypeBuilder", "[language]")
+{
+  SECTION("integer")
+  {
+    std::string_view data = R"(
+1;
+)";
+
+    std::string_view result = R"(
+(root:void)
+ `-(language::integer:1:Z)
+)";
+
+    CHECK_AST(data, result);
+  }
+
+  SECTION("real")
+  {
+    std::string_view data = R"(
+1.3;
+)";
+
+    std::string_view result = R"(
+(root:void)
+ `-(language::real:1.3:R)
+)";
+
+    CHECK_AST(data, result);
+  }
+
+  SECTION("true")
+  {
+    std::string_view data = R"(
+true;
+)";
+
+    std::string_view result = R"(
+(root:void)
+ `-(language::true_kw:B)
+)";
+
+    CHECK_AST(data, result);
+  }
+
+  SECTION("false")
+  {
+    std::string_view data = R"(
+false;
+)";
+
+    std::string_view result = R"(
+(root:void)
+ `-(language::false_kw:B)
+)";
+
+    CHECK_AST(data, result);
+  }
+}
-- 
GitLab