aboutsummaryrefslogtreecommitdiffstats
path: root/3rdparty/pybind11/tests/test_modules.py
diff options
context:
space:
mode:
authorgatecat <gatecat@ds0.me>2022-09-14 09:28:47 +0200
committergatecat <gatecat@ds0.me>2022-09-14 09:28:47 +0200
commita72f898ff4c4237424c468044a6db9d6953b541e (patch)
tree1c4a543f661dd1b281aecf4660388491702fa8d8 /3rdparty/pybind11/tests/test_modules.py
parentf1349e114f3a16ccd002e8513339e18f5be4d31b (diff)
downloadnextpnr-a72f898ff4c4237424c468044a6db9d6953b541e.tar.gz
nextpnr-a72f898ff4c4237424c468044a6db9d6953b541e.tar.bz2
nextpnr-a72f898ff4c4237424c468044a6db9d6953b541e.zip
3rdparty: Bump vendored pybind11 version for py3.11 support
Signed-off-by: gatecat <gatecat@ds0.me>
Diffstat (limited to '3rdparty/pybind11/tests/test_modules.py')
-rw-r--r--3rdparty/pybind11/tests/test_modules.py52
1 files changed, 48 insertions, 4 deletions
diff --git a/3rdparty/pybind11/tests/test_modules.py b/3rdparty/pybind11/tests/test_modules.py
index 5630ccf9..e11d68e7 100644
--- a/3rdparty/pybind11/tests/test_modules.py
+++ b/3rdparty/pybind11/tests/test_modules.py
@@ -1,7 +1,9 @@
-# -*- coding: utf-8 -*-
+import pytest
+
+import env
+from pybind11_tests import ConstructorStats
from pybind11_tests import modules as m
from pybind11_tests.modules import subsubmodule as ms
-from pybind11_tests import ConstructorStats
def test_nested_modules():
@@ -54,18 +56,20 @@ def test_reference_internal():
def test_importing():
- from pybind11_tests.modules import OD
from collections import OrderedDict
+ from pybind11_tests.modules import OD
+
assert OD is OrderedDict
assert str(OD([(1, "a"), (2, "b")])) == "OrderedDict([(1, 'a'), (2, 'b')])"
def test_pydoc():
"""Pydoc needs to be able to provide help() for everything inside a pybind11 module"""
- import pybind11_tests
import pydoc
+ import pybind11_tests
+
assert pybind11_tests.__name__ == "pybind11_tests"
assert pybind11_tests.__doc__ == "pybind11 test module"
assert pydoc.text.docmodule(pybind11_tests)
@@ -75,3 +79,43 @@ def test_duplicate_registration():
"""Registering two things with the same name"""
assert m.duplicate_registration() == []
+
+
+def test_builtin_key_type():
+ """Test that all the keys in the builtin modules have type str.
+
+ Previous versions of pybind11 would add a unicode key in python 2.
+ """
+ if hasattr(__builtins__, "keys"):
+ keys = __builtins__.keys()
+ else: # this is to make pypy happy since builtins is different there.
+ keys = __builtins__.__dict__.keys()
+
+ assert {type(k) for k in keys} == {str}
+
+
+@pytest.mark.xfail("env.PYPY", reason="PyModule_GetName()")
+def test_def_submodule_failures():
+ sm = m.def_submodule(m, b"ScratchSubModuleName") # Using bytes to show it works.
+ assert sm.__name__ == m.__name__ + "." + "ScratchSubModuleName"
+ malformed_utf8 = b"\x80"
+ if env.PYPY:
+ # It is not worth the effort finding a trigger for a failure when running with PyPy.
+ pytest.skip("Sufficiently exercised on platforms other than PyPy.")
+ else:
+ # Meant to trigger PyModule_GetName() failure:
+ sm_name_orig = sm.__name__
+ sm.__name__ = malformed_utf8
+ try:
+ with pytest.raises(Exception):
+ # Seen with Python 3.9: SystemError: nameless module
+ # But we do not want to exercise the internals of PyModule_GetName(), which could
+ # change in future versions of Python, but a bad __name__ is very likely to cause
+ # some kind of failure indefinitely.
+ m.def_submodule(sm, b"SubSubModuleName")
+ finally:
+ # Clean up to ensure nothing gets upset by a module with an invalid __name__.
+ sm.__name__ = sm_name_orig # Purely precautionary.
+ # Meant to trigger PyImport_AddModule() failure:
+ with pytest.raises(UnicodeDecodeError):
+ m.def_submodule(sm, malformed_utf8)