|
1 # Test the module type |
|
2 import unittest |
|
3 from test.test_support import run_unittest |
|
4 |
|
5 import sys |
|
6 ModuleType = type(sys) |
|
7 |
|
8 class ModuleTests(unittest.TestCase): |
|
9 def test_uninitialized(self): |
|
10 # An uninitialized module has no __dict__ or __name__, |
|
11 # and __doc__ is None |
|
12 foo = ModuleType.__new__(ModuleType) |
|
13 self.failUnless(foo.__dict__ is None) |
|
14 try: |
|
15 s = foo.__name__ |
|
16 self.fail("__name__ = %s" % repr(s)) |
|
17 except AttributeError: |
|
18 pass |
|
19 self.assertEqual(foo.__doc__, ModuleType.__doc__) |
|
20 |
|
21 def test_no_docstring(self): |
|
22 # Regularly initialized module, no docstring |
|
23 foo = ModuleType("foo") |
|
24 self.assertEqual(foo.__name__, "foo") |
|
25 self.assertEqual(foo.__doc__, None) |
|
26 self.assertEqual(foo.__dict__, {"__name__": "foo", "__doc__": None}) |
|
27 |
|
28 def test_ascii_docstring(self): |
|
29 # ASCII docstring |
|
30 foo = ModuleType("foo", "foodoc") |
|
31 self.assertEqual(foo.__name__, "foo") |
|
32 self.assertEqual(foo.__doc__, "foodoc") |
|
33 self.assertEqual(foo.__dict__, |
|
34 {"__name__": "foo", "__doc__": "foodoc"}) |
|
35 |
|
36 def test_unicode_docstring(self): |
|
37 # Unicode docstring |
|
38 foo = ModuleType("foo", u"foodoc\u1234") |
|
39 self.assertEqual(foo.__name__, "foo") |
|
40 self.assertEqual(foo.__doc__, u"foodoc\u1234") |
|
41 self.assertEqual(foo.__dict__, |
|
42 {"__name__": "foo", "__doc__": u"foodoc\u1234"}) |
|
43 |
|
44 def test_reinit(self): |
|
45 # Reinitialization should not replace the __dict__ |
|
46 foo = ModuleType("foo", u"foodoc\u1234") |
|
47 foo.bar = 42 |
|
48 d = foo.__dict__ |
|
49 foo.__init__("foo", "foodoc") |
|
50 self.assertEqual(foo.__name__, "foo") |
|
51 self.assertEqual(foo.__doc__, "foodoc") |
|
52 self.assertEqual(foo.bar, 42) |
|
53 self.assertEqual(foo.__dict__, |
|
54 {"__name__": "foo", "__doc__": "foodoc", "bar": 42}) |
|
55 self.failUnless(foo.__dict__ is d) |
|
56 |
|
57 def test_main(): |
|
58 run_unittest(ModuleTests) |
|
59 |
|
60 if __name__ == '__main__': |
|
61 test_main() |