diff --git a/src/tests/clutter-test-utils.h b/src/tests/clutter-test-utils.h index 48443f201..95f54ceed 100644 --- a/src/tests/clutter-test-utils.h +++ b/src/tests/clutter-test-utils.h @@ -31,7 +31,7 @@ #include "clutter/clutter-color.h" #include "clutter/clutter-private.h" #include "meta/common.h" -#include "tests/meta-context-test.h" +#include "meta-test/meta-context-test.h" G_BEGIN_DECLS diff --git a/src/tests/clutter/accessibility/meson.build b/src/tests/clutter/accessibility/meson.build index cf5154561..ce6361b59 100644 --- a/src/tests/clutter/accessibility/meson.build +++ b/src/tests/clutter/accessibility/meson.build @@ -13,9 +13,7 @@ clutter_test_accessibility_c_args = [ clutter_test_accessibility_c_args += clutter_debug_c_args clutter_accessibility_tests_dependencies = [ - clutter_deps, - libmutter_clutter_dep, - libmutter_dep, + libmutter_test_dep, ] clutter_accessibility_tests = [ diff --git a/src/tests/clutter/conform/meson.build b/src/tests/clutter/conform/meson.build index 387360ddf..aec4a9148 100644 --- a/src/tests/clutter/conform/meson.build +++ b/src/tests/clutter/conform/meson.build @@ -66,9 +66,7 @@ foreach test : clutter_conform_tests c_args: clutter_tests_conform_c_args, link_args: clutter_tests_conform_link_args, dependencies: [ - clutter_deps, - libmutter_clutter_dep, - libmutter_dep + libmutter_test_dep, ], install: false, ) diff --git a/src/tests/clutter/interactive/meson.build b/src/tests/clutter/interactive/meson.build index 5b37a98bf..e853184ef 100644 --- a/src/tests/clutter/interactive/meson.build +++ b/src/tests/clutter/interactive/meson.build @@ -62,16 +62,13 @@ executable('test-interactive', sources: clutter_tests_interactive_sources, include_directories: [ clutter_includes, - clutter_tests_includepath, + clutter_tests_includes, clutter_tests_interactive_includepath, ], c_args: clutter_tests_interactive_c_args, link_args: clutter_tests_interactive_link_args, dependencies: [ - clutter_deps, - libmutter_clutter_dep, - libmutter_dep, - gdk_pixbuf_dep, + libmutter_test_dep, ], install: false, ) diff --git a/src/tests/clutter/interactive/test-main.c b/src/tests/clutter/interactive/test-main.c index 541a0e01b..29fc82a6a 100644 --- a/src/tests/clutter/interactive/test-main.c +++ b/src/tests/clutter/interactive/test-main.c @@ -6,8 +6,8 @@ #include #include "backends/x11/nested/meta-backend-x11-nested.h" +#include "meta-test/meta-context-test.h" #include "tests/clutter-test-utils.h" -#include "tests/meta-context-test.h" #include "test-unit-names.h" diff --git a/src/tests/clutter/meson.build b/src/tests/clutter/meson.build index e09b7f94e..ae05ae064 100644 --- a/src/tests/clutter/meson.build +++ b/src/tests/clutter/meson.build @@ -1,4 +1,8 @@ clutter_tests_includepath = include_directories('.') +clutter_tests_includes = [ + tests_includepath, + clutter_tests_includepath, +] subdir('accessibility') subdir('conform') diff --git a/src/tests/clutter/micro-bench/meson.build b/src/tests/clutter/micro-bench/meson.build index 4c2b3b803..7fa2a8fca 100644 --- a/src/tests/clutter/micro-bench/meson.build +++ b/src/tests/clutter/micro-bench/meson.build @@ -24,9 +24,7 @@ foreach test : clutter_tests_micro_bench_tests include_directories: clutter_includes, c_args: clutter_tests_micro_bench_c_args, dependencies: [ - clutter_deps, - libmutter_clutter_dep, - libmutter_dep, + libmutter_test_dep, ], install: false, ) diff --git a/src/tests/clutter/performance/meson.build b/src/tests/clutter/performance/meson.build index b1d8bd516..2c7637bad 100644 --- a/src/tests/clutter/performance/meson.build +++ b/src/tests/clutter/performance/meson.build @@ -23,13 +23,11 @@ foreach test : clutter_tests_performance_tests ], include_directories: [ clutter_includes, - clutter_tests_includepath, + clutter_tests_includes, ], c_args: clutter_tests_performance_c_args, dependencies: [ - clutter_deps, - libmutter_clutter_dep, - libmutter_dep, + libmutter_test_dep, ], install: false, ) diff --git a/src/tests/headless-start-test.c b/src/tests/headless-start-test.c index fb64ca13f..85f1b8ee2 100644 --- a/src/tests/headless-start-test.c +++ b/src/tests/headless-start-test.c @@ -23,7 +23,7 @@ #include "backends/meta-crtc.h" #include "backends/meta-output.h" #include "core/display-private.h" -#include "tests/meta-context-test.h" +#include "meta-test/meta-context-test.h" #include "tests/meta-monitor-manager-test.h" static void diff --git a/src/tests/meson.build b/src/tests/meson.build index 6d7a8976b..a809cef8a 100644 --- a/src/tests/meson.build +++ b/src/tests/meson.build @@ -1,8 +1,7 @@ -test_context_sources = [ +mutter_test_sources = [ 'meta-backend-test.c', 'meta-backend-test.h', 'meta-context-test.c', - 'meta-context-test.h', 'meta-gpu-test.c', 'meta-gpu-test.h', 'meta-monitor-manager-test.c', @@ -13,17 +12,15 @@ test_context_sources = [ 'meta-test-utils.h', ] +libmutter_test_name = 'mutter-test-' + libmutter_api_version + clutter_test_utils = files ( - test_context_sources, 'clutter-test-utils.c', 'clutter-test-utils.h', ) -if have_clutter_tests - subdir('clutter') -endif - -tests_includepath = mutter_includes +tests_includepath = include_directories('.') +tests_includes = mutter_includes tests_c_args = mutter_c_args tests_deps = [ @@ -33,6 +30,41 @@ tests_deps = [ libmutter_clutter_dep, ] +libmutter_test = shared_library(libmutter_test_name, + mutter_test_sources, + gnu_symbol_visibility: 'hidden', + include_directories: tests_includes, + c_args: tests_c_args, + dependencies: tests_deps, + install_rpath: pkglibdir, + install_dir: libdir, + install: true, +) + +libmutter_test_dep = declare_dependency( + link_with: libmutter_test, + include_directories: tests_includes, + dependencies: tests_deps, +) + +pkg.generate(libmutter_test, + name: 'Meta (test framework)', + filebase: 'libmutter-test-' + libmutter_api_version, + description: 'Mutter test framework', + subdirs: pkgname, + requires: ['libmutter-' + libmutter_api_version], + version: meson.project_version(), + variables: [ + 'apiversion=' + libmutter_api_version, + ], + install_dir: pcdir, +) + +if have_clutter_tests + subdir('clutter') +endif + +subdir('meta-test') subdir('wayland-test-clients') if have_installed_tests @@ -60,7 +92,7 @@ test_env.set('MUTTER_TEST_PLUGIN_PATH', '@0@'.format(default_plugin.full_path()) test_client = executable('mutter-test-client', sources: ['test-client.c'], - include_directories: tests_includepath, + include_directories: tests_includes, c_args: tests_c_args, dependencies: [ gtk3_dep, @@ -74,19 +106,17 @@ test_client = executable('mutter-test-client', test_runner = executable('mutter-test-runner', sources: [ - test_context_sources, 'test-runner.c', ], - include_directories: tests_includepath, + include_directories: tests_includes, c_args: tests_c_args, - dependencies: [tests_deps], + dependencies: libmutter_test_dep, install: have_installed_tests, install_dir: mutter_installed_tests_libexecdir, ) unit_tests = executable('mutter-test-unit-tests', sources: [ - test_context_sources, 'unit-tests.c', 'boxes-tests.c', 'boxes-tests.h', @@ -107,35 +137,33 @@ unit_tests = executable('mutter-test-unit-tests', test_driver_server_header, test_driver_protocol_code, ], - include_directories: tests_includepath, + include_directories: tests_includes, c_args: tests_c_args, - dependencies: [tests_deps], + dependencies: libmutter_test_dep, install: have_installed_tests, install_dir: mutter_installed_tests_libexecdir, ) headless_start_test = executable('mutter-headless-start-test', sources: [ - test_context_sources, 'headless-start-test.c', ], - include_directories: tests_includepath, + include_directories: tests_includes, c_args: tests_c_args, - dependencies: [tests_deps], + dependencies: libmutter_test_dep, install: have_installed_tests, install_dir: mutter_installed_tests_libexecdir, ) stage_view_tests = executable('mutter-stage-view-tests', sources: [ - test_context_sources, 'monitor-test-utils.c', 'monitor-test-utils.h', 'stage-view-tests.c', ], - include_directories: tests_includepath, + include_directories: tests_includes, c_args: tests_c_args, - dependencies: [tests_deps], + dependencies: libmutter_test_dep, install: have_installed_tests, install_dir: mutter_installed_tests_libexecdir, ) @@ -144,7 +172,7 @@ anonymous_file_test = executable('anonymous-file-tests', sources: [ 'anonymous-file.c', ], - include_directories: tests_includepath, + include_directories: tests_includes, c_args: tests_c_args, dependencies: [tests_deps], install: have_installed_tests, @@ -170,7 +198,6 @@ if have_native_tests native_headless_tests = executable('mutter-native-headless-tests', sources: [ - test_context_sources, 'native-headless.c', 'native-screen-cast.c', 'native-screen-cast.h', @@ -178,22 +205,21 @@ if have_native_tests 'native-virtual-monitor.h', ref_test_sources, ], - include_directories: tests_includepath, + include_directories: tests_includes, c_args: tests_c_args, - dependencies: [tests_deps], + dependencies: libmutter_test_dep, install: have_installed_tests, install_dir: mutter_installed_tests_libexecdir, ) ref_test_sanity = executable('mutter-ref-test-sanity', sources: [ - test_context_sources, 'ref-test-sanity.c', ref_test_sources, ], - include_directories: tests_includepath, + include_directories: tests_includes, c_args: tests_c_args, - dependencies: [tests_deps], + dependencies: libmutter_test_dep, install: have_installed_tests, install_dir: mutter_installed_tests_libexecdir, ) @@ -203,7 +229,7 @@ if have_native_tests 'screen-cast-client.c', dbus_screen_cast_built_sources, ], - include_directories: tests_includepath, + include_directories: tests_includes, c_args: tests_c_args, dependencies: [ gio_dep, @@ -216,12 +242,11 @@ if have_native_tests native_persistent_virtual_monitor = executable( 'mutter-persistent-virtual-monitor', sources: [ - test_context_sources, 'native-persistent-virtual-monitor.c', ], - include_directories: tests_includepath, + include_directories: tests_includes, c_args: tests_c_args, - dependencies: [tests_deps], + dependencies: libmutter_test_dep, install: have_installed_tests, install_dir: mutter_installed_tests_libexecdir, ) diff --git a/src/tests/meta-backend-test.h b/src/tests/meta-backend-test.h index d1cf81f1c..ad57a42e8 100644 --- a/src/tests/meta-backend-test.h +++ b/src/tests/meta-backend-test.h @@ -23,12 +23,15 @@ #include "backends/x11/nested/meta-backend-x11-nested.h" #define META_TYPE_BACKEND_TEST (meta_backend_test_get_type ()) +META_EXPORT G_DECLARE_FINAL_TYPE (MetaBackendTest, meta_backend_test, META, BACKEND_TEST, MetaBackendX11Nested) +META_EXPORT void meta_backend_test_set_is_lid_closed (MetaBackendTest *backend_test, gboolean is_lid_closed); +META_EXPORT MetaGpu * meta_backend_test_get_gpu (MetaBackendTest *backend_test); #endif /* META_BACKEND_TEST_H */ diff --git a/src/tests/meta-context-test.c b/src/tests/meta-context-test.c index b9716e28c..7ba6c6b51 100644 --- a/src/tests/meta-context-test.c +++ b/src/tests/meta-context-test.c @@ -20,7 +20,7 @@ #include "config.h" -#include "tests/meta-context-test.h" +#include "meta-test/meta-context-test.h" #include #include @@ -267,6 +267,9 @@ meta_context_test_wait_for_x11_display (MetaContextTest *context_test) g_assert_nonnull (meta_display_get_x11_display (display)); } +/** + * meta_create_test_context: (skip) + */ MetaContext * meta_create_test_context (MetaContextTestType type, MetaContextTestFlag flags) diff --git a/src/tests/meta-monitor-manager-test.h b/src/tests/meta-monitor-manager-test.h index aa23448e7..5b0b6d8e7 100644 --- a/src/tests/meta-monitor-manager-test.h +++ b/src/tests/meta-monitor-manager-test.h @@ -46,29 +46,36 @@ struct _MetaOutputTest typedef MetaMonitorTestSetup * (* CreateTestSetupFunc) (void); #define META_TYPE_CRTC_TEST (meta_crtc_test_get_type ()) +META_EXPORT G_DECLARE_FINAL_TYPE (MetaCrtcTest, meta_crtc_test, META, CRTC_TEST, MetaCrtc) #define META_TYPE_OUTPUT_TEST (meta_output_test_get_type ()) +META_EXPORT G_DECLARE_FINAL_TYPE (MetaOutputTest, meta_output_test, META, OUTPUT_TEST, MetaOutput) #define META_TYPE_MONITOR_MANAGER_TEST (meta_monitor_manager_test_get_type ()) +META_EXPORT G_DECLARE_FINAL_TYPE (MetaMonitorManagerTest, meta_monitor_manager_test, META, MONITOR_MANAGER_TEST, MetaMonitorManager) +META_EXPORT void meta_monitor_manager_test_init_test_setup (CreateTestSetupFunc func); void meta_monitor_manager_test_read_current (MetaMonitorManager *manager); +META_EXPORT void meta_monitor_manager_test_emulate_hotplug (MetaMonitorManagerTest *manager_test, MetaMonitorTestSetup *test_setup); +META_EXPORT void meta_monitor_manager_test_set_handles_transforms (MetaMonitorManagerTest *manager_test, gboolean handles_transforms); +META_EXPORT int meta_monitor_manager_test_get_tiled_monitor_count (MetaMonitorManagerTest *manager_test); #endif /* META_MONITOR_MANAGER_TEST_H */ diff --git a/src/tests/meta-test-utils.c b/src/tests/meta-test-utils.c index 4bb469133..24b7106d1 100644 --- a/src/tests/meta-test-utils.c +++ b/src/tests/meta-test-utils.c @@ -27,7 +27,7 @@ #include "core/display-private.h" #include "core/window-private.h" -#include "tests/meta-context-test.h" +#include "meta-test/meta-context-test.h" #include "wayland/meta-wayland.h" #include "wayland/meta-xwayland.h" #include "x11/meta-x11-display-private.h" diff --git a/src/tests/meta-test-utils.h b/src/tests/meta-test-utils.h index 0b4c24755..2d8673e13 100644 --- a/src/tests/meta-test-utils.h +++ b/src/tests/meta-test-utils.h @@ -35,51 +35,66 @@ typedef enum _MetaClientError META_TEST_CLIENT_ERROR_ASSERTION_FAILED } MetaClientError; +META_EXPORT GQuark meta_test_client_error_quark (void); typedef struct _MetaAsyncWaiter MetaAsyncWaiter; typedef struct _MetaTestClient MetaTestClient; +META_EXPORT gboolean meta_async_waiter_process_x11_event (MetaAsyncWaiter *waiter, MetaX11Display *display, XSyncAlarmNotifyEvent *event); +META_EXPORT void meta_async_waiter_set_and_wait (MetaAsyncWaiter *waiter); +META_EXPORT MetaAsyncWaiter * meta_async_waiter_new (void); +META_EXPORT void meta_async_waiter_destroy (MetaAsyncWaiter *waiter); +META_EXPORT char * meta_test_client_get_id (MetaTestClient *client); +META_EXPORT gboolean meta_test_client_process_x11_event (MetaTestClient *client, MetaX11Display *x11_display, XSyncAlarmNotifyEvent *event); +META_EXPORT gboolean meta_test_client_wait (MetaTestClient *client, GError **error); +META_EXPORT gboolean meta_test_client_do (MetaTestClient *client, GError **error, ...) G_GNUC_NULL_TERMINATED; +META_EXPORT MetaWindow * meta_test_client_find_window (MetaTestClient *client, const char *window_id, GError **error); +META_EXPORT void meta_test_client_wait_for_window_shown (MetaTestClient *client, MetaWindow *window); +META_EXPORT gboolean meta_test_client_quit (MetaTestClient *client, GError **error); +META_EXPORT MetaTestClient * meta_test_client_new (MetaContext *context, const char *id, MetaWindowClientType type, GError **error); +META_EXPORT void meta_test_client_destroy (MetaTestClient *client); +META_EXPORT const char * meta_test_get_plugin_name (void); #endif /* TEST_UTILS_H */ diff --git a/src/tests/meta-test/meson.build b/src/tests/meta-test/meson.build new file mode 100644 index 000000000..8cb4e9a9e --- /dev/null +++ b/src/tests/meta-test/meson.build @@ -0,0 +1,9 @@ +mutter_test_includesubdir = join_paths(pkgname, 'meta-test') + +mutter_test_public_headers = [ + 'meta-context-test.h', +] + +install_headers(mutter_test_public_headers, + subdir: mutter_test_includesubdir +) diff --git a/src/tests/meta-context-test.h b/src/tests/meta-test/meta-context-test.h similarity index 94% rename from src/tests/meta-context-test.h rename to src/tests/meta-test/meta-context-test.h index f9c8e1179..b1f678030 100644 --- a/src/tests/meta-context-test.h +++ b/src/tests/meta-test/meta-context-test.h @@ -21,13 +21,12 @@ #ifndef META_CONTEXT_TEST_H #define META_CONTEXT_TEST_H -#include "meta/meta-context.h" +#include +#include typedef enum _MetaContextTestType { -#ifdef HAVE_NATIVE_BACKEND META_CONTEXT_TEST_TYPE_HEADLESS, -#endif META_CONTEXT_TEST_TYPE_NESTED, } MetaContextTestType; @@ -39,14 +38,16 @@ typedef enum _MetaContextTestFlag } MetaContextTestFlag; #define META_TYPE_CONTEXT_TEST (meta_context_test_get_type ()) +META_EXPORT G_DECLARE_DERIVABLE_TYPE (MetaContextTest, meta_context_test, META, CONTEXT_TEST, MetaContext) +META_EXPORT MetaContext * meta_create_test_context (MetaContextTestType type, MetaContextTestFlag flags); - +META_EXPORT int meta_context_test_run_tests (MetaContextTest *context_test); META_EXPORT diff --git a/src/tests/native-headless.c b/src/tests/native-headless.c index 06d456574..6680ba7b9 100644 --- a/src/tests/native-headless.c +++ b/src/tests/native-headless.c @@ -20,7 +20,7 @@ #include "config.h" -#include "tests/meta-context-test.h" +#include "meta-test/meta-context-test.h" #include "tests/native-screen-cast.h" #include "tests/native-virtual-monitor.h" diff --git a/src/tests/ref-test-sanity.c b/src/tests/ref-test-sanity.c index 5815e36ce..0a9472b13 100644 --- a/src/tests/ref-test-sanity.c +++ b/src/tests/ref-test-sanity.c @@ -20,7 +20,7 @@ #include "backends/meta-virtual-monitor.h" #include "backends/native/meta-renderer-native.h" -#include "tests/meta-context-test.h" +#include "meta-test/meta-context-test.h" #include "tests/meta-ref-test.h" static MetaVirtualMonitor *virtual_monitor; diff --git a/src/tests/stage-view-tests.c b/src/tests/stage-view-tests.c index c16d1b2ab..509af37fb 100644 --- a/src/tests/stage-view-tests.c +++ b/src/tests/stage-view-tests.c @@ -19,8 +19,8 @@ #include "clutter/clutter.h" #include "clutter/clutter-stage-view-private.h" +#include "meta-test/meta-context-test.h" #include "tests/meta-backend-test.h" -#include "tests/meta-context-test.h" #include "tests/monitor-test-utils.h" static MonitorTestCaseSetup initial_test_case_setup = { diff --git a/src/tests/test-runner.c b/src/tests/test-runner.c index 4f6bdc81a..bdf2ef109 100644 --- a/src/tests/test-runner.c +++ b/src/tests/test-runner.c @@ -25,9 +25,9 @@ #include #include "core/window-private.h" +#include "meta-test/meta-context-test.h" #include "meta/util.h" #include "meta/window.h" -#include "tests/meta-context-test.h" #include "tests/meta-test-utils.h" #include "ui/ui.h" #include "wayland/meta-wayland.h" diff --git a/src/tests/unit-tests.c b/src/tests/unit-tests.c index 664fb24c5..a31f50536 100644 --- a/src/tests/unit-tests.c +++ b/src/tests/unit-tests.c @@ -28,9 +28,9 @@ #include #include "core/boxes-private.h" +#include "meta-test/meta-context-test.h" #include "meta/meta-context.h" #include "tests/boxes-tests.h" -#include "tests/meta-context-test.h" #include "tests/monitor-config-migration-unit-tests.h" #include "tests/monitor-unit-tests.h" #include "tests/monitor-store-unit-tests.h" diff --git a/src/tests/wayland-test-clients/meson.build b/src/tests/wayland-test-clients/meson.build index 551a0d946..e26325d70 100644 --- a/src/tests/wayland-test-clients/meson.build +++ b/src/tests/wayland-test-clients/meson.build @@ -58,7 +58,7 @@ foreach test : wayland_test_clients '@0@.c'.format(test), common_sources, ], - include_directories: tests_includepath, + include_directories: tests_includes, c_args: tests_c_args, dependencies: [ glib_dep,