56 lines
1.7 KiB
C++
56 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <string>
|
|
#include <filesystem>
|
|
|
|
#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
|
|
{
|
|
successful,
|
|
compile_failed,
|
|
build_failed,
|
|
expectation_failed,
|
|
expectation_not_found
|
|
};
|
|
|
|
struct test_result final
|
|
{
|
|
test_status status{ test_status::successful };
|
|
int code{ 0 };
|
|
std::string output;
|
|
};
|
|
|
|
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);
|
|
test_result run_for_output(boost::asio::io_context& context, const std::uint8_t stream_number,
|
|
const std::filesystem::path& binary, std::initializer_list<boost::string_view> arguments);
|
|
std::string find_object(const std::vector<std::filesystem::path>& environment, const std::string& object);
|
|
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);
|
|
}
|