From d10e5676c1d1c3664aaff71200c045104bc97499 Mon Sep 17 00:00:00 2001 From: Karma Riuk Date: Tue, 8 Jul 2025 15:45:38 +0200 Subject: [PATCH] better use of fixtures for resource allocation and dealocation --- test/parser/let.cpp | 9 --------- test/parser/return.cpp | 11 ----------- test/parser/utils.cpp | 23 ++++++++++++++++++++++- test/parser/utils.hpp | 19 +++++-------------- 4 files changed, 27 insertions(+), 35 deletions(-) diff --git a/test/parser/let.cpp b/test/parser/let.cpp index 282eedd..c3f94b4 100644 --- a/test/parser/let.cpp +++ b/test/parser/let.cpp @@ -90,13 +90,6 @@ let y = 10;\ let foobar = 103213;\ "); - ast::program* program = p->parse_program(); - check_parser_errors(p->errors); - - REQUIRE_MESSAGE( - program != nullptr, - "parse_program() returned a null pointer" - ); REQUIRE(program->statements.size() == 3); struct test { @@ -115,7 +108,5 @@ let foobar = 103213;\ test_let_statement(stmt, t.expected_identifier); } - - delete program; } } diff --git a/test/parser/return.cpp b/test/parser/return.cpp index 4862442..e904a17 100644 --- a/test/parser/return.cpp +++ b/test/parser/return.cpp @@ -1,5 +1,3 @@ -#include "ast/ast.hpp" -#include "parser/parser.hpp" #include "utils.hpp" #include @@ -12,13 +10,6 @@ return 10;\ return 103213;\ "); - ast::program* program = p->parse_program(); - check_parser_errors(p->errors); - - REQUIRE_MESSAGE( - program != nullptr, - "parse_program() returned a null pointer" - ); REQUIRE(program->statements.size() == 3); for (const auto stmt : program->statements) { @@ -30,7 +21,5 @@ return 103213;\ "Couldn't cast statement to a return statement" ); } - - delete program; } } diff --git a/test/parser/utils.cpp b/test/parser/utils.cpp index 90d5253..a662e8e 100644 --- a/test/parser/utils.cpp +++ b/test/parser/utils.cpp @@ -1,5 +1,6 @@ #include "utils.hpp" +#include #include void check_parser_errors(const std::vector& errors) { @@ -10,6 +11,26 @@ void check_parser_errors(const std::vector& errors) { for (const auto& error : errors) std::cerr << '\t' << error->what() << "\n"; - // Use doctest's FAIL macro to immediately stop FAIL_CHECK("Parser had errors. See stderr for details."); } + +void ParserFixture::setup(std::string source) { + input << source; + lexer = new lexer::lexer{input}; + parser = new parser::parser(*lexer); + program = parser->parse_program(); + check_parser_errors(parser->errors); + + CAPTURE(parser); + CAPTURE(program); + REQUIRE_MESSAGE( + program != nullptr, + "parse_program() returned a null pointer" + ); +} + +ParserFixture::~ParserFixture() { + delete lexer; + delete parser; + delete program; +} diff --git a/test/parser/utils.hpp b/test/parser/utils.hpp index 8905d04..bbabb20 100644 --- a/test/parser/utils.hpp +++ b/test/parser/utils.hpp @@ -1,28 +1,19 @@ -#include "ast/errors/error.hpp" #include "lexer/lexer.hpp" #include "parser/parser.hpp" -#include #include -#include void check_parser_errors(const std::vector& errors); struct ParserFixture { std::stringstream input; - lexer::lexer* l = nullptr; - parser::parser* p = nullptr; + lexer::lexer* lexer = nullptr; + parser::parser* parser = nullptr; + ast::program* program = nullptr; ParserFixture() = default; - void setup(std::string source) { - input << source; - l = new lexer::lexer{input}; - p = new parser::parser(*l); - } + void setup(std::string); - ~ParserFixture() { - delete l; - delete p; - } + ~ParserFixture(); };