Changeset 391 for python/trunk/Lib/test/test_site.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_site.py
r2 r391 6 6 """ 7 7 import unittest 8 from test.test_support import TestSkipped, run_unittest, TESTFN, EnvironmentVarGuard 8 from test.test_support import run_unittest, TESTFN, EnvironmentVarGuard 9 from test.test_support import captured_output 9 10 import __builtin__ 10 11 import os 11 12 import sys 13 import re 12 14 import encodings 13 15 import subprocess 16 import sysconfig 17 from copy import copy 18 14 19 # Need to make sure to not import 'site' if someone specified ``-S`` at the 15 20 # command-line. Detect this by just making sure 'site' has not been imported … … 18 23 import site 19 24 else: 20 raise TestSkipped("importation of site.py suppressed")21 22 if not os.path.isdir(site.USER_SITE):25 raise unittest.SkipTest("importation of site.py suppressed") 26 27 if site.ENABLE_USER_SITE and not os.path.isdir(site.USER_SITE): 23 28 # need to add user site directory for tests 24 29 os.makedirs(site.USER_SITE) … … 36 41 """Save a copy of sys.path""" 37 42 self.sys_path = sys.path[:] 43 self.old_base = site.USER_BASE 44 self.old_site = site.USER_SITE 45 self.old_prefixes = site.PREFIXES 46 self.old_vars = copy(sysconfig._CONFIG_VARS) 38 47 39 48 def tearDown(self): 40 49 """Restore sys.path""" 41 sys.path = self.sys_path 50 sys.path[:] = self.sys_path 51 site.USER_BASE = self.old_base 52 site.USER_SITE = self.old_site 53 site.PREFIXES = self.old_prefixes 54 sysconfig._CONFIG_VARS = self.old_vars 42 55 43 56 def test_makepath(self): … … 48 61 original_dir = os.path.join(*path_parts) 49 62 abs_dir, norm_dir = site.makepath(*path_parts) 50 self. failUnlessEqual(os.path.abspath(original_dir), abs_dir)63 self.assertEqual(os.path.abspath(original_dir), abs_dir) 51 64 if original_dir == os.path.normcase(original_dir): 52 self. failUnlessEqual(abs_dir, norm_dir)65 self.assertEqual(abs_dir, norm_dir) 53 66 else: 54 self. failUnlessEqual(os.path.normcase(abs_dir), norm_dir)67 self.assertEqual(os.path.normcase(abs_dir), norm_dir) 55 68 56 69 def test_init_pathinfo(self): … … 58 71 for entry in [site.makepath(path)[1] for path in sys.path 59 72 if path and os.path.isdir(path)]: 60 self. failUnless(entry indir_set,61 62 73 self.assertIn(entry, dir_set, 74 "%s from sys.path not found in set returned " 75 "by _init_pathinfo(): %s" % (entry, dir_set)) 63 76 64 77 def pth_file_tests(self, pth_file): 65 78 """Contain common code for testing results of reading a .pth file""" 66 self. failUnless(pth_file.imported insys.modules,67 "%s not in sys.path" % pth_file.imported)68 self. failUnless(site.makepath(pth_file.good_dir_path)[0] insys.path)69 self. failUnless(notos.path.exists(pth_file.bad_dir_path))79 self.assertIn(pth_file.imported, sys.modules, 80 "%s not in sys.modules" % pth_file.imported) 81 self.assertIn(site.makepath(pth_file.good_dir_path)[0], sys.path) 82 self.assertFalse(os.path.exists(pth_file.bad_dir_path)) 70 83 71 84 def test_addpackage(self): … … 84 97 pth_file.cleanup() 85 98 99 def make_pth(self, contents, pth_dir='.', pth_name=TESTFN): 100 # Create a .pth file and return its (abspath, basename). 101 pth_dir = os.path.abspath(pth_dir) 102 pth_basename = pth_name + '.pth' 103 pth_fn = os.path.join(pth_dir, pth_basename) 104 pth_file = open(pth_fn, 'w') 105 self.addCleanup(lambda: os.remove(pth_fn)) 106 pth_file.write(contents) 107 pth_file.close() 108 return pth_dir, pth_basename 109 110 def test_addpackage_import_bad_syntax(self): 111 # Issue 10642 112 pth_dir, pth_fn = self.make_pth("import bad)syntax\n") 113 with captured_output("stderr") as err_out: 114 site.addpackage(pth_dir, pth_fn, set()) 115 self.assertRegexpMatches(err_out.getvalue(), "line 1") 116 self.assertRegexpMatches(err_out.getvalue(), 117 re.escape(os.path.join(pth_dir, pth_fn))) 118 # XXX: the previous two should be independent checks so that the 119 # order doesn't matter. The next three could be a single check 120 # but my regex foo isn't good enough to write it. 121 self.assertRegexpMatches(err_out.getvalue(), 'Traceback') 122 self.assertRegexpMatches(err_out.getvalue(), r'import bad\)syntax') 123 self.assertRegexpMatches(err_out.getvalue(), 'SyntaxError') 124 125 def test_addpackage_import_bad_exec(self): 126 # Issue 10642 127 pth_dir, pth_fn = self.make_pth("randompath\nimport nosuchmodule\n") 128 with captured_output("stderr") as err_out: 129 site.addpackage(pth_dir, pth_fn, set()) 130 self.assertRegexpMatches(err_out.getvalue(), "line 2") 131 self.assertRegexpMatches(err_out.getvalue(), 132 re.escape(os.path.join(pth_dir, pth_fn))) 133 # XXX: ditto previous XXX comment. 134 self.assertRegexpMatches(err_out.getvalue(), 'Traceback') 135 self.assertRegexpMatches(err_out.getvalue(), 'ImportError') 136 137 @unittest.skipIf(sys.platform == "win32", "Windows does not raise an " 138 "error for file paths containing null characters") 139 def test_addpackage_import_bad_pth_file(self): 140 # Issue 5258 141 pth_dir, pth_fn = self.make_pth("abc\x00def\n") 142 with captured_output("stderr") as err_out: 143 site.addpackage(pth_dir, pth_fn, set()) 144 self.assertRegexpMatches(err_out.getvalue(), "line 1") 145 self.assertRegexpMatches(err_out.getvalue(), 146 re.escape(os.path.join(pth_dir, pth_fn))) 147 # XXX: ditto previous XXX comment. 148 self.assertRegexpMatches(err_out.getvalue(), 'Traceback') 149 self.assertRegexpMatches(err_out.getvalue(), 'TypeError') 150 86 151 def test_addsitedir(self): 87 152 # Same tests for test_addpackage since addsitedir() essentially just … … 97 162 pth_file.cleanup() 98 163 164 @unittest.skipUnless(site.ENABLE_USER_SITE, "requires access to PEP 370 " 165 "user-site (site.ENABLE_USER_SITE)") 99 166 def test_s_option(self): 100 167 usersite = site.USER_SITE 101 self.assert_(usersite in sys.path) 102 168 self.assertIn(usersite, sys.path) 169 170 env = os.environ.copy() 103 171 rc = subprocess.call([sys.executable, '-c', 104 'import sys; sys.exit(%r in sys.path)' % usersite]) 105 self.assertEqual(rc, 1) 106 172 'import sys; sys.exit(%r in sys.path)' % usersite], 173 env=env) 174 self.assertEqual(rc, 1, "%r is not in sys.path (sys.exit returned %r)" 175 % (usersite, rc)) 176 177 env = os.environ.copy() 107 178 rc = subprocess.call([sys.executable, '-s', '-c', 108 'import sys; sys.exit(%r in sys.path)' % usersite]) 179 'import sys; sys.exit(%r in sys.path)' % usersite], 180 env=env) 109 181 self.assertEqual(rc, 0) 110 182 … … 123 195 self.assertEqual(rc, 1) 124 196 197 def test_getuserbase(self): 198 site.USER_BASE = None 199 user_base = site.getuserbase() 200 201 # the call sets site.USER_BASE 202 self.assertEqual(site.USER_BASE, user_base) 203 204 # let's set PYTHONUSERBASE and see if it uses it 205 site.USER_BASE = None 206 import sysconfig 207 sysconfig._CONFIG_VARS = None 208 209 with EnvironmentVarGuard() as environ: 210 environ['PYTHONUSERBASE'] = 'xoxo' 211 self.assertTrue(site.getuserbase().startswith('xoxo'), 212 site.getuserbase()) 213 214 def test_getusersitepackages(self): 215 site.USER_SITE = None 216 site.USER_BASE = None 217 user_site = site.getusersitepackages() 218 219 # the call sets USER_BASE *and* USER_SITE 220 self.assertEqual(site.USER_SITE, user_site) 221 self.assertTrue(user_site.startswith(site.USER_BASE), user_site) 222 223 def test_getsitepackages(self): 224 site.PREFIXES = ['xoxo'] 225 dirs = site.getsitepackages() 226 227 if sys.platform in ('os2emx', 'riscos'): 228 self.assertEqual(len(dirs), 1) 229 wanted = os.path.join('xoxo', 'Lib', 'site-packages') 230 self.assertEqual(dirs[0], wanted) 231 elif (sys.platform == "darwin" and 232 sysconfig.get_config_var("PYTHONFRAMEWORK")): 233 # OS X framework builds 234 site.PREFIXES = ['Python.framework'] 235 dirs = site.getsitepackages() 236 self.assertEqual(len(dirs), 3) 237 wanted = os.path.join('/Library', 238 sysconfig.get_config_var("PYTHONFRAMEWORK"), 239 sys.version[:3], 240 'site-packages') 241 self.assertEqual(dirs[2], wanted) 242 elif os.sep == '/': 243 # OS X non-framwework builds, Linux, FreeBSD, etc 244 self.assertEqual(len(dirs), 2) 245 wanted = os.path.join('xoxo', 'lib', 'python' + sys.version[:3], 246 'site-packages') 247 self.assertEqual(dirs[0], wanted) 248 wanted = os.path.join('xoxo', 'lib', 'site-python') 249 self.assertEqual(dirs[1], wanted) 250 else: 251 # other platforms 252 self.assertEqual(len(dirs), 2) 253 self.assertEqual(dirs[0], 'xoxo') 254 wanted = os.path.join('xoxo', 'lib', 'site-packages') 255 self.assertEqual(dirs[1], wanted) 125 256 126 257 class PthFile(object): … … 188 319 def tearDown(self): 189 320 """Restore sys.path""" 190 sys.path = self.sys_path321 sys.path[:] = self.sys_path 191 322 192 323 def test_abs__file__(self): … … 197 328 for module in (sys, os, __builtin__): 198 329 try: 199 self. failUnless(os.path.isabs(module.__file__), `module`)330 self.assertTrue(os.path.isabs(module.__file__), repr(module)) 200 331 except AttributeError: 201 332 continue … … 210 341 seen_paths = set() 211 342 for path in sys.path: 212 self. failUnless(path not inseen_paths)343 self.assertNotIn(path, seen_paths) 213 344 seen_paths.add(path) 214 345 … … 221 352 def test_setting_quit(self): 222 353 # 'quit' and 'exit' should be injected into __builtin__ 223 self. failUnless(hasattr(__builtin__, "quit"))224 self. failUnless(hasattr(__builtin__, "exit"))354 self.assertTrue(hasattr(__builtin__, "quit")) 355 self.assertTrue(hasattr(__builtin__, "exit")) 225 356 226 357 def test_setting_copyright(self): 227 358 # 'copyright' and 'credits' should be in __builtin__ 228 self. failUnless(hasattr(__builtin__, "copyright"))229 self. failUnless(hasattr(__builtin__, "credits"))359 self.assertTrue(hasattr(__builtin__, "copyright")) 360 self.assertTrue(hasattr(__builtin__, "credits")) 230 361 231 362 def test_setting_help(self): 232 363 # 'help' should be set in __builtin__ 233 self. failUnless(hasattr(__builtin__, "help"))364 self.assertTrue(hasattr(__builtin__, "help")) 234 365 235 366 def test_aliasing_mbcs(self): … … 245 376 def test_setdefaultencoding_removed(self): 246 377 # Make sure sys.setdefaultencoding is gone 247 self. failUnless(not hasattr(sys, "setdefaultencoding"))378 self.assertTrue(not hasattr(sys, "setdefaultencoding")) 248 379 249 380 def test_sitecustomize_executed(self): 250 381 # If sitecustomize is available, it should have been imported. 251 if not sys.modules.has_key("sitecustomize"):382 if "sitecustomize" not in sys.modules: 252 383 try: 253 384 import sitecustomize
Note:
See TracChangeset
for help on using the changeset viewer.