diff --git a/tests/test_methods_and_attributes.py b/tests/test_methods_and_attributes.py index ad8714ea36..b0b5aa870d 100644 --- a/tests/test_methods_and_attributes.py +++ b/tests/test_methods_and_attributes.py @@ -229,12 +229,24 @@ def test_metaclass_override(): def test_abc_meta_incompatibility(): # Mostly to clearly expose the behavior. - with pytest.raises(TypeError) as exc_info: + with pytest.raises(TypeError, match="metaclass conflict"): class ExampleMandAABC(m.ExampleMandA, metaclass=abc.ABCMeta): pass - assert "metaclass conflict" in str(exc_info.value) + +def test_abc_abc_1st_incompatibility(): # Mostly to clearly expose the behavior. + with pytest.raises(TypeError, match="metaclass conflict"): + + class ABCExampleMandA(abc.ABC, m.ExampleMandA): + pass + + +def test_abc_abc_2nd_incompatibility(): # Mostly to clearly expose the behavior. + with pytest.raises(TypeError, match="metaclass conflict"): + + class ExampleMandAABC(m.ExampleMandA, abc.ABC): + pass def test_abc_meta_compatibility(): @@ -244,6 +256,20 @@ class MetaclassOverrideABC(m.MetaclassOverride, metaclass=abc.ABCMeta): assert type(MetaclassOverrideABC).__name__ == "ABCMeta" +def test_abc_abc_1st_compatibility(): + class ABCMetaclassOverride(abc.ABC, m.MetaclassOverride): + pass + + assert type(ABCMetaclassOverride).__name__ == "ABCMeta" + + +def test_abc_abc_2nd_compatibility(): + class MetaclassOverrideABC(m.MetaclassOverride, abc.ABC): + pass + + assert type(MetaclassOverrideABC).__name__ == "ABCMeta" + + def test_no_mixed_overloads(): from pybind11_tests import detailed_error_messages_enabled