Skip to content

Commit

Permalink
Replace save/restore of argv and cwd as pytest fixtures.
Browse files Browse the repository at this point in the history
  • Loading branch information
jaraco committed Aug 2, 2022
1 parent c0a4ea6 commit c899a99
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 59 deletions.
19 changes: 19 additions & 0 deletions conftest.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os
import sys
import platform

import pytest
Expand Down Expand Up @@ -70,3 +71,21 @@ def distutils_managed_tempdir(request):
while self.tempdirs:
tmpdir = self.tempdirs.pop()
os_helper.rmtree(tmpdir)


@pytest.fixture
def save_argv():
orig = sys.argv[:]
try:
yield
finally:
sys.argv[:] = orig


@pytest.fixture
def save_cwd():
orig = os.getcwd()
try:
yield
finally:
os.chdir(orig)
14 changes: 3 additions & 11 deletions distutils/tests/test_bdist_dumb.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,14 @@
"""


@support.combine_markers
@pytest.mark.usefixtures('save_env')
@pytest.mark.usefixtures('save_argv')
@pytest.mark.usefixtures('save_cwd')
class TestBuildDumb(
support.TempdirManager,
support.LoggingSilencer,
):
def setUp(self):
super().setUp()
self.old_location = os.getcwd()
self.old_sys_argv = sys.argv, sys.argv[:]

def tearDown(self):
os.chdir(self.old_location)
sys.argv = self.old_sys_argv[0]
sys.argv[:] = self.old_sys_argv[1]
super().tearDown()

@pytest.mark.usefixtures('needs_zlib')
def test_simple_built(self):

Expand Down
25 changes: 10 additions & 15 deletions distutils/tests/test_bdist_rpm.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,26 +24,21 @@
"""


@pytest.fixture(autouse=True)
def sys_executable_encodable():
try:
sys.executable.encode('UTF-8')
except UnicodeEncodeError:
pytest.skip("sys.executable is not encodable to UTF-8")


@pytest.mark.usefixtures('save_env')
@pytest.mark.usefixtures('save_argv')
@pytest.mark.usefixtures('save_cwd')
class TestBuildRpm(
support.TempdirManager,
support.LoggingSilencer,
):
def setUp(self):
try:
sys.executable.encode("UTF-8")
except UnicodeEncodeError:
raise unittest.SkipTest("sys.executable is not encodable to UTF-8")

super().setUp()
self.old_location = os.getcwd()
self.old_sys_argv = sys.argv, sys.argv[:]

def tearDown(self):
os.chdir(self.old_location)
sys.argv = self.old_sys_argv[0]
sys.argv[:] = self.old_sys_argv[1]
super().tearDown()

# XXX I am unable yet to make this test work without
# spurious sdtout/stderr output under Mac OS X
Expand Down
4 changes: 1 addition & 3 deletions distutils/tests/test_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,19 +60,17 @@ def main():


@pytest.mark.usefixtures('save_env')
@pytest.mark.usefixtures('save_argv')
class CoreTestCase(unittest.TestCase):
def setUp(self):
super().setUp()
self.old_stdout = sys.stdout
self.cleanup_testfn()
self.old_argv = sys.argv, sys.argv[:]
self.addCleanup(log.set_threshold, log._global_log.threshold)

def tearDown(self):
sys.stdout = self.old_stdout
self.cleanup_testfn()
sys.argv = self.old_argv[0]
sys.argv[:] = self.old_argv[1]
super().tearDown()

def cleanup_testfn(self):
Expand Down
49 changes: 19 additions & 30 deletions distutils/tests/test_dist.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import unittest
import warnings
import textwrap
import functools

from unittest import mock

Expand Down Expand Up @@ -42,36 +43,31 @@ def find_config_files(self):
return self._config_files


@pytest.fixture
def clear_argv():
del sys.argv[1:]


@support.combine_markers
@pytest.mark.usefixtures('save_env')
class DistributionTestCase(
@pytest.mark.usefixtures('save_argv')
class TestDistributionBehavior(
support.LoggingSilencer,
support.TempdirManager,
unittest.TestCase,
):
def setUp(self):
super().setUp()
self.argv = sys.argv, sys.argv[:]
del sys.argv[1:]

def tearDown(self):
sys.argv = self.argv[0]
sys.argv[:] = self.argv[1]
super().tearDown()

def create_distribution(self, configfiles=()):
d = TestDistribution()
d._config_files = configfiles
d.parse_config_files()
d.parse_command_line()
return d

def test_command_packages_unspecified(self):
def test_command_packages_unspecified(self, clear_argv):
sys.argv.append("build")
d = self.create_distribution()
assert d.get_command_packages() == ["distutils.command"]

def test_command_packages_cmdline(self):
def test_command_packages_cmdline(self, clear_argv):
from distutils.tests.test_dist import test_dist

sys.argv.extend(
Expand All @@ -97,9 +93,9 @@ def test_command_packages_cmdline(self):
'distutils' not in Distribution.parse_config_files.__module__,
'Cannot test when virtualenv has monkey-patched Distribution.',
)
def test_venv_install_options(self):
def test_venv_install_options(self, request):
sys.argv.append("install")
self.addCleanup(os.unlink, TESTFN)
request.addfinalizer(functools.partial(os.unlink, TESTFN))

fakepath = '/somedir'

Expand Down Expand Up @@ -160,9 +156,9 @@ def test_venv_install_options(self):
for key in result_dict.keys():
assert key not in d.command_options.get('install', {})

def test_command_packages_configfile(self):
def test_command_packages_configfile(self, request, clear_argv):
sys.argv.append("build")
self.addCleanup(os.unlink, TESTFN)
request.addfinalizer(functools.partial(os.unlink, TESTFN))
f = open(TESTFN, "w")
try:
print("[global]", file=f)
Expand All @@ -184,7 +180,7 @@ def test_command_packages_configfile(self):
d = self.create_distribution([TESTFN])
assert d.get_command_packages() == ["distutils.command"]

def test_empty_options(self):
def test_empty_options(self, request):
# an empty options dictionary should not stay in the
# list of attributes

Expand All @@ -194,7 +190,8 @@ def test_empty_options(self):
def _warn(msg):
warns.append(msg)

self.addCleanup(setattr, warnings, 'warn', warnings.warn)
request.addfinalizer(
functools.partial(setattr, warnings, 'warn', warnings.warn))
warnings.warn = _warn
dist = Distribution(
attrs={
Expand Down Expand Up @@ -274,16 +271,8 @@ def _expander(path):


@pytest.mark.usefixtures('save_env')
class MetadataTestCase(support.TempdirManager, unittest.TestCase):
def setUp(self):
super().setUp()
self.argv = sys.argv, sys.argv[:]

def tearDown(self):
sys.argv = self.argv[0]
sys.argv[:] = self.argv[1]
super().tearDown()

@pytest.mark.usefixtures('save_argv')
class MetadataTestCase(support.TempdirManager):
def format_metadata(self, dist):
sio = io.StringIO()
dist.metadata.write_pkg_file(sio)
Expand Down

0 comments on commit c899a99

Please sign in to comment.