aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.clangd7
-rw-r--r--kernel/CMakeLists.txt15
-rw-r--r--kernel/tests/CMakeLists.txt49
-rw-r--r--kernel/tests/include/kernel/tests/cpu.hpp18
-rw-r--r--kernel/tests/kapi/cpu.cpp13
-rw-r--r--kernel/tests/src/main.cpp6
-rw-r--r--kernel/tests/src/test_support.cpp19
-rw-r--r--libs/kstd/CMakeLists.txt4
8 files changed, 119 insertions, 12 deletions
diff --git a/.clangd b/.clangd
index 996361d..71ee568 100644
--- a/.clangd
+++ b/.clangd
@@ -9,11 +9,12 @@ Documentation:
---
If:
- PathMatch:
+ PathMatch:
- "libs/.*/tests/.*\\.cpp"
+ - "kernel/tests/.*\\.cpp"
Diagnostics:
ClangTidy:
- Remove: '*'
+ Remove: "*"
CompileFlags:
Add:
- - -Wno-c2y-extensions \ No newline at end of file
+ - -Wno-c2y-extensions
diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt
index 4aa72e1..854fb33 100644
--- a/kernel/CMakeLists.txt
+++ b/kernel/CMakeLists.txt
@@ -1,4 +1,4 @@
-add_library("kernel-objs" OBJECT
+add_library("kernel_objs" OBJECT
# Platform-independent KAPI implementation
"kapi/boot_modules.cpp"
"kapi/cio.cpp"
@@ -14,7 +14,6 @@ add_library("kernel-objs" OBJECT
# Kernel Implementation
"src/memory/bitmap_allocator.cpp"
"src/memory/block_list_allocator.cpp"
- "src/memory/operators.cpp"
"src/memory.cpp"
"src/devices/block_device.cpp"
"src/devices/block_device_utils.cpp"
@@ -39,28 +38,29 @@ add_library("kernel-objs" OBJECT
"src/filesystem/vfs.cpp"
)
-target_include_directories("kernel-objs" PUBLIC
+target_include_directories("kernel_objs" PUBLIC
"include"
)
-target_link_libraries("kernel-objs" PUBLIC
+target_link_libraries("kernel_objs" PUBLIC
"os::kapi"
)
file(GLOB_RECURSE KERNEL_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "include/**.hpp")
-target_sources("kernel-objs" PUBLIC
+target_sources("kernel_objs" PUBLIC
FILE_SET HEADERS
BASE_DIRS "include"
FILES
${KERNEL_HEADERS}
)
-add_library("os::kernel" ALIAS "kernel-objs")
+add_library("os::kernel" ALIAS "kernel_objs")
if(CMAKE_CROSSCOMPILING)
add_executable("kernel"
"src/main.cpp"
+ "src/memory/operators.cpp"
)
target_link_libraries("kernel" PRIVATE
@@ -85,5 +85,8 @@ if(CMAKE_CROSSCOMPILING)
target_strip("kernel")
target_generate_bootable_iso("kernel")
+else()
+ enable_coverage("kernel_objs")
+ add_subdirectory("tests")
endif()
diff --git a/kernel/tests/CMakeLists.txt b/kernel/tests/CMakeLists.txt
new file mode 100644
index 0000000..96053f1
--- /dev/null
+++ b/kernel/tests/CMakeLists.txt
@@ -0,0 +1,49 @@
+#[============================================================================[
+# Kernel Test Support (Fakes, Stubs, Mocks, etc.)
+#]============================================================================]
+
+add_library("kernel_test_support"
+ "kapi/cpu.cpp"
+)
+
+target_include_directories("kernel_test_support" PUBLIC
+ "include"
+)
+
+target_link_libraries("kernel_test_support" PUBLIC
+ "os::kapi"
+)
+
+add_library("os::kernel_test_support" ALIAS "kernel_test_support")
+
+#[============================================================================[
+# Kernel Tests
+#]============================================================================]
+
+add_executable("kernel_tests"
+ "src/main.cpp"
+ "src/test_support.cpp"
+)
+
+target_include_directories("kernel_tests" PRIVATE
+ "include"
+)
+
+target_link_libraries("kernel_tests" PRIVATE
+ "os::kernel_test_support"
+ "os::kernel"
+ "libs::kstd"
+ "Catch2::Catch2"
+)
+
+set_target_properties("kernel_tests" PROPERTIES
+ C_CLANG_TIDY ""
+ CXX_CLANG_TIDY ""
+ EXCLUDE_FROM_ALL NO
+)
+
+enable_coverage("kernel_tests")
+
+add_executable("os::kernel_tests" ALIAS "kernel_tests")
+
+catch_discover_tests("os::kernel_tests") \ No newline at end of file
diff --git a/kernel/tests/include/kernel/tests/cpu.hpp b/kernel/tests/include/kernel/tests/cpu.hpp
new file mode 100644
index 0000000..81c0c6f
--- /dev/null
+++ b/kernel/tests/include/kernel/tests/cpu.hpp
@@ -0,0 +1,18 @@
+#ifndef TEACHOS_KERNEL_TESTS_CPU_HPP
+#define TEACHOS_KERNEL_TESTS_CPU_HPP
+
+#include <stdexcept>
+
+namespace kernel::tests::cpu
+{
+
+ struct halt : std::runtime_error
+ {
+ halt()
+ : std::runtime_error{"CPU halt requested!"}
+ {}
+ };
+
+} // namespace kernel::tests::cpu
+
+#endif \ No newline at end of file
diff --git a/kernel/tests/kapi/cpu.cpp b/kernel/tests/kapi/cpu.cpp
new file mode 100644
index 0000000..f03fca0
--- /dev/null
+++ b/kernel/tests/kapi/cpu.cpp
@@ -0,0 +1,13 @@
+#include "kernel/tests/cpu.hpp"
+
+#include <kapi/cpu.hpp>
+
+namespace kapi::cpu
+{
+
+ auto halt() -> void
+ {
+ throw kernel::tests::cpu::halt{};
+ }
+
+} // namespace kapi::cpu \ No newline at end of file
diff --git a/kernel/tests/src/main.cpp b/kernel/tests/src/main.cpp
new file mode 100644
index 0000000..89bb1c7
--- /dev/null
+++ b/kernel/tests/src/main.cpp
@@ -0,0 +1,6 @@
+#include <catch2/catch_session.hpp>
+
+auto main(int argc, char ** argv) -> int
+{
+ return Catch::Session().run(argc, argv);
+} \ No newline at end of file
diff --git a/kernel/tests/src/test_support.cpp b/kernel/tests/src/test_support.cpp
new file mode 100644
index 0000000..bbf5dc0
--- /dev/null
+++ b/kernel/tests/src/test_support.cpp
@@ -0,0 +1,19 @@
+#include "kapi/cpu.hpp"
+
+#include "kernel/tests/cpu.hpp"
+
+#include <catch2/catch_test_macros.hpp>
+
+SCENARIO("Kernel test support infrastructure", "[support]")
+{
+ GIVEN("the test support infrastructure is initialized")
+ {
+ WHEN("when a CPU halt is requested")
+ {
+ THEN("the correct exception is thrown")
+ {
+ REQUIRE_THROWS_AS(kapi::cpu::halt(), kernel::tests::cpu::halt);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/libs/kstd/CMakeLists.txt b/libs/kstd/CMakeLists.txt
index 7169aa8..ec0f441 100644
--- a/libs/kstd/CMakeLists.txt
+++ b/libs/kstd/CMakeLists.txt
@@ -40,9 +40,7 @@ if(CMAKE_CROSSCOMPILING)
list(TRANSFORM KSTD_LIBC_SYMBOLS PREPEND "-Wl,--undefined=")
target_link_options("kstd" INTERFACE ${KSTD_LIBC_SYMBOLS})
-endif()
-
-if(NOT CMAKE_CROSSCOMPILING)
+else()
add_executable("kstd_tests"
"tests/src/flat_map.cpp"
"tests/src/vector.cpp"