# HG changeset patch # User David Demelier # Date 1601882231 -7200 # Node ID 43e04bf2c350bba5243f97ab896eb6430d66e541 # Parent 3411daa26432445f3422c84d5f05ffdb9c979a1d cmake: add tests, continue #2487 @1h diff -r 3411daa26432 -r 43e04bf2c350 CMakeLists.txt --- a/CMakeLists.txt Sun Oct 04 22:00:20 2020 +0200 +++ b/CMakeLists.txt Mon Oct 05 09:17:11 2020 +0200 @@ -19,19 +19,22 @@ cmake_minimum_required(VERSION 3.18) project(molko) -include(GNUInstallDirs) - -include(cmake/MolkoBuildAssets.cmake) -include(cmake/MolkoDefineLibrary.cmake) - set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED On) set(CMAKE_C_EXTENSIONS Off) set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") +include(GNUInstallDirs) + +include(cmake/MolkoBuildAssets.cmake) +include(cmake/MolkoDefineLibrary.cmake) +include(Cmake/MolkoDefineTest.cmake) + find_package(Jansson REQUIRED) find_package(SDL2 REQUIRED COMPONENTS image mixer ttf) +enable_testing() + add_subdirectory(extern/libsqlite) add_subdirectory(extern/libgreatest) @@ -43,3 +46,5 @@ add_subdirectory(src/core) add_subdirectory(src/adventure) add_subdirectory(src/molko) + +add_subdirectory(tests) diff -r 3411daa26432 -r 43e04bf2c350 cmake/MolkoDefineLibrary.cmake --- a/cmake/MolkoDefineLibrary.cmake Sun Oct 04 22:00:20 2020 +0200 +++ b/cmake/MolkoDefineLibrary.cmake Mon Oct 05 09:17:11 2020 +0200 @@ -25,6 +25,7 @@ # molko_define_library( # TARGET target name # SOURCES src1, src2, srcn +# TYPE (Optional) type of library # ASSETS (Optional) list of assets # LIBRARIES (Optional) libraries to link # PRIVATE_FLAGS (Optional) C flags (without -D) @@ -56,7 +57,7 @@ function(molko_define_library) set(options) - set(oneValueArgs TARGET) + set(oneValueArgs TARGET TYPE) set(multiValueArgs ASSETS LIBRARIES PRIVATE_FLAGS PRIVATE_INCLUDES PUBLIC_FLAGS PUBLIC_INCLUDES SOURCES) cmake_parse_arguments(LIB "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) @@ -70,30 +71,41 @@ molko_build_assets("${LIB_ASSETS}" OUTPUTS) - add_library(${LIB_TARGET} ${LIB_SOURCES} ${OUTPUTS}) - target_include_directories( - ${LIB_TARGET} - PRIVATE - ${LIB_PRIVATE_INCLUDES} - PUBLIC - $ - ${LIB_PUBLIC_INCLUDES} - ) - target_compile_definitions( - ${LIB_TARGET} - PRIVATE - ${LIB_PRIVATE_FLAGS} - PUBLIC - ${LIB_PUBLIC_FLAGS} - ) - target_link_libraries(${LIB_TARGET} ${LIB_LIBRARIES}) - set_target_properties( - ${LIB_TARGET} - PROPERTIES - PREFIX "" - IMPORT_PREFIX "" - C_EXTENSIONS Off - C_STANDARD 11 - C_STANDARD_REQUIRED On - ) + if (${LIB_TYPE} MATCHES "INTERFACE") + add_library(${LIB_TARGET} INTERFACE) + target_sources(${LIB_TARGET} INTERFACE ${LIB_SOURCES}) + target_include_directories( + ${LIB_TARGET} + INTERFACE + ${LIB_PRIVATE_INCLUDES} + ${LIB_PUBLIC_INCLUDES} + ) + else () + add_library(${LIB_TARGET} ${LIB_TYPE} ${LIB_SOURCES} ${OUTPUTS}) + target_include_directories( + ${LIB_TARGET} + PRIVATE + ${LIB_PRIVATE_INCLUDES} + PUBLIC + $ + ${LIB_PUBLIC_INCLUDES} + ) + target_compile_definitions( + ${LIB_TARGET} + PRIVATE + ${LIB_PRIVATE_FLAGS} + PUBLIC + ${LIB_PUBLIC_FLAGS} + ) + target_link_libraries(${LIB_TARGET} ${LIB_LIBRARIES}) + set_target_properties( + ${LIB_TARGET} + PROPERTIES + PREFIX "" + IMPORT_PREFIX "" + C_EXTENSIONS Off + C_STANDARD 11 + C_STANDARD_REQUIRED On + ) + endif () endfunction() diff -r 3411daa26432 -r 43e04bf2c350 cmake/MolkoDefineTest.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/MolkoDefineTest.cmake Mon Oct 05 09:17:11 2020 +0200 @@ -0,0 +1,49 @@ +# +# MolkoDefineTest.cmake -- CMake build system for molko +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +include(${CMAKE_CURRENT_LIST_DIR}/MolkoBuildAssets.cmake) + +function(molko_define_test) + set(options) + set(oneValueArgs TARGET) + set(multiValueArgs ASSETS FLAGS INCLUDES LIBRARIES SOURCES) + + cmake_parse_arguments(TEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (NOT TEST_TARGET) + message(FATAL_ERROR "Missing TARGET argument") + endif () + if (NOT TEST_SOURCES) + message(FATAL_ERROR "Missing SOURCES argument") + endif () + + molko_build_assets("${TEST_ASSETS}" OUTPUTS) + + add_executable(test-${TEST_TARGET} ${TEST_SOURCES} ${OUTPUTS}) + target_compile_definitions(test-${TEST_TARGET} PRIVATE ${TEST_FLAGS}) + target_include_directories(test-${TEST_TARGET} PRIVATE ${TEST_INCLUDES}) + target_link_libraries( + test-${TEST_TARGET} + PRIVATE + libcore + libadventure + libgreatest + ${TEST_LIBRARIES} + ) + add_test(NAME ${TEST_TARGET} COMMAND test-${TEST_TARGET}) +endfunction() diff -r 3411daa26432 -r 43e04bf2c350 extern/libgreatest/CMakeLists.txt --- a/extern/libgreatest/CMakeLists.txt Sun Oct 04 22:00:20 2020 +0200 +++ b/extern/libgreatest/CMakeLists.txt Mon Oct 05 09:17:11 2020 +0200 @@ -17,11 +17,11 @@ # project(libgreatest) -add_library(libgreatest INTERFACE) -target_sources(libgreatest INTERFACE greatest.h) -target_include_directories( - libgreatest - INTERFACE + +molko_define_library( + TARGET libgreatest + TYPE INTERFACE + SOURCES greatest.h + PUBLIC_INCLUDES $ - $ ) diff -r 3411daa26432 -r 43e04bf2c350 src/core/CMakeLists.txt --- a/src/core/CMakeLists.txt Sun Oct 04 22:00:20 2020 +0200 +++ b/src/core/CMakeLists.txt Mon Oct 05 09:17:11 2020 +0200 @@ -116,6 +116,7 @@ SOURCES ${SOURCES} ASSETS ${ASSETS} LIBRARIES + libsqlite SDL2::SDL2 SDL2::image SDL2::mixer diff -r 3411daa26432 -r 43e04bf2c350 tests/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/CMakeLists.txt Mon Oct 05 09:17:11 2020 +0200 @@ -0,0 +1,29 @@ +# +# CMakeLists.txt -- CMake build system for molko +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +project(tests) + +molko_define_test(TARGET color SOURCES test-color.c) +molko_define_test(TARGET error SOURCES test-error.c) +molko_define_test(TARGET inventory SOURCES test-inventory.c) +# +# Maps will be revamped. +# molko_define_test(TARGET map SOURCES test-map.c ASSETS ${tests_SOURCE_DIR}/) +# +molko_define_test(TARGET save SOURCES test-save.c) +molko_define_test(TARGET script SOURCES test-script.c) diff -r 3411daa26432 -r 43e04bf2c350 tests/test-panic.c --- a/tests/test-panic.c Sun Oct 04 22:00:20 2020 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* - * test-panic.c -- test panic routines - * - * Copyright (c) 2020 David Demelier - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include - -#define GREATEST_USE_ABBREVS 0 -#include - -#include -#include - -static bool handler_called; - -static void -handler(void) -{ - handler_called = true; -} - -GREATEST_TEST -basics_simple(void) -{ - panic_handler = handler; - handler_called = false; - - panicf("this is an error"); - GREATEST_ASSERT(handler_called); - GREATEST_ASSERT_STR_EQ(error(), "this is an error"); - GREATEST_PASS(); -} - -GREATEST_SUITE(basics) -{ - GREATEST_RUN_TEST(basics_simple); -} - -GREATEST_MAIN_DEFS(); - -int -main(int argc, char **argv) -{ - GREATEST_MAIN_BEGIN(); - GREATEST_RUN_SUITE(basics); - GREATEST_MAIN_END(); -}