#pragma once #include #include #include #define BOOST_PROCESS_USE_STD_FS #include #include #include namespace elna { enum class test_status { successful, compile_failed, expectation_failed, }; class test_results final { std::uint32_t m_total{ 0 }; std::uint32_t m_passed{ 0 }; public: test_results() = default; std::uint32_t total() const noexcept; std::uint32_t passed() const noexcept; std::uint32_t failed() const noexcept; int exit_code() const noexcept; void add_exit_code(const test_status result) noexcept; }; boost::process::v2::process_stdio get_output_streams(const std::uint8_t stream_number, boost::asio::readable_pipe& read_pipe); int run_for_output(boost::asio::io_context& context, const std::uint8_t stream_number, const std::filesystem::path& binary, std::initializer_list arguments); std::string find_object(const std::vector& environment, const std::string& object); test_status build_test(boost::asio::io_context& context, const std::filesystem::directory_entry& test_entry); void run_test(boost::asio::io_context& context, const std::filesystem::path& test_entry); void print_result(const std::filesystem::path& test_entry, const test_status& result); }