Add runtime dependencies to tests
`meson test` only builds what's required to run a test. If you start with a clean build directory (or run `ninja clean`), then about half the tests fail because the required plugins or even the loaders themselves have not yet been built.
This adds the proper dependencies so that all requirements are built before testing.
The name of the macro used to pass through the build directory has also been made consistent, so that it could be automatically generated.
Testing Done:
`ninja clean` and then `meson test`, and all tests now pass.
Also `ninja clean` and `meson test "test name"` for all test names, and each individual test passes.
Reviewed at https://reviews.imfreedom.org/r/2662/
--- a/gplugin/tests/auto-load-fail/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/auto-load-fail/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -1,3 +1,5 @@
-shared_library('auto-load-fail', 'auto-load-fail.c',
+plugin = shared_library('auto-load-fail', 'auto-load-fail.c', dependencies : [gplugin_dep, GLIB])
+all_native_test_plugins += {'auto-load-fail': plugin} --- a/gplugin/tests/auto-load-pass/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/auto-load-pass/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -1,3 +1,5 @@
-shared_library('auto-load-pass', 'auto-load-pass.c',
+plugin = shared_library('auto-load-pass', 'auto-load-pass.c', dependencies : [gplugin_dep, GLIB])
+all_native_test_plugins += {'auto-load-pass': plugin} --- a/gplugin/tests/bad-plugins/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/bad-plugins/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -1,3 +1,5 @@
-shared_library('query-error', 'query-error.c',
+plugin = shared_library('query-error', 'query-error.c', dependencies : [gplugin_dep, GLIB])
+all_native_test_plugins += {'bad-plugins': plugin} --- a/gplugin/tests/bind-global/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/bind-global/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -1,3 +1,5 @@
-shared_library('bind-global', 'bind-global.c',
+plugin = shared_library('bind-global', 'bind-global.c', dependencies : [gplugin_dep, GLIB])
+all_native_test_plugins += {'bind-global': plugin} --- a/gplugin/tests/dynamic-type/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/dynamic-type/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -5,8 +5,10 @@
dependencies : [gplugin_dep, GLIB])
-shared_module('dynamic-type-user', 'dynamic-type-user.c',
+dynamic_type_user = shared_module('dynamic-type-user', 'dynamic-type-user.c', dependencies : [gplugin_dep, GLIB])
+all_native_test_plugins += {'dynamic-type': [dynamic_type_provider, dynamic_type_user]} --- a/gplugin/tests/id-collision/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/id-collision/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -1,7 +1,9 @@
-shared_library('id-collision1', 'id-collision1.c',
+plugin1 = shared_library('id-collision1', 'id-collision1.c', dependencies : [gplugin_dep, GLIB])
-shared_library('id-collision2', 'id-collision2.c',
+plugin2 = shared_library('id-collision2', 'id-collision2.c', dependencies : [gplugin_dep, GLIB])
+all_native_test_plugins += {'id-collision': [plugin1, plugin2]} --- a/gplugin/tests/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -1,3 +1,5 @@
+all_native_test_plugins = {} ###############################################################################
###############################################################################
@@ -20,56 +22,31 @@
#######################################
current_build_dir = meson.current_build_dir()
- f'-DTEST_DIR="@current_build_dir@/plugins/"',
- f'-DTEST_ID_DIR="@current_build_dir@/id-collision/"',
- f'-DTEST_DIR="@current_build_dir@/plugins/"',
- f'-DTEST_AUTO_LOAD_PASS_DIR="@current_build_dir@/auto-load-pass"',
- f'-DTEST_AUTO_LOAD_FAIL_DIR="@current_build_dir@/auto-load-fail"',
- f'-DTEST_BIND_GLOBAL_DIR="@current_build_dir@/bind-global/"',
- f'-DTEST_BAD_DIR="@current_build_dir@/bad-plugins/"',
- f'-DTEST_ID_DIR="@current_build_dir@/id-collision/"',
- f'-DTEST_DIR="@current_build_dir@/plugins/"',
- f'-DTEST_ID_DIR="@current_build_dir@/id-collision/"',
+ # name -> [required plugin names] + 'core': ['plugins', 'id-collision'], + 'auto-load': ['plugins', 'auto-load-pass', 'auto-load-fail'], + 'bind-global': ['bad-plugins', 'bind-global', 'id-collision'], + 'find-plugins': ['plugins'], + 'id-collision': ['id-collision'], 'loader-registration': [],
- f'-DTEST_DIR="@current_build_dir@/newest-version/"',
+ 'newest-version': ['newest-version'], 'plugin-manager-paths': [],
- f'-DTEST_DIR="@current_build_dir@/plugins/"',
+ 'signals': ['plugins'],
- f'-DPLUGIN_DIR="@current_build_dir@/unresolved-symbol/"',
+ 'unresolved-symbol': ['unresolved-symbol'], - 'versioned-dependencies': [
- f'-DTEST_VERSIONED_DEPENDENCY_DIR="@current_build_dir@/versioned-dependencies"',
+ 'versioned-dependencies': ['versioned-dependencies'], # dynamic-type-provider and dynamic-type-user libs are not built on Windows
# so no need to test them there either
if host_machine.system() != 'windows'
- f'-DTEST_DYNAMIC_DIR="@current_build_dir@/dynamic-type/"',
+ 'dynamic-type': ['dynamic-type'], @@ -77,25 +54,39 @@
###############################################################################
-foreach prog, c_args : TESTS
+foreach prog, plugins : TESTS + macro_name = name.underscorify().to_upper() + c_args += f'-DTEST_@macro_name@_DIR="@current_build_dir@/@name@"' + depends += all_native_test_plugins[name] e = executable(f'test-@prog@', f'test-@prog@.c',
dependencies: [gplugin_dep, GLIB, GOBJECT])
if prog == 'unresolved-symbol'
#######################################
#######################################
+foreach name : ['plugins', 'bad-plugins', 'id-collision'] + macro_name = name.underscorify().to_upper() + c_args += f'-DTEST_@macro_name@_DIR="@current_build_dir@/@name@"' + depends += all_native_test_plugins[name] e = executable('test-native-loader', 'test-native-loader.c',
- f'-DTEST_DIR="@current_build_dir@/plugins/"',
- f'-DTEST_BAD_DIR="@current_build_dir@/bad-plugins/"',
- f'-DTEST_ID_DIR="@current_build_dir@/id-collision/"',
link_with : gplugin_loader_tests,
dependencies : [gplugin_dep, GLIB, GOBJECT])
-test('Native Loader', e)
+test('Native loader', e, --- a/gplugin/tests/newest-version/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/newest-version/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -8,8 +8,12 @@
- shared_module(module, f'@module@.c',
- name_prefix: '', dependencies : [gplugin_dep, GLIB])
+ plugins += shared_module(module, f'@module@.c', + dependencies : [gplugin_dep, GLIB]) +all_native_test_plugins += {'newest-version': plugins} --- a/gplugin/tests/plugins/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/plugins/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -7,10 +7,14 @@
- shared_library(lib, f'@lib@.c',
- name_prefix: '', dependencies : [gplugin_dep, GLIB])
+ plugins += shared_library(lib, f'@lib@.c', + dependencies : [gplugin_dep, GLIB]) +all_native_test_plugins += {'plugins': plugins} --- a/gplugin/tests/test-auto-load.c Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/test-auto-load.c Mon Oct 16 22:35:31 2023 -0500
@@ -61,7 +61,7 @@
* but it has to be looked for manually.
gplugin_manager_remove_paths(manager);
- gplugin_manager_append_path(manager, TEST_DIR);
+ gplugin_manager_append_path(manager, TEST_PLUGINS_DIR); gplugin_manager_append_path(manager, TEST_AUTO_LOAD_FAIL_DIR);
gplugin_manager_refresh(manager);
--- a/gplugin/tests/test-core.c Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/test-core.c Mon Oct 16 22:35:31 2023 -0500
@@ -92,7 +92,7 @@
gplugin_init(GPLUGIN_CORE_FLAGS_NONE);
manager = gplugin_manager_get_default();
- gplugin_manager_append_path(manager, TEST_DIR);
+ gplugin_manager_append_path(manager, TEST_PLUGINS_DIR); gplugin_manager_refresh(manager);
@@ -108,8 +108,8 @@
manager = gplugin_manager_get_default();
- gplugin_manager_append_path(manager, TEST_DIR);
- gplugin_manager_append_path(manager, TEST_ID_DIR);
+ gplugin_manager_append_path(manager, TEST_PLUGINS_DIR); + gplugin_manager_append_path(manager, TEST_ID_COLLISION_DIR); /* run the first refresh and count everything */
gplugin_manager_refresh(manager);
--- a/gplugin/tests/test-dynamic-type.c Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/test-dynamic-type.c Mon Oct 16 22:35:31 2023 -0500
@@ -35,7 +35,7 @@
- gplugin_manager_append_path(manager, TEST_DYNAMIC_DIR);
+ gplugin_manager_append_path(manager, TEST_DYNAMIC_TYPE_DIR); gplugin_manager_refresh(manager);
--- a/gplugin/tests/test-find-plugins.c Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/test-find-plugins.c Mon Oct 16 22:35:31 2023 -0500
@@ -89,7 +89,7 @@
manager = gplugin_manager_get_default();
- gplugin_manager_append_path(manager, TEST_DIR);
+ gplugin_manager_append_path(manager, TEST_PLUGINS_DIR); gplugin_manager_refresh(manager);
/* make sure that all the plugins are queried */
--- a/gplugin/tests/test-id-collision.c Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/test-id-collision.c Mon Oct 16 22:35:31 2023 -0500
@@ -34,7 +34,7 @@
manager = gplugin_manager_get_default();
- gplugin_manager_append_path(manager, TEST_ID_DIR);
+ gplugin_manager_append_path(manager, TEST_ID_COLLISION_DIR); gplugin_manager_refresh(manager);
plugins = gplugin_manager_find_plugins(manager, "gplugin/id-collision");
--- a/gplugin/tests/test-native-loader.c Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/test-native-loader.c Mon Oct 16 22:35:31 2023 -0500
@@ -35,7 +35,7 @@
/* add the test directory to the plugin manager's search paths */
- gplugin_manager_append_path(manager, TEST_DIR);
+ gplugin_manager_append_path(manager, TEST_PLUGINS_DIR); /* refresh the plugin manager */
gplugin_manager_refresh(manager);
@@ -66,7 +66,7 @@
GPluginPlugin *plugin = NULL;
/* add the test directory to the plugin manager's search paths */
- gplugin_manager_append_path(manager, TEST_BAD_DIR);
+ gplugin_manager_append_path(manager, TEST_BAD_PLUGINS_DIR); /* refresh the plugin manager */
gplugin_manager_refresh(manager);
@@ -91,7 +91,7 @@
gplugin_init(GPLUGIN_CORE_FLAGS_NONE);
- gplugin_loader_tests_main(NULL, TEST_DIR, "native");
+ gplugin_loader_tests_main(NULL, TEST_PLUGINS_DIR, "native"); "/loaders/native/load/broken_dependent",
--- a/gplugin/tests/test-newest-version.c Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/test-newest-version.c Mon Oct 16 22:35:31 2023 -0500
@@ -29,7 +29,7 @@
GPluginPlugin *plugin = NULL;
GPluginPluginInfo *info = NULL;
- gplugin_manager_append_path(manager, TEST_DIR);
+ gplugin_manager_append_path(manager, TEST_NEWEST_VERSION_DIR); gplugin_manager_refresh(manager);
plugin = gplugin_manager_find_plugin_with_newest_version(manager, id);
--- a/gplugin/tests/test-signals.c Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/test-signals.c Mon Oct 16 22:35:31 2023 -0500
@@ -175,7 +175,7 @@
G_CALLBACK(test_gplugin_manager_signals_normal_unloaded),
- gplugin_manager_append_path(manager, TEST_DIR);
+ gplugin_manager_append_path(manager, TEST_PLUGINS_DIR); gplugin_manager_refresh(manager);
@@ -231,7 +231,7 @@
G_CALLBACK(test_gplugin_manager_signals_normal_unloaded),
- gplugin_manager_append_path(manager, TEST_DIR);
+ gplugin_manager_append_path(manager, TEST_PLUGINS_DIR); gplugin_manager_refresh(manager);
@@ -286,7 +286,7 @@
G_CALLBACK(test_gplugin_manager_signals_normal_unloaded),
- gplugin_manager_append_path(manager, TEST_DIR);
+ gplugin_manager_append_path(manager, TEST_PLUGINS_DIR); gplugin_manager_refresh(manager);
@@ -332,7 +332,7 @@
G_CALLBACK(test_gplugin_manager_signals_load_failed),
- gplugin_manager_append_path(manager, TEST_DIR);
+ gplugin_manager_append_path(manager, TEST_PLUGINS_DIR); gplugin_manager_refresh(manager);
plugin = gplugin_manager_find_plugin(manager, "gplugin/native-load-failed");
@@ -382,7 +382,7 @@
G_CALLBACK(test_gplugin_manager_signals_unload_failed),
- gplugin_manager_append_path(manager, TEST_DIR);
+ gplugin_manager_append_path(manager, TEST_PLUGINS_DIR); gplugin_manager_refresh(manager);
--- a/gplugin/tests/test-unresolved-symbol.c Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/test-unresolved-symbol.c Mon Oct 16 22:35:31 2023 -0500
@@ -37,7 +37,7 @@
"*some_unresolved_symbol*");
gplugin_manager_remove_paths(manager);
- gplugin_manager_append_path(manager, PLUGIN_DIR);
+ gplugin_manager_append_path(manager, TEST_UNRESOLVED_SYMBOL_DIR); gplugin_manager_refresh(manager);
g_test_assert_expected_messages();
--- a/gplugin/tests/test-versioned-dependencies.c Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/test-versioned-dependencies.c Mon Oct 16 22:35:31 2023 -0500
@@ -52,7 +52,7 @@
manager = gplugin_manager_get_default();
- gplugin_manager_append_path(manager, TEST_VERSIONED_DEPENDENCY_DIR);
+ gplugin_manager_append_path(manager, TEST_VERSIONED_DEPENDENCIES_DIR); gplugin_manager_refresh(manager);
plugin = gplugin_manager_find_plugin(manager, "gplugin/super-dependent");
--- a/gplugin/tests/unresolved-symbol/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/unresolved-symbol/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -6,9 +6,12 @@
-shared_module('unresolved-symbol', 'unresolved-symbol.c',
+plugin = shared_module('unresolved-symbol', dependencies : [gplugin_dep, GLIB])
+all_native_test_plugins += {'unresolved-symbol': plugin} --- a/gplugin/tests/versioned-dependencies/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/gplugin/tests/versioned-dependencies/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -11,8 +11,12 @@
- shared_library(lib, f'@lib@.c',
- name_prefix: '', dependencies : [gplugin_dep, GLIB])
+ plugins += shared_library(lib, f'@lib@.c', + dependencies : [gplugin_dep, GLIB]) +all_native_test_plugins += {'versioned-dependencies': plugins} --- a/lua/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/lua/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -56,7 +56,7 @@
-shared_library('gplugin-lua',
+gplugin_lua = shared_library('gplugin-lua', --- a/lua/tests/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/lua/tests/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -6,7 +6,8 @@
link_with : gplugin_loader_tests,
dependencies : [GLIB, GOBJECT, LUA, gplugin_dep])
# Add the test plugins path to our environment variable
devenv.append('GPLUGIN_PLUGIN_PATH', meson.current_source_dir() / 'plugins')
--- a/python3/tests/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/python3/tests/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -6,7 +6,8 @@
link_with : gplugin_loader_tests,
dependencies : [GLIB, GOBJECT, PYTHON3, PYGOBJECT, gplugin_dep])
-test('Python3 loader', e)
+test('Python3 loader', e, + depends: gplugin_python3) # we can't see the symbols in gplugin-python3 externally, so use the static
--- a/vala/tests/genie-plugins/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/vala/tests/genie-plugins/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -6,10 +6,13 @@
+all_genie_test_plugins = [] - shared_library(f'genie-@lib@-plugin', f'@lib@.gs',
- name_prefix: '', dependencies : [gplugin_dep, gplugin_vapi])
+ plugin = shared_library(f'genie-@lib@-plugin', f'@lib@.gs', + dependencies : [gplugin_dep, gplugin_vapi]) + all_genie_test_plugins += plugin # Add the test plugins path to our environment variable
--- a/vala/tests/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/vala/tests/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -1,3 +1,6 @@
e = executable('test-vala-loading', 'test-vala-loading.c',
include_directories : include_directories('.'),
@@ -5,7 +8,8 @@
link_with : gplugin_loader_tests,
dependencies : [GLIB, GOBJECT, gplugin_dep])
+ depends: all_vala_test_plugins) e = executable('test-genie-loading', 'test-genie-loading.c',
include_directories : include_directories('.'),
@@ -14,7 +18,5 @@
link_with : gplugin_loader_tests,
dependencies : [GLIB, GOBJECT, gplugin_dep])
-test('Genie loading', e)
+test('Genie loading', e, + depends: all_genie_test_plugins) --- a/vala/tests/plugins/meson.build Mon Oct 09 22:28:34 2023 -0500
+++ b/vala/tests/plugins/meson.build Mon Oct 16 22:35:31 2023 -0500
@@ -6,10 +6,13 @@
+all_vala_test_plugins = [] - shared_library(f'vala-@lib@-plugin', f'@lib@.vala',
- name_prefix: '', dependencies: [gplugin_dep, gplugin_vapi])
+ plugin = shared_library(f'vala-@lib@-plugin', f'@lib@.vala', + dependencies: [gplugin_dep, gplugin_vapi]) + all_vala_test_plugins += plugin # Add the test plugins path to our environment variable