summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2024-03-07 23:59:51 +0100
committerAki <please@ignore.pl>2024-03-07 23:59:51 +0100
commit3f857bb284d3c8aa99bcd61980e0f0cab2dd8e19 (patch)
tree4a2724f89ce213b1834d5550229243cccfad9fb3
parent1ef05b8b227194ec32ae49f0eaf3e483ef35bb6b (diff)
downloadstarshatter-3f857bb284d3c8aa99bcd61980e0f0cab2dd8e19.zip
starshatter-3f857bb284d3c8aa99bcd61980e0f0cab2dd8e19.tar.gz
starshatter-3f857bb284d3c8aa99bcd61980e0f0cab2dd8e19.tar.bz2
Added gtest to the project and a stub test for showcase
-rw-r--r--ArchiveEx/CMakeLists.txt1
-rw-r--r--CMakeLists.txt3
-rw-r--r--StarsEx/CMakeLists.txt7
-rw-r--r--StarsEx/test/AudioConfig.cpp16
-rw-r--r--cmake/modules/AddDatafile.cmake7
-rw-r--r--cmake/modules/GenerateEmulator.cmake21
-rwxr-xr-xcmake/modules/wine.sh.in5
-rwxr-xr-xcmake/toolchains/i686-w64-mingw32-wine7
-rw-r--r--cmake/toolchains/i686-w64-mingw32.cmake3
-rw-r--r--contrib/CMakeLists.txt3
-rw-r--r--contrib/gtest/CMakeLists.txt7
11 files changed, 65 insertions, 15 deletions
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 <gtest/gtest.h>
+
+#include <AudioConfig.h>
+
+
+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}
- $<TARGET_FILE:dat> -cu $<SHELL_PATH:${DATAFILE_OUTPUT}> .
+ ${EMULATOR} $<TARGET_FILE:dat> -cu $<SHELL_PATH:${DATAFILE_OUTPUT}> .
)
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}
- $<TARGET_FILE:dat> -cu $<SHELL_PATH:${DATAFILE_OUTPUT}> .
+ ${EMULATOR} $<TARGET_FILE:dat> -cu $<SHELL_PATH:${DATAFILE_OUTPUT}> .
)
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)