# tests/CMakeLists.txt # Unity-based unit tests for tbaMUD # # Each test executable is built from: # vendor/unity/unity.c — test framework # test_stubs.c — weak-symbol stubs for all unresolved mud globals # src/.c — the source file(s) under test # test_.c — the test file itself # # Only the source files being tested are compiled — in particular comm.c # (which contains main()) is never included. cmake_minimum_required(VERSION 3.12) enable_testing() # --------------------------------------------------------------------------- # Common settings shared by all test targets # --------------------------------------------------------------------------- set(UNITY_SRC ${CMAKE_CURRENT_SOURCE_DIR}/vendor/unity/unity.c) set(STUBS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/test_stubs.c) set(MUD_SRCDIR ${CMAKE_SOURCE_DIR}/src) # Include paths: mud source dir for conf.h / structs.h etc., # CMake binary dir for the generated conf.h (cmake builds place it there), # and the Unity header dir. set(TEST_INCLUDES ${MUD_SRCDIR} ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/vendor/unity ) # Suppress warnings that fire in generated stubs / vendored code and in the # mud sources when compiled outside their normal full-build context. set(TEST_CFLAGS) if(CMAKE_C_COMPILER_ID MATCHES "^(GNU|Clang|AppleClang)$") list(APPEND TEST_CFLAGS -Wno-unused-parameter -Wno-unused-function -Wno-unused-variable ) endif() # Helper macro: add_mud_test(name SRC1 [SRC2 …]) # Creates an executable, registers it with CTest. macro(add_mud_test TEST_NAME) add_executable(${TEST_NAME} ${UNITY_SRC} ${STUBS_SRC} ${ARGN} ) target_include_directories(${TEST_NAME} PRIVATE ${TEST_INCLUDES}) target_compile_options(${TEST_NAME} PRIVATE ${TEST_CFLAGS}) add_test(NAME ${TEST_NAME} COMMAND ${TEST_NAME}) endmacro() # --------------------------------------------------------------------------- # test_utils — covers src/utils.c # --------------------------------------------------------------------------- add_mud_test(test_utils ${MUD_SRCDIR}/utils.c ${MUD_SRCDIR}/random.c ${CMAKE_CURRENT_SOURCE_DIR}/test_utils.c ) # --------------------------------------------------------------------------- # test_random — covers src/random.c and rand_number/dice in src/utils.c # --------------------------------------------------------------------------- add_mud_test(test_random ${MUD_SRCDIR}/random.c ${MUD_SRCDIR}/utils.c ${CMAKE_CURRENT_SOURCE_DIR}/test_random.c ) # --------------------------------------------------------------------------- # test_interpreter — covers string helpers in src/interpreter.c # --------------------------------------------------------------------------- add_mud_test(test_interpreter ${MUD_SRCDIR}/interpreter.c ${MUD_SRCDIR}/utils.c ${MUD_SRCDIR}/random.c ${CMAKE_CURRENT_SOURCE_DIR}/test_interpreter.c ) # crypt() is referenced from interpreter.c (nanny password hashing). # Reuse the crypt library detected by the top-level build when one is needed; # on platforms where crypt() is provided by libc, no extra link library is # required. if(CRYPT_LIBRARY) target_link_libraries(test_interpreter PRIVATE ${CRYPT_LIBRARY}) endif() # --------------------------------------------------------------------------- # test_class — covers src/class.c # --------------------------------------------------------------------------- add_mud_test(test_class ${MUD_SRCDIR}/class.c ${MUD_SRCDIR}/utils.c ${MUD_SRCDIR}/random.c ${CMAKE_CURRENT_SOURCE_DIR}/test_class.c )