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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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()