blob: 638f55bcfd8cd52b382c0285a03727cf7225437f [file] [log] [blame]
Guido van Rossumc3a787e2002-06-04 05:52:47 +00001# Test the module type
Collin Winter69c955f2007-04-06 20:03:11 +00002import unittest
Christian Heimesc5f05e42008-02-23 17:40:11 +00003from test.test_support import run_unittest
Guido van Rossumc3a787e2002-06-04 05:52:47 +00004
5import sys
Collin Winter69c955f2007-04-06 20:03:11 +00006ModuleType = type(sys)
Guido van Rossumc3a787e2002-06-04 05:52:47 +00007
Collin Winter69c955f2007-04-06 20:03:11 +00008class 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)
Benjamin Peterson5c8da862009-06-30 22:57:08 +000013 self.assertTrue(foo.__dict__ is None)
Benjamin Peterson4c6e8082009-08-15 13:16:38 +000014 self.assertRaises(SystemError, dir, foo)
Collin Winter69c955f2007-04-06 20:03:11 +000015 try:
16 s = foo.__name__
17 self.fail("__name__ = %s" % repr(s))
18 except AttributeError:
19 pass
20 self.assertEqual(foo.__doc__, ModuleType.__doc__)
Guido van Rossumc3a787e2002-06-04 05:52:47 +000021
Collin Winter69c955f2007-04-06 20:03:11 +000022 def test_no_docstring(self):
23 # Regularly initialized module, no docstring
24 foo = ModuleType("foo")
25 self.assertEqual(foo.__name__, "foo")
26 self.assertEqual(foo.__doc__, None)
27 self.assertEqual(foo.__dict__, {"__name__": "foo", "__doc__": None})
Guido van Rossumc3a787e2002-06-04 05:52:47 +000028
Collin Winter69c955f2007-04-06 20:03:11 +000029 def test_ascii_docstring(self):
30 # ASCII docstring
31 foo = ModuleType("foo", "foodoc")
32 self.assertEqual(foo.__name__, "foo")
33 self.assertEqual(foo.__doc__, "foodoc")
34 self.assertEqual(foo.__dict__,
35 {"__name__": "foo", "__doc__": "foodoc"})
Guido van Rossumc3a787e2002-06-04 05:52:47 +000036
Collin Winter69c955f2007-04-06 20:03:11 +000037 def test_unicode_docstring(self):
38 # Unicode docstring
39 foo = ModuleType("foo", u"foodoc\u1234")
40 self.assertEqual(foo.__name__, "foo")
41 self.assertEqual(foo.__doc__, u"foodoc\u1234")
42 self.assertEqual(foo.__dict__,
43 {"__name__": "foo", "__doc__": u"foodoc\u1234"})
Guido van Rossumc3a787e2002-06-04 05:52:47 +000044
Collin Winter69c955f2007-04-06 20:03:11 +000045 def test_reinit(self):
46 # Reinitialization should not replace the __dict__
47 foo = ModuleType("foo", u"foodoc\u1234")
48 foo.bar = 42
49 d = foo.__dict__
50 foo.__init__("foo", "foodoc")
51 self.assertEqual(foo.__name__, "foo")
52 self.assertEqual(foo.__doc__, "foodoc")
53 self.assertEqual(foo.bar, 42)
54 self.assertEqual(foo.__dict__,
55 {"__name__": "foo", "__doc__": "foodoc", "bar": 42})
Benjamin Peterson5c8da862009-06-30 22:57:08 +000056 self.assertTrue(foo.__dict__ is d)
Guido van Rossumc3a787e2002-06-04 05:52:47 +000057
Benjamin Peterson196b0922009-10-15 15:44:46 +000058 def test_dont_clear_dict(self):
59 # See issue 7140.
60 def f():
61 foo = ModuleType("foo")
62 foo.bar = 4
63 return foo
64 self.assertEqual(f().__dict__["bar"], 4)
65
Collin Winter69c955f2007-04-06 20:03:11 +000066def test_main():
67 run_unittest(ModuleTests)
Neal Norwitz0d4c06e2007-04-25 06:30:05 +000068
Collin Winter69c955f2007-04-06 20:03:11 +000069if __name__ == '__main__':
70 test_main()