diff --git a/conftest.py b/conftest.py index 5296b3f9f..9c6f1ea77 100644 --- a/conftest.py +++ b/conftest.py @@ -28,21 +28,17 @@ def pytest_addoption(parser): def pytest_funcarg__specssh(request): return getspecssh(request.config) -def getgspecs(config=None): - if config is None: - config = py.test.config +def getgspecs(config): return [execnet.XSpec(spec) for spec in config.getvalueorskip("gspecs")] # configuration information for tests -def getgspecs(config=None): - if config is None: - config = py.test.config +def getgspecs(config): return [execnet.XSpec(spec) for spec in config.getvalueorskip("gspecs")] -def getspecssh(config=None): +def getspecssh(config): xspecs = getgspecs(config) for spec in xspecs: if spec.ssh: @@ -51,7 +47,7 @@ def getspecssh(config=None): return spec py.test.skip("need '--gx ssh=...'") -def getsocketspec(config=None): +def getsocketspec(config): xspecs = getgspecs(config) for spec in xspecs: if spec.socket: diff --git a/py/impl/test/config.py b/py/impl/test/config.py index bba10f7c5..133b87de9 100644 --- a/py/impl/test/config.py +++ b/py/impl/test/config.py @@ -227,19 +227,6 @@ class Config(object): self.trace("instantiated session %r" % session) return session - def _reparse(self, args): - """ this is used from tests that want to re-invoke parse(). """ - #assert args # XXX should not be empty - global config_per_process - oldconfig = py.test.config - try: - config_per_process = py.test.config = Config() - config_per_process.basetemp = self.mktemp("reparse", numbered=True) - config_per_process.parse(args) - return config_per_process - finally: - config_per_process = py.test.config = oldconfig - def getxspecs(self): xspeclist = [] for xspec in self.getvalue("tx"): diff --git a/py/plugin/pytest_pytester.py b/py/plugin/pytest_pytester.py index f25a4bd58..f54a3e4f0 100644 --- a/py/plugin/pytest_pytester.py +++ b/py/plugin/pytest_pytester.py @@ -205,6 +205,20 @@ class TmpTestdir: config.parse(args) return config + def reparseconfig(self, args=None): + """ this is used from tests that want to re-invoke parse(). """ + if not args: + args = [self.tmpdir] + from py.impl.test import config + oldconfig = py.test.config + try: + c = config.config_per_process = py.test.config = pytestConfig() + c.basetemp = oldconfig.mktemp("reparse", numbered=True) + c.parse(args) + return c + finally: + config.config_per_process = py.test.config = oldconfig + def parseconfigure(self, *args): config = self.parseconfig(*args) config.pluginmanager.do_configure(config) diff --git a/testing/plugin/test_pytest_default.py b/testing/plugin/test_pytest_default.py index c10b6509b..e95d79d43 100644 --- a/testing/plugin/test_pytest_default.py +++ b/testing/plugin/test_pytest_default.py @@ -1,9 +1,9 @@ import py from py.plugin.pytest_default import pytest_report_iteminfo -def test_implied_different_sessions(tmpdir): +def test_implied_different_sessions(testdir, tmpdir): def x(*args): - config = py.test.config._reparse([tmpdir] + list(args)) + config = testdir.reparseconfig([tmpdir] + list(args)) try: config.pluginmanager.do_configure(config) except ValueError: diff --git a/testing/pytest/dist/test_nodemanage.py b/testing/pytest/dist/test_nodemanage.py index e40f8ad02..c1825129a 100644 --- a/testing/pytest/dist/test_nodemanage.py +++ b/testing/pytest/dist/test_nodemanage.py @@ -12,9 +12,9 @@ class pytest_funcarg__mysetup: class TestNodeManager: @py.test.mark.xfail - def test_rsync_roots_no_roots(self, mysetup): + def test_rsync_roots_no_roots(self, testdir, mysetup): mysetup.source.ensure("dir1", "file1").write("hello") - config = py.test.config._reparse([source]) + config = testdir.reparseconfig([source]) nodemanager = NodeManager(config, ["popen//chdir=%s" % mysetup.dest]) assert nodemanager.config.topdir == source == config.topdir nodemanager.rsync_roots() @@ -53,7 +53,7 @@ class TestNodeManager: assert dest.join("dir1", "dir2", 'hello').check() nodemanager.gwmanager.exit() - def test_init_rsync_roots(self, mysetup): + def test_init_rsync_roots(self, testdir, mysetup): source, dest = mysetup.source, mysetup.dest dir2 = source.ensure("dir1", "dir2", dir=1) source.ensure("dir1", "somefile", dir=1) @@ -62,14 +62,14 @@ class TestNodeManager: source.join("conftest.py").write(py.code.Source(""" rsyncdirs = ['dir1/dir2'] """)) - session = py.test.config._reparse([source]).initsession() + session = testdir.reparseconfig([source]).initsession() nodemanager = NodeManager(session.config, ["popen//chdir=%s" % dest]) nodemanager.rsync_roots() assert dest.join("dir2").check() assert not dest.join("dir1").check() assert not dest.join("bogus").check() - def test_rsyncignore(self, mysetup): + def test_rsyncignore(self, testdir, mysetup): source, dest = mysetup.source, mysetup.dest dir2 = source.ensure("dir1", "dir2", dir=1) dir5 = source.ensure("dir5", "dir6", "bogus") @@ -79,7 +79,7 @@ class TestNodeManager: rsyncdirs = ['dir1', 'dir5'] rsyncignore = ['dir1/dir2', 'dir5/dir6'] """)) - session = py.test.config._reparse([source]).initsession() + session = testdir.reparseconfig([source]).initsession() nodemanager = NodeManager(session.config, ["popen//chdir=%s" % dest]) nodemanager.rsync_roots() @@ -88,12 +88,12 @@ class TestNodeManager: assert dest.join("dir5","file").check() assert not dest.join("dir6").check() - def test_optimise_popen(self, mysetup): + def test_optimise_popen(self, testdir, mysetup): source, dest = mysetup.source, mysetup.dest specs = ["popen"] * 3 source.join("conftest.py").write("rsyncdirs = ['a']") source.ensure('a', dir=1) - config = py.test.config._reparse([source]) + config = testdir.reparseconfig([source]) nodemanager = NodeManager(config, specs) nodemanager.rsync_roots() for gwspec in nodemanager.gwmanager.specs: @@ -105,7 +105,7 @@ class TestNodeManager: specs = ["popen"] * 2 source.join("conftest.py").write("rsyncdirs = ['a']") source.ensure('a', dir=1) - config = py.test.config._reparse([source, '--debug']) + config = testdir.reparseconfig([source, '--debug']) assert config.option.debug nodemanager = NodeManager(config, specs) reprec = testdir.getreportrecorder(config).hookrecorder diff --git a/testing/pytest/dist/test_txnode.py b/testing/pytest/dist/test_txnode.py index a32c62ab6..d8b59d4a6 100644 --- a/testing/pytest/dist/test_txnode.py +++ b/testing/pytest/dist/test_txnode.py @@ -44,7 +44,8 @@ class MySetup: def makenode(self, config=None): if config is None: - config = py.test.config._reparse([]) + testdir = self.request.getfuncargvalue("testdir") + config = testdir.reparseconfig([]) self.config = config self.queue = Queue() self.xspec = execnet.XSpec("popen") diff --git a/testing/pytest/test_collect.py b/testing/pytest/test_collect.py index 512008029..5ca9df6d3 100644 --- a/testing/pytest/test_collect.py +++ b/testing/pytest/test_collect.py @@ -52,11 +52,11 @@ class TestCollector: parent = fn.getparent(py.test.collect.Class) assert parent is cls - def test_totrail_and_back(self, tmpdir): + def test_totrail_and_back(self, testdir, tmpdir): a = tmpdir.ensure("a", dir=1) tmpdir.ensure("a", "__init__.py") x = tmpdir.ensure("a", "trail.py") - config = py.test.config._reparse([x]) + config = testdir.reparseconfig([x]) col = config.getfsnode(x) trail = col._totrail() assert len(trail) == 2 @@ -65,8 +65,8 @@ class TestCollector: col2 = py.test.collect.Collector._fromtrail(trail, config) assert col2.listnames() == col.listnames() - def test_totrail_topdir_and_beyond(self, tmpdir): - config = py.test.config._reparse([tmpdir]) + def test_totrail_topdir_and_beyond(self, testdir, tmpdir): + config = testdir.reparseconfig() col = config.getfsnode(config.topdir) trail = col._totrail() assert len(trail) == 2 diff --git a/testing/pytest/test_config.py b/testing/pytest/test_config.py index 326cc4350..e1d26aabb 100644 --- a/testing/pytest/test_config.py +++ b/testing/pytest/test_config.py @@ -17,7 +17,7 @@ class TestConfigCmdlineParsing: ) """) testdir.chdir() - config = py.test.config._reparse(['-G', '17']) + config = testdir.reparseconfig(['-G', '17']) assert config.option.gdest == 17 def test_parser_addoption_default_env(self, testdir, monkeypatch): @@ -56,11 +56,11 @@ class TestConfigCmdlineParsing: ) """) py.test.raises(ValueError, """ - py.test.config._reparse(['-g', '17']) + testdir.reparseconfig(['-g', '17']) """) - def test_parsing_again_fails(self, tmpdir): - config = py.test.config._reparse([tmpdir]) + def test_parsing_again_fails(self, testdir): + config = testdir.reparseconfig([testdir.tmpdir]) py.test.raises(AssertionError, "config.parse([])") @@ -82,13 +82,11 @@ class TestConfigTmpdir: assert tmp2 != tmp def test_reparse(self, testdir): - config = testdir.Config() - config.basetemp = testdir.mkdir("my") - config2 = config._reparse([]) - assert config2.getbasetemp().relto(config.basetemp) - config3 = config._reparse([]) - assert config3.getbasetemp().relto(config.basetemp) - assert config2.basetemp != config3.basetemp + config2 = testdir.reparseconfig([]) + config3 = testdir.reparseconfig([]) + assert config2.getbasetemp() != config3.getbasetemp() + assert not config2.getbasetemp().relto(config3.getbasetemp()) + assert not config3.getbasetemp().relto(config2.getbasetemp()) class TestConfigAPI: @@ -100,7 +98,7 @@ class TestConfigAPI: assert config.getvalue("x") == 1 assert config.getvalue("x", o.join('sub')) == 2 py.test.raises(KeyError, "config.getvalue('y')") - config = py.test.config._reparse([str(o.join('sub'))]) + config = testdir.reparseconfig([str(o.join('sub'))]) assert config.getvalue("x") == 2 assert config.getvalue("y") == 3 assert config.getvalue("x", o) == 1 @@ -118,18 +116,18 @@ class TestConfigAPI: def test_config_overwrite(self, testdir): o = testdir.tmpdir o.ensure("conftest.py").write("x=1") - config = py.test.config._reparse([str(o)]) + config = testdir.reparseconfig([str(o)]) assert config.getvalue('x') == 1 config.option.x = 2 assert config.getvalue('x') == 2 - config = py.test.config._reparse([str(o)]) + config = testdir.reparseconfig([str(o)]) assert config.getvalue('x') == 1 - def test_getconftest_pathlist(self, tmpdir): + def test_getconftest_pathlist(self, testdir, tmpdir): somepath = tmpdir.join("x", "y", "z") p = tmpdir.join("conftest.py") p.write("pathlist = ['.', %r]" % str(somepath)) - config = py.test.config._reparse([p]) + config = testdir.reparseconfig([p]) assert config.getconftest_pathlist('notexist') is None pl = config.getconftest_pathlist('pathlist') print(pl) @@ -150,8 +148,8 @@ class TestConfigAPI: class TestConfigApi_getcolitems: - def test_getcolitems_onedir(self, tmpdir): - config = py.test.config._reparse([tmpdir]) + def test_getcolitems_onedir(self, testdir): + config = testdir.reparseconfig([testdir.tmpdir]) colitems = config.getcolitems() assert len(colitems) == 1 col = colitems[0] @@ -159,17 +157,17 @@ class TestConfigApi_getcolitems: for col in col.listchain(): assert col.config is config - def test_getcolitems_twodirs(self, tmpdir): - config = py.test.config._reparse([tmpdir, tmpdir]) + def test_getcolitems_twodirs(self, testdir, tmpdir): + config = testdir.reparseconfig([tmpdir, tmpdir]) colitems = config.getcolitems() assert len(colitems) == 2 col1, col2 = colitems assert col1.name == col2.name assert col1.parent == col2.parent - def test_getcolitems_curdir_and_subdir(self, tmpdir): + def test_getcolitems_curdir_and_subdir(self, testdir, tmpdir): a = tmpdir.ensure("a", dir=1) - config = py.test.config._reparse([tmpdir, a]) + config = testdir.reparseconfig([tmpdir, a]) colitems = config.getcolitems() assert len(colitems) == 2 col1, col2 = colitems @@ -179,9 +177,9 @@ class TestConfigApi_getcolitems: for subcol in col.listchain(): assert col.config is config - def test__getcol_global_file(self, tmpdir): + def test__getcol_global_file(self, testdir, tmpdir): x = tmpdir.ensure("x.py") - config = py.test.config._reparse([x]) + config = testdir.reparseconfig([x]) col = config.getfsnode(x) assert isinstance(col, py.test.collect.Module) assert col.name == 'x.py' @@ -190,9 +188,9 @@ class TestConfigApi_getcolitems: for col in col.listchain(): assert col.config is config - def test__getcol_global_dir(self, tmpdir): + def test__getcol_global_dir(self, testdir, tmpdir): x = tmpdir.ensure("a", dir=1) - config = py.test.config._reparse([x]) + config = testdir.reparseconfig([x]) col = config.getfsnode(x) assert isinstance(col, py.test.collect.Directory) print(col.listchain()) @@ -200,10 +198,10 @@ class TestConfigApi_getcolitems: assert col.parent is None assert col.config is config - def test__getcol_pkgfile(self, tmpdir): + def test__getcol_pkgfile(self, testdir, tmpdir): x = tmpdir.ensure("x.py") tmpdir.ensure("__init__.py") - config = py.test.config._reparse([x]) + config = testdir.reparseconfig([x]) col = config.getfsnode(x) assert isinstance(col, py.test.collect.Module) assert col.name == 'x.py' @@ -215,16 +213,16 @@ class TestConfigApi_getcolitems: class TestOptionEffects: def test_boxed_option_default(self, testdir): tmpdir = testdir.tmpdir.ensure("subdir", dir=1) - config = py.test.config._reparse([tmpdir]) + config = testdir.reparseconfig() config.initsession() assert not config.option.boxed py.test.importorskip("execnet") - config = py.test.config._reparse(['-d', tmpdir]) + config = testdir.reparseconfig(['-d', tmpdir]) config.initsession() assert not config.option.boxed def test_is_not_boxed_by_default(self, testdir): - config = py.test.config._reparse([testdir.tmpdir]) + config = testdir.reparseconfig([testdir.tmpdir]) assert not config.option.boxed class TestConfig_gettopdir: diff --git a/testing/pytest/test_pluginmanager.py b/testing/pytest/test_pluginmanager.py index df308f361..721cb90cc 100644 --- a/testing/pytest/test_pluginmanager.py +++ b/testing/pytest/test_pluginmanager.py @@ -273,7 +273,6 @@ class TestPytestPluginInteractions: assert not pluginmanager.listattr("hello") assert pluginmanager.listattr("x") == [42] -@py.test.mark.xfail def test_namespace_has_default_and_env_plugins(testdir): p = testdir.makepyfile(""" import py diff --git a/testing/pytest/test_pycollect.py b/testing/pytest/test_pycollect.py index 91b0790b6..39cd3ad74 100644 --- a/testing/pytest/test_pycollect.py +++ b/testing/pytest/test_pycollect.py @@ -250,8 +250,8 @@ class TestFunction: assert isinstance(modcol, py.test.collect.Module) assert hasattr(modcol.obj, 'test_func') - def test_function_equality(self, tmpdir): - config = py.test.config._reparse([tmpdir]) + def test_function_equality(self, testdir, tmpdir): + config = testdir.reparseconfig() f1 = py.test.collect.Function(name="name", args=(1,), callobj=isinstance) f2 = py.test.collect.Function(name="name", @@ -271,8 +271,8 @@ class TestFunction: assert f1 == f1_b assert not f1 != f1_b - def test_function_equality_with_callspec(self, tmpdir): - config = py.test.config._reparse([tmpdir]) + def test_function_equality_with_callspec(self, testdir, tmpdir): + config = testdir.reparseconfig() class callspec1: param = 1 funcargs = {} diff --git a/testing/pytest/test_session.py b/testing/pytest/test_session.py index 6952ca48f..330784193 100644 --- a/testing/pytest/test_session.py +++ b/testing/pytest/test_session.py @@ -1,8 +1,8 @@ import py class SessionTests: - def test_initsession(self, tmpdir): - config = py.test.config._reparse([tmpdir]) + def test_initsession(self, testdir, tmpdir): + config = testdir.reparseconfig() session = config.initsession() assert session.config is config