[mutter] tests: Decrease boiler plate needed for adding more tests



commit 5588f2a21c9dc48bb48a6197057ef398eb0cfb1d
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Fri Jan 28 17:32:58 2022 +0100

    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>

 src/tests/kvm/meson.build |  11 +-
 src/tests/meson.build     | 426 ++++++++++++++++++----------------------------
 2 files changed, 168 insertions(+), 269 deletions(-)
---
diff --git a/src/tests/kvm/meson.build b/src/tests/kvm/meson.build
index cd87259129..ec5f6a084b 100644
--- a/src/tests/kvm/meson.build
+++ b/src/tests/kvm/meson.build
@@ -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(),
     ]
   )
diff --git a/src/tests/meson.build b/src/tests/meson.build
index 50ae3d4368..340d33c1a4 100644
--- a/src/tests/meson.build
+++ b/src/tests/meson.build
@@ -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,
-)
-
-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,
-)
-
-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,
-)
-
-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,
-)
-
-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,
-  )
+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,
+]
 
-  ref_test_sanity = executable('mutter-ref-test-sanity',
-    sources: [
-      'ref-test-sanity.c',
+# 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
+
+test_cases = []
+privileged_test_cases = []
+
+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',
     ],
-    include_directories: tests_includes,
-    c_args: tests_c_args,
-    dependencies: libmutter_test_dep,
-    install: have_installed_tests,
-    install_dir: mutter_installed_tests_libexecdir,
-  )
+  },
+  {
+    '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
   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,
-  )
-
-  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,
-  )
+  # 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' ],
+    },
+  ]
 
-  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,
-  )
+  # 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_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,
-  )
+  # Wayland tests
+  test_cases += [
+    {
+      'name': 'wayland-unit',
+      'suite': 'wayland',
+      'sources': [
+        'wayland-unit-tests.c',
+        wayland_test_utils,
+      ],
+    },
+  ]
 
-  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,
-  )
+  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,
+    )
+
+    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,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]