blob: 225e954fc42d37f5c6d6b418bc5df690ad72089d [file] [log] [blame]
Guido van Rossumc3a787e2002-06-04 05:52:47 +00001# Test the module type
Guido van Rossumd8faa362007-04-27 19:54:29 +00002import unittest
Benjamin Petersonee8712c2008-05-20 21:35:26 +00003from test.support import run_unittest
Guido van Rossumc3a787e2002-06-04 05:52:47 +00004
5import sys
Guido van Rossumd8faa362007-04-27 19:54:29 +00006ModuleType = type(sys)
Guido van Rossumc3a787e2002-06-04 05:52:47 +00007
Guido van Rossumd8faa362007-04-27 19:54:29 +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 Petersonc9c0f202009-06-30 23:06:06 +000013 self.assertTrue(foo.__dict__ is None)
Guido van Rossumd8faa362007-04-27 19:54:29 +000014 try:
15 s = foo.__name__
16 self.fail("__name__ = %s" % repr(s))
17 except AttributeError:
18 pass
19 self.assertEqual(foo.__doc__, ModuleType.__doc__)
Guido van Rossumc3a787e2002-06-04 05:52:47 +000020
Guido van Rossumd8faa362007-04-27 19:54:29 +000021 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})
Guido van Rossumc3a787e2002-06-04 05:52:47 +000027
Guido van Rossumd8faa362007-04-27 19:54:29 +000028 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"})
Guido van Rossumc3a787e2002-06-04 05:52:47 +000035
Guido van Rossumd8faa362007-04-27 19:54:29 +000036 def test_unicode_docstring(self):
37 # Unicode docstring
Guido van Rossumef87d6e2007-05-02 19:09:54 +000038 foo = ModuleType("foo", "foodoc\u1234")
Guido van Rossumd8faa362007-04-27 19:54:29 +000039 self.assertEqual(foo.__name__, "foo")
Guido van Rossumef87d6e2007-05-02 19:09:54 +000040 self.assertEqual(foo.__doc__, "foodoc\u1234")
Guido van Rossumd8faa362007-04-27 19:54:29 +000041 self.assertEqual(foo.__dict__,
Guido van Rossumef87d6e2007-05-02 19:09:54 +000042 {"__name__": "foo", "__doc__": "foodoc\u1234"})
Guido van Rossumc3a787e2002-06-04 05:52:47 +000043
Guido van Rossumd8faa362007-04-27 19:54:29 +000044 def test_reinit(self):
45 # Reinitialization should not replace the __dict__
Guido van Rossumef87d6e2007-05-02 19:09:54 +000046 foo = ModuleType("foo", "foodoc\u1234")
Guido van Rossumd8faa362007-04-27 19:54:29 +000047 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})
Benjamin Petersonc9c0f202009-06-30 23:06:06 +000055 self.assertTrue(foo.__dict__ is d)
Guido van Rossumc3a787e2002-06-04 05:52:47 +000056
Guido van Rossumd8faa362007-04-27 19:54:29 +000057def test_main():
58 run_unittest(ModuleTests)
59
60if __name__ == '__main__':
61 test_main()