diff --git a/tests/test_pytypes.cpp b/tests/test_pytypes.cpp index 761d6cfaa..9380c8bfb 100644 --- a/tests/test_pytypes.cpp +++ b/tests/test_pytypes.cpp @@ -1058,7 +1058,12 @@ TEST_SUBMODULE(pytypes, m) { instance.def(py::init()); instance.attr_with_type_hint("y"); + m.def("attr_with_type_hint_float_x", [](py::handle obj) { + obj.attr_with_type_hint("x"); + }); + m.attr_with_type_hint>("CONST_INT") = 3; + m.attr("defined___cpp_inline_variables") = true; #else m.attr("defined___cpp_inline_variables") = false; diff --git a/tests/test_pytypes.py b/tests/test_pytypes.py index 24c5f2f0e..4c6ee8da9 100644 --- a/tests/test_pytypes.py +++ b/tests/test_pytypes.py @@ -1153,6 +1153,18 @@ def test_class_attribute_types() -> None: assert instance1.y != instance2.y +@pytest.mark.skipif( + not m.defined___cpp_inline_variables, + reason="C++17 feature __cpp_inline_variables not available.", +) +def test_redeclaration_attr_with_type_hint() -> None: + obj = m.Instance() + m.attr_with_type_hint_float_x(obj) + help(obj) + assert get_annotations_helper(obj)["x"] == "float" + with pytest.raises(RuntimeError, match=r'^__annotations__\["x"\] was set already\.$'): + m.attr_with_type_hint_float_x(obj) + @pytest.mark.skipif( not m.defined___cpp_inline_variables, reason="C++17 feature __cpp_inline_variables not available.",