Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_module.py @ 71285:8bc9dbc61ba6 3.2
Issue #12326: document the recommended idiom for checking sys.platform on Unix systems.
Also, point to the various alternatives.
| author | Antoine Pitrou <solipsis@pitrou.net> |
|---|---|
| date | Sat, 09 Jul 2011 15:54:23 +0200 |
| parents | e2aa3b1d08bc |
| children | 11b09df370e7 c9ae0eb66959 |
| rev | line source |
|---|---|
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 # Test the module type |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
2 import unittest |
|
65231
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
3 from test.support import run_unittest, gc_collect |
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 |
|
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 import sys |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
6 ModuleType = type(sys) |
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
8 class ModuleTests(unittest.TestCase): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
9 def test_uninitialized(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
10 # An uninitialized module has no __dict__ or __name__, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
11 # and __doc__ is None |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
12 foo = ModuleType.__new__(ModuleType) |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
47201
diff
changeset
|
13 self.assertTrue(foo.__dict__ is None) |
|
55647
4c51c4bffb21
Merged revisions 74459 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55593
diff
changeset
|
14 self.assertRaises(SystemError, dir, foo) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
15 try: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
16 s = foo.__name__ |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
17 self.fail("__name__ = %s" % repr(s)) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
18 except AttributeError: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
19 pass |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
20 self.assertEqual(foo.__doc__, ModuleType.__doc__) |
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
22 def test_no_docstring(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
23 # Regularly initialized module, no docstring |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
24 foo = ModuleType("foo") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
25 self.assertEqual(foo.__name__, "foo") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
26 self.assertEqual(foo.__doc__, None) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
27 self.assertEqual(foo.__dict__, {"__name__": "foo", "__doc__": None}) |
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
29 def test_ascii_docstring(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
30 # ASCII docstring |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
31 foo = ModuleType("foo", "foodoc") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
32 self.assertEqual(foo.__name__, "foo") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
33 self.assertEqual(foo.__doc__, "foodoc") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
34 self.assertEqual(foo.__dict__, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
35 {"__name__": "foo", "__doc__": "foodoc"}) |
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
37 def test_unicode_docstring(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
38 # Unicode docstring |
|
41575
beacf40b5960
Rip out all the u"..." literals and calls to unicode().
Guido van Rossum <guido@python.org>
parents:
41554
diff
changeset
|
39 foo = ModuleType("foo", "foodoc\u1234") |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
40 self.assertEqual(foo.__name__, "foo") |
|
41575
beacf40b5960
Rip out all the u"..." literals and calls to unicode().
Guido van Rossum <guido@python.org>
parents:
41554
diff
changeset
|
41 self.assertEqual(foo.__doc__, "foodoc\u1234") |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
42 self.assertEqual(foo.__dict__, |
|
41575
beacf40b5960
Rip out all the u"..." literals and calls to unicode().
Guido van Rossum <guido@python.org>
parents:
41554
diff
changeset
|
43 {"__name__": "foo", "__doc__": "foodoc\u1234"}) |
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
45 def test_reinit(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
46 # Reinitialization should not replace the __dict__ |
|
41575
beacf40b5960
Rip out all the u"..." literals and calls to unicode().
Guido van Rossum <guido@python.org>
parents:
41554
diff
changeset
|
47 foo = ModuleType("foo", "foodoc\u1234") |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
48 foo.bar = 42 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
49 d = foo.__dict__ |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
50 foo.__init__("foo", "foodoc") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
51 self.assertEqual(foo.__name__, "foo") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
52 self.assertEqual(foo.__doc__, "foodoc") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
53 self.assertEqual(foo.bar, 42) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
54 self.assertEqual(foo.__dict__, |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
55 {"__name__": "foo", "__doc__": "foodoc", "bar": 42}) |
|
55593
0bb232078b8c
Merged revisions 73715 via svnmerge from
Georg Brandl <georg@python.org>
parents:
47201
diff
changeset
|
56 self.assertTrue(foo.__dict__ is d) |
|
23652
b40165a4efe9
Surprising fix for SF bug 563060: module can be used as base class.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 |
|
65231
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
58 @unittest.expectedFailure |
|
57210
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
59 def test_dont_clear_dict(self): |
|
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
60 # See issue 7140. |
|
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
61 def f(): |
|
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
62 foo = ModuleType("foo") |
|
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
63 foo.bar = 4 |
|
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
64 return foo |
|
65231
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
65 gc_collect() |
|
57210
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
66 self.assertEqual(f().__dict__["bar"], 4) |
|
a0951f11be3d
Merged revisions 76235 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
55647
diff
changeset
|
67 |
|
65231
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
68 def test_clear_dict_in_ref_cycle(self): |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
69 destroyed = [] |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
70 m = ModuleType("foo") |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
71 m.destroyed = destroyed |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
72 s = """class A: |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
73 def __del__(self): |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
74 destroyed.append(1) |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
75 a = A()""" |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
76 exec(s, m.__dict__) |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
77 del m |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
78 gc_collect() |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
79 self.assertEqual(destroyed, [1]) |
|
e2aa3b1d08bc
prefer clearing global objects to obscure module.__dict__ bugs #10068
Benjamin Peterson <benjamin@python.org>
parents:
57210
diff
changeset
|
80 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
81 def test_main(): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
82 run_unittest(ModuleTests) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
83 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
84 if __name__ == '__main__': |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
85 test_main() |
