xkeyboard-config/backport-run-the-pytest-test-suite-as-part-of-meson-test.patch

102 lines
3.3 KiB
Diff
Raw Permalink Normal View History

2023-09-21 14:16:41 +08:00
From f7e5a8c0ec9801554fec74ac8fc575523e3f6779 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Thu, 29 Jun 2023 10:17:16 +1000
Subject: [PATCH] meson: run the pytest test suite as part of meson test
If pytest is available, run the test suite during meson test.
This requires a bit of fiddling around because the test suite expects
the XKB directory to be properly laid out but that doesn't happen with
meson until install. Luckily all we need to do here is copy our KcCGST
directories over to the build directory and then we can use that as
XKB_CONFIG_ROOT for pytest.
An optional hook for pytest-xdist is integrated too - on my machine the
test run goes from 25s to 10s with xdist on -n auto. This does require
a conftest.py so we don't hog all the cores available on the CI runners.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reference:https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/commit/f7e5a8c0ec9801554fec74ac8fc575523e3f6779
Conflict:NA
---
meson.build | 28 ++++++++++++++++++++++++++++
tests/conftest.py | 16 ++++++++++++++++
tests/copydir.sh | 5 +++++
3 files changed, 49 insertions(+)
create mode 100644 tests/conftest.py
create mode 100755 tests/copydir.sh
diff --git a/meson.build b/meson.build
index 91a4b4c3..4bb3a08d 100644
--- a/meson.build
+++ b/meson.build
@@ -58,4 +58,32 @@ if xsltproc.found()
endif
+# pytest suite
+pymod = import('python')
+python = pymod.find_installation('python3',
+ modules: ['pytest'],
+ required: false)
+pytest = find_program('pytest-3', 'pytest', required: false)
+enable_pytest = python.found() and pytest.found()
+if enable_pytest
+ pytest_args = ['--verbose', '--log-level=DEBUG']
+ # use pytest xdist if available, it really speeds up the tests cases
+ optional_python_modules = ['xdist']
+ if pymod.find_installation('python3', modules: optional_python_modules, required: false).found()
+ pytest_args += ['-n', 'auto']
+ endif
+
+ # copy our data files over to the build directory so we can use the
+ # builddir as XKB_CONFIG_ROOT
+ foreach dir: ['compat', 'geometry', 'keycodes', 'symbols', 'types']
+ run_command('tests/copydir.sh', dir, check: true)
+ endforeach
+
+ test('pytest', pytest,
+ args: pytest_args,
+ env: ['XKB_CONFIG_ROOT=@0@'.format(meson.build_root())],
+ workdir: meson.source_root(),
+ timeout: 60)
+endif
+
subdir('po')
diff --git a/tests/conftest.py b/tests/conftest.py
new file mode 100644
index 00000000..9befeb7a
--- /dev/null
+++ b/tests/conftest.py
@@ -0,0 +1,16 @@
+import os
+import sys
+from pathlib import Path
+
+tests_dir = Path(__file__).parent.resolve()
+sys.path.insert(0, str(tests_dir))
+
+try:
+ import xdist # noqa: F401
+
+ # Otherwise we get unknown hook 'pytest_xdist_auto_num_workers'
+ def pytest_xdist_auto_num_workers(config):
+ return os.getenv("FDO_CI_CONCURRENT", None)
+
+except ImportError:
+ pass
diff --git a/tests/copydir.sh b/tests/copydir.sh
new file mode 100755
index 00000000..6f48c1fc
--- /dev/null
+++ b/tests/copydir.sh
@@ -0,0 +1,5 @@
+#!/bin/sh -ex
+
+dir="$1"
+mkdir -p "$MESON_BUILD_ROOT/$MESON_SUBDIR"
+cp -r "$MESON_SOURCE_ROOT/$MESON_SUBDIR/$dir/" "$MESON_BUILD_ROOT/$MESON_SUBDIR/"
--
GitLab