diff options
author | Sybren A. Stüvel <sybren@blender.org> | 2021-10-18 13:33:53 +0300 |
---|---|---|
committer | Sybren A. Stüvel <sybren@blender.org> | 2021-10-18 15:21:41 +0300 |
commit | f9113c4be836691ba599aab9b2f43e26333f8133 (patch) | |
tree | 6fa8fc9c1021538478f173e247d932c63929f15b /source/blender/blenkernel/intern/asset_library_service_test.cc | |
parent | 1f510376764debe3e91f736aec6b3af70567243f (diff) |
Assets: add global `bke::AssetLibraryService` class
Add `blender::bke::AssetLibraryService` class that acts like a
blendfile-scoped singleton. It's allocated upon the first call to
`BKE_asset_library_load` and destroyed in the LOAD-PRE handler.
The `AssetLibraryService` ensures that edits to asset catalogs are not
lost when the asset browser editor closes (or even reloads). Instead,
the `AssetLibrary` pointers it owns are kept around as long as the blend
file is open.
Reviewed By: Severin
Maniphest Tasks: T92151
Differential Revision: https://developer.blender.org/D12885
Diffstat (limited to 'source/blender/blenkernel/intern/asset_library_service_test.cc')
-rw-r--r-- | source/blender/blenkernel/intern/asset_library_service_test.cc | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/asset_library_service_test.cc b/source/blender/blenkernel/intern/asset_library_service_test.cc new file mode 100644 index 00000000000..6acbe193eb7 --- /dev/null +++ b/source/blender/blenkernel/intern/asset_library_service_test.cc @@ -0,0 +1,101 @@ +/* + * 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. + */ + +#include "asset_library_service.hh" + +#include "CLG_log.h" + +#include "testing/testing.h" + +namespace blender::bke::tests { + +class AssetLibraryServiceTest : public testing::Test { + public: + CatalogFilePath asset_library_root_; + + static void SetUpTestSuite() + { + CLG_init(); + } + static void TearDownTestSuite() + { + CLG_exit(); + } + + void SetUp() override + { + const std::string test_files_dir = blender::tests::flags_test_asset_dir(); + if (test_files_dir.empty()) { + FAIL(); + } + asset_library_root_ = test_files_dir + "/" + "asset_library"; + } + + void TearDown() override + { + AssetLibraryService::destroy(); + } +}; + +TEST_F(AssetLibraryServiceTest, get_destroy) +{ + AssetLibraryService *const service = AssetLibraryService::get(); + EXPECT_EQ(service, AssetLibraryService::get()) + << "Calling twice without destroying in between should return the same instance."; + + AssetLibraryService::destroy(); + EXPECT_NE(service, AssetLibraryService::get()) + << "Calling twice with destroying in between should return a new instance."; + + /* This should not crash. */ + AssetLibraryService::destroy(); + AssetLibraryService::destroy(); +} + +TEST_F(AssetLibraryServiceTest, library_pointers) +{ + AssetLibraryService *service = AssetLibraryService::get(); + AssetLibrary *const lib = service->get_asset_library_on_disk(asset_library_root_); + AssetLibrary *const curfile_lib = service->get_asset_library_current_file(); + + EXPECT_EQ(lib, service->get_asset_library_on_disk(asset_library_root_)) + << "Calling twice without destroying in between should return the same instance."; + EXPECT_EQ(curfile_lib, service->get_asset_library_current_file()) + << "Calling twice without destroying in between should return the same instance."; + + AssetLibraryService::destroy(); + service = AssetLibraryService::get(); + EXPECT_NE(lib, service->get_asset_library_on_disk(asset_library_root_)) + << "Calling twice with destroying in between should return a new instance."; + EXPECT_NE(curfile_lib, service->get_asset_library_current_file()) + << "Calling twice with destroying in between should return a new instance."; +} + +TEST_F(AssetLibraryServiceTest, catalogs_loaded) +{ + AssetLibraryService *const service = AssetLibraryService::get(); + AssetLibrary *const lib = service->get_asset_library_on_disk(asset_library_root_); + AssetCatalogService *const cat_service = lib->catalog_service.get(); + + const bUUID UUID_POSES_ELLIE("df60e1f6-2259-475b-93d9-69a1b4a8db78"); + EXPECT_NE(nullptr, cat_service->find_catalog(UUID_POSES_ELLIE)) + << "Catalogs should be loaded after getting an asset library from disk."; +} + +} // namespace blender::bke::tests |