Support failure tests

This commit is contained in:
2024-03-23 14:53:26 +01:00
parent a78e08521e
commit 30f80bcb88
14 changed files with 241 additions and 53 deletions

View File

@ -107,6 +107,8 @@ namespace elna::source
std::int32_t number() const;
const elna::source::position& position() const noexcept;
std::string to_string() const;
private:
type m_type;
value m_value{};

View File

@ -279,6 +279,7 @@ namespace elna::source
std::unique_ptr<expression> parse_term();
std::unique_ptr<expression> parse_expression();
std::unique_ptr<constant_definition> parse_constant_definition();
std::unique_ptr<procedure_definition> parse_procedure_definition();
std::unique_ptr<declaration> parse_declaration();
std::unique_ptr<statement> parse_statement();
std::unique_ptr<call_statement> parse_call_statement();
@ -286,7 +287,8 @@ namespace elna::source
std::unique_ptr<assign_statement> parse_assign_statement();
std::unique_ptr<if_statement> parse_if_statement();
std::unique_ptr<while_statement> parse_while_statement();
std::vector<std::unique_ptr<definition>> parse_definitions();
std::vector<std::unique_ptr<constant_definition>> parse_constant_definitions();
std::vector<std::unique_ptr<procedure_definition>> parse_procedure_definitions();
std::vector<std::unique_ptr<declaration>> parse_declarations();
std::unique_ptr<block> parse_block();

View File

@ -70,6 +70,11 @@ namespace elna::source
errors().emplace_back(std::make_unique<U>(first));
}
explicit result(E&& errors)
: payload(std::move(errors))
{
}
bool has_errors() const noexcept
{
return std::holds_alternative<E>(payload);

View File

@ -22,4 +22,9 @@ namespace elna::source
void visit(declaration *declaration) override;
void visit(block *block) override;
};
class type_analysis_visitor final : public empty_visitor
{
public:
};
}

View File

@ -6,6 +6,10 @@
#define BOOST_PROCESS_USE_STD_FS
#include <boost/asio.hpp>
#include <boost/process.hpp>
#include <boost/process/v2.hpp>
namespace elna
{
enum class test_status
@ -14,6 +18,7 @@ namespace elna
compile_failed,
build_failed,
expectation_failed,
expectation_not_found
};
struct test_result final
@ -39,5 +44,9 @@ namespace elna
void add_exit_code(const test_status result) noexcept;
};
test_result run_for_output(boost::asio::io_context& context, const std::filesystem::path& binary,
std::initializer_list<boost::string_view> arguments);
test_result build_test(boost::asio::io_context& context, const std::filesystem::directory_entry& test_entry);
test_result run_test(boost::asio::io_context& context, const std::filesystem::directory_entry& test_entry);
void print_result(const std::filesystem::directory_entry& test_entry, const test_result& result);
}