Skip to content

Commit

Permalink
Enable :status_testing_no_cpp_eh_test in all environments, but skip…
Browse files Browse the repository at this point in the history
… all tests if `PYBIND11_HAS_TYPE_CASTER_STD_FUNCTION_SPECIALIZATIONS` is not defined.

This is to support easier testing with different pybind11 versions (master, smart_holder, pybind11k).

PiperOrigin-RevId: 659569208
  • Loading branch information
Ralf W. Grosse-Kunstleve authored and copybara-github committed Aug 5, 2024
1 parent d25d7b3 commit 8ccb4c7
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 3 deletions.
3 changes: 2 additions & 1 deletion pybind11_abseil/status_caster.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,8 @@ struct type_caster<absl::Status> : public type_caster_base<absl::Status> {
}
};

#if defined(PYBIND11_HAS_RETURN_VALUE_POLICY_PACK)
#if defined(PYBIND11_HAS_RETURN_VALUE_POLICY_PACK) && \
defined(PYBIND11_HAS_TYPE_CASTER_STD_FUNCTION_SPECIALIZATIONS)

// This code requires https://github.com/google/pybind11k
// IMPORTANT:
Expand Down
9 changes: 9 additions & 0 deletions pybind11_abseil/tests/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,15 @@ py_library(
deps = [requirement("absl_py")],
)

py_test(
name = "status_testing_no_cpp_eh_test",
srcs = ["status_testing_no_cpp_eh_test.py"],
data = [":status_testing_no_cpp_eh_pybind.so"],
python_version = "PY3",
srcs_version = "PY3",
deps = [":status_testing_no_cpp_eh_test_lib"],
)

pybind_extension(
name = "absl_example",
srcs = ["absl_example.cc"],
Expand Down
2 changes: 2 additions & 0 deletions pybind11_abseil/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -95,3 +95,5 @@ add_test(
${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR}
${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/status_example_test.py
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

# OMITTED (help appreciated): status_testing_no_cpp_eh_test
9 changes: 8 additions & 1 deletion pybind11_abseil/tests/status_testing_no_cpp_eh_pybind.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ namespace status_testing_no_cpp_eh {
PYBIND11_MODULE(status_testing_no_cpp_eh_pybind, m) {
pybind11::google::ImportStatusModule();

m.attr("defined_PYBIND11_HAS_TYPE_CASTER_STD_FUNCTION_SPECIALIZATIONS") =
#if defined(PYBIND11_HAS_TYPE_CASTER_STD_FUNCTION_SPECIALIZATIONS)
true;
#else
false;
#endif

m.def("CallCallbackWithStatusReturn", &CallCallbackWithStatusReturn);
m.def("CallCallbackWithStatusOrIntReturn",
&CallCallbackWithStatusOrIntReturn);
Expand All @@ -24,7 +31,7 @@ PYBIND11_MODULE(status_testing_no_cpp_eh_pybind, m) {
pybind11::return_value_policy::take_ownership);
m.def("GenerateErrorStatusNotOk", &GenerateErrorStatusNotOk);

m.attr("PYBIND11_HAS_RETURN_VALUE_POLICY_PACK") =
m.attr("defined_PYBIND11_HAS_RETURN_VALUE_POLICY_PACK") =
#if defined(PYBIND11_HAS_RETURN_VALUE_POLICY_PACK)
true;
#else
Expand Down
10 changes: 10 additions & 0 deletions pybind11_abseil/tests/status_testing_no_cpp_eh_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,31 @@
from pybind11_abseil.tests import status_testing_no_cpp_eh_pybind
from pybind11_abseil.tests import status_testing_no_cpp_eh_test_lib as test_lib

_HAS_FUN_SPEC = (
status_testing_no_cpp_eh_pybind.defined_PYBIND11_HAS_TYPE_CASTER_STD_FUNCTION_SPECIALIZATIONS
)
_FUN_SPEC_NDEF = (
'PYBIND11_HAS_TYPE_CASTER_STD_FUNCTION_SPECIALIZATIONS is not defined.'
)


class _TestModuleMixin:

def getTestModule(self): # pylint: disable=invalid-name
return status_testing_no_cpp_eh_pybind


@absltest.skipIf(not _HAS_FUN_SPEC, _FUN_SPEC_NDEF)
class StatusReturnTest(test_lib.StatusReturnTest, _TestModuleMixin):
pass


@absltest.skipIf(not _HAS_FUN_SPEC, _FUN_SPEC_NDEF)
class StatusOrReturnTest(test_lib.StatusOrReturnTest, _TestModuleMixin):
pass


@absltest.skipIf(not _HAS_FUN_SPEC, _FUN_SPEC_NDEF)
class StatusOrPyObjectPtrTest(
test_lib.StatusOrPyObjectPtrTest, _TestModuleMixin
):
Expand Down
2 changes: 1 addition & 1 deletion pybind11_abseil/tests/status_testing_no_cpp_eh_test_lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ def cb(arg):

if (
hasattr(self.tm, '__pyclif_codegen_mode__')
or self.tm.PYBIND11_HAS_RETURN_VALUE_POLICY_PACK
or self.tm.defined_PYBIND11_HAS_RETURN_VALUE_POLICY_PACK
):
res = cc_fn(cb, 'exc')
self.assertEqual(res, "!obj.ok()@ValueError: Unknown arg: 'exc'")
Expand Down

0 comments on commit 8ccb4c7

Please sign in to comment.