diff options
author | Sybren A. Stüvel <sybren@blender.org> | 2020-07-16 17:10:53 +0300 |
---|---|---|
committer | Sybren A. Stüvel <sybren@blender.org> | 2020-07-16 18:38:29 +0300 |
commit | a138bf57c994509c9dbd1ea79a6886c24cd5d0d9 (patch) | |
tree | 3f081fd8e1ad35dbeb910d4316f5e65263eae77c | |
parent | 09a483a3aac34f0f4226de0bd23d7ec7e6eb3c4e (diff) |
Tests: move tests from USD test directory into `io/common` and `io/usd`
This commit is a followup of {D7649}, and ports the USD tests to the new
testing approach. It moves test code from `tests/gtests/usd` into
`source/blender/io/common` and `source/blender/io/usd`, and adjusts the
use of namespaces to be consistent with the other tests.
I decided to put one test into `io/usd/tests`, instead of
`io/usd/intern`. The reason is that this test does not correspond with a
single file in that directory; instead, it tests Blender's integration
with the USD library itself.
There are two new CLI arguments for the Big Test Runner:
- `--test-assets-dir`, which points to the `lib/tests` directory in the
SVN repository. This allows unit tests to find test assets.
- `--test-release-dir`, which points to `bin/{BLENDER_VERSION}` in the
build directory. At the moment this is only used by the USD test.
The CLI arguments are automatically passed to the Big Test Runner when
using `ctest`. When manually running the tests, the arguments are only
required when there is a test run that needs them.
For more info about splitting some code into 'common', see
rB084c5d6c7e2cf8.
No functional changes to the tests themselves, only to the way they are
built & run.
Differential Revision: https://developer.blender.org/D8314
Reviewed by: brecht, mont29
-rw-r--r-- | source/blender/io/common/CMakeLists.txt | 13 | ||||
-rw-r--r-- | source/blender/io/common/intern/abstract_hierarchy_iterator_test.cc (renamed from tests/gtests/usd/abstract_hierarchy_iterator_test.cc) | 28 | ||||
-rw-r--r-- | source/blender/io/common/intern/hierarchy_context_order_test.cc (renamed from tests/gtests/usd/hierarchy_context_order_test.cc) | 14 | ||||
-rw-r--r-- | source/blender/io/common/intern/object_identifier_test.cc (renamed from tests/gtests/usd/object_identifier_test.cc) | 6 | ||||
-rw-r--r-- | source/blender/io/usd/CMakeLists.txt | 12 | ||||
-rw-r--r-- | source/blender/io/usd/tests/usd_stage_creation_test.cc (renamed from tests/gtests/usd/usd_stage_creation_test.cc) | 16 | ||||
-rw-r--r-- | tests/gtests/CMakeLists.txt | 3 | ||||
-rw-r--r-- | tests/gtests/blenloader/blendfile_loading_base_test.cc | 11 | ||||
-rw-r--r-- | tests/gtests/runner/CMakeLists.txt | 7 | ||||
-rw-r--r-- | tests/gtests/testing/testing.h | 9 | ||||
-rw-r--r-- | tests/gtests/testing/testing_main.cc | 25 | ||||
-rw-r--r-- | tests/gtests/usd/CMakeLists.txt | 109 |
12 files changed, 102 insertions, 151 deletions
diff --git a/source/blender/io/common/CMakeLists.txt b/source/blender/io/common/CMakeLists.txt index 708f24ca0e2..a6975863413 100644 --- a/source/blender/io/common/CMakeLists.txt +++ b/source/blender/io/common/CMakeLists.txt @@ -48,3 +48,16 @@ set(LIB blender_add_lib(bf_io_common "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") target_link_libraries(bf_io_common INTERFACE) + +if(WITH_GTESTS) + set(TEST_SRC + intern/abstract_hierarchy_iterator_test.cc + intern/hierarchy_context_order_test.cc + intern/object_identifier_test.cc + ) + set(TEST_LIB + bf_blenloader_test + ) + include(GTestTesting) + blender_add_test_lib(bf_io_common_tests "${TEST_SRC}" "${INC};${TEST_INC}" "${INC_SYS}" "${LIB};${TEST_LIB}") +endif() diff --git a/tests/gtests/usd/abstract_hierarchy_iterator_test.cc b/source/blender/io/common/intern/abstract_hierarchy_iterator_test.cc index d9148a7b289..04d26422143 100644 --- a/tests/gtests/usd/abstract_hierarchy_iterator_test.cc +++ b/source/blender/io/common/intern/abstract_hierarchy_iterator_test.cc @@ -19,21 +19,21 @@ #include "IO_abstract_hierarchy_iterator.h" #include "blenloader/blendfile_loading_base_test.h" -extern "C" { #include "BLI_math.h" #include "DEG_depsgraph.h" #include "DNA_object_types.h" -} #include <map> #include <set> +namespace blender::io { + +namespace { + /* Mapping from ID.name to set of export hierarchy path. Duplicated objects can be exported * multiple times with different export paths, hence the set. */ typedef std::map<std::string, std::set<std::string>> used_writers; -using namespace blender::io; - class TestHierarchyWriter : public AbstractHierarchyWriter { public: std::string writer_type; @@ -57,16 +57,7 @@ class TestHierarchyWriter : public AbstractHierarchyWriter { } }; -void debug_print_writers(const char *label, const used_writers &writers_map) -{ - printf("%s:\n", label); - for (auto idname_writers : writers_map) { - printf(" %s:\n", idname_writers.first.c_str()); - for (const std::string &export_path : idname_writers.second) { - printf(" - %s\n", export_path.c_str()); - } - } -} +} // namespace class TestingHierarchyIterator : public AbstractHierarchyIterator { public: /* Public so that the test cases can directly inspect the created writers. */ @@ -84,19 +75,19 @@ class TestingHierarchyIterator : public AbstractHierarchyIterator { } protected: - AbstractHierarchyWriter *create_transform_writer(const HierarchyContext *context) override + AbstractHierarchyWriter *create_transform_writer(const HierarchyContext * /*context*/) override { return new TestHierarchyWriter("transform", transform_writers); } - AbstractHierarchyWriter *create_data_writer(const HierarchyContext *context) override + AbstractHierarchyWriter *create_data_writer(const HierarchyContext * /*context*/) override { return new TestHierarchyWriter("data", data_writers); } - AbstractHierarchyWriter *create_hair_writer(const HierarchyContext *context) override + AbstractHierarchyWriter *create_hair_writer(const HierarchyContext * /*context*/) override { return new TestHierarchyWriter("hair", hair_writers); } - AbstractHierarchyWriter *create_particle_writer(const HierarchyContext *context) override + AbstractHierarchyWriter *create_particle_writer(const HierarchyContext * /*context*/) override { return new TestHierarchyWriter("particle", particle_writers); } @@ -325,3 +316,4 @@ TEST_F(USDHierarchyIteratorTest, ExportSubsetTest) EXPECT_EQ(expected_transforms, iterator->transform_writers); EXPECT_EQ(expected_data, iterator->data_writers); } +} // namespace blender::io diff --git a/tests/gtests/usd/hierarchy_context_order_test.cc b/source/blender/io/common/intern/hierarchy_context_order_test.cc index 25cda6d8670..7273b92c479 100644 --- a/tests/gtests/usd/hierarchy_context_order_test.cc +++ b/source/blender/io/common/intern/hierarchy_context_order_test.cc @@ -24,16 +24,20 @@ extern "C" { #include "BLI_utildefines.h" } -using namespace blender::io; +namespace blender::io { -class HierarchyContextOrderTest : public testing::Test { -}; +namespace { -static Object *fake_pointer(int value) +Object *fake_pointer(int value) { return static_cast<Object *>(POINTER_FROM_INT(value)); } +} // namespace + +class HierarchyContextOrderTest : public testing::Test { +}; + TEST_F(HierarchyContextOrderTest, ObjectPointerTest) { HierarchyContext ctx_a = {0}; @@ -121,3 +125,5 @@ TEST_F(HierarchyContextOrderTest, TransitiveTest) EXPECT_FALSE(ctx_d < ctx_b); EXPECT_FALSE(ctx_d < ctx_c); } + +} // namespace blender::io diff --git a/tests/gtests/usd/object_identifier_test.cc b/source/blender/io/common/intern/object_identifier_test.cc index 810d4470260..2b565876f22 100644 --- a/tests/gtests/usd/object_identifier_test.cc +++ b/source/blender/io/common/intern/object_identifier_test.cc @@ -24,8 +24,7 @@ #include <climits> -namespace blender { -namespace io { +namespace blender::io { namespace { @@ -232,5 +231,4 @@ TEST_F(PersistentIDTest, as_object_name_suffix) EXPECT_EQ("-3--2--1", TestPersistentID(-1, -2, -3).as_object_name_suffix()); } -} // namespace io -} // namespace blender +} // namespace blender::io diff --git a/source/blender/io/usd/CMakeLists.txt b/source/blender/io/usd/CMakeLists.txt index 19e16a5b328..79b15c60b94 100644 --- a/source/blender/io/usd/CMakeLists.txt +++ b/source/blender/io/usd/CMakeLists.txt @@ -109,3 +109,15 @@ else() endif() target_link_libraries(bf_usd INTERFACE ${TBB_LIBRARIES}) + +if(WITH_GTESTS) + set(TEST_SRC + tests/usd_stage_creation_test.cc + ) + set(TEST_INC + ) + set(TEST_LIB + ) + include(GTestTesting) + blender_add_test_lib(bf_io_usd_tests "${TEST_SRC}" "${INC};${TEST_INC}" "${INC_SYS}" "${LIB};${TEST_LIB}") +endif() diff --git a/tests/gtests/usd/usd_stage_creation_test.cc b/source/blender/io/usd/tests/usd_stage_creation_test.cc index b262e21f053..d41ae6c4f26 100644 --- a/tests/gtests/usd/usd_stage_creation_test.cc +++ b/source/blender/io/usd/tests/usd_stage_creation_test.cc @@ -21,28 +21,32 @@ #include <string> -extern "C" { #include "BLI_path_util.h" #include "BLI_utildefines.h" #include "BKE_appdir.h" +extern "C" { /* Workaround to make it possible to pass a path at runtime to USD. See creator.c. */ void usd_initialise_plugin_path(const char *datafiles_usd_path); } -DEFINE_string(test_usd_datafiles_dir, "", "The bin/{BLENDER_VERSION}/datafiles/usd directory."); +namespace blender::io::usd { class USDStageCreationTest : public testing::Test { }; TEST_F(USDStageCreationTest, JSONFileLoadingTest) { - if (FLAGS_test_usd_datafiles_dir.empty()) { - FAIL() << "Pass the --test-usd-datafiles-dir flag"; + const std::string &release_dir = blender::tests::flags_test_release_dir(); + if (release_dir.empty()) { + FAIL(); } - usd_initialise_plugin_path(FLAGS_test_usd_datafiles_dir.c_str()); + char usd_datafiles_dir[FILE_MAX]; + BLI_path_join(usd_datafiles_dir, FILE_MAX, release_dir.c_str(), "datafiles", "usd", nullptr); + + usd_initialise_plugin_path(usd_datafiles_dir); /* Simply the ability to create a USD Stage for a specific filename means that the extension * has been recognised by the USD library, and that a USD plugin has been loaded to write such @@ -60,3 +64,5 @@ TEST_F(USDStageCreationTest, JSONFileLoadingTest) FAIL() << "unable to find suitable USD plugin to write " << filename; } } + +} // namespace blender::io::usd diff --git a/tests/gtests/CMakeLists.txt b/tests/gtests/CMakeLists.txt index 4ce68a6f4c0..282eb9080f5 100644 --- a/tests/gtests/CMakeLists.txt +++ b/tests/gtests/CMakeLists.txt @@ -19,7 +19,4 @@ if(WITH_GTESTS) if(WITH_ALEMBIC) add_subdirectory(alembic) endif() - if(WITH_USD) - add_subdirectory(usd) - endif() endif() diff --git a/tests/gtests/blenloader/blendfile_loading_base_test.cc b/tests/gtests/blenloader/blendfile_loading_base_test.cc index 62befae90cd..f15ae615e8a 100644 --- a/tests/gtests/blenloader/blendfile_loading_base_test.cc +++ b/tests/gtests/blenloader/blendfile_loading_base_test.cc @@ -50,8 +50,6 @@ extern "C" { #include "wm.h" } -DEFINE_string(test_assets_dir, "", "lib/tests directory from SVN containing the test assets."); - BlendfileLoadingBaseTest::~BlendfileLoadingBaseTest() { } @@ -125,19 +123,18 @@ void BlendfileLoadingBaseTest::TearDown() bool BlendfileLoadingBaseTest::blendfile_load(const char *filepath) { - if (FLAGS_test_assets_dir.empty()) { - ADD_FAILURE() - << "Pass the flag --test-assets-dir and point to the lib/tests directory from SVN."; + const std::string &test_assets_dir = blender::tests::flags_test_asset_dir(); + if (test_assets_dir.empty()) { return false; } char abspath[FILENAME_MAX]; - BLI_path_join(abspath, sizeof(abspath), FLAGS_test_assets_dir.c_str(), filepath, NULL); + BLI_path_join(abspath, sizeof(abspath), test_assets_dir.c_str(), filepath, NULL); bfile = BLO_read_from_file(abspath, BLO_READ_SKIP_NONE, NULL /* reports */); if (bfile == nullptr) { ADD_FAILURE() << "Unable to load file '" << filepath << "' from test assets dir '" - << FLAGS_test_assets_dir << "'"; + << test_assets_dir << "'"; return false; } return true; diff --git a/tests/gtests/runner/CMakeLists.txt b/tests/gtests/runner/CMakeLists.txt index e7cbabfe7c6..7f28ede9ae9 100644 --- a/tests/gtests/runner/CMakeLists.txt +++ b/tests/gtests/runner/CMakeLists.txt @@ -60,4 +60,9 @@ setup_liblinks(blender_test) # 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) +gtest_discover_tests(blender_test + # So that unit tests know where to find files: + EXTRA_ARGS + --test-assets-dir "${CMAKE_SOURCE_DIR}/../lib/tests" + --test-release-dir "$<TARGET_FILE_DIR:blender>/${BLENDER_VERSION}" +) diff --git a/tests/gtests/testing/testing.h b/tests/gtests/testing/testing.h index 32cb6e7f18a..34928035b7d 100644 --- a/tests/gtests/testing/testing.h +++ b/tests/gtests/testing/testing.h @@ -7,6 +7,15 @@ #include "glog/logging.h" #include "gtest/gtest.h" +namespace blender::tests { + +/* These strings are passed on the CLI with the --test-asset-dir and --test-release-dir arguments. + * The arguments are added automatically when invoking tests via `ctest`. */ +const std::string &flags_test_asset_dir(); /* ../lib/tests in the SVN directory. */ +const std::string &flags_test_release_dir(); /* bin/{blender version} in the build directory. */ + +} // namespace blender::tests + #define EXPECT_V3_NEAR(a, b, eps) \ { \ EXPECT_NEAR(a[0], b[0], eps); \ diff --git a/tests/gtests/testing/testing_main.cc b/tests/gtests/testing/testing_main.cc index 6b3a8e5515d..0acdcf3a8a5 100644 --- a/tests/gtests/testing/testing_main.cc +++ b/tests/gtests/testing/testing_main.cc @@ -19,6 +19,31 @@ #include "testing/testing.h" +DEFINE_string(test_assets_dir, "", "lib/tests directory from SVN containing the test assets."); +DEFINE_string(test_release_dir, "", "bin/{blender version} directory of the current build."); + +namespace blender::tests { + +const std::string &flags_test_asset_dir() +{ + if (FLAGS_test_assets_dir.empty()) { + ADD_FAILURE() + << "Pass the flag --test-assets-dir and point to the lib/tests directory from SVN."; + } + return FLAGS_test_assets_dir; +} + +const std::string &flags_test_release_dir() +{ + if (FLAGS_test_release_dir.empty()) { + ADD_FAILURE() + << "Pass the flag --test-release-dir and point to the bin/{blender version} directory."; + } + return FLAGS_test_release_dir; +} + +} // namespace blender::tests + int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); diff --git a/tests/gtests/usd/CMakeLists.txt b/tests/gtests/usd/CMakeLists.txt deleted file mode 100644 index 0caa2fac155..00000000000 --- a/tests/gtests/usd/CMakeLists.txt +++ /dev/null @@ -1,109 +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) 2019, Blender Foundation -# All rights reserved. -# ***** END GPL LICENSE BLOCK ***** - -# This suppresses the warning "This file includes at least one deprecated or antiquated -# header which may be removed without further notice at a future date", which is caused -# by the USD library including <ext/hash_set> on Linux. This has been reported at: -# https://github.com/PixarAnimationStudios/USD/issues/1057. -if(UNIX AND NOT APPLE) - add_definitions(-D_GLIBCXX_PERMIT_BACKWARD_HASH) -endif() -if(WIN32) - add_definitions(-DNOMINMAX) -endif() -add_definitions(-DPXR_STATIC) - -set(INC - . - .. - ../../../source/blender/blenlib - ../../../source/blender/blenkernel - ../../../source/blender/io/common - ../../../source/blender/io/usd - ../../../source/blender/makesdna - ../../../source/blender/depsgraph - ${USD_INCLUDE_DIRS} - ${BOOST_INCLUDE_DIR} - ${TBB_INCLUDE_DIR} -) - -set(LIB - bf_blenloader_test - bf_blenloader - - # Should not be needed but gives windows linker errors if the ocio libs are linked before this: - bf_intern_opencolorio - bf_gpu - - bf_usd - bf_io_common - - ${BOOST_LIBRARIES} - ${TBB_LIBRARIES} -) - -include_directories(${INC}) - -setup_libdirs() -get_property(BLENDER_SORTED_LIBS GLOBAL PROPERTY BLENDER_SORTED_LIBS_PROP) - -set(SRC - abstract_hierarchy_iterator_test.cc - hierarchy_context_order_test.cc - object_identifier_test.cc -) - -# TODO(Sybren): re-enable this unit test. -# if(NOT APPLE) -# # TODO(Sybren): This unit test has only been tested on Linux, and should possibly be -# # restructured to support other platforms as well. -# list(APPEND SRC usd_stage_creation_test.cc) -# endif() - - -if(WITH_BUILDINFO) - list(APPEND SRC - "$<TARGET_OBJECTS:buildinfoobj>" - ) -endif() - -# get_cmake_property(_variableNames VARIABLES) -# list(SORT _variableNames) -# foreach(_variableName ${_variableNames}) -# message(STATUS "${_variableName}=${${_variableName}}") -# endforeach() - -# Works on Linux, not on Windows: -# set(_usd_DATAFILES_DIR "${CMAKE_INSTALL_PREFIX}/${BLENDER_VERSION}/datafiles/usd") -set(_usd_DATAFILES_DIR "$<TARGET_FILE_DIR:blender>/${BLENDER_VERSION}/datafiles/usd") - -BLENDER_SRC_GTEST_EX( - NAME usd - SRC "${SRC}" - EXTRA_LIBS "${LIB}" - COMMAND_ARGS - --test-assets-dir "${CMAKE_SOURCE_DIR}/../lib/tests" -) -# TODO(Sybren): add the below CLI argument to the test when the usd_stage_creation_test.cc -# test is reenabled. -# --test-usd-datafiles-dir "${_usd_DATAFILES_DIR}" -unset(_usd_DATAFILES_DIR) - -setup_liblinks(usd_test) |