mirror of https://github.com/pybind/pybind11
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.1 KiB
68 lines
2.1 KiB
from __future__ import annotations |
|
|
|
import warnings |
|
|
|
import pytest |
|
|
|
import pybind11_tests # noqa: F401 |
|
from pybind11_tests import warnings_ as m |
|
|
|
|
|
@pytest.mark.parametrize( |
|
("expected_category", "expected_message", "expected_value", "module_function"), |
|
[ |
|
(Warning, "This is simple warning", 21, m.warn_and_return_value), |
|
(RuntimeWarning, "This is RuntimeWarning", None, m.warn_with_default_category), |
|
(FutureWarning, "This is FutureWarning", None, m.warn_with_different_category), |
|
], |
|
) |
|
def test_warning_simple( |
|
expected_category, expected_message, expected_value, module_function |
|
): |
|
with pytest.warns(Warning) as excinfo: |
|
value = module_function() |
|
|
|
assert issubclass(excinfo[0].category, expected_category) |
|
assert str(excinfo[0].message) == expected_message |
|
assert value == expected_value |
|
|
|
|
|
def test_warning_wrong_subclass_fail(): |
|
with pytest.raises(Exception) as excinfo: |
|
m.warn_with_invalid_category() |
|
|
|
assert issubclass(excinfo.type, RuntimeError) |
|
assert ( |
|
str(excinfo.value) |
|
== "pybind11::warnings::warn(): cannot raise warning, category must be a subclass of PyExc_Warning!" |
|
) |
|
|
|
|
|
def test_warning_double_register_fail(): |
|
with pytest.raises(Exception) as excinfo: |
|
m.register_duplicate_warning() |
|
|
|
assert issubclass(excinfo.type, RuntimeError) |
|
assert ( |
|
str(excinfo.value) |
|
== 'pybind11::warnings::new_warning_type(): an attribute with name "CustomWarning" exists already.' |
|
) |
|
|
|
|
|
def test_warning_register(): |
|
assert m.CustomWarning is not None |
|
|
|
with pytest.warns(m.CustomWarning) as excinfo: |
|
warnings.warn("This is warning from Python!", m.CustomWarning, stacklevel=1) |
|
|
|
assert issubclass(excinfo[0].category, DeprecationWarning) |
|
assert str(excinfo[0].message) == "This is warning from Python!" |
|
|
|
|
|
def test_warning_custom(): |
|
with pytest.warns(m.CustomWarning) as excinfo: |
|
value = m.warn_with_custom_type() |
|
|
|
assert issubclass(excinfo[0].category, DeprecationWarning) |
|
assert str(excinfo[0].message) == "This is CustomWarning" |
|
assert value == 37
|
|
|