summaryrefslogtreecommitdiffhomepage
path: root/public/frameworks/KernelTest.fwrk/headers/TestCase.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/frameworks/KernelTest.fwrk/headers/TestCase.h')
-rw-r--r--public/frameworks/KernelTest.fwrk/headers/TestCase.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/public/frameworks/KernelTest.fwrk/headers/TestCase.h b/public/frameworks/KernelTest.fwrk/headers/TestCase.h
new file mode 100644
index 00000000..c040ca0f
--- /dev/null
+++ b/public/frameworks/KernelTest.fwrk/headers/TestCase.h
@@ -0,0 +1,56 @@
+/* ========================================
+
+ Copyright (C) 2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
+
+======================================== */
+
+#pragma once
+
+#include <KernelTest.fwrk/headers/SourceLocation.h>
+
+/// ================================================================================
+/// @brief Kernel Test Framework main header.
+/// @file TestCase.h
+/// ================================================================================
+
+#define KT_RUN_TEST(OBJECT) {KTTestCase##OBJECT{}.Run();}
+
+#define KT_MUST_PASS(MSG, LEFT_COND, RIGHT_COND) \
+ if (LEFT_COND != RIGHT_COND) { \
+ (Kernel::Void)(Kernel::kout << "[KERNEL-TEST] BREAK: LEFT_COND: " << #LEFT_COND \
+ << " RIGHT_COND: " << #RIGHT_COND << Kernel::kendl); \
+ (Kernel::Void)(Kernel::kout << "[KERNEL-TEST] BREAK: MSG: " << MSG << Kernel::kendl); \
+ MUST_PASS(NO); \
+ } else { \
+ (Kernel::Void)(Kernel::kout << "[KERNEL-TEST] PASS: MSG: " << MSG << Kernel::kendl); \
+ }
+
+#define KT_DECL_TEST(NAME, FN) \
+ class KTTestCase##NAME final { \
+ public: \
+ explicit KTTestCase##NAME() = default; \
+ ~KTTestCase##NAME() = default; \
+ LIBSYS_COPY_DELETE(KTTestCase##NAME); \
+ Kernel::Void Run(); \
+ const Kernel::Char* ToString(); \
+ }; \
+ inline Kernel::Void KTTestCase##NAME::Run() { \
+ auto ret = FN() == YES; \
+ if (!ret) { \
+ Kernel::kout << "[KERNEL-TEST] TEST FAILED!" << Kernel::kendl; \
+ MUST_PASS(ret); \
+ } \
+ } \
+ inline const Kernel::Char* KTTestCase##NAME::ToString() { \
+ return #FN; \
+ }
+
+KT_DECL_TEST(AlwaysBreak, []() -> bool {
+ KT_MUST_PASS("AlwaysBreak", YES, NO);
+ return NO;
+});
+
+KT_DECL_TEST(AlwaysPass, []() -> bool {
+ KT_MUST_PASS("AlwaysPass", YES, YES);
+ return YES;
+}); \ No newline at end of file