changeset 119:43e04bf2c350

cmake: add tests, continue #2487 @1h
author David Demelier <markand@malikania.fr>
date Mon, 05 Oct 2020 09:17:11 +0200
parents 3411daa26432
children b3429b26d60d
files CMakeLists.txt cmake/MolkoDefineLibrary.cmake cmake/MolkoDefineTest.cmake extern/libgreatest/CMakeLists.txt src/core/CMakeLists.txt tests/CMakeLists.txt tests/test-panic.c
diffstat 7 files changed, 134 insertions(+), 98 deletions(-) [+]
line wrap: on
line diff
--- 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)
--- 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
-			$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
-			${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
+				$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+				${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()
--- /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 <markand@malikania.fr>
+#
+# 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()
--- 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
 		$<BUILD_INTERFACE:${libgreatest_SOURCE_DIR}>
-		$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
 )
--- 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
--- /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 <markand@malikania.fr>
+#
+# 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)
--- 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 <markand@malikania.fr>
- *
- * 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 <stdbool.h>
-
-#define GREATEST_USE_ABBREVS 0
-#include <greatest.h>
-
-#include <error.h>
-#include <panic.h>
-
-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();
-}