Commit f3bc258b authored by Victor Stinner's avatar Victor Stinner

Issue #8340, test_abs_path() of test_site: encode paths to ASCII with

backslashreplace to avoid locale issues, don't write stderr to a pipe to ease
debug, separate directories by newlines instead of a space.
parent 738446f0
...@@ -268,26 +268,31 @@ class ImportSideEffectTests(unittest.TestCase): ...@@ -268,26 +268,31 @@ class ImportSideEffectTests(unittest.TestCase):
parent = os.path.relpath(os.path.dirname(os.__file__)) parent = os.path.relpath(os.path.dirname(os.__file__))
env = os.environ.copy() env = os.environ.copy()
env['PYTHONPATH'] = parent env['PYTHONPATH'] = parent
command = 'import os; print(os.__file__, os.__cached__)' code = ('import os, sys',
# use ASCII to avoid locale issues with non-ASCII directories
'os_file = os.__file__.encode("ascii", "backslashreplace")',
r'sys.stdout.buffer.write(os_file + b"\n")',
'os_cached = os.__cached__.encode("ascii", "backslashreplace")',
r'sys.stdout.buffer.write(os_cached + b"\n")')
command = '\n'.join(code)
# First, prove that with -S (no 'import site'), the paths are # First, prove that with -S (no 'import site'), the paths are
# relative. # relative.
proc = subprocess.Popen([sys.executable, '-S', '-c', command], proc = subprocess.Popen([sys.executable, '-S', '-c', command],
env=env, env=env,
stdout=subprocess.PIPE, stdout=subprocess.PIPE)
stderr=subprocess.PIPE)
stdout, stderr = proc.communicate() stdout, stderr = proc.communicate()
self.assertEqual(proc.returncode, 0) self.assertEqual(proc.returncode, 0)
os__file__, os__cached__ = stdout.split() os__file__, os__cached__ = stdout.splitlines()[:2]
self.assertFalse(os.path.isabs(os__file__)) self.assertFalse(os.path.isabs(os__file__))
self.assertFalse(os.path.isabs(os__cached__)) self.assertFalse(os.path.isabs(os__cached__))
# Now, with 'import site', it works. # Now, with 'import site', it works.
proc = subprocess.Popen([sys.executable, '-c', command], proc = subprocess.Popen([sys.executable, '-c', command],
env=env, env=env,
stdout=subprocess.PIPE, stdout=subprocess.PIPE)
stderr=subprocess.PIPE)
stdout, stderr = proc.communicate() stdout, stderr = proc.communicate()
self.assertEqual(proc.returncode, 0) self.assertEqual(proc.returncode, 0)
os__file__, os__cached__ = stdout.split() os__file__, os__cached__ = stdout.splitlines()[:2]
self.assertTrue(os.path.isabs(os__file__)) self.assertTrue(os.path.isabs(os__file__))
self.assertTrue(os.path.isabs(os__cached__)) self.assertTrue(os.path.isabs(os__cached__))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment