4 Commits
Author SHA1 Message Date
odweta 2a927b5447 Merge pull request 'Feat: introduce munit unit testing' (#21) from feat/munit-unit-testing into dev
Reviewed-on: #21
2026-10-06 22:42:44 +02:00
odweta ce8b44f4e9 embed munit into the project 2026-10-06 22:36:39 +02:00
odweta bcbd03269f pin munit version 2026-10-06 15:18:43 +02:00
odweta dfdb61e5b5 add munit as a submodule 2026-10-06 15:16:21 +02:00
6 changed files with 161 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
[submodule "third_party/munit"]
path = third_party/munit
url = https://github.com/nemequ/munit.git
+1
View File
@@ -10,3 +10,4 @@ pkg_check_modules(SDL3 REQUIRED IMPORTED_TARGET sdl3)
add_subdirectory(src/engine)
add_subdirectory(src/examples)
add_subdirectory(tests)
+40
View File
@@ -0,0 +1,40 @@
add_library(munit STATIC
"${PROJECT_SOURCE_DIR}/third_party/munit/munit.c"
)
target_include_directories(munit
PUBLIC
${PROJECT_SOURCE_DIR}/third_party
)
file(GLOB TEST_SOURCES CONFIGURE_DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/suites/*.c"
)
add_library(dangerzone_tests STATIC
${TEST_SOURCES}
)
target_include_directories(dangerzone_tests
PUBLIC
${PROJECT_SOURCE_DIR}/include
${PROJECT_SOURCE_DIR}/src
${PROJECT_SOURCE_DIR}/third_party
)
add_executable(test_runner
main.c
)
target_link_libraries(test_runner
PRIVATE
dangerzone_tests
munit
dangerzone_engine
)
add_custom_target(test
COMMAND tests/test_runner
DEPENDS test_runner
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
)
+26
View File
@@ -0,0 +1,26 @@
#include "munit/munit.h"
extern const MunitSuite sdl_suite;
int main(int argc, char *argv[]) {
MunitSuite sub_suites[] = {
sdl_suite,
{ // terminator
NULL,
NULL,
NULL,
0,
MUNIT_SUITE_OPTION_NONE
}
};
MunitSuite master_suite = {
"",
NULL,
sub_suites,
1,
MUNIT_SUITE_OPTION_NONE
};
return munit_suite_main(&master_suite, NULL, argc, argv);
}
+90
View File
@@ -0,0 +1,90 @@
#include <dangerzone/engine.h>
#include "internal/engine_internal.h"
#include "munit/munit.h"
static void*
test_setup(
const MunitParameter params[],
void* data
) {
(void)params;
(void)data;
internal_state = (engine_internal_state_t *)
malloc(sizeof(engine_internal_state_t));
munit_assert_not_null(internal_state);
internal_state->sdl_state = (engine_sdl_state_t *)
malloc(sizeof(engine_sdl_state_t));
munit_assert_not_null(internal_state->sdl_state);
internal_state->sdl_state->width = 500;
internal_state->sdl_state->height = 500;
strncpy(
internal_state->sdl_state->window_name, "Dangerzone",
WINDOW_NAME_MAX_LENGTH - 1
);
internal_state->sdl_state->window_name[WINDOW_NAME_MAX_LENGTH - 1] = '\0';
return internal_state;
}
static void
test_teardown(
void *fixture
) {
engine_internal_state_t *state = fixture;
if (state->sdl_state != NULL) {
free(state->sdl_state);
free(state);
}
internal_state = NULL;
}
static MunitResult
test_window_parameters(
const MunitParameter params[],
void* data
) {
(void)params;
engine_internal_state_t *state = data;
munit_assert_not_null(state);
munit_assert_not_null(state->sdl_state);
munit_assert_int(state->sdl_state->width, ==, 500);
munit_assert_int(state->sdl_state->height, ==, 500);
munit_assert_int(strcmp(state->sdl_state->window_name, "Dangerzone"), ==, 0);
return MUNIT_OK;
}
MunitTest tests[] = {
{
"/window-parameters",
test_window_parameters,
test_setup,
test_teardown,
MUNIT_TEST_OPTION_NONE,
NULL
},
{ // terminator
NULL,
NULL,
NULL,
NULL,
MUNIT_TEST_OPTION_NONE,
NULL
}
};
const MunitSuite sdl_suite = {
"/sdl",
tests,
NULL,
1,
MUNIT_SUITE_OPTION_NONE
};
Vendored Submodule
+1
Submodule third_party/munit added at ad67a3a2ca