summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meson.build7
-rwxr-xr-xtest/test_quirks_files.py64
2 files changed, 71 insertions, 0 deletions
diff --git a/meson.build b/meson.build
index 2d69d22c..58b900c5 100644
--- a/meson.build
+++ b/meson.build
@@ -478,6 +478,13 @@ test('validate-quirks',
suite : ['all']
)
+quirks_file_tester = find_program('test/test_quirks_files.py')
+test('validate-quirks-files',
+ quirks_file_tester,
+ suite : ['all'],
+ env: ['MESON_SOURCE_ROOT=@0@'.format(meson.project_source_root())],
+ )
+
libinput_list_devices_sources = [ 'tools/libinput-list-devices.c' ]
libinput_list_devices = executable('libinput-list-devices',
libinput_list_devices_sources,
diff --git a/test/test_quirks_files.py b/test/test_quirks_files.py
new file mode 100755
index 00000000..91f00740
--- /dev/null
+++ b/test/test_quirks_files.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python3
+#
+# This file is formatted with Python Black
+#
+# Run with pytest
+
+from pathlib import Path
+
+import configparser
+import os
+import pytest
+import re
+
+
+def quirksdir():
+ return Path(os.getenv("MESON_SOURCE_ROOT") or ".") / "quirks"
+
+
+def pytest_generate_tests(metafunc):
+ # for any function that takes a "quirksfile" argument return the path to
+ # a quirks file
+ if "quirksfile" in metafunc.fixturenames:
+ metafunc.parametrize("quirksfile", [f for f in quirksdir().glob("*.quirks")])
+
+
+def test_matches_are_valid(quirksfile):
+ quirks = configparser.ConfigParser(strict=True)
+ # Don't convert to lowercase
+ quirks.optionxform = lambda option: option # type: ignore
+ quirks.read(quirksfile)
+
+ for name, section in filter(lambda n: n != "DEFAULT", quirks.items()):
+ bus = section.get("MatchBus")
+ if bus is not None:
+ assert bus in ("ps2", "usb", "bluetooth", "i2c", "spi")
+
+ vid = section.get("MatchVendor")
+ if vid is not None:
+ assert re.match(
+ "0x[0-9A-F]{4}", vid
+ ), f"{quirksfile}: {name}: {vid} must be uppercase hex (0xAB12)"
+
+ pid = section.get("MatchProduct")
+ if pid is not None:
+ assert re.match(
+ "0x[0-9A-F]{4}", pid
+ ), f"{quirksfile}: {name}: {pid} must be uppercase hex (0xAB12)"
+
+
+def main():
+ args = [__file__]
+ try:
+ import xdist # noqa
+
+ ncores = os.environ.get("FDO_CI_CONCURRENT", "auto")
+ args += ["-n", ncores]
+ except ImportError:
+ pass
+
+ return pytest.main(args)
+
+
+if __name__ == "__main__":
+ raise SystemExit(main())