from __future__ import absolute_import, unicode_literals import os import subprocess import sys import pytest import virtualenv try: from pathlib import Path except ImportError: from pathlib2 import Path ROOT_DIR = Path(__file__).parents[1] @pytest.fixture(scope="session") def clean_python(tmp_path_factory): path = tmp_path_factory.mktemp("activation-test-env") prev_cwd = os.getcwd() try: os.chdir(str(path)) home_dir, _, __, bin_dir = virtualenv.path_locations(str(path / "env")) virtualenv.create_environment(home_dir, no_pip=True, no_setuptools=True, no_wheel=True) site_packages = subprocess.check_output( [ os.path.join(bin_dir, virtualenv.EXPECTED_EXE), "-c", "from distutils.sysconfig import get_python_lib; print(get_python_lib())", ], universal_newlines=True, ).strip() pydoc_test = path.__class__(site_packages) / "pydoc_test.py" pydoc_test.write_text('"""This is pydoc_test.py"""') finally: os.chdir(str(prev_cwd)) yield home_dir, bin_dir, pydoc_test @pytest.fixture() def sdist(tmp_path): """make assertions on what we package""" import tarfile path = os.environ.get("TOX_PACKAGE") if path is not None: dest_path = tmp_path / "sdist" dest_path.mkdir() prev = os.getcwd() try: os.chdir(str(dest_path)) tar = tarfile.open(path, "r:gz") tar.extractall() return next(dest_path.iterdir()) finally: os.chdir(prev) return None @pytest.fixture(scope="session") def wheel(tmp_path_factory): """test that we can create a virtual environment by feeding to a clean python the wheels content""" dest_path = tmp_path_factory.mktemp("wheel") env = os.environ.copy() try: subprocess.check_output( [sys.executable, "-m", "pip", "wheel", "-w", str(dest_path), "--no-deps", str(ROOT_DIR)], universal_newlines=True, stderr=subprocess.STDOUT, env=env, ) except subprocess.CalledProcessError as exception: assert not exception.returncode, exception.output wheels = list(dest_path.glob("*.whl")) assert len(wheels) == 1 wheel = wheels[0] return wheel @pytest.fixture() def extracted_wheel(tmp_path, wheel): dest_path = tmp_path / "wheel-extracted" import zipfile with zipfile.ZipFile(str(wheel), "r") as zip_ref: zip_ref.extractall(str(dest_path)) return dest_path