blob: 7e2100524506b13a5d3189a3fabb9dead628c2a5 [file] [log] [blame]
Henry Schreinerd8c7ee02020-07-20 13:35:21 -04001# -*- coding: utf-8 -*-
Jason Rhinelander391c7542017-07-25 16:47:36 -04002from pybind11_tests import modules as m
3from pybind11_tests.modules import subsubmodule as ms
4from pybind11_tests import ConstructorStats
5
Dean Moldovana0c1ccf2016-08-12 13:50:00 +02006
Dean Moldovan665e8802016-08-12 22:28:31 +02007def test_nested_modules():
Dean Moldovana0c1ccf2016-08-12 13:50:00 +02008 import pybind11_tests
Dean Moldovana0c1ccf2016-08-12 13:50:00 +02009 assert pybind11_tests.__name__ == "pybind11_tests"
Jason Rhinelander391c7542017-07-25 16:47:36 -040010 assert pybind11_tests.modules.__name__ == "pybind11_tests.modules"
11 assert pybind11_tests.modules.subsubmodule.__name__ == "pybind11_tests.modules.subsubmodule"
12 assert m.__name__ == "pybind11_tests.modules"
13 assert ms.__name__ == "pybind11_tests.modules.subsubmodule"
Dean Moldovana0c1ccf2016-08-12 13:50:00 +020014
Jason Rhinelander391c7542017-07-25 16:47:36 -040015 assert ms.submodule_func() == "submodule_func()"
Dean Moldovana0c1ccf2016-08-12 13:50:00 +020016
17
18def test_reference_internal():
Jason Rhinelander391c7542017-07-25 16:47:36 -040019 b = ms.B()
Dean Moldovana0c1ccf2016-08-12 13:50:00 +020020 assert str(b.get_a1()) == "A[1]"
21 assert str(b.a1) == "A[1]"
22 assert str(b.get_a2()) == "A[2]"
23 assert str(b.a2) == "A[2]"
24
Jason Rhinelander391c7542017-07-25 16:47:36 -040025 b.a1 = ms.A(42)
26 b.a2 = ms.A(43)
Dean Moldovana0c1ccf2016-08-12 13:50:00 +020027 assert str(b.get_a1()) == "A[42]"
28 assert str(b.a1) == "A[42]"
29 assert str(b.get_a2()) == "A[43]"
30 assert str(b.a2) == "A[43]"
31
Jason Rhinelander391c7542017-07-25 16:47:36 -040032 astats, bstats = ConstructorStats.get(ms.A), ConstructorStats.get(ms.B)
Dean Moldovana0c1ccf2016-08-12 13:50:00 +020033 assert astats.alive() == 2
34 assert bstats.alive() == 1
35 del b
36 assert astats.alive() == 0
37 assert bstats.alive() == 0
38 assert astats.values() == ['1', '2', '42', '43']
39 assert bstats.values() == []
40 assert astats.default_constructions == 0
41 assert bstats.default_constructions == 1
42 assert astats.copy_constructions == 0
43 assert bstats.copy_constructions == 0
44 # assert astats.move_constructions >= 0 # Don't invoke any
45 # assert bstats.move_constructions >= 0 # Don't invoke any
46 assert astats.copy_assignments == 2
47 assert bstats.copy_assignments == 0
48 assert astats.move_assignments == 0
49 assert bstats.move_assignments == 0
50
51
52def test_importing():
Jason Rhinelander391c7542017-07-25 16:47:36 -040053 from pybind11_tests.modules import OD
Dean Moldovana0c1ccf2016-08-12 13:50:00 +020054 from collections import OrderedDict
55
56 assert OD is OrderedDict
57 assert str(OD([(1, 'a'), (2, 'b')])) == "OrderedDict([(1, 'a'), (2, 'b')])"
Dean Moldovan1769ea42017-03-15 15:38:14 +010058
59
60def test_pydoc():
61 """Pydoc needs to be able to provide help() for everything inside a pybind11 module"""
62 import pybind11_tests
63 import pydoc
64
Dean Moldovan83e328f2017-06-09 00:44:49 +020065 assert pybind11_tests.__name__ == "pybind11_tests"
Dean Moldovan443ab592017-04-24 01:51:44 +020066 assert pybind11_tests.__doc__ == "pybind11 test module"
Dean Moldovan1769ea42017-03-15 15:38:14 +010067 assert pydoc.text.docmodule(pybind11_tests)
Dean Moldovanbdfb50f2017-06-07 16:52:50 +020068
69
70def test_duplicate_registration():
71 """Registering two things with the same name"""
Dean Moldovanbdfb50f2017-06-07 16:52:50 +020072
Jason Rhinelander391c7542017-07-25 16:47:36 -040073 assert m.duplicate_registration() == []