Skip to content

Commit 4574aba

Browse files
committed
Additional mock_caster testing for global & unnamed namespaces.
1 parent 9865877 commit 4574aba

File tree

2 files changed

+45
-18
lines changed

2 files changed

+45
-18
lines changed

tests/test_make_caster_adl.cpp

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,39 @@
1-
#include "pybind11_tests.h"
2-
31
// adl = Argument Dependent Lookup
42

5-
namespace adl_mock {
3+
#include "pybind11_tests.h"
4+
5+
namespace have_a_ns {
66
struct type_mock {};
77
struct mock_caster {
88
static int num() { return 101; }
99
};
1010
mock_caster pybind11_select_caster(type_mock *);
11-
} // namespace adl_mock
11+
} // namespace have_a_ns
12+
13+
// namespace global {
14+
struct global_ns_type_mock {};
15+
struct global_ns_mock_caster {
16+
static int num() { return 202; }
17+
};
18+
global_ns_mock_caster pybind11_select_caster(global_ns_type_mock *);
19+
// } // namespace global
20+
21+
namespace {
22+
struct unnamed_ns_type_mock {};
23+
struct unnamed_ns_mock_caster {
24+
static int num() { return 303; }
25+
};
26+
#if defined(__GNUC__)
27+
# pragma GCC diagnostic push
28+
# pragma GCC diagnostic ignored "-Wunneeded-internal-declaration"
29+
#endif
30+
unnamed_ns_mock_caster pybind11_select_caster(unnamed_ns_type_mock *);
31+
#if defined(__GNUC__)
32+
# pragma GCC diagnostic pop
33+
#endif
34+
} // namespace
1235

13-
namespace adl_mrc { // minimal real caster
36+
namespace mrc_ns { // minimal real caster
1437

1538
struct type_mrc {
1639
int value = -9999;
@@ -31,7 +54,7 @@ struct minimal_real_caster {
3154
// NOLINTNEXTLINE(google-explicit-constructor)
3255
operator type_mrc const &() {
3356
static type_mrc obj;
34-
obj.value = 303;
57+
obj.value = 404;
3558
return obj;
3659
}
3760

@@ -43,15 +66,17 @@ struct minimal_real_caster {
4366

4467
minimal_real_caster pybind11_select_caster(type_mrc *);
4568

46-
} // namespace adl_mrc
69+
} // namespace mrc_ns
4770

4871
TEST_SUBMODULE(make_caster_adl, m) {
49-
m.def("num_mock", []() { return py::detail::make_caster<adl_mock::type_mock>::num(); });
72+
m.def("have_a_ns_num", []() { return py::detail::make_caster<have_a_ns::type_mock>::num(); });
73+
m.def("global_ns_num", []() { return py::detail::make_caster<global_ns_type_mock>::num(); });
74+
m.def("unnamed_ns_num", []() { return py::detail::make_caster<unnamed_ns_type_mock>::num(); });
5075

51-
m.def("obj_mrc_return", []() {
52-
adl_mrc::type_mrc obj;
53-
obj.value = 404;
76+
m.def("mrc_return", []() {
77+
mrc_ns::type_mrc obj;
78+
obj.value = 505;
5479
return obj;
5580
});
56-
m.def("obj_mrc_arg", [](adl_mrc::type_mrc const &obj) { return obj.value + 2000; });
81+
m.def("mrc_arg", [](mrc_ns::type_mrc const &obj) { return obj.value + 2000; });
5782
}

tests/test_make_caster_adl.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
from pybind11_tests import make_caster_adl as m
55

66

7-
def test_mock_caster():
8-
assert m.num_mock() == 101
7+
def test_mock_casters():
8+
assert m.have_a_ns_num() == 101
9+
assert m.global_ns_num() == 202
10+
assert m.unnamed_ns_num() == 303
911

1012

1113
def test_minimal_real_caster():
12-
assert m.obj_mrc_return() == 1404
13-
assert m.obj_mrc_arg(u"ignored") == 2303
14+
assert m.mrc_return() == 1505
15+
assert m.mrc_arg(u"ignored") == 2404
1416
with pytest.raises(TypeError) as excinfo:
15-
m.obj_mrc_arg(None)
16-
assert "(arg0: adl_mrc::type_mrc) -> int" in str(excinfo.value)
17+
m.mrc_arg(None)
18+
assert "(arg0: mrc_ns::type_mrc) -> int" in str(excinfo.value)

0 commit comments

Comments
 (0)