| 
									
										
										
										
											2002-06-04 05:52:47 +00:00
										 |  |  | # Test the module type | 
					
						
							| 
									
										
										
										
											2007-04-06 20:03:11 +00:00
										 |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2008-02-23 17:40:11 +00:00
										 |  |  | from test.test_support import run_unittest | 
					
						
							| 
									
										
										
										
											2002-06-04 05:52:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | import sys | 
					
						
							| 
									
										
										
										
											2007-04-06 20:03:11 +00:00
										 |  |  | 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) | 
					
						
							| 
									
										
										
										
											2009-06-30 22:57:08 +00:00
										 |  |  |         self.assertTrue(foo.__dict__ is None) | 
					
						
							| 
									
										
										
										
											2009-08-15 13:16:38 +00:00
										 |  |  |         self.assertRaises(SystemError, dir, foo) | 
					
						
							| 
									
										
										
										
											2007-04-06 20:03:11 +00:00
										 |  |  |         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", u"foodoc\u1234") | 
					
						
							|  |  |  |         self.assertEqual(foo.__name__, "foo") | 
					
						
							|  |  |  |         self.assertEqual(foo.__doc__, u"foodoc\u1234") | 
					
						
							|  |  |  |         self.assertEqual(foo.__dict__, | 
					
						
							|  |  |  |                          {"__name__": "foo", "__doc__": u"foodoc\u1234"}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_reinit(self): | 
					
						
							|  |  |  |         # Reinitialization should not replace the __dict__ | 
					
						
							|  |  |  |         foo = ModuleType("foo", u"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}) | 
					
						
							| 
									
										
										
										
											2009-06-30 22:57:08 +00:00
										 |  |  |         self.assertTrue(foo.__dict__ is d) | 
					
						
							| 
									
										
										
										
											2007-04-06 20:03:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-15 15:44:46 +00:00
										 |  |  |     def test_dont_clear_dict(self): | 
					
						
							|  |  |  |         # See issue 7140. | 
					
						
							|  |  |  |         def f(): | 
					
						
							|  |  |  |             foo = ModuleType("foo") | 
					
						
							|  |  |  |             foo.bar = 4 | 
					
						
							|  |  |  |             return foo | 
					
						
							|  |  |  |         self.assertEqual(f().__dict__["bar"], 4) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-04-06 20:03:11 +00:00
										 |  |  | def test_main(): | 
					
						
							|  |  |  |     run_unittest(ModuleTests) | 
					
						
							| 
									
										
										
										
											2007-04-25 06:30:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-04-06 20:03:11 +00:00
										 |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     test_main() |