Commit 8ccb4c7b by Ralf W. Grosse-Kunstleve Committed by Copybara-Service

Enable `:status_testing_no_cpp_eh_test` in all environments, but skip all tests…

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.

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

PiperOrigin-RevId: 659569208
parent d25d7b3f
...@@ -120,7 +120,8 @@ struct type_caster<absl::Status> : public type_caster_base<absl::Status> { ...@@ -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 // This code requires https://github.com/google/pybind11k
// IMPORTANT: // IMPORTANT:
......
...@@ -54,6 +54,15 @@ py_library( ...@@ -54,6 +54,15 @@ py_library(
deps = [requirement("absl_py")], 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( pybind_extension(
name = "absl_example", name = "absl_example",
srcs = ["absl_example.cc"], srcs = ["absl_example.cc"],
......
...@@ -95,3 +95,5 @@ add_test( ...@@ -95,3 +95,5 @@ add_test(
${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR} ${CMAKE_COMMAND} -E env PYTHONPATH=$PYTHONPATH:${CMAKE_BINARY_DIR}
${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/status_example_test.py ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/status_example_test.py
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
# OMITTED (help appreciated): status_testing_no_cpp_eh_test
...@@ -16,6 +16,13 @@ namespace status_testing_no_cpp_eh { ...@@ -16,6 +16,13 @@ namespace status_testing_no_cpp_eh {
PYBIND11_MODULE(status_testing_no_cpp_eh_pybind, m) { PYBIND11_MODULE(status_testing_no_cpp_eh_pybind, m) {
pybind11::google::ImportStatusModule(); 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("CallCallbackWithStatusReturn", &CallCallbackWithStatusReturn);
m.def("CallCallbackWithStatusOrIntReturn", m.def("CallCallbackWithStatusOrIntReturn",
&CallCallbackWithStatusOrIntReturn); &CallCallbackWithStatusOrIntReturn);
...@@ -24,7 +31,7 @@ PYBIND11_MODULE(status_testing_no_cpp_eh_pybind, m) { ...@@ -24,7 +31,7 @@ PYBIND11_MODULE(status_testing_no_cpp_eh_pybind, m) {
pybind11::return_value_policy::take_ownership); pybind11::return_value_policy::take_ownership);
m.def("GenerateErrorStatusNotOk", &GenerateErrorStatusNotOk); 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) #if defined(PYBIND11_HAS_RETURN_VALUE_POLICY_PACK)
true; true;
#else #else
......
...@@ -3,6 +3,13 @@ from absl.testing import absltest ...@@ -3,6 +3,13 @@ from absl.testing import absltest
from pybind11_abseil.tests import status_testing_no_cpp_eh_pybind 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 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: class _TestModuleMixin:
...@@ -10,14 +17,17 @@ class _TestModuleMixin: ...@@ -10,14 +17,17 @@ class _TestModuleMixin:
return status_testing_no_cpp_eh_pybind return status_testing_no_cpp_eh_pybind
@absltest.skipIf(not _HAS_FUN_SPEC, _FUN_SPEC_NDEF)
class StatusReturnTest(test_lib.StatusReturnTest, _TestModuleMixin): class StatusReturnTest(test_lib.StatusReturnTest, _TestModuleMixin):
pass pass
@absltest.skipIf(not _HAS_FUN_SPEC, _FUN_SPEC_NDEF)
class StatusOrReturnTest(test_lib.StatusOrReturnTest, _TestModuleMixin): class StatusOrReturnTest(test_lib.StatusOrReturnTest, _TestModuleMixin):
pass pass
@absltest.skipIf(not _HAS_FUN_SPEC, _FUN_SPEC_NDEF)
class StatusOrPyObjectPtrTest( class StatusOrPyObjectPtrTest(
test_lib.StatusOrPyObjectPtrTest, _TestModuleMixin test_lib.StatusOrPyObjectPtrTest, _TestModuleMixin
): ):
......
...@@ -185,7 +185,7 @@ class StatusOrPyObjectPtrTest(absltest.TestCase): ...@@ -185,7 +185,7 @@ class StatusOrPyObjectPtrTest(absltest.TestCase):
if ( if (
hasattr(self.tm, '__pyclif_codegen_mode__') 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') res = cc_fn(cb, 'exc')
self.assertEqual(res, "!obj.ok()@ValueError: Unknown arg: 'exc'") self.assertEqual(res, "!obj.ok()@ValueError: Unknown arg: 'exc'")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment