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.
71 lines
1.6 KiB
71 lines
1.6 KiB
# Adapted from: |
|
# https://github.com/google/clif/blob/5718e4d0807fd3b6a8187dde140069120b81ecef/clif/testing/python/python_multiple_inheritance_test.py |
|
|
|
import pytest |
|
|
|
from pybind11_tests import python_multiple_inheritance as m |
|
|
|
|
|
class PC(m.CppBase): |
|
pass |
|
|
|
|
|
class PPCC(PC, m.CppDrvd): |
|
pass |
|
|
|
|
|
class PPPCCC(PPCC, m.CppDrvd2): |
|
pass |
|
|
|
|
|
class PC1(m.CppDrvd): |
|
pass |
|
|
|
|
|
class PC2(m.CppDrvd2): |
|
pass |
|
|
|
|
|
class PCD(PC1, PC2): |
|
pass |
|
|
|
|
|
def test_PC(): |
|
d = PC(11) |
|
assert d.get_base_value() == 11 |
|
d.reset_base_value(13) |
|
assert d.get_base_value() == 13 |
|
|
|
|
|
def test_PPCC(): |
|
d = PPCC(11) |
|
assert d.get_drvd_value() == 33 |
|
d.reset_drvd_value(55) |
|
assert d.get_drvd_value() == 55 |
|
|
|
assert d.get_base_value() == 11 |
|
assert d.get_base_value_from_drvd() == 11 |
|
d.reset_base_value(20) |
|
assert d.get_base_value() == 20 |
|
assert d.get_base_value_from_drvd() == 20 |
|
d.reset_base_value_from_drvd(30) |
|
assert d.get_base_value() == 30 |
|
assert d.get_base_value_from_drvd() == 30 |
|
|
|
|
|
def NOtest_PPPCCC(): |
|
# terminate called after throwing an instance of 'pybind11::error_already_set' |
|
# what(): TypeError: bases include diverging derived types: |
|
# base=pybind11_tests.python_multiple_inheritance.CppBase, |
|
# derived1=pybind11_tests.python_multiple_inheritance.CppDrvd, |
|
# derived2=pybind11_tests.python_multiple_inheritance.CppDrvd2 |
|
PPPCCC(11) |
|
|
|
|
|
def test_PCD(): |
|
# This escapes all_type_info_check_for_divergence() because CppBase does not appear in bases. |
|
with pytest.raises( |
|
TypeError, |
|
match=r"CppDrvd2\.__init__\(\) must be called when overriding __init__$", |
|
): |
|
PCD(11)
|
|
|