# librpbase test suite
PROJECT(librpbase-tests LANGUAGES CXX)

# Top-level src directory.
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../..)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/../..)

# ZLIB and libpng are checked in the top-level CMakeLists.txt.

IF(NOT WIN32)
	IF(ENABLE_DECRYPTION)
		INCLUDE(CheckNettle2or3)
		CHECK_NETTLE_2_OR_3()
	ENDIF(ENABLE_DECRYPTION)
ENDIF(NOT WIN32)

# librptest library
ADD_LIBRARY(rptest STATIC gtest_init.cpp)
TARGET_LINK_LIBRARIES(rptest PUBLIC rpsecure)
# librptest doesn't use gtest directly, but all tests do,
# so add it with interface linkage.
TARGET_LINK_LIBRARIES(rptest INTERFACE gtest)
IF(WIN32)
	# rptest initializes GDI+, since it's used by rp_image.
	TARGET_LINK_LIBRARIES(rptest PRIVATE gdiplus)
ENDIF(WIN32)
INCLUDE(SetMSVCDebugPath)
SET_MSVC_DEBUG_PATH(rptest)

# RpPng format test
ADD_EXECUTABLE(RpPngFormatTest
	img/RpPngFormatTest.cpp
	)
TARGET_LINK_LIBRARIES(RpPngFormatTest PRIVATE rptest romdata)
TARGET_COMPILE_DEFINITIONS(RpPngFormatTest PRIVATE RP_BUILDING_FOR_DLL=1)
TARGET_LINK_LIBRARIES(RpPngFormatTest PRIVATE ${ZLIB_LIBRARIES} ${PNG_LIBRARY})
TARGET_INCLUDE_DIRECTORIES(RpPngFormatTest PRIVATE ${ZLIB_INCLUDE_DIRS} ${PNG_INCLUDE_DIRS})
TARGET_COMPILE_DEFINITIONS(RpPngFormatTest PRIVATE ${ZLIB_DEFINITIONS} ${PNG_DEFINITIONS})
DO_SPLIT_DEBUG(RpPngFormatTest)
SET_WINDOWS_SUBSYSTEM(RpPngFormatTest CONSOLE)
SET_WINDOWS_ENTRYPOINT(RpPngFormatTest wmain OFF)
ADD_TEST(NAME RpPngFormatTest COMMAND RpPngFormatTest --gtest_brief)
IF(NOT WIN32 AND NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY STREQUAL "")
	# Create a symlink to the png_data directory.
	ADD_CUSTOM_COMMAND(TARGET RpPngFormatTest POST_BUILD
		COMMAND ${CMAKE_COMMAND} -E create_symlink "${CMAKE_CURRENT_SOURCE_DIR}/img/png_data" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/png_data"
		VERBATIM
		)
ENDIF(NOT WIN32 AND NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY STREQUAL "")

IF(ENABLE_DECRYPTION)
	# Crypto tests
	ADD_EXECUTABLE(CryptoTests AesCipherTest.cpp MD5HashTest.cpp)
	TARGET_LINK_LIBRARIES(CryptoTests PRIVATE rptest romdata)
	TARGET_COMPILE_DEFINITIONS(CryptoTests PRIVATE RP_BUILDING_FOR_DLL=1)
	IF(WIN32)
		TARGET_LINK_LIBRARIES(CryptoTests PRIVATE advapi32)
	ENDIF(WIN32)
	IF(NETTLE_LIBRARY)
		TARGET_LINK_LIBRARIES(CryptoTests PRIVATE ${NETTLE_LIBRARY})
		TARGET_INCLUDE_DIRECTORIES(CryptoTests PRIVATE ${NETTLE_INCLUDE_DIRS})
	ENDIF(NETTLE_LIBRARY)
	DO_SPLIT_DEBUG(CryptoTests)
	SET_WINDOWS_SUBSYSTEM(CryptoTests CONSOLE)
	SET_WINDOWS_ENTRYPOINT(CryptoTests wmain OFF)
	ADD_TEST(NAME CryptoTests COMMAND CryptoTests --gtest_brief)
ENDIF(ENABLE_DECRYPTION)

# TimegmTest
ADD_EXECUTABLE(TimegmTest TimegmTest.cpp)
TARGET_LINK_LIBRARIES(TimegmTest PRIVATE rptest)
TARGET_COMPILE_DEFINITIONS(TimegmTest PRIVATE RP_BUILDING_FOR_DLL=1)
DO_SPLIT_DEBUG(TimegmTest)
SET_WINDOWS_SUBSYSTEM(TimegmTest CONSOLE)
SET_WINDOWS_ENTRYPOINT(TimegmTest wmain OFF)
ADD_TEST(NAME TimegmTest COMMAND TimegmTest --gtest_brief)
