diff --git a/src/language/utils/ASTExecutionInfo.hpp b/src/language/utils/ASTExecutionInfo.hpp index 96fc874ce2c7f464e5bf88ff9013a092ff56b29b..da4b817428c2ea00e8c089e14de2049c4faae4af 100644 --- a/src/language/utils/ASTExecutionInfo.hpp +++ b/src/language/utils/ASTExecutionInfo.hpp @@ -16,6 +16,8 @@ class ASTExecutionInfo // The only place where the ASTExecutionInfo can be built friend void parser(const std::string& filename); + // also allowed for testing + friend void test_ASTExecutionInfo(const ASTNode&, const ModuleRepository&); ASTExecutionInfo(const ASTNode& root_node, const ModuleRepository& module_repository); diff --git a/tests/test_ASTModulesImporter.cpp b/tests/test_ASTModulesImporter.cpp index 42638d918a362516b53a0f05772096b477f943b4..a3a4e3d7a6bd6bfc7d624b9d1ee4a9d69e34b876 100644 --- a/tests/test_ASTModulesImporter.cpp +++ b/tests/test_ASTModulesImporter.cpp @@ -4,11 +4,22 @@ #include <language/ast/ASTModulesImporter.hpp> #include <language/ast/ASTNodeExpressionBuilder.hpp> #include <language/ast/ASTNodeTypeCleaner.hpp> +#include <language/utils/ASTExecutionInfo.hpp> #include <language/utils/ASTPrinter.hpp> #include <language/utils/SymbolTable.hpp> #include <pegtl/string_input.hpp> +inline void +test_ASTExecutionInfo(const ASTNode& root_node, const ModuleRepository& module_repository) +{ + ASTExecutionInfo execution_info{root_node, module_repository}; + REQUIRE(&root_node == &execution_info.rootNode()); + REQUIRE(&module_repository == &execution_info.moduleRepository()); + + REQUIRE(&ASTExecutionInfo::current() == &execution_info); +} + #define CHECK_AST(data, expected_output) \ { \ static_assert(std::is_same_v<std::decay_t<decltype(data)>, std::string_view>); \ @@ -17,10 +28,13 @@ string_input input{data, "test.pgs"}; \ auto ast = ASTBuilder::build(input); \ \ - ASTModulesImporter{*ast}; \ + ASTModulesImporter importer{*ast}; \ ASTNodeTypeCleaner<language::import_instruction>{*ast}; \ \ ASTNodeExpressionBuilder{*ast}; \ + const auto& module_repository = importer.moduleRepository(); \ + test_ASTExecutionInfo(*ast, module_repository); \ + \ ExecutionPolicy exec_policy; \ ast->execute(exec_policy); \ \