From 3f857bb284d3c8aa99bcd61980e0f0cab2dd8e19 Mon Sep 17 00:00:00 2001 From: Aki Date: Thu, 7 Mar 2024 23:59:51 +0100 Subject: Added gtest to the project and a stub test for showcase --- ArchiveEx/CMakeLists.txt | 1 + CMakeLists.txt | 3 +++ StarsEx/CMakeLists.txt | 7 +++++++ StarsEx/test/AudioConfig.cpp | 16 ++++++++++++++++ cmake/modules/AddDatafile.cmake | 7 +++---- cmake/modules/GenerateEmulator.cmake | 21 +++++++++++++++++++++ cmake/modules/wine.sh.in | 5 +++++ cmake/toolchains/i686-w64-mingw32-wine | 7 ------- cmake/toolchains/i686-w64-mingw32.cmake | 3 --- contrib/CMakeLists.txt | 3 ++- contrib/gtest/CMakeLists.txt | 7 +++++++ 11 files changed, 65 insertions(+), 15 deletions(-) create mode 100644 StarsEx/test/AudioConfig.cpp create mode 100644 cmake/modules/GenerateEmulator.cmake create mode 100755 cmake/modules/wine.sh.in delete mode 100755 cmake/toolchains/i686-w64-mingw32-wine create mode 100644 contrib/gtest/CMakeLists.txt diff --git a/ArchiveEx/CMakeLists.txt b/ArchiveEx/CMakeLists.txt index faaedda..a40fcdc 100644 --- a/ArchiveEx/CMakeLists.txt +++ b/ArchiveEx/CMakeLists.txt @@ -12,4 +12,5 @@ target_link_libraries(dat PRIVATE ${PROJECT_NAME}) if(WIN32) target_link_libraries(dat PRIVATE -lshlwapi) endif() +generate_emulator(dat LIBS ${PROJECT_NAME}) install(TARGETS dat RUNTIME COMPONENT Tools DESTINATION ${CMAKE_INSTALL_PREFIX}) diff --git a/CMakeLists.txt b/CMakeLists.txt index e878572..8b29d20 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,10 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_EXTENSIONS Yes) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") project(Starshatter) +enable_testing() include(AddVersionFile) +include(GenerateEmulator) +include(GoogleTest) if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) if(CMAKE_HOST_SYSTEM_NAME MATCHES Windows) set(CMAKE_INSTALL_PREFIX "C:/Program Files (x86)/Starshatter" CACHE PATH "Prefix to install to" FORCE) diff --git a/StarsEx/CMakeLists.txt b/StarsEx/CMakeLists.txt index 1dc025d..1bacde7 100644 --- a/StarsEx/CMakeLists.txt +++ b/StarsEx/CMakeLists.txt @@ -329,3 +329,10 @@ else() PUBLIC -l:libdxguid.a ) endif() +add_executable( + ${PROJECT_NAME}_test + test/AudioConfig.cpp + ) +generate_emulator(${PROJECT_NAME}_test LIBS Opcode ArchiveEx) +target_link_libraries(${PROJECT_NAME}_test PRIVATE ${PROJECT_NAME} GTest::gtest_main) +gtest_discover_tests(${PROJECT_NAME}_test DISCOVERY_TIMEOUT 60) diff --git a/StarsEx/test/AudioConfig.cpp b/StarsEx/test/AudioConfig.cpp new file mode 100644 index 0000000..f6a05d4 --- /dev/null +++ b/StarsEx/test/AudioConfig.cpp @@ -0,0 +1,16 @@ +#include + +#include + + +TEST(StarsEx, AudioConfig) +{ + AudioConfig audio; // as a side-effect constructor sets the static instance + ASSERT_EQ(&audio, AudioConfig::GetInstance()); + audio.SetMenuMusic(100); + ASSERT_EQ(0, AudioConfig::MenuMusic()); + audio.SetMenuMusic(50); + ASSERT_EQ(-2500, AudioConfig::MenuMusic()); + audio.SetMenuMusic(0); + ASSERT_EQ(-5000, AudioConfig::MenuMusic()); +} diff --git a/cmake/modules/AddDatafile.cmake b/cmake/modules/AddDatafile.cmake index fd454b7..4badc0b 100644 --- a/cmake/modules/AddDatafile.cmake +++ b/cmake/modules/AddDatafile.cmake @@ -48,6 +48,7 @@ function(add_datafile DATAFILE_TARGET) COMMAND ${CMAKE_COMMAND} -E rm -f ${DATAFILE_OUTPUT} COMMENT "Creating datafile ${DATAFILE_TARGET}" ) + get_target_property(EMULATOR dat CROSSCOMPILING_EMULATOR) foreach(RESOURCE_TARGET IN ITEMS ${DATAFILE_RESOURCES}) get_property(RESOURCE_DIRECTORY TARGET ${RESOURCE_TARGET} PROPERTY RESOURCE_DIRECTORY) add_custom_command( @@ -56,8 +57,7 @@ function(add_datafile DATAFILE_TARGET) COMMAND ${CMAKE_COMMAND} -E chdir ${RESOURCE_DIRECTORY} ${CMAKE_COMMAND} -E env "${DATAFILE_VAR}='${DATAFILE_PATHS}'" - ${CMAKE_CROSSCOMPILING_EMULATOR} - $ -cu $ . + ${EMULATOR} $ -cu $ . ) endforeach() if(NOT DATAFILE_SKIP_SOURCE) @@ -73,8 +73,7 @@ function(add_datafile DATAFILE_TARGET) COMMAND ${CMAKE_COMMAND} -E chdir ${DATAFILE_SOURCE} ${CMAKE_COMMAND} -E env "${DATAFILE_VAR}='${DATAFILE_PATHS}'" - ${CMAKE_CROSSCOMPILING_EMULATOR} - $ -cu $ . + ${EMULATOR} $ -cu $ . ) endif() add_custom_target(${DATAFILE_TARGET} ALL DEPENDS ${DATAFILE_OUTPUT}) diff --git a/cmake/modules/GenerateEmulator.cmake b/cmake/modules/GenerateEmulator.cmake new file mode 100644 index 0000000..f25ae5f --- /dev/null +++ b/cmake/modules/GenerateEmulator.cmake @@ -0,0 +1,21 @@ +# Generates and attaches new emulator wrapper for a TARGET for use with tests and custom target jobs. + +set(GENERATE_EMULATOR_TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/wine.sh.in") +if(CMAKE_CROSSCOMPILING) + function(generate_emulator TARGET) + cmake_parse_arguments(PARSE_ARGV 1 GENERATE_EMULATOR "" "" "LIBS") + set(WINE_PREFIX "$ENV{HOME}/.wine-${TOOLCHAIN_PREFIX}") + set(WINE_PATH "${CMAKE_FIND_ROOT_PATH}/bin") + foreach(LIB IN ITEMS ${GENERATE_EMULATOR_LIBS}) + get_target_property(DIR ${LIB} BINARY_DIR) + list(PREPEND WINE_PATH "${DIR}") + endforeach() + set(EMULATOR "${CMAKE_CURRENT_BINARY_DIR}/wine") + configure_file("${GENERATE_EMULATOR_TEMPLATE}" "${EMULATOR}" @ONLY) + set_target_properties(${TARGET} PROPERTIES CROSSCOMPILING_EMULATOR "${EMULATOR}") + endfunction() +else() + function(generate_emulator TARGET) + # no-op + endfunction() +endif() diff --git a/cmake/modules/wine.sh.in b/cmake/modules/wine.sh.in new file mode 100755 index 0000000..2a9be49 --- /dev/null +++ b/cmake/modules/wine.sh.in @@ -0,0 +1,5 @@ +#!/bin/sh -e +# See GenerateEmulator.cmake +export WINEPREFIX="@WINE_PREFIX@" +export WINEPATH="@WINE_PATH@" +exec /usr/bin/wine "$@" diff --git a/cmake/toolchains/i686-w64-mingw32-wine b/cmake/toolchains/i686-w64-mingw32-wine deleted file mode 100755 index 6f67c68..0000000 --- a/cmake/toolchains/i686-w64-mingw32-wine +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -e -toolchain=i686-w64-mingw32 -prefix=/usr/$toolchain -export WINEPREFIX=$HOME/.wine-$toolchain -export WINEPATH="${WINEPATH:+${WINEPATH};}$prefix/bin" -export WINEARCH=win32 -exec /usr/bin/wine "$@" diff --git a/cmake/toolchains/i686-w64-mingw32.cmake b/cmake/toolchains/i686-w64-mingw32.cmake index b4d66eb..debc649 100644 --- a/cmake/toolchains/i686-w64-mingw32.cmake +++ b/cmake/toolchains/i686-w64-mingw32.cmake @@ -7,11 +7,8 @@ set(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSTEM_PROCESSOR i686) -set(CMAKE_CROSSCOMPILING ON) set(TOOLCHAIN_DIR "${CMAKE_CURRENT_LIST_DIR}") -set(CMAKE_CROSSCOMPILING_EMULATOR "${TOOLCHAIN_DIR}/i686-w64-mingw32-wine") - set(TOOLCHAIN_PREFIX i686-w64-mingw32) set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index 520ca73..2f35927 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -1,11 +1,12 @@ include(ApplyPatch) include(FetchContent) include(MakeAvailable) +add_subdirectory(gtest) add_subdirectory(libpng) add_subdirectory(ogg) add_subdirectory(vorbis) add_subdirectory(zlib) -make_available(libpng ogg vorbis zlib) +make_available(gtest libpng ogg vorbis zlib) add_subdirectory(Opcode) add_subdirectory(sha1) install( diff --git a/contrib/gtest/CMakeLists.txt b/contrib/gtest/CMakeLists.txt new file mode 100644 index 0000000..657bacc --- /dev/null +++ b/contrib/gtest/CMakeLists.txt @@ -0,0 +1,7 @@ +set(BUILD_GMOCK OFF CACHE INTERNAL "") +set(INSTALL_GTEST OFF CACHE INTERNAL "") +FetchContent_Declare( + GTest + URL https://github.com/google/googletest/archive/refs/tags/v1.13.0.tar.gz + URL_HASH SHA1=bfa4b5131b6eaac06962c251742c96aab3f7aa78 + DOWNLOAD_EXTRACT_TIMESTAMP No) -- cgit v1.1