blob: 2552838c2b888809067c6b524301ce972a400892 [file] [log] [blame]
Jason Rhinelander391c7542017-07-25 16:47:36 -04001from pybind11_tests import modules as m
2from pybind11_tests.modules import subsubmodule as ms
3from pybind11_tests import ConstructorStats
4
Dean Moldovana0c1ccf2016-08-12 13:50:00 +02005
Dean Moldovan665e8802016-08-12 22:28:31 +02006def test_nested_modules():
Dean Moldovana0c1ccf2016-08-12 13:50:00 +02007 import pybind11_tests
Dean Moldovana0c1ccf2016-08-12 13:50:00 +02008 assert pybind11_tests.__name__ == "pybind11_tests"
Jason Rhinelander391c7542017-07-25 16:47:36 -04009 assert pybind11_tests.modules.__name__ == "pybind11_tests.modules"
10 assert pybind11_tests.modules.subsubmodule.__name__ == "pybind11_tests.modules.subsubmodule"
11 assert m.__name__ == "pybind11_tests.modules"
12 assert ms.__name__ == "pybind11_tests.modules.subsubmodule"
Dean Moldovana0c1ccf2016-08-12 13:50:00 +020013
Jason Rhinelander391c7542017-07-25 16:47:36 -040014 assert ms.submodule_func() == "submodule_func()"
Dean Moldovana0c1ccf2016-08-12 13:50:00 +020015
16
17def test_reference_internal():
Jason Rhinelander391c7542017-07-25 16:47:36 -040018 b = ms.B()
Dean Moldovana0c1ccf2016-08-12 13:50:00 +020019 assert str(b.get_a1()) == "A[1]"
20 assert str(b.a1) == "A[1]"
21 assert str(b.get_a2()) == "A[2]"
22 assert str(b.a2) == "A[2]"
23
Jason Rhinelander391c7542017-07-25 16:47:36 -040024 b.a1 = ms.A(42)
25 b.a2 = ms.A(43)
Dean Moldovana0c1ccf2016-08-12 13:50:00 +020026 assert str(b.get_a1()) == "A[42]"
27 assert str(b.a1) == "A[42]"
28 assert str(b.get_a2()) == "A[43]"
29 assert str(b.a2) == "A[43]"
30
Jason Rhinelander391c7542017-07-25 16:47:36 -040031 astats, bstats = ConstructorStats.get(ms.A), ConstructorStats.get(ms.B)
Dean Moldovana0c1ccf2016-08-12 13:50:00 +020032 assert astats.alive() == 2
33 assert bstats.alive() == 1
34 del b
35 assert astats.alive() == 0
36 assert bstats.alive() == 0
37 assert astats.values() == ['1', '2', '42', '43']
38 assert bstats.values() == []
39 assert astats.default_constructions == 0
40 assert bstats.default_constructions == 1
41 assert astats.copy_constructions == 0
42 assert bstats.copy_constructions == 0
43 # assert astats.move_constructions >= 0 # Don't invoke any
44 # assert bstats.move_constructions >= 0 # Don't invoke any
45 assert astats.copy_assignments == 2
46 assert bstats.copy_assignments == 0
47 assert astats.move_assignments == 0
48 assert bstats.move_assignments == 0
49
50
51def test_importing():
Jason Rhinelander391c7542017-07-25 16:47:36 -040052 from pybind11_tests.modules import OD
Dean Moldovana0c1ccf2016-08-12 13:50:00 +020053 from collections import OrderedDict
54
55 assert OD is OrderedDict
56 assert str(OD([(1, 'a'), (2, 'b')])) == "OrderedDict([(1, 'a'), (2, 'b')])"
Dean Moldovan1769ea42017-03-15 15:38:14 +010057
58
59def test_pydoc():
60 """Pydoc needs to be able to provide help() for everything inside a pybind11 module"""
61 import pybind11_tests
62 import pydoc
63
Dean Moldovan83e328f2017-06-09 00:44:49 +020064 assert pybind11_tests.__name__ == "pybind11_tests"
Dean Moldovan443ab592017-04-24 01:51:44 +020065 assert pybind11_tests.__doc__ == "pybind11 test module"
Dean Moldovan1769ea42017-03-15 15:38:14 +010066 assert pydoc.text.docmodule(pybind11_tests)
Dean Moldovanbdfb50f2017-06-07 16:52:50 +020067
68
69def test_duplicate_registration():
70 """Registering two things with the same name"""
Dean Moldovanbdfb50f2017-06-07 16:52:50 +020071
Jason Rhinelander391c7542017-07-25 16:47:36 -040072 assert m.duplicate_registration() == []