| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #!/usr/bin/env python3
- #
- # This file is formatted with Python Black
- #
- # Run with pytest
- import configparser
- import os
- import re
- from pathlib import Path
- import pytest
- # see the IDs from
- # https://github.com/torvalds/linux/blob/master/drivers/hid/hid-ids.h#L772
- # https://github.com/torvalds/linux/blob/master/drivers/hid/hid-logitech-dj.c#L1826
- logitech_receivers = [
- 0xC50C, # USB_DEVICE_ID_S510_RECEIVER
- 0xC517, # USB_DEVICE_ID_S510_RECEIVER_2
- 0xC512, # USB_DEVICE_ID_LOGITECH_CORDLESS_DESKTOP_LX500
- 0xC513, # USB_DEVICE_ID_MX3000_RECEIVER
- 0xC51B, # USB_DEVICE_ID_LOGITECH_27MHZ_MOUSE_RECEIVER
- 0xC52B, # USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER
- 0xC52F, # USB_DEVICE_ID_LOGITECH_NANO_RECEIVER
- 0xC532, # USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER_2
- 0xC534, # USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_2
- 0xC539, # USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_LIGHTSPEED_1
- 0xC53F, # USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_LIGHTSPEED_1_1
- 0xC53A, # USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_POWERPLAY
- 0xC545, # Bolt receiver, not listed in the kernel (yet)
- 0xC547, # Bolt receiver, not listed in the kernel (yet)
- 0xC548, # Bolt receiver, not listed in the kernel (yet)
- ]
- 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_has_modification_warning(quirksfile):
- with open(quirksfile) as f:
- first_line = f.readline().strip()
- assert first_line == "# Do not edit this file, it will be overwritten on update", (
- f"missing header in file {quirksfile}"
- )
- 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 test_match_product_is_not_a_logitech_receiver(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()):
- vid = int(section.get("MatchVendor", "0x0"), 16)
- if vid == 0x046D:
- pid = int(section.get("MatchProduct", "0x0"), 16)
- assert pid not in logitech_receivers, (
- f"{quirksfile}: {name}: applies to a Logitech Receiver"
- )
- 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())
|