summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_venv.py
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@microsoft.com>2018-09-20 20:38:34 (GMT)
committerGitHub <noreply@github.com>2018-09-20 20:38:34 (GMT)
commitf14c28f39766855420dd58d209da4ad847f3030e (patch)
tree79b95924f711b99388b2899c119ae31f31ad2ce5 /Lib/test/test_venv.py
parentbc854750589d4de0fd55693963964e0558b5c8ac (diff)
downloadcpython-f14c28f39766855420dd58d209da4ad847f3030e.zip
cpython-f14c28f39766855420dd58d209da4ad847f3030e.tar.gz
cpython-f14c28f39766855420dd58d209da4ad847f3030e.tar.bz2
bpo-34011: Fixes missing venv files and other tests (GH-9458)
Diffstat (limited to 'Lib/test/test_venv.py')
-rw-r--r--Lib/test/test_venv.py67
1 files changed, 32 insertions, 35 deletions
diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py
index 9cea87e..c86f7a1 100644
--- a/Lib/test/test_venv.py
+++ b/Lib/test/test_venv.py
@@ -27,6 +27,17 @@ except ImportError:
skipInVenv = unittest.skipIf(sys.prefix != sys.base_prefix,
'Test not appropriate in a venv')
+def check_output(cmd, encoding=None):
+ p = subprocess.Popen(cmd,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ encoding=encoding)
+ out, err = p.communicate()
+ if p.returncode:
+ raise subprocess.CalledProcessError(
+ p.returncode, cmd, None, out, err)
+ return out, err
+
class BaseTest(unittest.TestCase):
"""Base class for venv tests."""
maxDiff = 80 * 50
@@ -134,9 +145,7 @@ class BasicTest(BaseTest):
('base_prefix', sys.prefix),
('base_exec_prefix', sys.exec_prefix)):
cmd[2] = 'import sys; print(sys.%s)' % prefix
- p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- out, err = p.communicate()
+ out, err = check_output(cmd)
self.assertEqual(out.strip(), expected.encode())
if sys.platform == 'win32':
@@ -259,11 +268,10 @@ class BasicTest(BaseTest):
"""
rmtree(self.env_dir)
self.run_with_capture(venv.create, self.env_dir)
- envpy = os.path.join(os.path.realpath(self.env_dir), self.bindir, self.exe)
- cmd = [envpy, '-c', 'import sys; print(sys.executable)']
- p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- out, err = p.communicate()
+ envpy = os.path.join(os.path.realpath(self.env_dir),
+ self.bindir, self.exe)
+ out, err = check_output([envpy, '-c',
+ 'import sys; print(sys.executable)'])
self.assertEqual(out.strip(), envpy.encode())
@unittest.skipUnless(can_symlink(), 'Needs symlinks')
@@ -274,17 +282,16 @@ class BasicTest(BaseTest):
rmtree(self.env_dir)
builder = venv.EnvBuilder(clear=True, symlinks=True)
builder.create(self.env_dir)
- envpy = os.path.join(os.path.realpath(self.env_dir), self.bindir, self.exe)
- cmd = [envpy, '-c', 'import sys; print(sys.executable)']
- p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- out, err = p.communicate()
+ envpy = os.path.join(os.path.realpath(self.env_dir),
+ self.bindir, self.exe)
+ out, err = check_output([envpy, '-c',
+ 'import sys; print(sys.executable)'])
self.assertEqual(out.strip(), envpy.encode())
@unittest.skipUnless(os.name == 'nt', 'only relevant on Windows')
def test_unicode_in_batch_file(self):
"""
- Test isolation from system site-packages
+ Test handling of Unicode paths
"""
rmtree(self.env_dir)
env_dir = os.path.join(os.path.realpath(self.env_dir), 'ϼўТλФЙ')
@@ -292,12 +299,10 @@ class BasicTest(BaseTest):
builder.create(env_dir)
activate = os.path.join(env_dir, self.bindir, 'activate.bat')
envpy = os.path.join(env_dir, self.bindir, self.exe)
- cmd = [activate, '&', self.exe, '-c', 'print(0)']
- p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE, encoding='oem',
- shell=True)
- out, err = p.communicate()
- print(err)
+ out, err = check_output(
+ [activate, '&', self.exe, '-c', 'print(0)'],
+ encoding='oem',
+ )
self.assertEqual(out.strip(), '0')
@skipInVenv
@@ -306,11 +311,8 @@ class EnsurePipTest(BaseTest):
def assert_pip_not_installed(self):
envpy = os.path.join(os.path.realpath(self.env_dir),
self.bindir, self.exe)
- try_import = 'try:\n import pip\nexcept ImportError:\n print("OK")'
- cmd = [envpy, '-c', try_import]
- p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- out, err = p.communicate()
+ out, err = check_output([envpy, '-c',
+ 'try:\n import pip\nexcept ImportError:\n print("OK")'])
# We force everything to text, so unittest gives the detailed diff
# if we get unexpected results
err = err.decode("latin-1") # Force to text, prevent decoding errors
@@ -388,11 +390,8 @@ class EnsurePipTest(BaseTest):
# Ensure pip is available in the virtual environment
envpy = os.path.join(os.path.realpath(self.env_dir), self.bindir, self.exe)
# Ignore DeprecationWarning since pip code is not part of Python
- cmd = [envpy, '-W', 'ignore::DeprecationWarning', '-I',
- '-m', 'pip', '--version']
- p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- out, err = p.communicate()
+ out, err = check_output([envpy, '-W', 'ignore::DeprecationWarning', '-I',
+ '-m', 'pip', '--version'])
# We force everything to text, so unittest gives the detailed diff
# if we get unexpected results
err = err.decode("latin-1") # Force to text, prevent decoding errors
@@ -406,12 +405,10 @@ class EnsurePipTest(BaseTest):
# http://bugs.python.org/issue19728
# Check the private uninstall command provided for the Windows
# installers works (at least in a virtual environment)
- cmd = [envpy, '-W', 'ignore::DeprecationWarning', '-I',
- '-m', 'ensurepip._uninstall']
with EnvironmentVarGuard() as envvars:
- p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- out, err = p.communicate()
+ out, err = check_output([envpy,
+ '-W', 'ignore::DeprecationWarning', '-I',
+ '-m', 'ensurepip._uninstall'])
# We force everything to text, so unittest gives the detailed diff
# if we get unexpected results
err = err.decode("latin-1") # Force to text, prevent decoding errors