From b9a104d2ac9bda6b2a14303c2074489a2dde2c80 Mon Sep 17 00:00:00 2001 From: matejcik Date: Tue, 30 Jul 2024 11:28:34 +0200 Subject: [PATCH] fix(tests): python >=3.11 compatibility for identifiers Python 3.11 changed IntEnum.__str__ to return the number instead of the enum value name. This breaks fixtures.json because pytest uses str(value) to generate the test identifier names, and in a lot of places our identifiers use the enum values. This override of `_idval_from_value` explicitly generates a name from the IntEnum instead of using the __str__ implementation. --- tests/conftest.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/conftest.py b/tests/conftest.py index 0c9f364b05..499fdeb47c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -18,10 +18,12 @@ from __future__ import annotations import os import typing as t +from enum import IntEnum from pathlib import Path import pytest import xdist +from _pytest.python import IdMaker from _pytest.reports import TestReport from trezorlib import debuglink, log, models @@ -464,6 +466,15 @@ def pytest_configure(config: "Config") -> None: if config.getoption("verbose"): log.enable_debug_output() + idval_orig = IdMaker._idval_from_value + + def idval_from_value(self: IdMaker, val: object) -> str | None: + if isinstance(val, IntEnum): + return f"{type(val).__name__}.{val.name}" + return idval_orig(self, val) + + IdMaker._idval_from_value = idval_from_value + def pytest_runtest_setup(item: pytest.Item) -> None: """Called for each test item (class, individual tests).