@@ -4,6 +4,7 @@
#include <exception>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <vector>
namespace etest {
@@ -23,6 +24,8 @@ std::vector<Test> ®istry() {
struct test_failure : public std::exception {};
std::stringstream test_log{};
} // namespace
int run_all_tests() noexcept {
@@ -32,6 +35,7 @@ int run_all_tests() noexcept {
for (auto const &test : registry()) {
std::cout << std::left << std::setw(longest_name->name.size()) << test.name << ": ";
test_log = std::stringstream{};
const int before = assertion_failures;
@@ -41,8 +45,12 @@ int run_all_tests() noexcept {
++assertion_failures;
}
std::cout << (before == assertion_failures ?
"\u001b[32mPASSED\u001b[0m\n" : "\u001b[31;1mFAILED\u001b[0m\n");
if (before == assertion_failures) {
std::cout << "\u001b[32mPASSED\u001b[0m\n";
} else {
std::cout << "\u001b[31;1mFAILED\u001b[0m\n";
std::cout << test_log.str();
}
}
return assertion_failures > 0 ? 1 : 0;
@@ -53,6 +61,7 @@ int test(std::string_view name, std::function<void()> body) noexcept {
return 0;
}
#ifndef ETEST_WITH_SRC_LOC
void expect(bool b) noexcept {
if (!b) { ++assertion_failures; }
}
@@ -60,5 +69,26 @@ void expect(bool b) noexcept {
void require(bool b) {
if (!b) { throw test_failure{}; }
}
#else
void expect(bool b, std::source_location const &loc) noexcept {
if (!b) {
++assertion_failures;
test_log << " expectation failure at "
<< loc.file_name() << "("
<< loc.line() << ":"
<< loc.column() << ")\n";
}
}
void require(bool b, std::source_location const &loc) {
if (!b) {
test_log << " requirement failure at "
<< loc.file_name() << "("
<< loc.line() << ":"
<< loc.column() << ")\n";
throw test_failure{};
}
}
#endif
} // namespace etest