This commit introduces a new way to build unit tests. It is now possible for each module to generate its own test library. The tests in these libraries are then bundled into a single executable. The test executable can be run with `ctest`. Even though the tests reside in a single executable, they are still exposed as individual tests to `ctest`, and thus can be selected via its `-R` argument. Not yet ported tests still build & run as before. The following rules apply: - Test code should reside in the same directory as the code under test. - Tests that target functionality in `somefile.{c,cc}` should reside in `somefile_test.cc`. - The namespace for tests is the `tests` sub-namespace of the code under test. For example, tests for `blender::bke` should be in `blender::bke:tests`. - The test files should be listed in the module's `CMakeLists.txt` in a `blender_add_test_lib()` call. See the `blenkernel` module for an example. Reviewed By: brecht Differential Revision: https://developer.blender.org/D7649master
parent
065a00ee3e
commit
56aa5b0d8c
@ -1,44 +0,0 @@
|
|||||||
# ***** BEGIN GPL LICENSE BLOCK *****
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# The Original Code is Copyright (C) 2020, Blender Foundation
|
|
||||||
# All rights reserved.
|
|
||||||
# ***** END GPL LICENSE BLOCK *****
|
|
||||||
|
|
||||||
set(INC
|
|
||||||
.
|
|
||||||
..
|
|
||||||
../../../source/blender/blenkernel
|
|
||||||
../../../source/blender/blenlib
|
|
||||||
../../../source/blender/editors/include
|
|
||||||
../../../source/blender/makesdna
|
|
||||||
../../../source/blender/makesrna
|
|
||||||
../../../intern/guardedalloc
|
|
||||||
../../../intern/atomic
|
|
||||||
)
|
|
||||||
|
|
||||||
setup_libdirs()
|
|
||||||
include_directories(${INC})
|
|
||||||
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS}")
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${PLATFORM_LINKFLAGS_DEBUG}")
|
|
||||||
|
|
||||||
if(WITH_BUILDINFO)
|
|
||||||
set(BUILDINFO buildinfoobj)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
BLENDER_TEST(BKE_armature "bf_blenloader;bf_blenkernel;bf_blenlib;${BUILDINFO}")
|
|
||||||
BLENDER_TEST(BKE_fcurve "bf_blenloader;bf_blenkernel;bf_editor_animation;${BUILDINFO}")
|
|
@ -0,0 +1,63 @@
|
|||||||
|
# ***** BEGIN GPL LICENSE BLOCK *****
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU General Public License
|
||||||
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
# of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software Foundation,
|
||||||
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
#
|
||||||
|
# The Original Code is Copyright (C) 2020, Blender Foundation
|
||||||
|
# All rights reserved.
|
||||||
|
# ***** END GPL LICENSE BLOCK *****
|
||||||
|
|
||||||
|
# Build the test runner. This runner takes care of running all GTests, i.e.
|
||||||
|
# the code that was built using the blender_add_test_lib() CMake macro (see
|
||||||
|
# macros.cmake).
|
||||||
|
set(SRC
|
||||||
|
blender_test.cc
|
||||||
|
)
|
||||||
|
|
||||||
|
if(WITH_BUILDINFO)
|
||||||
|
list(APPEND SRC
|
||||||
|
"$<TARGET_OBJECTS:buildinfoobj>"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
# Test libraries need to be linked "whole archive", because they're not
|
||||||
|
# directly referenced from other code.
|
||||||
|
get_property(_test_libs GLOBAL PROPERTY BLENDER_TEST_LIBS)
|
||||||
|
if(WIN32)
|
||||||
|
list(APPEND TEST_LIBS ${_test_libs})
|
||||||
|
elseif(APPLE)
|
||||||
|
list(APPEND TEST_LIBS "-Wl,-force_load" ${_test_libs})
|
||||||
|
elseif(UNIX)
|
||||||
|
list(APPEND TEST_LIBS "-Wl,--whole-archive" ${_test_libs} "-Wl,--no-whole-archive")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Unknown how to link whole-archive with your compiler ${CMAKE_CXX_COMPILER_ID}")
|
||||||
|
endif()
|
||||||
|
unset(_test_libs)
|
||||||
|
|
||||||
|
# This builds `bin/tests/blender_test`, but does not add it as a single test.
|
||||||
|
setup_libdirs()
|
||||||
|
BLENDER_SRC_GTEST_EX(
|
||||||
|
NAME blender
|
||||||
|
SRC "${SRC}"
|
||||||
|
EXTRA_LIBS "${TEST_LIBS}"
|
||||||
|
SKIP_ADD_TEST
|
||||||
|
)
|
||||||
|
setup_liblinks(blender_test)
|
||||||
|
|
||||||
|
# This runs the blender_test executable with `--gtest_list_tests`, then
|
||||||
|
# exposes those tests individually to the ctest runner.
|
||||||
|
# See https://cmake.org/cmake/help/v3.18/module/GoogleTest.html
|
||||||
|
include(GoogleTest)
|
||||||
|
gtest_discover_tests(blender_test)
|
@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* The Original Code is Copyright (C) 2020 Blender Foundation.
|
||||||
|
* All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This file is intentionally left blank. It is necessary for CMake to have a source file for each
|
||||||
|
* executable. However, the blender_tests test runner only comprises of statically linked library
|
||||||
|
* files, including its main function.
|
||||||
|
*
|
||||||
|
* See source/blender/blenkernel/CMakeLists.txt for an example of how to add unit tests to the test
|
||||||
|
* runner. */
|
Loading…
Reference in new issue