test: Run selected noninteractive tests at build-time

In Autotools, these are run by `make -C ${builddir}/test check`.
In CMake, they're run by `make -C ${builddir} test` or
`ninja -C ${builddir} test` or `ctest --test-dir ${builddir}`.

Signed-off-by: Simon McVittie <smcv@collabora.com>
This commit is contained in:
Simon McVittie 2022-04-12 13:33:58 +01:00 committed by Sam Lantinga
parent b299f74d05
commit 7d2808e30b
3 changed files with 90 additions and 0 deletions

View file

@ -2980,6 +2980,7 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSDL_BUILD_MICRO_VERSION=${SDL_MICRO_VERSIO
##### Tests ##### ##### Tests #####
if(SDL_TEST) if(SDL_TEST)
include(CTest)
include_directories(BEFORE "${SDL2_BINARY_DIR}/include") include_directories(BEFORE "${SDL2_BINARY_DIR}/include")
include_directories(AFTER "${SDL2_SOURCE_DIR}/include") include_directories(AFTER "${SDL2_SOURCE_DIR}/include")
file(GLOB TEST_SOURCES ${SDL2_SOURCE_DIR}/src/test/*.c) file(GLOB TEST_SOURCES ${SDL2_SOURCE_DIR}/src/test/*.c)

View file

@ -1,5 +1,6 @@
cmake_minimum_required(VERSION 3.0.0) cmake_minimum_required(VERSION 3.0.0)
project(SDL2 C) project(SDL2 C)
include(CTest)
# Global settings for all of the test targets # Global settings for all of the test targets
# FIXME: is this wrong? # FIXME: is this wrong?
@ -133,6 +134,34 @@ add_executable(controllermap controllermap.c)
add_executable(testvulkan testvulkan.c) add_executable(testvulkan testvulkan.c)
add_executable(testoffscreen testoffscreen.c) add_executable(testoffscreen testoffscreen.c)
set(NONINTERACTIVE
testatomic
testerror
testfilesystem
testkeys
testlocale
testplatform
testpower
testqsort
testthread
testtimer
testver
)
if(LINUX)
list(APPEND NONINTERACTIVE testevdev)
endif()
set(NEEDS_AUDIO
testaudioinfo
testsurround
)
set(NEEDS_DISPLAY
testbounds
testdisplayinfo
)
if(OPENGL_FOUND) if(OPENGL_FOUND)
add_dependencies(testshader OpenGL::GL) add_dependencies(testshader OpenGL::GL)
add_dependencies(testgl2 OpenGL::GL) add_dependencies(testgl2 OpenGL::GL)
@ -306,3 +335,20 @@ if(APPLE)
endforeach() endforeach()
endif() endif()
endif() endif()
set(TESTS_ENVIRONMENT
SDL_AUDIODRIVER=dummy
SDL_VIDEODRIVER=dummy
)
foreach(TESTCASE ${NONINTERACTIVE} ${NEEDS_AUDIO} ${NEEDS_DISPLAY})
add_test(
NAME ${TESTCASE}
COMMAND ${TESTCASE}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
set_tests_properties(
${TESTCASE}
PROPERTIES ENVIRONMENT "${TESTS_ENVIRONMENT}"
)
endforeach()

View file

@ -351,6 +351,49 @@ distclean: clean
rm -f config.status config.cache config.log rm -f config.status config.cache config.log
rm -rf $(srcdir)/autom4te* rm -rf $(srcdir)/autom4te*
noninteractive = \
testatomic$(EXE) \
testerror$(EXE) \
testevdev$(EXE) \
testfilesystem$(EXE) \
testkeys$(EXE) \
testlocale$(EXE) \
testplatform$(EXE) \
testpower$(EXE) \
testqsort$(EXE) \
testthread$(EXE) \
testtimer$(EXE) \
testver$(EXE) \
$(NULL)
needs_audio = \
testaudioinfo$(EXE) \
testsurround$(EXE) \
$(NULL)
needs_display = \
testbounds$(EXE) \
testdisplayinfo$(EXE) \
$(NULL)
TESTS = $(noninteractive) $(needs_audio) $(needs_display)
check:
@set -e; \
status=0; \
export SDL_AUDIODRIVER=dummy; \
export SDL_VIDEODRIVER=dummy; \
for exe in $(TESTS); do \
echo "$$exe..."; \
if ./"$$exe"; then \
echo "$$exe: OK"; \
else \
echo "$$exe: FAILED: $$?"; \
status=1; \
fi; \
done; \
exit "$$status"
DATA = \ DATA = \
axis.bmp \ axis.bmp \
button.bmp \ button.bmp \