Feat: introduce munit unit testing #21
@@ -10,3 +10,4 @@ pkg_check_modules(SDL3 REQUIRED IMPORTED_TARGET sdl3)
|
|||||||
|
|
||||||
add_subdirectory(src/engine)
|
add_subdirectory(src/engine)
|
||||||
add_subdirectory(src/examples)
|
add_subdirectory(src/examples)
|
||||||
|
add_subdirectory(tests)
|
||||||
|
|||||||
@@ -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}
|
||||||
|
)
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user