tests: Decrease boiler plate needed for adding more tests

Structure tests in a list of dictionaries, instead of requiring each
test to have its own executable(...) and test(...) statement. The
intention of this is to make it easier to add more test cases.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2262>
This commit is contained in:
Jonas Ådahl 2022-01-28 17:32:58 +01:00 committed by Marge Bot
parent afca974405
commit 5588f2a21c
2 changed files with 165 additions and 266 deletions

View File

@ -27,12 +27,9 @@ endif
virtme_run = find_program('virtme-run.sh')
foreach test: privileged_tests
test_name = test[0]
test_executable = test[1]
test('kvm-' + test_name, virtme_run,
suite: ['core', 'mutter/native/kvm'],
foreach test_case: privileged_tests
test('kvm-' + test_case['name'], virtme_run,
suite: ['core', 'mutter/kvm', 'mutter/kvm/' + test_case['suite']],
depends: [
kernel_image_target,
],
@ -41,7 +38,7 @@ foreach test: privileged_tests
kernel_image_path,
meta_dbus_runner.full_path(),
'--kvm',
test_executable.full_path(),
test_case['executable'].full_path(),
meson.current_build_dir(),
]
)

View File

@ -130,119 +130,64 @@ if have_installed_tests
)
endif
unit_tests = executable('mutter-test-unit-tests',
sources: [
'unit-tests.c',
'boxes-tests.c',
'boxes-tests.h',
'monitor-config-migration-unit-tests.c',
'monitor-config-migration-unit-tests.h',
'monitor-store-unit-tests.c',
'monitor-store-unit-tests.h',
'monitor-transform-tests.c',
'monitor-transform-tests.h',
'orientation-manager-unit-tests.c',
],
include_directories: tests_includes,
c_args: tests_c_args,
dependencies: libmutter_test_dep,
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
wayland_test_utils = [
'meta-wayland-test-driver.c',
'meta-wayland-test-driver.h',
'meta-wayland-test-utils.c',
'meta-wayland-test-utils.h',
test_driver_server_header,
test_driver_protocol_code,
]
monitor_unit_tests = executable('mutter-monitor-unit-tests',
sources: [
'monitor-unit-tests.c',
],
include_directories: tests_includes,
c_args: tests_c_args,
dependencies: libmutter_test_dep,
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
# The test_cases is a list of dictionaries each one representing one test case.
# It consists of the following keys:
# - 'name' - the test name
# - 'suite' - the test suite
# - 'sources' - a list of source code files
headless_start_test = executable('mutter-headless-start-test',
sources: [
'headless-start-test.c',
],
include_directories: tests_includes,
c_args: tests_c_args,
dependencies: libmutter_test_dep,
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
test_cases = []
privileged_test_cases = []
stage_view_tests = executable('mutter-stage-view-tests',
sources: [
'stage-view-tests.c',
],
include_directories: tests_includes,
c_args: tests_c_args,
dependencies: libmutter_test_dep,
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
anonymous_file_test = executable('anonymous-file-tests',
sources: [
'anonymous-file.c',
],
include_directories: tests_includes,
c_args: tests_c_args,
dependencies: [tests_deps],
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
test_cases += [
{
'name': 'unit',
'suite': 'unit',
'sources': [
'unit-tests.c',
'boxes-tests.c',
'boxes-tests.h',
'monitor-config-migration-unit-tests.c',
'monitor-config-migration-unit-tests.h',
'monitor-store-unit-tests.c',
'monitor-store-unit-tests.h',
'monitor-transform-tests.c',
'monitor-transform-tests.h',
'orientation-manager-unit-tests.c',
],
},
{
'name': 'monitor-unit',
'suite': 'backend',
'sources': [ 'monitor-unit-tests.c', ],
},
{
'name': 'headless-start',
'suite': 'backend',
'sources': [ 'headless-start-test.c', ],
},
{
'name': 'stage-views',
'suite': 'compositor',
'sources': [ 'stage-view-tests.c', ],
},
{
'name': 'anonymous-file',
'suite': 'unit',
'sources': [ 'anonymous-file.c', ],
},
]
if have_native_tests
native_kms_utils_tests = executable('mutter-native-kms-utils-tests',
sources: [
'kms-utils-unit-tests.c',
],
include_directories: tests_includepath,
c_args: tests_c_args,
dependencies: [tests_deps],
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
native_headless_tests = executable('mutter-native-headless-tests',
sources: [
'native-headless.c',
'native-screen-cast.c',
'native-screen-cast.h',
'native-virtual-monitor.c',
'native-virtual-monitor.h',
],
include_directories: tests_includes,
c_args: tests_c_args,
dependencies: libmutter_test_dep,
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
pointer_constraints_tests = executable('mutter-native-pointer-constraints',
sources: [
'native-pointer-constraints.c',
],
include_directories: tests_includes,
c_args: tests_c_args,
dependencies: libmutter_test_dep,
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
ref_test_sanity = executable('mutter-ref-test-sanity',
sources: [
'ref-test-sanity.c',
],
include_directories: tests_includes,
c_args: tests_c_args,
dependencies: libmutter_test_dep,
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
screen_cast_client = executable('mutter-screen-cast-client',
sources: [
'screen-cast-client.c',
@ -258,71 +203,97 @@ if have_native_tests
install_dir: mutter_installed_tests_libexecdir,
)
native_persistent_virtual_monitor = executable(
'mutter-persistent-virtual-monitor',
sources: [
'native-persistent-virtual-monitor.c',
],
include_directories: tests_includes,
c_args: tests_c_args,
dependencies: libmutter_test_dep,
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
# Native backend tests
test_cases += [
{
'name': 'kms-utils',
'suite': 'backends/native',
'sources': [ 'kms-utils-unit-tests.c', ],
},
{
'name': 'native-unit',
'suite': 'backends/native',
'sources': [
'native-headless.c',
'native-screen-cast.c',
'native-screen-cast.h',
'native-virtual-monitor.c',
'native-virtual-monitor.h',
],
},
{
'name': 'pointer-constraints',
'suite': 'backends/native',
'sources': [ 'native-pointer-constraints.c' ],
},
{
'name': 'ref-test-sanity',
'suite': 'backends/native',
'sources': [ 'ref-test-sanity.c' ],
},
{
'name': 'persistent-virtual-monitor',
'suite': 'backends/native',
'sources': [ 'native-persistent-virtual-monitor.c' ],
},
]
wayland_tests = executable('mutter-wayland-tests',
sources: [
'meta-wayland-test-driver.c',
'meta-wayland-test-driver.h',
'meta-wayland-test-utils.c',
'meta-wayland-test-utils.h',
'wayland-unit-tests.c',
test_driver_server_header,
test_driver_protocol_code,
],
include_directories: tests_includes,
c_args: tests_c_args,
dependencies: libmutter_test_dep,
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
# Privileged tests
privileged_test_cases += [
{
'name': 'kms-render',
'suite': 'backends/native/kms',
'sources': [ 'native-kms-render.c' ],
},
{
'name': 'kms-device',
'suite': 'backends/native/kms',
'sources': [
'meta-kms-test-utils.c',
'meta-kms-test-utils.h',
'native-kms-device.c',
],
},
{
'name': 'kms-update',
'suite': 'backends/native/kms',
'sources': [
'meta-kms-test-utils.c',
'meta-kms-test-utils.h',
'native-kms-updates.c',
],
},
]
native_kms_render_tests = executable('mutter-native-kms-render',
sources: [
'native-kms-render.c',
],
include_directories: tests_includes,
c_args: tests_c_args,
dependencies: libmutter_test_dep,
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
# Wayland tests
test_cases += [
{
'name': 'wayland-unit',
'suite': 'wayland',
'sources': [
'wayland-unit-tests.c',
wayland_test_utils,
],
},
]
native_kms_device_tests = executable('mutter-native-kms-device',
sources: [
'meta-kms-test-utils.c',
'meta-kms-test-utils.h',
'native-kms-device.c',
],
include_directories: tests_includes,
c_args: tests_c_args,
dependencies: libmutter_test_dep,
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
foreach test_case: test_cases
test_executable = executable('mutter-' + test_case['name'],
sources: test_case['sources'],
include_directories: tests_includes,
c_args: tests_c_args,
dependencies: libmutter_test_dep,
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
native_kms_update_tests = executable('mutter-native-kms-update-tests',
sources: [
'meta-kms-test-utils.c',
'meta-kms-test-utils.h',
'native-kms-updates.c',
],
include_directories: tests_includes,
c_args: tests_c_args,
dependencies: libmutter_test_dep,
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
test(test_case['name'], test_executable,
suite: ['core', 'mutter/' + test_case['suite']],
env: test_env,
is_parallel: false,
timeout: 60,
)
endforeach
endif
stacking_tests = [
@ -367,103 +338,34 @@ foreach stacking_test: stacking_tests
)
endforeach
test('normal', unit_tests,
suite: ['core', 'mutter/unit'],
env: test_env,
is_parallel: false,
timeout: 60,
)
test('monitors', monitor_unit_tests,
suite: ['core', 'mutter/unit'],
env: test_env,
is_parallel: false,
timeout: 60,
)
test('headless-start', headless_start_test,
suite: ['core', 'mutter/unit'],
env: test_env,
is_parallel: false,
timeout: 60,
)
test('stage-view', stage_view_tests,
suite: ['core', 'mutter/unit'],
env: test_env,
is_parallel: false,
timeout: 60,
)
test('anonymous-file', anonymous_file_test,
suite: ['core', 'mutter/unit'],
env: test_env,
is_parallel: false,
timeout: 60,
)
if have_native_tests
test('native-kms-utils', native_kms_utils_tests,
suite: ['core', 'mutter/native/kms'],
env: test_env,
is_parallel: false,
timeout: 60,
)
test('native-headless', native_headless_tests,
suite: ['core', 'mutter/native/headless'],
env: test_env,
is_parallel: false,
timeout: 60,
)
test('native-pointer-constraints', pointer_constraints_tests,
suite: ['core', 'mutter/native/input'],
env: test_env,
is_parallel: false,
timeout: 60,
)
test('ref-test-sanity', ref_test_sanity,
suite: ['core', 'mutter/ref-test/sanity'],
env: test_env,
is_parallel: false,
timeout: 60,
)
test('native-persistent-virtual-monitor', native_persistent_virtual_monitor,
suite: ['core', 'mutter/native/persistent-virtual-monitor'],
env: test_env,
is_parallel: false,
timeout: 60,
)
test('wayland', wayland_tests,
suite: ['core', 'mutter/unit'],
env: test_env,
is_parallel: false,
timeout: 60,
)
endif
if have_kvm_tests or have_tty_tests
privileged_tests = [
[ 'kms-render', native_kms_render_tests ],
[ 'kms-device', native_kms_device_tests ],
[ 'kms-update', native_kms_update_tests ],
]
privileged_tests = []
foreach test_case: privileged_test_cases
test_executable = executable('mutter-' + test_case['name'],
sources: test_case['sources'],
include_directories: tests_includes,
c_args: tests_c_args,
dependencies: libmutter_test_dep,
install: have_installed_tests,
install_dir: mutter_installed_tests_libexecdir,
)
privileged_tests += [
{
'name': test_case['name'],
'suite': test_case['suite'],
'executable': test_executable,
},
]
endforeach
if have_kvm_tests
subdir('kvm')
endif
if have_tty_tests
foreach test: privileged_tests
test_name = test[0]
test_executable = test[1]
test('native-' + test_name, test_executable,
suite: ['core', 'mutter/native/tty'],
foreach test_case: privileged_tests
test('tty-' + test_case['name'], test_case['executable'],
suite: ['core', 'mutter/tty', 'mutter/tty/' + test_case['suite']],
env: test_env,
is_parallel: false,
timeout: 60,