Changeset 391 for python/trunk/Lib/test/test_runpy.py
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Lib/test/test_runpy.py
r2 r391 4 4 import os.path 5 5 import sys 6 import re 6 7 import tempfile 7 8 from test.test_support import verbose, run_unittest, forget 8 from runpy import _run_code, _run_module_code, run_module 9 9 from test.script_helper import (temp_dir, make_script, compile_script, 10 make_pkg, make_zip_script, make_zip_pkg) 11 12 13 from runpy import _run_code, _run_module_code, run_module, run_path 10 14 # Note: This module can't safely test _run_module_as_main as it 11 15 # runs its tests in the current process, which would mess with the … … 16 20 17 21 class RunModuleCodeTest(unittest.TestCase): 22 """Unit tests for runpy._run_code and runpy._run_module_code""" 18 23 19 24 expected_result = ["Top level assignment", "Lower level reference"] … … 38 43 saved_argv0 = sys.argv[0] 39 44 d = _run_code(self.test_source, {}) 40 self. failUnless(d["result"] ==self.expected_result)41 self. failUnless(d["__name__"] isNone)42 self. failUnless(d["__file__"] isNone)43 self. failUnless(d["__loader__"] isNone)44 self. failUnless(d["__package__"] isNone)45 self. failUnless(d["run_argv0"] issaved_argv0)46 self. failUnless("run_name" not ind)47 self. failUnless(sys.argv[0] issaved_argv0)45 self.assertEqual(d["result"], self.expected_result) 46 self.assertIs(d["__name__"], None) 47 self.assertIs(d["__file__"], None) 48 self.assertIs(d["__loader__"], None) 49 self.assertIs(d["__package__"], None) 50 self.assertIs(d["run_argv0"], saved_argv0) 51 self.assertNotIn("run_name", d) 52 self.assertIs(sys.argv[0], saved_argv0) 48 53 49 54 def test_run_module_code(self): … … 61 66 loader, 62 67 package) 63 self. failUnless("result" not ind1)64 self. failUnless(d2["initial"] isinitial)65 self. failUnless(d2["result"] ==self.expected_result)66 self. failUnless(d2["nested"]["x"] ==1)67 self. failUnless(d2["__name__"] isname)68 self. failUnless(d2["run_name_in_sys_modules"])69 self. failUnless(d2["module_in_sys_modules"])70 self. failUnless(d2["__file__"] isfile)71 self. failUnless(d2["run_argv0"] isfile)72 self. failUnless(d2["__loader__"] isloader)73 self. failUnless(d2["__package__"] ispackage)74 self. failUnless(sys.argv[0] issaved_argv0)75 self. failUnless(name not insys.modules)68 self.assertNotIn("result", d1) 69 self.assertIs(d2["initial"], initial) 70 self.assertEqual(d2["result"], self.expected_result) 71 self.assertEqual(d2["nested"]["x"], 1) 72 self.assertIs(d2["__name__"], name) 73 self.assertTrue(d2["run_name_in_sys_modules"]) 74 self.assertTrue(d2["module_in_sys_modules"]) 75 self.assertIs(d2["__file__"], file) 76 self.assertIs(d2["run_argv0"], file) 77 self.assertIs(d2["__loader__"], loader) 78 self.assertIs(d2["__package__"], package) 79 self.assertIs(sys.argv[0], saved_argv0) 80 self.assertNotIn(name, sys.modules) 76 81 77 82 78 83 class RunModuleTest(unittest.TestCase): 84 """Unit tests for runpy.run_module""" 79 85 80 86 def expect_import_error(self, mod_name): … … 95 101 self.expect_import_error(".howard") 96 102 self.expect_import_error("..eaten") 97 # Package 98 self.expect_import_error(" logging")103 # Package without __main__.py 104 self.expect_import_error("multiprocessing") 99 105 100 106 def test_library_module(self): … … 108 114 return pkg_fname 109 115 110 def _make_pkg(self, source, depth ):116 def _make_pkg(self, source, depth, mod_base="runpy_test"): 111 117 pkg_name = "__runpy_pkg__" 112 test_fname = "runpy_test"+os.extsep+"py"118 test_fname = mod_base+os.extsep+"py" 113 119 pkg_dir = sub_dir = tempfile.mkdtemp() 114 120 if verbose: print " Package tree in:", sub_dir … … 125 131 mod_file.close() 126 132 if verbose: print " Created:", mod_fname 127 mod_name = (pkg_name+".")*depth + "runpy_test"133 mod_name = (pkg_name+".")*depth + mod_base 128 134 return pkg_dir, mod_fname, mod_name 129 135 … … 160 166 if verbose: print "Running from source:", mod_name 161 167 d1 = run_module(mod_name) # Read from source 162 self. failUnless("x" ind1)163 self. failUnless(d1["x"] == 1)168 self.assertIn("x", d1) 169 self.assertTrue(d1["x"] == 1) 164 170 del d1 # Ensure __loader__ entry doesn't keep file open 165 171 __import__(mod_name) 166 172 os.remove(mod_fname) 167 if verbose: print "Running from compiled:", mod_name 168 d2 = run_module(mod_name) # Read from bytecode 169 self.failUnless("x" in d2) 170 self.failUnless(d2["x"] == 1) 171 del d2 # Ensure __loader__ entry doesn't keep file open 173 if not sys.dont_write_bytecode: 174 if verbose: print "Running from compiled:", mod_name 175 d2 = run_module(mod_name) # Read from bytecode 176 self.assertIn("x", d2) 177 self.assertTrue(d2["x"] == 1) 178 del d2 # Ensure __loader__ entry doesn't keep file open 172 179 finally: 173 180 self._del_pkg(pkg_dir, depth, mod_name) 174 181 if verbose: print "Module executed successfully" 182 183 def _check_package(self, depth): 184 pkg_dir, mod_fname, mod_name = ( 185 self._make_pkg("x=1\n", depth, "__main__")) 186 pkg_name, _, _ = mod_name.rpartition(".") 187 forget(mod_name) 188 try: 189 if verbose: print "Running from source:", pkg_name 190 d1 = run_module(pkg_name) # Read from source 191 self.assertIn("x", d1) 192 self.assertTrue(d1["x"] == 1) 193 del d1 # Ensure __loader__ entry doesn't keep file open 194 __import__(mod_name) 195 os.remove(mod_fname) 196 if not sys.dont_write_bytecode: 197 if verbose: print "Running from compiled:", pkg_name 198 d2 = run_module(pkg_name) # Read from bytecode 199 self.assertIn("x", d2) 200 self.assertTrue(d2["x"] == 1) 201 del d2 # Ensure __loader__ entry doesn't keep file open 202 finally: 203 self._del_pkg(pkg_dir, depth, pkg_name) 204 if verbose: print "Package executed successfully" 175 205 176 206 def _add_relative_modules(self, base_dir, source, depth): … … 212 242 if verbose: print "Running from source:", mod_name 213 243 d1 = run_module(mod_name, run_name=run_name) # Read from source 214 self. failUnless("__package__" ind1)215 self. failUnless(d1["__package__"] == pkg_name)216 self. failUnless("sibling" ind1)217 self. failUnless("nephew" ind1)244 self.assertIn("__package__", d1) 245 self.assertTrue(d1["__package__"] == pkg_name) 246 self.assertIn("sibling", d1) 247 self.assertIn("nephew", d1) 218 248 del d1 # Ensure __loader__ entry doesn't keep file open 219 249 __import__(mod_name) 220 250 os.remove(mod_fname) 221 if verbose: print "Running from compiled:", mod_name 222 d2 = run_module(mod_name, run_name=run_name) # Read from bytecode 223 self.failUnless("__package__" in d2) 224 self.failUnless(d2["__package__"] == pkg_name) 225 self.failUnless("sibling" in d2) 226 self.failUnless("nephew" in d2) 227 del d2 # Ensure __loader__ entry doesn't keep file open 251 if not sys.dont_write_bytecode: 252 if verbose: print "Running from compiled:", mod_name 253 d2 = run_module(mod_name, run_name=run_name) # Read from bytecode 254 self.assertIn("__package__", d2) 255 self.assertTrue(d2["__package__"] == pkg_name) 256 self.assertIn("sibling", d2) 257 self.assertIn("nephew", d2) 258 del d2 # Ensure __loader__ entry doesn't keep file open 228 259 finally: 229 260 self._del_pkg(pkg_dir, depth, mod_name) … … 235 266 self._check_module(depth) 236 267 268 def test_run_package(self): 269 for depth in range(1, 4): 270 if verbose: print "Testing package depth:", depth 271 self._check_package(depth) 272 237 273 def test_explicit_relative_import(self): 238 274 for depth in range(2, 5): … … 246 282 247 283 284 class RunPathTest(unittest.TestCase): 285 """Unit tests for runpy.run_path""" 286 # Based on corresponding tests in test_cmd_line_script 287 288 test_source = """\ 289 # Script may be run with optimisation enabled, so don't rely on assert 290 # statements being executed 291 def assertEqual(lhs, rhs): 292 if lhs != rhs: 293 raise AssertionError('%r != %r' % (lhs, rhs)) 294 def assertIs(lhs, rhs): 295 if lhs is not rhs: 296 raise AssertionError('%r is not %r' % (lhs, rhs)) 297 # Check basic code execution 298 result = ['Top level assignment'] 299 def f(): 300 result.append('Lower level reference') 301 f() 302 assertEqual(result, ['Top level assignment', 'Lower level reference']) 303 # Check the sys module 304 import sys 305 assertIs(globals(), sys.modules[__name__].__dict__) 306 argv0 = sys.argv[0] 307 """ 308 309 def _make_test_script(self, script_dir, script_basename, source=None): 310 if source is None: 311 source = self.test_source 312 return make_script(script_dir, script_basename, source) 313 314 def _check_script(self, script_name, expected_name, expected_file, 315 expected_argv0, expected_package): 316 result = run_path(script_name) 317 self.assertEqual(result["__name__"], expected_name) 318 self.assertEqual(result["__file__"], expected_file) 319 self.assertIn("argv0", result) 320 self.assertEqual(result["argv0"], expected_argv0) 321 self.assertEqual(result["__package__"], expected_package) 322 323 def _check_import_error(self, script_name, msg): 324 msg = re.escape(msg) 325 self.assertRaisesRegexp(ImportError, msg, run_path, script_name) 326 327 def test_basic_script(self): 328 with temp_dir() as script_dir: 329 mod_name = 'script' 330 script_name = self._make_test_script(script_dir, mod_name) 331 self._check_script(script_name, "<run_path>", script_name, 332 script_name, None) 333 334 def test_script_compiled(self): 335 with temp_dir() as script_dir: 336 mod_name = 'script' 337 script_name = self._make_test_script(script_dir, mod_name) 338 compiled_name = compile_script(script_name) 339 os.remove(script_name) 340 self._check_script(compiled_name, "<run_path>", compiled_name, 341 compiled_name, None) 342 343 def test_directory(self): 344 with temp_dir() as script_dir: 345 mod_name = '__main__' 346 script_name = self._make_test_script(script_dir, mod_name) 347 self._check_script(script_dir, "<run_path>", script_name, 348 script_dir, '') 349 350 def test_directory_compiled(self): 351 with temp_dir() as script_dir: 352 mod_name = '__main__' 353 script_name = self._make_test_script(script_dir, mod_name) 354 compiled_name = compile_script(script_name) 355 os.remove(script_name) 356 self._check_script(script_dir, "<run_path>", compiled_name, 357 script_dir, '') 358 359 def test_directory_error(self): 360 with temp_dir() as script_dir: 361 mod_name = 'not_main' 362 script_name = self._make_test_script(script_dir, mod_name) 363 msg = "can't find '__main__' module in %r" % script_dir 364 self._check_import_error(script_dir, msg) 365 366 def test_zipfile(self): 367 with temp_dir() as script_dir: 368 mod_name = '__main__' 369 script_name = self._make_test_script(script_dir, mod_name) 370 zip_name, fname = make_zip_script(script_dir, 'test_zip', script_name) 371 self._check_script(zip_name, "<run_path>", fname, zip_name, '') 372 373 def test_zipfile_compiled(self): 374 with temp_dir() as script_dir: 375 mod_name = '__main__' 376 script_name = self._make_test_script(script_dir, mod_name) 377 compiled_name = compile_script(script_name) 378 zip_name, fname = make_zip_script(script_dir, 'test_zip', compiled_name) 379 self._check_script(zip_name, "<run_path>", fname, zip_name, '') 380 381 def test_zipfile_error(self): 382 with temp_dir() as script_dir: 383 mod_name = 'not_main' 384 script_name = self._make_test_script(script_dir, mod_name) 385 zip_name, fname = make_zip_script(script_dir, 'test_zip', script_name) 386 msg = "can't find '__main__' module in %r" % zip_name 387 self._check_import_error(zip_name, msg) 388 389 def test_main_recursion_error(self): 390 with temp_dir() as script_dir, temp_dir() as dummy_dir: 391 mod_name = '__main__' 392 source = ("import runpy\n" 393 "runpy.run_path(%r)\n") % dummy_dir 394 script_name = self._make_test_script(script_dir, mod_name, source) 395 zip_name, fname = make_zip_script(script_dir, 'test_zip', script_name) 396 msg = "recursion depth exceeded" 397 self.assertRaisesRegexp(RuntimeError, msg, run_path, zip_name) 398 399 400 248 401 def test_main(): 249 run_unittest(RunModuleCodeTest) 250 run_unittest(RunModuleTest) 402 run_unittest(RunModuleCodeTest, RunModuleTest, RunPathTest) 251 403 252 404 if __name__ == "__main__":
Note:
See TracChangeset
for help on using the changeset viewer.