112391Sjason@lowepower.comfrom pybind11_tests import modules as m
212391Sjason@lowepower.comfrom pybind11_tests.modules import subsubmodule as ms
312391Sjason@lowepower.comfrom pybind11_tests import ConstructorStats
412391Sjason@lowepower.com
511986Sandreas.sandberg@arm.com
611986Sandreas.sandberg@arm.comdef test_nested_modules():
711986Sandreas.sandberg@arm.com    import pybind11_tests
812391Sjason@lowepower.com    assert pybind11_tests.__name__ == "pybind11_tests"
912391Sjason@lowepower.com    assert pybind11_tests.modules.__name__ == "pybind11_tests.modules"
1012391Sjason@lowepower.com    assert pybind11_tests.modules.subsubmodule.__name__ == "pybind11_tests.modules.subsubmodule"
1112391Sjason@lowepower.com    assert m.__name__ == "pybind11_tests.modules"
1212391Sjason@lowepower.com    assert ms.__name__ == "pybind11_tests.modules.subsubmodule"
1311986Sandreas.sandberg@arm.com
1412391Sjason@lowepower.com    assert ms.submodule_func() == "submodule_func()"
1511986Sandreas.sandberg@arm.com
1611986Sandreas.sandberg@arm.com
1711986Sandreas.sandberg@arm.comdef test_reference_internal():
1812391Sjason@lowepower.com    b = ms.B()
1911986Sandreas.sandberg@arm.com    assert str(b.get_a1()) == "A[1]"
2011986Sandreas.sandberg@arm.com    assert str(b.a1) == "A[1]"
2111986Sandreas.sandberg@arm.com    assert str(b.get_a2()) == "A[2]"
2211986Sandreas.sandberg@arm.com    assert str(b.a2) == "A[2]"
2311986Sandreas.sandberg@arm.com
2412391Sjason@lowepower.com    b.a1 = ms.A(42)
2512391Sjason@lowepower.com    b.a2 = ms.A(43)
2611986Sandreas.sandberg@arm.com    assert str(b.get_a1()) == "A[42]"
2711986Sandreas.sandberg@arm.com    assert str(b.a1) == "A[42]"
2811986Sandreas.sandberg@arm.com    assert str(b.get_a2()) == "A[43]"
2911986Sandreas.sandberg@arm.com    assert str(b.a2) == "A[43]"
3011986Sandreas.sandberg@arm.com
3112391Sjason@lowepower.com    astats, bstats = ConstructorStats.get(ms.A), ConstructorStats.get(ms.B)
3211986Sandreas.sandberg@arm.com    assert astats.alive() == 2
3311986Sandreas.sandberg@arm.com    assert bstats.alive() == 1
3411986Sandreas.sandberg@arm.com    del b
3511986Sandreas.sandberg@arm.com    assert astats.alive() == 0
3611986Sandreas.sandberg@arm.com    assert bstats.alive() == 0
3711986Sandreas.sandberg@arm.com    assert astats.values() == ['1', '2', '42', '43']
3811986Sandreas.sandberg@arm.com    assert bstats.values() == []
3911986Sandreas.sandberg@arm.com    assert astats.default_constructions == 0
4011986Sandreas.sandberg@arm.com    assert bstats.default_constructions == 1
4111986Sandreas.sandberg@arm.com    assert astats.copy_constructions == 0
4211986Sandreas.sandberg@arm.com    assert bstats.copy_constructions == 0
4311986Sandreas.sandberg@arm.com    # assert astats.move_constructions >= 0  # Don't invoke any
4411986Sandreas.sandberg@arm.com    # assert bstats.move_constructions >= 0  # Don't invoke any
4511986Sandreas.sandberg@arm.com    assert astats.copy_assignments == 2
4611986Sandreas.sandberg@arm.com    assert bstats.copy_assignments == 0
4711986Sandreas.sandberg@arm.com    assert astats.move_assignments == 0
4811986Sandreas.sandberg@arm.com    assert bstats.move_assignments == 0
4911986Sandreas.sandberg@arm.com
5011986Sandreas.sandberg@arm.com
5111986Sandreas.sandberg@arm.comdef test_importing():
5212391Sjason@lowepower.com    from pybind11_tests.modules import OD
5311986Sandreas.sandberg@arm.com    from collections import OrderedDict
5411986Sandreas.sandberg@arm.com
5511986Sandreas.sandberg@arm.com    assert OD is OrderedDict
5611986Sandreas.sandberg@arm.com    assert str(OD([(1, 'a'), (2, 'b')])) == "OrderedDict([(1, 'a'), (2, 'b')])"
5712037Sandreas.sandberg@arm.com
5812037Sandreas.sandberg@arm.com
5912037Sandreas.sandberg@arm.comdef test_pydoc():
6012037Sandreas.sandberg@arm.com    """Pydoc needs to be able to provide help() for everything inside a pybind11 module"""
6112037Sandreas.sandberg@arm.com    import pybind11_tests
6212037Sandreas.sandberg@arm.com    import pydoc
6312037Sandreas.sandberg@arm.com
6412391Sjason@lowepower.com    assert pybind11_tests.__name__ == "pybind11_tests"
6512391Sjason@lowepower.com    assert pybind11_tests.__doc__ == "pybind11 test module"
6612037Sandreas.sandberg@arm.com    assert pydoc.text.docmodule(pybind11_tests)
6712391Sjason@lowepower.com
6812391Sjason@lowepower.com
6912391Sjason@lowepower.comdef test_duplicate_registration():
7012391Sjason@lowepower.com    """Registering two things with the same name"""
7112391Sjason@lowepower.com
7212391Sjason@lowepower.com    assert m.duplicate_registration() == []
73