From c1d8d089334439fe4ae8a3da228c3d8798b0cac0 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Mon, 8 Jul 2019 13:00:10 +0200
Subject: [PATCH] Add ASTSymbolTableBuilder tests

---
 tests/CMakeLists.txt                 |  1 +
 tests/test_ASTSymbolTableBuilder.cpp | 48 ++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+)
 create mode 100644 tests/test_ASTSymbolTableBuilder.cpp

diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index bd30945f2..fda652d92 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -3,6 +3,7 @@ set(EXECUTABLE_OUTPUT_PATH ${PUGS_BINARY_DIR})
 
 add_executable (unit_tests
   test_main.cpp
+  test_ASTSymbolTableBuilder.cpp
   test_ASTBuilder.cpp
   test_Array.cpp
   test_ArrayUtils.cpp
diff --git a/tests/test_ASTSymbolTableBuilder.cpp b/tests/test_ASTSymbolTableBuilder.cpp
new file mode 100644
index 000000000..1f3d98f21
--- /dev/null
+++ b/tests/test_ASTSymbolTableBuilder.cpp
@@ -0,0 +1,48 @@
+#include <catch2/catch.hpp>
+
+#include <ASTBuilder.hpp>
+#include <ASTSymbolTableBuilder.hpp>
+
+TEST_CASE("ASTSymbolTableBuilder", "[language]")
+{
+  SECTION("Build symbols")
+  {
+    std::string_view data = R"(
+N n = 2;
+{
+ N m = n;
+ R n = m/3.;
+}
+)";
+
+    string_input input{data, "test.pgs"};
+    auto ast = ASTBuilder::build(input);
+
+    ASTSymbolTableBuilder{*ast};
+  }
+
+  SECTION("Undeclared symbol")
+  {
+    std::string_view data = R"(
+N n = a;
+)";
+
+    string_input input{data, "test.pgs"};
+    auto ast = ASTBuilder::build(input);
+
+    REQUIRE_THROWS_AS(ASTSymbolTableBuilder{*ast}, parse_error);
+  }
+
+  SECTION("Re-declared symbol")
+  {
+    std::string_view data = R"(
+N n = 0;
+N n = 1;
+)";
+
+    string_input input{data, "test.pgs"};
+    auto ast = ASTBuilder::build(input);
+
+    REQUIRE_THROWS_AS(ASTSymbolTableBuilder{*ast}, parse_error);
+  }
+}
-- 
GitLab