| # Test the module type | 
 | import unittest | 
 | from test.test_support import verbose, run_unittest | 
 |  | 
 | import sys | 
 | ModuleType = type(sys) | 
 |  | 
 | class ModuleTests(unittest.TestCase): | 
 |     def test_uninitialized(self): | 
 |         # An uninitialized module has no __dict__ or __name__, | 
 |         # and __doc__ is None | 
 |         foo = ModuleType.__new__(ModuleType) | 
 |         self.failUnless(foo.__dict__ is None) | 
 |         try: | 
 |             s = foo.__name__ | 
 |             self.fail("__name__ = %s" % repr(s)) | 
 |         except AttributeError: | 
 |             pass | 
 |         self.assertEqual(foo.__doc__, ModuleType.__doc__) | 
 |  | 
 |     def test_no_docstring(self): | 
 |         # Regularly initialized module, no docstring | 
 |         foo = ModuleType("foo") | 
 |         self.assertEqual(foo.__name__, "foo") | 
 |         self.assertEqual(foo.__doc__, None) | 
 |         self.assertEqual(foo.__dict__, {"__name__": "foo", "__doc__": None}) | 
 |  | 
 |     def test_ascii_docstring(self): | 
 |         # ASCII docstring | 
 |         foo = ModuleType("foo", "foodoc") | 
 |         self.assertEqual(foo.__name__, "foo") | 
 |         self.assertEqual(foo.__doc__, "foodoc") | 
 |         self.assertEqual(foo.__dict__, | 
 |                          {"__name__": "foo", "__doc__": "foodoc"}) | 
 |  | 
 |     def test_unicode_docstring(self): | 
 |         # Unicode docstring | 
 |         foo = ModuleType("foo", "foodoc\u1234") | 
 |         self.assertEqual(foo.__name__, "foo") | 
 |         self.assertEqual(foo.__doc__, "foodoc\u1234") | 
 |         self.assertEqual(foo.__dict__, | 
 |                          {"__name__": "foo", "__doc__": "foodoc\u1234"}) | 
 |  | 
 |     def test_reinit(self): | 
 |         # Reinitialization should not replace the __dict__ | 
 |         foo = ModuleType("foo", "foodoc\u1234") | 
 |         foo.bar = 42 | 
 |         d = foo.__dict__ | 
 |         foo.__init__("foo", "foodoc") | 
 |         self.assertEqual(foo.__name__, "foo") | 
 |         self.assertEqual(foo.__doc__, "foodoc") | 
 |         self.assertEqual(foo.bar, 42) | 
 |         self.assertEqual(foo.__dict__, | 
 |               {"__name__": "foo", "__doc__": "foodoc", "bar": 42}) | 
 |         self.failUnless(foo.__dict__ is d) | 
 |  | 
 | def test_main(): | 
 |     run_unittest(ModuleTests) | 
 |  | 
 | if __name__ == '__main__': | 
 |     test_main() |