summaryrefslogtreecommitdiff
path: root/asl/testing/testing.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'asl/testing/testing.cpp')
-rw-r--r--asl/testing/testing.cpp71
1 files changed, 65 insertions, 6 deletions
diff --git a/asl/testing/testing.cpp b/asl/testing/testing.cpp
index a2fe152..e07cde8 100644
--- a/asl/testing/testing.cpp
+++ b/asl/testing/testing.cpp
@@ -1,14 +1,73 @@
#include "asl/testing/testing.hpp"
-int asl::testing::register_test(
- const char* suite_name,
- const char* case_name,
- TestFunction* fn)
+#include <asl/print.hpp>
+
+static asl::testing::Test* g_head = nullptr;
+static asl::testing::Test* g_tail = nullptr;
+
+void asl::testing::register_test(Test* test)
{
- return 0;
+ if (g_head == nullptr && g_tail == nullptr)
+ {
+ g_head = test;
+ g_tail = test;
+ }
+ else
+ {
+ g_tail->m_next = test;
+ test->m_prev = asl::exchange(g_tail, test);
+ }
+}
+
+static bool g_current_test_fail = false;
+
+void asl::testing::report_failure(const char* msg, const char* file, int line)
+{
+ asl::eprint("--------------------------------------------------------------\n");
+ asl::eprint("Test assertion failed at {}, line {}:\n", file, line);
+ asl::eprint(" {}:\n", msg);
+ asl::eprint("--------------------------------------------------------------\n");
+ g_current_test_fail = true;
}
-int main(int argc, char* argv[])
+#define RESET "\x1b[0m"
+#define RED "\x1b[0;31m"
+#define GREEN "\x1b[0;32m"
+
+int main([[maybe_unused]] int argc, [[maybe_unused]] char* argv[])
{
+ int fail = 0;
+ int pass = 0;
+
+ for (auto* it = g_head; it != nullptr; it = it->m_next)
+ {
+ asl::eprint(GREEN "[ RUN ]" RESET " {}\n", it->m_case_name);
+
+ g_current_test_fail = false;
+ it->m_fn();
+
+ if (!g_current_test_fail)
+ {
+ asl::eprint(GREEN "[ OK ]" RESET " {}\n", it->m_case_name);
+ pass += 1;
+ }
+ else
+ {
+ asl::eprint(RED "[ FAILED ]" RESET " {}\n", it->m_case_name);
+ fail += 1;
+ }
+ }
+
+ asl::eprint(GREEN "[----------]" RESET " {} test(s) run\n", fail + pass);
+
+ if (fail == 0)
+ {
+ asl::eprint(GREEN "[ PASSED ]" RESET " Good job!\n");
+ }
+ else
+ {
+ asl::eprint(RED "[ FAILED ]" RESET " {} test(s) failed\n", fail);
+ }
+
return 0;
}