From 4a45b7d37fca532ec616772fc6d5e277a4b5c8f3 Mon Sep 17 00:00:00 2001 From: gentlegiantJGC Date: Mon, 28 Jul 2025 14:15:38 +0100 Subject: [PATCH 1/2] Add __qualname__ tests Add tests for function and method __qualname__ attributes. I believe these tests will fail with the current implementation but they should pass. These are tests for the correct behaviour of #2059 and #5774 --- tests/test_class.cpp | 5 ++++- tests/test_class.py | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/test_class.cpp b/tests/test_class.cpp index 3d567fc1f5..01829ae728 100644 --- a/tests/test_class.cpp +++ b/tests/test_class.cpp @@ -477,6 +477,7 @@ TEST_SUBMODULE(class_, m) { // test_qualname // #1166: nested class docstring doesn't show nested name // Also related: tests that __qualname__ is set properly + m.def("module_func", [](){}); struct NestBase {}; struct Nested {}; py::class_ base(m, "NestBase"); @@ -484,9 +485,11 @@ TEST_SUBMODULE(class_, m) { py::class_(base, "Nested") .def(py::init<>()) .def("fn", [](Nested &, int, NestBase &, Nested &) {}) - .def("fa", [](Nested &, int, NestBase &, Nested &) {}, "a"_a, "b"_a, "c"_a); + .def("fa", [](Nested &, int, NestBase &, Nested &) {}, "a"_a, "b"_a, "c"_a) + .def_static("static_func", [](){}); base.def("g", [](NestBase &, Nested &) {}); base.def("h", []() { return NestBase(); }); + base.def_static("static_func", []() {}); // test_error_after_conversion // The second-pass path through dispatcher() previously didn't diff --git a/tests/test_class.py b/tests/test_class.py index 1e82930361..9f18b14a7d 100644 --- a/tests/test_class.py +++ b/tests/test_class.py @@ -142,6 +142,12 @@ def test_qualname(doc): assert m.NestBase.__qualname__ == "NestBase" assert m.NestBase.Nested.__qualname__ == "NestBase.Nested" + assert m.module_func.__qualname__ == "module_func" + assert m.NestBase.g.__qualname__ == "NestBase.g" + assert m.NestBase.static_func.__qualname__ == "NestBase.static_func" + assert m.NestBase.Nested.fn.__qualname__ == "NestBase.Nested.fn" + assert m.NestBase.Nested.static_func.__qualname__ == "NestBase.Nested.static_func" + assert ( doc(m.NestBase.__init__) == """ From 85fcd6c65c59b7a6ef55b37aaf6513cd15fda4d1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 28 Jul 2025 13:18:55 +0000 Subject: [PATCH 2/2] style: pre-commit fixes --- tests/test_class.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/test_class.cpp b/tests/test_class.cpp index 01829ae728..11e228cb10 100644 --- a/tests/test_class.cpp +++ b/tests/test_class.cpp @@ -477,7 +477,7 @@ TEST_SUBMODULE(class_, m) { // test_qualname // #1166: nested class docstring doesn't show nested name // Also related: tests that __qualname__ is set properly - m.def("module_func", [](){}); + m.def("module_func", []() {}); struct NestBase {}; struct Nested {}; py::class_ base(m, "NestBase"); @@ -485,8 +485,9 @@ TEST_SUBMODULE(class_, m) { py::class_(base, "Nested") .def(py::init<>()) .def("fn", [](Nested &, int, NestBase &, Nested &) {}) - .def("fa", [](Nested &, int, NestBase &, Nested &) {}, "a"_a, "b"_a, "c"_a) - .def_static("static_func", [](){}); + .def( + "fa", [](Nested &, int, NestBase &, Nested &) {}, "a"_a, "b"_a, "c"_a) + .def_static("static_func", []() {}); base.def("g", [](NestBase &, Nested &) {}); base.def("h", []() { return NestBase(); }); base.def_static("static_func", []() {});