Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable :status_testing_no_cpp_eh_test in all environments, but skip all tests if PYBIND11_HAS_TYPE_CASTER_STD_FUNCTION_SPECIALIZATIONS is not defined. #31

Merged
merged 1 commit into from
Aug 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading