| 
									
										
										
										
											2001-03-21 03:58:16 +00:00
										 |  |  | from test_support import TESTFN, TestFailed | 
					
						
							| 
									
										
										
										
											2000-10-06 18:46:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | import random | 
					
						
							| 
									
										
										
										
											2000-10-24 17:16:32 +00:00
										 |  |  | import sys | 
					
						
							| 
									
										
										
										
											2002-06-14 01:07:39 +00:00
										 |  |  | import py_compile | 
					
						
							| 
									
										
										
										
											2000-10-24 17:16:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-03-21 03:58:16 +00:00
										 |  |  | # Brief digression to test that import is case-sensitive:  if we got this | 
					
						
							|  |  |  | # far, we know for sure that "random" exists. | 
					
						
							|  |  |  | try: | 
					
						
							|  |  |  |     import RAnDoM | 
					
						
							|  |  |  | except ImportError: | 
					
						
							|  |  |  |     pass | 
					
						
							|  |  |  | else: | 
					
						
							|  |  |  |     raise TestFailed("import of RAnDoM should have failed (case mismatch)") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-05-08 15:19:57 +00:00
										 |  |  | # Another brief digression to test the accuracy of manifest float constants. | 
					
						
							|  |  |  | import double_const  # don't blink -- that *was* the test | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-04 08:12:36 +00:00
										 |  |  | def test_with_extension(ext): # ext normally ".py"; perhaps ".pyw" | 
					
						
							|  |  |  |     source = TESTFN + ext | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     pyo = TESTFN + os.extsep + "pyo" | 
					
						
							| 
									
										
										
										
											2001-08-04 08:12:36 +00:00
										 |  |  |     if sys.platform.startswith('java'): | 
					
						
							|  |  |  |         pyc = TESTFN + "$py.class" | 
					
						
							|  |  |  |     else: | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |         pyc = TESTFN + os.extsep + "pyc" | 
					
						
							| 
									
										
										
										
											2000-10-06 18:46:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-04 08:12:36 +00:00
										 |  |  |     f = open(source, "w") | 
					
						
							|  |  |  |     print >> f, "# This tests Python's ability to import a", ext, "file." | 
					
						
							|  |  |  |     a = random.randrange(1000) | 
					
						
							|  |  |  |     b = random.randrange(1000) | 
					
						
							|  |  |  |     print >> f, "a =", a | 
					
						
							|  |  |  |     print >> f, "b =", b | 
					
						
							|  |  |  |     f.close() | 
					
						
							| 
									
										
										
										
											2000-10-06 18:46:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     try: | 
					
						
							| 
									
										
										
										
											2001-08-04 08:12:36 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             mod = __import__(TESTFN) | 
					
						
							|  |  |  |         except ImportError, err: | 
					
						
							|  |  |  |             raise ValueError("import from %s failed: %s" % (ext, err)) | 
					
						
							| 
									
										
										
										
											2000-10-06 18:46:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-04 08:12:36 +00:00
										 |  |  |         if mod.a != a or mod.b != b: | 
					
						
							|  |  |  |             print a, "!=", mod.a | 
					
						
							|  |  |  |             print b, "!=", mod.b | 
					
						
							|  |  |  |             raise ValueError("module loaded (%s) but contents invalid" % mod) | 
					
						
							|  |  |  |     finally: | 
					
						
							|  |  |  |         os.unlink(source) | 
					
						
							| 
									
										
										
										
											2000-10-06 18:46:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     try: | 
					
						
							| 
									
										
										
										
											2001-08-04 08:12:36 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             reload(mod) | 
					
						
							|  |  |  |         except ImportError, err: | 
					
						
							|  |  |  |             raise ValueError("import from .pyc/.pyo failed: %s" % err) | 
					
						
							|  |  |  |     finally: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             os.unlink(pyc) | 
					
						
							|  |  |  |         except os.error: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             os.unlink(pyo) | 
					
						
							|  |  |  |         except os.error: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  |         del sys.modules[TESTFN] | 
					
						
							| 
									
										
										
										
											2000-10-24 17:16:32 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-08-04 08:12:36 +00:00
										 |  |  | sys.path.insert(0, os.curdir) | 
					
						
							|  |  |  | try: | 
					
						
							| 
									
										
										
										
											2001-10-24 20:42:55 +00:00
										 |  |  |     test_with_extension(os.extsep + "py") | 
					
						
							| 
									
										
										
										
											2001-08-04 08:12:36 +00:00
										 |  |  |     if sys.platform.startswith("win"): | 
					
						
							|  |  |  |         for ext in ".PY", ".Py", ".pY", ".pyw", ".PYW", ".pYw": | 
					
						
							|  |  |  |             test_with_extension(ext) | 
					
						
							|  |  |  | finally: | 
					
						
							|  |  |  |     del sys.path[0] | 
					
						
							| 
									
										
										
										
											2002-05-30 17:10:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Verify that the imp module can correctly load and find .py files | 
					
						
							|  |  |  | import imp | 
					
						
							|  |  |  | x = imp.find_module("os") | 
					
						
							|  |  |  | os = imp.load_module("os", *x) | 
					
						
							| 
									
										
										
										
											2002-06-14 01:07:39 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | def test_module_with_large_stack(module): | 
					
						
							|  |  |  |     # create module w/list of 65000 elements to test bug #561858 | 
					
						
							|  |  |  |     filename = module + '.py' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # create a file with a list of 65000 elements | 
					
						
							|  |  |  |     f = open(filename, 'w+') | 
					
						
							|  |  |  |     f.write('d = [\n') | 
					
						
							|  |  |  |     for i in range(65000): | 
					
						
							|  |  |  |         f.write('"",\n') | 
					
						
							|  |  |  |     f.write(']') | 
					
						
							|  |  |  |     f.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-06-15 05:14:05 +00:00
										 |  |  |     # compile & remove .py file, we only need .pyc (or .pyo) | 
					
						
							| 
									
										
										
										
											2002-06-14 01:07:39 +00:00
										 |  |  |     f = open(filename, 'r') | 
					
						
							|  |  |  |     py_compile.compile(filename) | 
					
						
							| 
									
										
										
										
											2002-06-15 05:00:42 +00:00
										 |  |  |     f.close() | 
					
						
							| 
									
										
										
										
											2002-06-14 01:07:39 +00:00
										 |  |  |     os.unlink(filename) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # need to be able to load from current dir | 
					
						
							|  |  |  |     sys.path.append('') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # this used to crash | 
					
						
							|  |  |  |     exec 'import ' + module | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # cleanup | 
					
						
							|  |  |  |     del sys.path[-1] | 
					
						
							| 
									
										
										
										
											2002-06-15 05:14:05 +00:00
										 |  |  |     for ext in '.pyc', '.pyo': | 
					
						
							|  |  |  |         fname = module + ext | 
					
						
							|  |  |  |         if os.path.exists(fname): | 
					
						
							|  |  |  |             os.unlink(fname) | 
					
						
							| 
									
										
										
										
											2002-06-14 01:07:39 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | test_module_with_large_stack('longlist') |