File Lib/test/test_site.py changed (mode: 100644) (index 342ec9e43d..78d59e290d) |
... |
... |
import urllib.error |
17 |
17 |
import shutil |
import shutil |
18 |
18 |
import subprocess |
import subprocess |
19 |
19 |
import sysconfig |
import sysconfig |
|
20 |
|
import tempfile |
20 |
21 |
from copy import copy |
from copy import copy |
21 |
22 |
|
|
22 |
23 |
# These tests are not particularly useful if Python was invoked with -S. |
# These tests are not particularly useful if Python was invoked with -S. |
|
... |
... |
class StartupImportTests(unittest.TestCase): |
489 |
490 |
'import site, sys; site.enablerlcompleter(); sys.exit(hasattr(sys, "__interactivehook__"))']).wait() |
'import site, sys; site.enablerlcompleter(); sys.exit(hasattr(sys, "__interactivehook__"))']).wait() |
490 |
491 |
self.assertTrue(r, "'__interactivehook__' not added by enablerlcompleter()") |
self.assertTrue(r, "'__interactivehook__' not added by enablerlcompleter()") |
491 |
492 |
|
|
492 |
|
@classmethod |
|
|
493 |
|
|
|
494 |
|
@unittest.skipUnless(sys.platform == 'win32', "only supported on Windows") |
|
495 |
|
class _pthFileTests(unittest.TestCase): |
|
496 |
|
|
493 |
497 |
def _create_underpth_exe(self, lines): |
def _create_underpth_exe(self, lines): |
494 |
|
exe_file = os.path.join(os.getenv('TEMP'), os.path.split(sys.executable)[1]) |
|
|
498 |
|
self.temp_dir = tempfile.TemporaryDirectory() |
|
499 |
|
self.addCleanup(self.temp_dir.cleanup) |
|
500 |
|
exe_file = os.path.join( |
|
501 |
|
self.temp_dir.name, |
|
502 |
|
os.path.split(sys.executable)[1], |
|
503 |
|
) |
495 |
504 |
shutil.copy(sys.executable, exe_file) |
shutil.copy(sys.executable, exe_file) |
496 |
505 |
|
|
497 |
506 |
_pth_file = os.path.splitext(exe_file)[0] + '._pth' |
_pth_file = os.path.splitext(exe_file)[0] + '._pth' |
498 |
|
try: |
|
499 |
|
with open(_pth_file, 'w') as f: |
|
500 |
|
for line in lines: |
|
501 |
|
print(line, file=f) |
|
502 |
|
return exe_file |
|
503 |
|
except: |
|
504 |
|
test.support.unlink(_pth_file) |
|
505 |
|
test.support.unlink(exe_file) |
|
506 |
|
raise |
|
507 |
|
|
|
508 |
|
@classmethod |
|
509 |
|
def _cleanup_underpth_exe(self, exe_file): |
|
510 |
|
_pth_file = os.path.splitext(exe_file)[0] + '._pth' |
|
511 |
|
test.support.unlink(_pth_file) |
|
512 |
|
test.support.unlink(exe_file) |
|
|
507 |
|
with open(_pth_file, 'w') as f: |
|
508 |
|
for line in lines: |
|
509 |
|
print(line, file=f) |
|
510 |
|
return exe_file |
513 |
511 |
|
|
514 |
|
@classmethod |
|
515 |
512 |
def _calc_sys_path_for_underpth_nosite(self, sys_prefix, lines): |
def _calc_sys_path_for_underpth_nosite(self, sys_prefix, lines): |
516 |
513 |
sys_path = [] |
sys_path = [] |
517 |
514 |
for line in lines: |
for line in lines: |
|
... |
... |
class StartupImportTests(unittest.TestCase): |
521 |
518 |
sys_path.append(abs_path) |
sys_path.append(abs_path) |
522 |
519 |
return sys_path |
return sys_path |
523 |
520 |
|
|
524 |
|
@unittest.skipUnless(sys.platform == 'win32', "only supported on Windows") |
|
525 |
521 |
def test_underpth_nosite_file(self): |
def test_underpth_nosite_file(self): |
526 |
522 |
libpath = os.path.dirname(os.path.dirname(encodings.__file__)) |
libpath = os.path.dirname(os.path.dirname(encodings.__file__)) |
527 |
523 |
exe_prefix = os.path.dirname(sys.executable) |
exe_prefix = os.path.dirname(sys.executable) |
|
... |
... |
class StartupImportTests(unittest.TestCase): |
536 |
532 |
os.path.dirname(exe_file), |
os.path.dirname(exe_file), |
537 |
533 |
pth_lines) |
pth_lines) |
538 |
534 |
|
|
539 |
|
try: |
|
540 |
|
env = os.environ.copy() |
|
541 |
|
env['PYTHONPATH'] = 'from-env' |
|
542 |
|
env['PATH'] = '{};{}'.format(exe_prefix, os.getenv('PATH')) |
|
543 |
|
rc = subprocess.call([exe_file, '-c', |
|
544 |
|
'import sys; sys.exit(sys.flags.no_site and ' |
|
545 |
|
'len(sys.path) > 200 and ' |
|
546 |
|
'sys.path == %r)' % sys_path, |
|
547 |
|
], env=env) |
|
548 |
|
finally: |
|
549 |
|
self._cleanup_underpth_exe(exe_file) |
|
|
535 |
|
env = os.environ.copy() |
|
536 |
|
env['PYTHONPATH'] = 'from-env' |
|
537 |
|
env['PATH'] = '{};{}'.format(exe_prefix, os.getenv('PATH')) |
|
538 |
|
rc = subprocess.call([exe_file, '-c', |
|
539 |
|
'import sys; sys.exit(sys.flags.no_site and ' |
|
540 |
|
'len(sys.path) > 200 and ' |
|
541 |
|
'sys.path == %r)' % sys_path, |
|
542 |
|
], env=env) |
550 |
543 |
self.assertTrue(rc, "sys.path is incorrect") |
self.assertTrue(rc, "sys.path is incorrect") |
551 |
544 |
|
|
552 |
|
@unittest.skipUnless(sys.platform == 'win32', "only supported on Windows") |
|
553 |
545 |
def test_underpth_file(self): |
def test_underpth_file(self): |
554 |
546 |
libpath = os.path.dirname(os.path.dirname(encodings.__file__)) |
libpath = os.path.dirname(os.path.dirname(encodings.__file__)) |
555 |
547 |
exe_prefix = os.path.dirname(sys.executable) |
exe_prefix = os.path.dirname(sys.executable) |
|
... |
... |
class StartupImportTests(unittest.TestCase): |
561 |
553 |
'import site' |
'import site' |
562 |
554 |
]) |
]) |
563 |
555 |
sys_prefix = os.path.dirname(exe_file) |
sys_prefix = os.path.dirname(exe_file) |
564 |
|
try: |
|
565 |
|
env = os.environ.copy() |
|
566 |
|
env['PYTHONPATH'] = 'from-env' |
|
567 |
|
env['PATH'] = '{};{}'.format(exe_prefix, os.getenv('PATH')) |
|
568 |
|
rc = subprocess.call([exe_file, '-c', |
|
569 |
|
'import sys; sys.exit(not sys.flags.no_site and ' |
|
570 |
|
'%r in sys.path and %r in sys.path and %r not in sys.path and ' |
|
571 |
|
'all("\\r" not in p and "\\n" not in p for p in sys.path))' % ( |
|
572 |
|
os.path.join(sys_prefix, 'fake-path-name'), |
|
573 |
|
libpath, |
|
574 |
|
os.path.join(sys_prefix, 'from-env'), |
|
575 |
|
)], env=env) |
|
576 |
|
finally: |
|
577 |
|
self._cleanup_underpth_exe(exe_file) |
|
|
556 |
|
env = os.environ.copy() |
|
557 |
|
env['PYTHONPATH'] = 'from-env' |
|
558 |
|
env['PATH'] = '{};{}'.format(exe_prefix, os.getenv('PATH')) |
|
559 |
|
rc = subprocess.call([exe_file, '-c', |
|
560 |
|
'import sys; sys.exit(not sys.flags.no_site and ' |
|
561 |
|
'%r in sys.path and %r in sys.path and %r not in sys.path and ' |
|
562 |
|
'all("\\r" not in p and "\\n" not in p for p in sys.path))' % ( |
|
563 |
|
os.path.join(sys_prefix, 'fake-path-name'), |
|
564 |
|
libpath, |
|
565 |
|
os.path.join(sys_prefix, 'from-env'), |
|
566 |
|
)], env=env) |
578 |
567 |
self.assertTrue(rc, "sys.path is incorrect") |
self.assertTrue(rc, "sys.path is incorrect") |
579 |
568 |
|
|
580 |
569 |
|
|