| 
									
										
										
										
											2019-11-28 17:37:27 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * 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 by Blender Foundation. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #include "blendfile_loading_base_test.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-26 16:38:18 +01:00
										 |  |  | #include "MEM_guardedalloc.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-28 17:37:27 +01:00
										 |  |  | #include "BKE_appdir.h"
 | 
					
						
							|  |  |  | #include "BKE_blender.h"
 | 
					
						
							|  |  |  | #include "BKE_context.h"
 | 
					
						
							|  |  |  | #include "BKE_global.h"
 | 
					
						
							| 
									
										
										
										
											2020-03-05 10:54:00 +01:00
										 |  |  | #include "BKE_idtype.h"
 | 
					
						
							| 
									
										
										
										
											2019-11-28 17:37:27 +01:00
										 |  |  | #include "BKE_image.h"
 | 
					
						
							|  |  |  | #include "BKE_main.h"
 | 
					
						
							|  |  |  | #include "BKE_modifier.h"
 | 
					
						
							|  |  |  | #include "BKE_node.h"
 | 
					
						
							|  |  |  | #include "BKE_scene.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "BLI_path_util.h"
 | 
					
						
							| 
									
										
										
										
											2020-03-19 09:33:03 +01:00
										 |  |  | #include "BLI_threads.h"
 | 
					
						
							| 
									
										
										
										
											2019-11-28 17:37:27 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include "BLO_readfile.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "DEG_depsgraph.h"
 | 
					
						
							| 
									
										
										
										
											2020-03-19 09:33:03 +01:00
										 |  |  | #include "DEG_depsgraph_build.h"
 | 
					
						
							| 
									
										
										
										
											2019-11-28 17:37:27 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include "DNA_genfile.h" /* for DNA_sdna_current_init() */
 | 
					
						
							|  |  |  | #include "DNA_windowmanager_types.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "IMB_imbuf.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "RNA_define.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "WM_api.h"
 | 
					
						
							|  |  |  | #include "wm.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-05 14:24:07 +02:00
										 |  |  | #include "CLG_log.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-28 17:37:27 +01:00
										 |  |  | BlendfileLoadingBaseTest::~BlendfileLoadingBaseTest() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void BlendfileLoadingBaseTest::SetUpTestCase() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   testing::Test::SetUpTestCase(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Minimal code to make loading a blendfile and constructing a depsgraph not crash, copied from
 | 
					
						
							|  |  |  |    * main() in creator.c. */ | 
					
						
							| 
									
										
										
										
											2020-10-05 14:24:07 +02:00
										 |  |  |   CLG_init(); | 
					
						
							| 
									
										
										
										
											2019-11-28 17:37:27 +01:00
										 |  |  |   BLI_threadapi_init(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   DNA_sdna_current_init(); | 
					
						
							|  |  |  |   BKE_blender_globals_init(); | 
					
						
							| 
									
										
										
										
											2020-03-05 10:54:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   BKE_idtype_init(); | 
					
						
							| 
									
										
										
										
											2020-10-05 14:24:07 +02:00
										 |  |  |   BKE_appdir_init(); | 
					
						
							| 
									
										
										
										
											2019-11-28 17:37:27 +01:00
										 |  |  |   IMB_init(); | 
					
						
							|  |  |  |   BKE_images_init(); | 
					
						
							|  |  |  |   BKE_modifier_init(); | 
					
						
							|  |  |  |   DEG_register_node_types(); | 
					
						
							|  |  |  |   RNA_init(); | 
					
						
							| 
									
										
										
										
											2020-11-06 16:43:09 +11:00
										 |  |  |   BKE_node_system_init(); | 
					
						
							| 
									
										
										
										
											2019-11-28 17:37:27 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   G.background = true; | 
					
						
							|  |  |  |   G.factory_startup = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Allocate a dummy window manager. The real window manager will try and load Python scripts from
 | 
					
						
							|  |  |  |    * the release directory, which it won't be able to find. */ | 
					
						
							|  |  |  |   ASSERT_EQ(G.main->wm.first, nullptr); | 
					
						
							|  |  |  |   G.main->wm.first = MEM_callocN(sizeof(wmWindowManager), __func__); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void BlendfileLoadingBaseTest::TearDownTestCase() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   if (G.main->wm.first != nullptr) { | 
					
						
							|  |  |  |     MEM_freeN(G.main->wm.first); | 
					
						
							|  |  |  |     G.main->wm.first = nullptr; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* Copied from WM_exit_ex() in wm_init_exit.c, and cherry-picked those lines that match the
 | 
					
						
							| 
									
										
										
										
											2019-12-17 16:28:28 +11:00
										 |  |  |    * allocation/initialization done in SetUpTestCase(). */ | 
					
						
							| 
									
										
										
										
											2019-11-28 17:37:27 +01:00
										 |  |  |   BKE_blender_free(); | 
					
						
							|  |  |  |   RNA_exit(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   DEG_free_node_types(); | 
					
						
							|  |  |  |   DNA_sdna_current_free(); | 
					
						
							|  |  |  |   BLI_threadapi_exit(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   BKE_blender_atexit(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   BKE_tempdir_session_purge(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-05 14:24:07 +02:00
										 |  |  |   CLG_exit(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-28 17:37:27 +01:00
										 |  |  |   testing::Test::TearDownTestCase(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void BlendfileLoadingBaseTest::TearDown() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   depsgraph_free(); | 
					
						
							|  |  |  |   blendfile_free(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   testing::Test::TearDown(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bool BlendfileLoadingBaseTest::blendfile_load(const char *filepath) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
											  
											
												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
											
										 
											2020-07-16 16:10:53 +02:00
										 |  |  |   const std::string &test_assets_dir = blender::tests::flags_test_asset_dir(); | 
					
						
							|  |  |  |   if (test_assets_dir.empty()) { | 
					
						
							| 
									
										
										
										
											2019-11-28 17:37:27 +01:00
										 |  |  |     return false; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   char abspath[FILENAME_MAX]; | 
					
						
							| 
									
										
											  
											
												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
											
										 
											2020-07-16 16:10:53 +02:00
										 |  |  |   BLI_path_join(abspath, sizeof(abspath), test_assets_dir.c_str(), filepath, NULL); | 
					
						
							| 
									
										
										
										
											2019-11-28 17:37:27 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   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 '" | 
					
						
							| 
									
										
											  
											
												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
											
										 
											2020-07-16 16:10:53 +02:00
										 |  |  |                   << test_assets_dir << "'"; | 
					
						
							| 
									
										
										
										
											2019-11-28 17:37:27 +01:00
										 |  |  |     return false; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void BlendfileLoadingBaseTest::blendfile_free() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   if (bfile == nullptr) { | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   wmWindowManager *wm = static_cast<wmWindowManager *>(bfile->main->wm.first); | 
					
						
							|  |  |  |   if (wm != nullptr) { | 
					
						
							|  |  |  |     wm_close_and_free(NULL, wm); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   BLO_blendfiledata_free(bfile); | 
					
						
							|  |  |  |   bfile = nullptr; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void BlendfileLoadingBaseTest::depsgraph_create(eEvaluationMode depsgraph_evaluation_mode) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   depsgraph = DEG_graph_new( | 
					
						
							|  |  |  |       bfile->main, bfile->curscene, bfile->cur_view_layer, depsgraph_evaluation_mode); | 
					
						
							| 
									
										
										
										
											2020-08-18 15:51:32 +02:00
										 |  |  |   DEG_graph_build_from_view_layer(depsgraph); | 
					
						
							| 
									
										
										
										
											2019-11-28 17:37:27 +01:00
										 |  |  |   BKE_scene_graph_update_tagged(depsgraph, bfile->main); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void BlendfileLoadingBaseTest::depsgraph_free() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   if (depsgraph == nullptr) { | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   DEG_graph_free(depsgraph); | 
					
						
							|  |  |  |   depsgraph = nullptr; | 
					
						
							|  |  |  | } |