2024-06-22 04:55:00 +00:00
|
|
|
from __future__ import annotations
|
|
|
|
|
2023-02-22 14:18:55 +00:00
|
|
|
import builtins
|
|
|
|
|
2022-05-28 23:40:57 +00:00
|
|
|
import pytest
|
|
|
|
|
|
|
|
import env
|
2021-08-13 16:37:05 +00:00
|
|
|
from pybind11_tests import ConstructorStats
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
from pybind11_tests import modules as m
|
|
|
|
from pybind11_tests.modules import subsubmodule as ms
|
|
|
|
|
2016-08-12 11:50:00 +00:00
|
|
|
|
2016-08-12 20:28:31 +00:00
|
|
|
def test_nested_modules():
|
2016-08-12 11:50:00 +00:00
|
|
|
import pybind11_tests
|
2020-10-16 20:38:13 +00:00
|
|
|
|
2016-08-12 11:50:00 +00:00
|
|
|
assert pybind11_tests.__name__ == "pybind11_tests"
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
assert pybind11_tests.modules.__name__ == "pybind11_tests.modules"
|
2020-10-16 20:38:13 +00:00
|
|
|
assert (
|
|
|
|
pybind11_tests.modules.subsubmodule.__name__
|
|
|
|
== "pybind11_tests.modules.subsubmodule"
|
|
|
|
)
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
assert m.__name__ == "pybind11_tests.modules"
|
|
|
|
assert ms.__name__ == "pybind11_tests.modules.subsubmodule"
|
2016-08-12 11:50:00 +00:00
|
|
|
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
assert ms.submodule_func() == "submodule_func()"
|
2016-08-12 11:50:00 +00:00
|
|
|
|
|
|
|
|
2024-04-09 13:55:16 +00:00
|
|
|
@pytest.mark.skipif("env.GRAALPY", reason="Cannot reliably trigger GC")
|
2016-08-12 11:50:00 +00:00
|
|
|
def test_reference_internal():
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
b = ms.B()
|
2016-08-12 11:50:00 +00:00
|
|
|
assert str(b.get_a1()) == "A[1]"
|
|
|
|
assert str(b.a1) == "A[1]"
|
|
|
|
assert str(b.get_a2()) == "A[2]"
|
|
|
|
assert str(b.a2) == "A[2]"
|
|
|
|
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
b.a1 = ms.A(42)
|
|
|
|
b.a2 = ms.A(43)
|
2016-08-12 11:50:00 +00:00
|
|
|
assert str(b.get_a1()) == "A[42]"
|
|
|
|
assert str(b.a1) == "A[42]"
|
|
|
|
assert str(b.get_a2()) == "A[43]"
|
|
|
|
assert str(b.a2) == "A[43]"
|
|
|
|
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
astats, bstats = ConstructorStats.get(ms.A), ConstructorStats.get(ms.B)
|
2016-08-12 11:50:00 +00:00
|
|
|
assert astats.alive() == 2
|
|
|
|
assert bstats.alive() == 1
|
|
|
|
del b
|
|
|
|
assert astats.alive() == 0
|
|
|
|
assert bstats.alive() == 0
|
2020-10-16 20:38:13 +00:00
|
|
|
assert astats.values() == ["1", "2", "42", "43"]
|
2016-08-12 11:50:00 +00:00
|
|
|
assert bstats.values() == []
|
|
|
|
assert astats.default_constructions == 0
|
|
|
|
assert bstats.default_constructions == 1
|
|
|
|
assert astats.copy_constructions == 0
|
|
|
|
assert bstats.copy_constructions == 0
|
|
|
|
# assert astats.move_constructions >= 0 # Don't invoke any
|
|
|
|
# assert bstats.move_constructions >= 0 # Don't invoke any
|
|
|
|
assert astats.copy_assignments == 2
|
|
|
|
assert bstats.copy_assignments == 0
|
|
|
|
assert astats.move_assignments == 0
|
|
|
|
assert bstats.move_assignments == 0
|
|
|
|
|
|
|
|
|
|
|
|
def test_importing():
|
|
|
|
from collections import OrderedDict
|
|
|
|
|
2021-08-13 16:37:05 +00:00
|
|
|
from pybind11_tests.modules import OD
|
|
|
|
|
2016-08-12 11:50:00 +00:00
|
|
|
assert OD is OrderedDict
|
2017-03-15 14:38:14 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_pydoc():
|
|
|
|
"""Pydoc needs to be able to provide help() for everything inside a pybind11 module"""
|
|
|
|
import pydoc
|
|
|
|
|
2021-08-13 16:37:05 +00:00
|
|
|
import pybind11_tests
|
|
|
|
|
2017-06-08 22:44:49 +00:00
|
|
|
assert pybind11_tests.__name__ == "pybind11_tests"
|
2017-04-23 23:51:44 +00:00
|
|
|
assert pybind11_tests.__doc__ == "pybind11 test module"
|
2017-03-15 14:38:14 +00:00
|
|
|
assert pydoc.text.docmodule(pybind11_tests)
|
2017-06-07 14:52:50 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_duplicate_registration():
|
|
|
|
"""Registering two things with the same name"""
|
|
|
|
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
assert m.duplicate_registration() == []
|
2021-01-24 17:17:28 +00:00
|
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
"""
|
2023-02-22 14:18:55 +00:00
|
|
|
assert all(type(k) == str for k in dir(builtins))
|
2022-05-28 23:40:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
@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"
|
2024-04-09 13:55:16 +00:00
|
|
|
if env.PYPY or env.GRAALPY:
|
2022-05-28 23:40:57 +00:00
|
|
|
# It is not worth the effort finding a trigger for a failure when running with PyPy.
|
2024-04-09 13:55:16 +00:00
|
|
|
pytest.skip("Sufficiently exercised on platforms other than PyPy/GraalPy.")
|
2022-05-28 23:40:57 +00:00
|
|
|
else:
|
|
|
|
# Meant to trigger PyModule_GetName() failure:
|
|
|
|
sm_name_orig = sm.__name__
|
|
|
|
sm.__name__ = malformed_utf8
|
|
|
|
try:
|
2023-01-19 18:48:46 +00:00
|
|
|
# We want to assert that a bad __name__ causes some kind of failure, although we do not want to exercise
|
|
|
|
# the internals of PyModule_GetName(). Currently all supported Python versions raise SystemError. If that
|
|
|
|
# changes in future Python versions, simply add the new expected exception types here.
|
|
|
|
with pytest.raises(SystemError):
|
2022-05-28 23:40:57 +00:00
|
|
|
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)
|