4from pybind11_tests
import ConstructorStats, UserType
5from pybind11_tests
import class_
as m
10 expected_name =
"UserType"
12 expected_name =
"pybind11_tests.UserType"
13 assert m.obj_class_name(UserType(1)) == expected_name
14 assert m.obj_class_name(UserType) == expected_name
18 assert "pybind11_type" in repr(
type(UserType))
19 assert "UserType" in repr(UserType)
23 with pytest.raises(TypeError)
as excinfo:
25 assert msg(excinfo.value) ==
"m.class_.NoConstructor: No constructor defined!"
27 instance = m.NoConstructor.new_instance()
30 assert cstats.alive() == 1
32 assert cstats.alive() == 0
36 instance = m.NoConstructorNew()
38 assert cstats.alive() == 1
40 assert cstats.alive() == 0
44 assert m.check_type(1) == m.DerivedClass1
45 with pytest.raises(RuntimeError)
as execinfo:
48 assert "pybind11::detail::get_type_info: unable to find type info" in str(
51 assert "Invalid" in str(execinfo.value)
59 assert m.get_type_of(1) == int
60 assert m.get_type_of(m.DerivedClass1()) == m.DerivedClass1
61 assert m.get_type_of(int) == type
65 assert m.get_type_classic(1) == int
66 assert m.get_type_classic(m.DerivedClass1()) == m.DerivedClass1
67 assert m.get_type_classic(int) == type
72 assert m.get_type_of(m.DerivedClass1()) == m.DerivedClass1
76 assert m.as_type(int) == int
78 with pytest.raises(TypeError):
79 assert m.as_type(1) == int
81 with pytest.raises(TypeError):
82 assert m.as_type(m.DerivedClass1()) == m.DerivedClass1
86 assert doc(UserType) ==
"A `py::class_` type for testing"
87 assert UserType.__name__ ==
"UserType"
88 assert UserType.__module__ ==
"pybind11_tests"
89 assert UserType.get_value.__name__ ==
"get_value"
90 assert UserType.get_value.__module__ ==
"pybind11_tests"
93 doc(UserType.get_value)
95 get_value(self: m.UserType) -> int
97 Get value using a method
100 assert doc(UserType.value) ==
"Get/set value using a property"
103 doc(m.NoConstructor.new_instance)
105 new_instance() -> m.class_.NoConstructor
113 """Tests that a properly qualified name is set in __qualname__ and that
114 generated docstrings properly use it and the module name
"""
115 assert m.NestBase.__qualname__ ==
"NestBase"
116 assert m.NestBase.Nested.__qualname__ ==
"NestBase.Nested"
119 doc(m.NestBase.__init__)
121 __init__(self: m.class_.NestBase) -> None
127 g(self: m.class_.NestBase, arg0: m.class_.NestBase.Nested) -> None
131 doc(m.NestBase.Nested.__init__)
133 __init__(self: m.class_.NestBase.Nested) -> None
137 doc(m.NestBase.Nested.fn)
139 fn(self: m.class_.NestBase.Nested, arg0: int, arg1: m.class_.NestBase, arg2: m.class_.NestBase.Nested) -> None
143 doc(m.NestBase.Nested.fa)
145 fa(self: m.class_.NestBase.Nested, a: int, b: m.class_.NestBase, c: m.class_.NestBase.Nested) -> None
148 assert m.NestBase.__module__ ==
"pybind11_tests.class_"
149 assert m.NestBase.Nested.__module__ ==
"pybind11_tests.class_"
153 roger = m.Rabbit(
"Rabbit")
154 assert roger.name() +
" is a " + roger.species() ==
"Rabbit is a parrot"
155 assert m.pet_name_species(roger) ==
"Rabbit is a parrot"
157 polly = m.Pet(
"Polly",
"parrot")
158 assert polly.name() +
" is a " + polly.species() ==
"Polly is a parrot"
159 assert m.pet_name_species(polly) ==
"Polly is a parrot"
161 molly = m.Dog(
"Molly")
162 assert molly.name() +
" is a " + molly.species() ==
"Molly is a dog"
163 assert m.pet_name_species(molly) ==
"Molly is a dog"
165 fred = m.Hamster(
"Fred")
166 assert fred.name() +
" is a " + fred.species() ==
"Fred is a rodent"
168 assert m.dog_bark(molly) ==
"Woof!"
170 with pytest.raises(TypeError)
as excinfo:
175 dog_bark(): incompatible function arguments. The following argument types are supported:
176 1. (arg0: m.class_.Dog) -> str
178 Invoked with: <m.class_.Pet object at 0>
182 with pytest.raises(TypeError)
as excinfo:
183 m.Chimera(
"lion",
"goat")
184 assert "No constructor defined!" in str(excinfo.value)
193 with pytest.raises(TypeError)
as exc_info:
195 expected =
"m.class_.Pet.__init__() must be called when overriding __init__"
196 assert msg(exc_info.value) == expected
199 class RabbitHamster(m.Rabbit, m.Hamster):
201 m.Rabbit.__init__(self,
"RabbitHamster")
203 with pytest.raises(TypeError)
as exc_info:
205 expected =
"m.class_.Hamster.__init__() must be called when overriding __init__"
206 assert msg(exc_info.value) == expected
210 assert type(m.return_class_1()).__name__ ==
"DerivedClass1"
211 assert type(m.return_class_2()).__name__ ==
"DerivedClass2"
212 assert type(m.return_none()).__name__ ==
"NoneType"
214 assert type(m.return_class_n(1)).__name__ ==
"DerivedClass1"
215 assert type(m.return_class_n(2)).__name__ ==
"DerivedClass2"
216 assert type(m.return_class_n(0)).__name__ ==
"BaseClass"
217 assert type(m.return_class_n(2)).__name__ ==
"DerivedClass2"
218 assert type(m.return_class_n(2)).__name__ ==
"DerivedClass2"
219 assert type(m.return_class_n(0)).__name__ ==
"BaseClass"
220 assert type(m.return_class_n(1)).__name__ ==
"DerivedClass1"
224 objects = [
tuple(),
dict(), m.Pet(
"Polly",
"parrot")] + [m.Dog(
"Molly")] * 4
225 expected = (
True,
True,
True,
True,
True,
False,
False)
226 assert m.check_instances(objects) == expected
232 with pytest.raises(RuntimeError)
as excinfo:
233 m.mismatched_holder_1()
235 'generic_type: type ".*MismatchDerived1" does not have a non-default '
236 'holder type while its base ".*MismatchBase1" does',
240 with pytest.raises(RuntimeError)
as excinfo:
241 m.mismatched_holder_2()
243 'generic_type: type ".*MismatchDerived2" has a non-default holder type '
244 'while its base ".*MismatchBase2" does not',
250 """#511: problem with inheritance + overwritten def_static"""
252 d1 = m.MyDerived.make2()
253 d2 = m.MyDerived.make()
261 """Ensure the lifetime of temporary objects created for implicit conversions"""
262 assert m.implicitly_convert_argument(
UserType(5)) == 5
263 assert m.implicitly_convert_variable(
UserType(5)) == 5
265 assert "outside a bound function" in m.implicitly_convert_variable_fail(
UserType(5))
269 """Tests that class-specific operator new/delete functions are invoked"""
271 class SubAliased(m.AliasedHasOpNewDelSize):
276 b = m.HasOpNewDelSize()
277 d = m.HasOpNewDelBoth()
286 sz_alias = str(m.AliasedHasOpNewDelSize.size_alias)
287 sz_noalias = str(m.AliasedHasOpNewDelSize.size_noalias)
289 c = m.AliasedHasOpNewDelSize()
291 assert capture == (
"C new " + sz_noalias +
"\n" +
"C new " + sz_alias +
"\n")
314 assert capture == (
"C delete " + sz_noalias +
"\n" +
"C delete " + sz_alias +
"\n")
318 """Expose protected member functions to Python using a helper class"""
324 assert m.read_foo(b.void_foo()) == 42
325 assert m.pointers_equal(b.get_self(), b)
327 class C(m.ProtectedB):
329 m.ProtectedB.__init__(self)
339 """Tests that simple POD classes can be constructed using C++11 brace initialization"""
340 a = m.BraceInitialization(123,
"test")
341 assert a.field1 == 123
342 assert a.field2 ==
"test"
347 b = m.NoBraceInitialization([123, 456])
348 assert b.vec == [123, 456]
351@pytest.mark.xfail("env.PYPY")
353 """Instances must correctly increase/decrease the reference count of their types (#1029)"""
354 from sys
import getrefcount
359 for cls
in m.Dog, PyDog:
360 refcount_1 = getrefcount(cls)
361 molly = [cls(
"Molly")
for _
in range(10)]
362 refcount_2 = getrefcount(cls)
366 refcount_3 = getrefcount(cls)
368 assert refcount_1 == refcount_3
369 assert refcount_2 > refcount_1
374 with pytest.raises(TypeError)
as excinfo:
375 m.BogusImplicitConversion(0)
379 __init__(): incompatible constructor arguments. The following argument types are supported:
380 1. m.class_.BogusImplicitConversion(arg0: m.class_.BogusImplicitConversion)
388 with pytest.raises(TypeError)
as exc_info:
389 m.test_error_after_conversions(
"hello")
390 assert str(exc_info.value).startswith(
391 "Unable to convert function return value to a Python type!"
397 p = m.Aligned().ptr()
402@pytest.mark.xfail("env.PYPY")
404 with pytest.raises(TypeError)
as exc_info:
406 class PyFinalChild(m.IsFinal):
409 assert str(exc_info.value).endswith(
"is not an acceptable base type")
413@pytest.mark.xfail("env.PYPY")
415 with pytest.raises(TypeError)
as exc_info:
417 class PyNonFinalFinalChild(m.IsNonFinalFinal):
420 assert str(exc_info.value).endswith(
"is not an acceptable base type")
425 with pytest.raises(RuntimeError):
426 m.PyPrintDestructor().throw_something()
432 instances = [m.SamePointer()
for _
in range(n)]
438 instances[i] = m.Empty()
446 assert issubclass(m.DerivedWithNested, m.BaseWithNested)
447 assert m.BaseWithNested.Nested != m.DerivedWithNested.Nested
448 assert m.BaseWithNested.Nested.get_name() ==
"BaseWithNested::Nested"
449 assert m.DerivedWithNested.Nested.get_name() ==
"DerivedWithNested::Nested"
455 module_scope = types.ModuleType(
"module_scope")
456 with pytest.raises(RuntimeError)
as exc_info:
457 m.register_duplicate_class_name(module_scope)
459 'generic_type: cannot initialize type "Duplicate": '
460 "an object with that name is already defined"
462 assert str(exc_info.value) == expected
463 with pytest.raises(RuntimeError)
as exc_info:
464 m.register_duplicate_class_type(module_scope)
465 expected =
'generic_type: type "YetAnotherDuplicate" is already registered!'
466 assert str(exc_info.value) == expected
471 with pytest.raises(RuntimeError)
as exc_info:
472 m.register_duplicate_nested_class_name(ClassScope)
474 'generic_type: cannot initialize type "DuplicateNested": '
475 "an object with that name is already defined"
477 assert str(exc_info.value) == expected
478 with pytest.raises(RuntimeError)
as exc_info:
479 m.register_duplicate_nested_class_type(ClassScope)
480 expected =
'generic_type: type "YetAnotherDuplicateNested" is already registered!'
481 assert str(exc_info.value) == expected
487 ==
"This is really only meant to exercise successful compilation."
static ConstructorStats & get(std::type_index type)
A user-defined type which is exported and can be used by any test.
bool hasattr(handle obj, handle name)
bool isinstance(handle obj)
\rst Return true if obj is an instance of T.
def test_implicit_conversion_life_support()
def test_inheritance_init(msg)
def test_exception_rvalue_abort()
def test_reentrant_implicit_conversion_failure(msg)
def test_register_duplicate_class()
def test_brace_initialization()
def test_operator_new_delete(capture)
def test_obj_class_name()
def test_override_static()
def test_non_final_final()
def test_pr4220_tripped_over_this()
def test_instance_new(msg)
def test_type_of_classic()
def test_base_and_derived_nested_scope()
def test_error_after_conversions()
def test_type_of_py_nodelete()
def test_mismatched_holder()
def test_inheritance(msg)
def test_class_refcount()
def test_automatic_upcasting()
def test_bind_protected_functions()
def test_multiple_instances_with_same_pointer(capture)
Annotation for documentation.