[Pytest-commit] commit/tox: 8 new changesets
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Fri Nov 6 11:44:58 EST 2015
8 new commits in tox:
https://bitbucket.org/hpk42/tox/commits/5e480527c288/
Changeset: 5e480527c288
Branch: 174-voting-testenv
User: Rebecka Gulliksson
Date: 2015-08-24 08:27:21+00:00
Summary: Added 'voting' testenv attribute.
Affected #: 2 files
diff -r 3ed5dc353a99acf57859a2dd265b5c2e973480e3 -r 5e480527c288cd6b69533c20bb7b512fd2022ffe tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -32,7 +32,7 @@
deps=
world1
:xyz:http://hello/world
- """ % (tmpdir, ))
+ """ % (tmpdir,))
assert config.toxworkdir == tmpdir
assert len(config.envconfigs) == 2
assert config.envconfigs['py1'].envdir == tmpdir.join("py1")
@@ -92,12 +92,18 @@
"""
Ensure correct parseini._is_same_dep is working with a few samples.
"""
- assert DepOption._is_same_dep('pkg_hello-world3==1.0', 'pkg_hello-world3')
- assert DepOption._is_same_dep('pkg_hello-world3==1.0', 'pkg_hello-world3>=2.0')
- assert DepOption._is_same_dep('pkg_hello-world3==1.0', 'pkg_hello-world3>2.0')
- assert DepOption._is_same_dep('pkg_hello-world3==1.0', 'pkg_hello-world3<2.0')
- assert DepOption._is_same_dep('pkg_hello-world3==1.0', 'pkg_hello-world3<=2.0')
- assert not DepOption._is_same_dep('pkg_hello-world3==1.0', 'otherpkg>=2.0')
+ assert DepOption._is_same_dep('pkg_hello-world3==1.0',
+ 'pkg_hello-world3')
+ assert DepOption._is_same_dep('pkg_hello-world3==1.0',
+ 'pkg_hello-world3>=2.0')
+ assert DepOption._is_same_dep('pkg_hello-world3==1.0',
+ 'pkg_hello-world3>2.0')
+ assert DepOption._is_same_dep('pkg_hello-world3==1.0',
+ 'pkg_hello-world3<2.0')
+ assert DepOption._is_same_dep('pkg_hello-world3==1.0',
+ 'pkg_hello-world3<=2.0')
+ assert not DepOption._is_same_dep('pkg_hello-world3==1.0',
+ 'otherpkg>=2.0')
class TestConfigPlatform:
@@ -109,7 +115,8 @@
assert len(config.envconfigs) == 1
assert config.envconfigs['py1'].platform == "linux2"
- def test_config_parse_platform_rex(self, newconfig, mocksession, monkeypatch):
+ def test_config_parse_platform_rex(self, newconfig, mocksession,
+ monkeypatch):
config = newconfig([], """
[testenv:py1]
platform = a123|b123
@@ -126,7 +133,8 @@
assert not venv.matching_platform()
@pytest.mark.parametrize("plat", ["win", "lin", ])
- def test_config_parse_platform_with_factors(self, newconfig, plat, monkeypatch):
+ def test_config_parse_platform_with_factors(self, newconfig, plat,
+ monkeypatch):
monkeypatch.setattr(sys, "platform", "win32")
config = newconfig([], """
[tox]
@@ -273,7 +281,8 @@
[mydefault]
key2={xyz}
""")
- reader = SectionReader("mydefault", config._cfg, fallbacksections=['mydefault'])
+ reader = SectionReader("mydefault", config._cfg,
+ fallbacksections=['mydefault'])
assert reader is not None
with py.test.raises(tox.exception.ConfigError):
reader.getstring("key2")
@@ -285,7 +294,8 @@
[section]
key=value
""")
- reader = SectionReader("section", config._cfg, fallbacksections=['mydefault'])
+ reader = SectionReader("section", config._cfg,
+ fallbacksections=['mydefault'])
x = reader.getstring("key2")
assert x == "value2"
x = reader.getstring("key3")
@@ -300,7 +310,8 @@
[section]
key={value}
""")
- reader = SectionReader("section", config._cfg, fallbacksections=['mydefault'])
+ reader = SectionReader("section", config._cfg,
+ fallbacksections=['mydefault'])
reader.addsubstitutions(value="newvalue", value2="newvalue2")
x = reader.getstring("key2")
assert x == "newvalue2"
@@ -352,7 +363,8 @@
with py.test.raises(tox.exception.ConfigError):
reader.getstring("key2")
- def test_getstring_environment_substitution_with_default(self, monkeypatch, newconfig):
+ def test_getstring_environment_substitution_with_default(self, monkeypatch,
+ newconfig):
monkeypatch.setenv("KEY1", "hello")
config = newconfig("""
[section]
@@ -494,7 +506,9 @@
x = reader.getargvlist("key2")
assert x == [["cmd1", "-f", "foo", "bar baz"]]
- def test_positional_arguments_are_only_replaced_when_standing_alone(self, tmpdir, newconfig):
+ def test_positional_arguments_are_only_replaced_when_standing_alone(self,
+ tmpdir,
+ newconfig):
config = newconfig("""
[section]
key=
@@ -521,10 +535,12 @@
config = newconfig(inisource)
reader = SectionReader("section", config._cfg)
posargs = ['hello', 'world']
- reader.addsubstitutions(posargs, envlogdir='ENV_LOG_DIR', envname='ENV_NAME')
+ reader.addsubstitutions(posargs, envlogdir='ENV_LOG_DIR',
+ envname='ENV_NAME')
expected = [
- 'py.test', '-n5', '--junitxml=ENV_LOG_DIR/junit-ENV_NAME.xml', 'hello', 'world'
+ 'py.test', '-n5', '--junitxml=ENV_LOG_DIR/junit-ENV_NAME.xml',
+ 'hello', 'world'
]
assert reader.getargvlist('key')[0] == expected
@@ -598,6 +614,7 @@
int_hashseed = int(hashseed)
# hashseed is random by default, so we can't assert a specific value.
assert int_hashseed > 0
+ assert envconfig.voting is True
def test_sitepackages_switch(self, tmpdir, newconfig):
config = newconfig(["--sitepackages"], "")
@@ -696,7 +713,8 @@
assert envconfig.setenv['ANOTHER_VAL'] == 'else'
@pytest.mark.parametrize("plat", ["win32", "linux2"])
- def test_passenv_as_multiline_list(self, tmpdir, newconfig, monkeypatch, plat):
+ def test_passenv_as_multiline_list(self, tmpdir, newconfig, monkeypatch,
+ plat):
monkeypatch.setattr(sys, "platform", plat)
monkeypatch.setenv("A123A", "a")
monkeypatch.setenv("A123B", "b")
@@ -726,7 +744,8 @@
assert "A123B" in envconfig.passenv
@pytest.mark.parametrize("plat", ["win32", "linux2"])
- def test_passenv_as_space_separated_list(self, tmpdir, newconfig, monkeypatch, plat):
+ def test_passenv_as_space_separated_list(self, tmpdir, newconfig,
+ monkeypatch, plat):
monkeypatch.setattr(sys, "platform", plat)
monkeypatch.setenv("A123A", "a")
monkeypatch.setenv("A123B", "b")
@@ -1112,7 +1131,7 @@
conf = newconfig([], inisource)
configs = conf.envconfigs
assert [dep.name for dep in configs['a-x'].deps] == \
- ["dep-all", "dep-a", "dep-x"]
+ ["dep-all", "dep-a", "dep-x"]
assert [dep.name for dep in configs['b'].deps] == ["dep-all", "dep-b"]
def test_factor_ops(self, newconfig):
@@ -1213,7 +1232,15 @@
configs = newconfig([], inisource).envconfigs
assert sorted(configs) == ["py27-django1.6", "py27-django1.7"]
assert [d.name for d in configs["py27-django1.6"].deps] \
- == ["Django==1.6"]
+ == ["Django==1.6"]
+
+ def test_voting(self, newconfig):
+ inisource = """
+ [testenv]
+ voting=False
+ """
+ config = newconfig([], inisource).envconfigs
+ assert config["python"].voting is False
class TestGlobalOptions:
@@ -1334,7 +1361,7 @@
"""
config = newconfig([], inisource)
assert config.envlist == \
- ["py26-dep1", "py26-dep2", "py27-dep1", "py27-dep2"]
+ ["py26-dep1", "py26-dep2", "py27-dep1", "py27-dep2"]
def test_envlist_multiline(self, newconfig):
inisource = """
@@ -1345,7 +1372,7 @@
"""
config = newconfig([], inisource)
assert config.envlist == \
- ["py27", "py34"]
+ ["py27", "py34"]
def test_minversion(self, tmpdir, newconfig, monkeypatch):
inisource = """
@@ -1355,7 +1382,8 @@
config = newconfig([], inisource)
assert config.minversion == "3.0"
- def test_skip_missing_interpreters_true(self, tmpdir, newconfig, monkeypatch):
+ def test_skip_missing_interpreters_true(self, tmpdir, newconfig,
+ monkeypatch):
inisource = """
[tox]
skip_missing_interpreters = True
@@ -1363,7 +1391,8 @@
config = newconfig([], inisource)
assert config.option.skip_missing_interpreters
- def test_skip_missing_interpreters_false(self, tmpdir, newconfig, monkeypatch):
+ def test_skip_missing_interpreters_false(self, tmpdir, newconfig,
+ monkeypatch):
inisource = """
[tox]
skip_missing_interpreters = False
@@ -1391,7 +1420,6 @@
class TestHashseedOption:
-
def _get_envconfigs(self, newconfig, args=None, tox_ini=None,
make_hashseed=None):
if args is None:
@@ -1488,6 +1516,7 @@
def make_hashseed():
next_seed[0] += 1
return str(next_seed[0])
+
# Check that make_hashseed() works.
assert make_hashseed() == '1001'
envconfigs = self._get_envconfigs(newconfig, tox_ini=tox_ini,
@@ -1555,11 +1584,11 @@
config = newconfig([], inisource)
expected = "file://%s/.pip/downloads/simple" % config.homedir
assert config.indexserver['default'].url == expected
- assert config.indexserver['local1'].url == config.indexserver['default'].url
+ assert config.indexserver['local1'].url == config.indexserver[
+ 'default'].url
class TestParseEnv:
-
def test_parse_recreate(self, newconfig):
inisource = ""
config = newconfig([], inisource)
@@ -1667,7 +1696,6 @@
class TestCommandParser:
-
def test_command_parser_for_word(self):
p = CommandParser('word')
# import pytest; pytest.set_trace()
@@ -1692,8 +1720,10 @@
p = CommandParser(complex_case)
parsed = list(p.words())
expected = [
- 'word', ' ', '[]', ' ', '[literal]', ' ', '{something}', ' ', '{some:other thing}',
- ' ', 'w', '{ord}', ' ', 'w', '{or}', 'd', ' ', 'w', '{ord}', ' ', 'w', '{o:rd}', ' ',
+ 'word', ' ', '[]', ' ', '[literal]', ' ', '{something}', ' ',
+ '{some:other thing}',
+ ' ', 'w', '{ord}', ' ', 'w', '{or}', 'd', ' ', 'w', '{ord}', ' ',
+ 'w', '{o:rd}', ' ',
'w', '{o:r}', 'd', ' ', '{w:or}', 'd',
' ', 'w[]ord', ' ', '{posargs:{a key}}',
]
@@ -1711,7 +1741,8 @@
other}""")
p = CommandParser(cmd)
parsed = list(p.words())
- assert parsed == ['cmd2', ' ', '{posargs:{item2}\n other}']
+ assert parsed == ['cmd2', ' ',
+ '{posargs:{item2}\n other}']
def test_command_parsing_for_issue_10(self):
cmd = "nosetests -v -a !deferred --with-doctest []"
diff -r 3ed5dc353a99acf57859a2dd265b5c2e973480e3 -r 5e480527c288cd6b69533c20bb7b512fd2022ffe tox/config.py
--- a/tox/config.py
+++ b/tox/config.py
@@ -473,6 +473,11 @@
name="commands", type="argvlist", default="",
help="each line specifies a test command and can use substitution.")
+ parser.add_testenv_attribute(
+ "voting", type="bool", default=True,
+ help="if set to False a failing result of this testenv will not make "
+ "tox fail")
+
class Config(object):
""" Global Tox config object. """
https://bitbucket.org/hpk42/tox/commits/5a3be83f823d/
Changeset: 5a3be83f823d
Branch: 174-voting-testenv
User: Rebecka Gulliksson
Date: 2015-08-24 09:23:25+00:00
Summary: Respect the 'voting' attribute of a testenv.
If the testenv is 'non-voting' keep processing all commands even if one of them fail and don't let it influence the return code of tox.
Affected #: 1 file
diff -r 5e480527c288cd6b69533c20bb7b512fd2022ffe -r 5a3be83f823dd16e0f08cccfabe8119e35383cc9 tox/venv.py
--- a/tox/venv.py
+++ b/tox/venv.py
@@ -351,6 +351,14 @@
self._pcall(argv, cwd=cwd, action=action, redirect=redirect,
ignore_ret=ignore_ret, testcommand=True)
except tox.exception.InvocationError as err:
+ if not self.envconfig.voting:
+ self.session.report.warning(
+ "command failed, but testenv is marked "
+ "non-voting.\n"
+ " cmd: %s" % (str(err),))
+ self.status = "non-voting fail"
+ continue # keep processing commands
+
self.session.report.error(str(err))
self.status = "commands failed"
if not self.envconfig.ignore_errors:
https://bitbucket.org/hpk42/tox/commits/934f500c04a1/
Changeset: 934f500c04a1
Branch: 174-voting-testenv
User: Rebecka Gulliksson
Date: 2015-08-24 09:24:34+00:00
Summary: Handle the 'non-voting fail' status that can occur in a non-voting testenv.
Affected #: 1 file
diff -r 5a3be83f823dd16e0f08cccfabe8119e35383cc9 -r 934f500c04a1dae50772f5e168f4ac44724b4ee4 tox/session.py
--- a/tox/session.py
+++ b/tox/session.py
@@ -570,6 +570,9 @@
elif status == "platform mismatch":
msg = " %s: %s" % (venv.envconfig.envname, str(status))
self.report.skip(msg)
+ elif status and status == "non-voting fail":
+ msg = " %s: %s" % (venv.envconfig.envname, str(status))
+ self.report.good(msg)
elif status and status != "skipped tests":
msg = " %s: %s" % (venv.envconfig.envname, str(status))
self.report.error(msg)
https://bitbucket.org/hpk42/tox/commits/a5cd51a629dd/
Changeset: a5cd51a629dd
Branch: 174-voting-testenv
User: Rebecka Gulliksson
Date: 2015-08-24 10:10:11+00:00
Summary: Added test for non-voting testenv with failing command.
Affected #: 1 file
diff -r 934f500c04a1dae50772f5e168f4ac44724b4ee4 -r a5cd51a629dde49d6cab564b67385a23c37e18b7 tests/test_venv.py
--- a/tests/test_venv.py
+++ b/tests/test_venv.py
@@ -611,3 +611,16 @@
x4 = venv.getcommandpath("x", cwd=tmpdir)
assert x4.endswith(os.sep + 'x')
mocksession.report.expect("warning", "*test command found but not*")
+
+
+def test_non_voting_failing_cmd(newmocksession):
+ mocksession = newmocksession([], """
+ [testenv]
+ commands=testenv_fail
+ voting=False
+ """)
+
+ venv = mocksession.getenv('python')
+ venv.test()
+ assert venv.status == "non-voting fail"
+ mocksession.report.expect("warning", "*command failed, but testenv*")
\ No newline at end of file
https://bitbucket.org/hpk42/tox/commits/7b51c70dee73/
Changeset: 7b51c70dee73
Branch: 174-voting-testenv
User: Rebecka Gulliksson
Date: 2015-08-24 10:21:51+00:00
Summary: Reverted unnecessary code formatting changes.
Affected #: 1 file
diff -r a5cd51a629dde49d6cab564b67385a23c37e18b7 -r 7b51c70dee7383014228201340d1e4578043d5c5 tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -32,7 +32,7 @@
deps=
world1
:xyz:http://hello/world
- """ % (tmpdir,))
+ """ % (tmpdir, ))
assert config.toxworkdir == tmpdir
assert len(config.envconfigs) == 2
assert config.envconfigs['py1'].envdir == tmpdir.join("py1")
@@ -92,18 +92,12 @@
"""
Ensure correct parseini._is_same_dep is working with a few samples.
"""
- assert DepOption._is_same_dep('pkg_hello-world3==1.0',
- 'pkg_hello-world3')
- assert DepOption._is_same_dep('pkg_hello-world3==1.0',
- 'pkg_hello-world3>=2.0')
- assert DepOption._is_same_dep('pkg_hello-world3==1.0',
- 'pkg_hello-world3>2.0')
- assert DepOption._is_same_dep('pkg_hello-world3==1.0',
- 'pkg_hello-world3<2.0')
- assert DepOption._is_same_dep('pkg_hello-world3==1.0',
- 'pkg_hello-world3<=2.0')
- assert not DepOption._is_same_dep('pkg_hello-world3==1.0',
- 'otherpkg>=2.0')
+ assert DepOption._is_same_dep('pkg_hello-world3==1.0', 'pkg_hello-world3')
+ assert DepOption._is_same_dep('pkg_hello-world3==1.0', 'pkg_hello-world3>=2.0')
+ assert DepOption._is_same_dep('pkg_hello-world3==1.0', 'pkg_hello-world3>2.0')
+ assert DepOption._is_same_dep('pkg_hello-world3==1.0', 'pkg_hello-world3<2.0')
+ assert DepOption._is_same_dep('pkg_hello-world3==1.0', 'pkg_hello-world3<=2.0')
+ assert not DepOption._is_same_dep('pkg_hello-world3==1.0', 'otherpkg>=2.0')
class TestConfigPlatform:
@@ -115,8 +109,7 @@
assert len(config.envconfigs) == 1
assert config.envconfigs['py1'].platform == "linux2"
- def test_config_parse_platform_rex(self, newconfig, mocksession,
- monkeypatch):
+ def test_config_parse_platform_rex(self, newconfig, mocksession, monkeypatch):
config = newconfig([], """
[testenv:py1]
platform = a123|b123
@@ -133,8 +126,7 @@
assert not venv.matching_platform()
@pytest.mark.parametrize("plat", ["win", "lin", ])
- def test_config_parse_platform_with_factors(self, newconfig, plat,
- monkeypatch):
+ def test_config_parse_platform_with_factors(self, newconfig, plat, monkeypatch):
monkeypatch.setattr(sys, "platform", "win32")
config = newconfig([], """
[tox]
@@ -281,8 +273,7 @@
[mydefault]
key2={xyz}
""")
- reader = SectionReader("mydefault", config._cfg,
- fallbacksections=['mydefault'])
+ reader = SectionReader("mydefault", config._cfg, fallbacksections=['mydefault'])
assert reader is not None
with py.test.raises(tox.exception.ConfigError):
reader.getstring("key2")
@@ -294,8 +285,7 @@
[section]
key=value
""")
- reader = SectionReader("section", config._cfg,
- fallbacksections=['mydefault'])
+ reader = SectionReader("section", config._cfg, fallbacksections=['mydefault'])
x = reader.getstring("key2")
assert x == "value2"
x = reader.getstring("key3")
@@ -310,8 +300,7 @@
[section]
key={value}
""")
- reader = SectionReader("section", config._cfg,
- fallbacksections=['mydefault'])
+ reader = SectionReader("section", config._cfg, fallbacksections=['mydefault'])
reader.addsubstitutions(value="newvalue", value2="newvalue2")
x = reader.getstring("key2")
assert x == "newvalue2"
@@ -363,8 +352,7 @@
with py.test.raises(tox.exception.ConfigError):
reader.getstring("key2")
- def test_getstring_environment_substitution_with_default(self, monkeypatch,
- newconfig):
+ def test_getstring_environment_substitution_with_default(self, monkeypatch, newconfig):
monkeypatch.setenv("KEY1", "hello")
config = newconfig("""
[section]
@@ -506,9 +494,7 @@
x = reader.getargvlist("key2")
assert x == [["cmd1", "-f", "foo", "bar baz"]]
- def test_positional_arguments_are_only_replaced_when_standing_alone(self,
- tmpdir,
- newconfig):
+ def test_positional_arguments_are_only_replaced_when_standing_alone(self, tmpdir, newconfig):
config = newconfig("""
[section]
key=
@@ -535,12 +521,10 @@
config = newconfig(inisource)
reader = SectionReader("section", config._cfg)
posargs = ['hello', 'world']
- reader.addsubstitutions(posargs, envlogdir='ENV_LOG_DIR',
- envname='ENV_NAME')
+ reader.addsubstitutions(posargs, envlogdir='ENV_LOG_DIR', envname='ENV_NAME')
expected = [
- 'py.test', '-n5', '--junitxml=ENV_LOG_DIR/junit-ENV_NAME.xml',
- 'hello', 'world'
+ 'py.test', '-n5', '--junitxml=ENV_LOG_DIR/junit-ENV_NAME.xml', 'hello', 'world'
]
assert reader.getargvlist('key')[0] == expected
@@ -713,8 +697,7 @@
assert envconfig.setenv['ANOTHER_VAL'] == 'else'
@pytest.mark.parametrize("plat", ["win32", "linux2"])
- def test_passenv_as_multiline_list(self, tmpdir, newconfig, monkeypatch,
- plat):
+ def test_passenv_as_multiline_list(self, tmpdir, newconfig, monkeypatch, plat):
monkeypatch.setattr(sys, "platform", plat)
monkeypatch.setenv("A123A", "a")
monkeypatch.setenv("A123B", "b")
@@ -744,8 +727,7 @@
assert "A123B" in envconfig.passenv
@pytest.mark.parametrize("plat", ["win32", "linux2"])
- def test_passenv_as_space_separated_list(self, tmpdir, newconfig,
- monkeypatch, plat):
+ def test_passenv_as_space_separated_list(self, tmpdir, newconfig, monkeypatch, plat):
monkeypatch.setattr(sys, "platform", plat)
monkeypatch.setenv("A123A", "a")
monkeypatch.setenv("A123B", "b")
@@ -1131,7 +1113,7 @@
conf = newconfig([], inisource)
configs = conf.envconfigs
assert [dep.name for dep in configs['a-x'].deps] == \
- ["dep-all", "dep-a", "dep-x"]
+ ["dep-all", "dep-a", "dep-x"]
assert [dep.name for dep in configs['b'].deps] == ["dep-all", "dep-b"]
def test_factor_ops(self, newconfig):
@@ -1232,7 +1214,7 @@
configs = newconfig([], inisource).envconfigs
assert sorted(configs) == ["py27-django1.6", "py27-django1.7"]
assert [d.name for d in configs["py27-django1.6"].deps] \
- == ["Django==1.6"]
+ == ["Django==1.6"]
def test_voting(self, newconfig):
inisource = """
@@ -1361,7 +1343,7 @@
"""
config = newconfig([], inisource)
assert config.envlist == \
- ["py26-dep1", "py26-dep2", "py27-dep1", "py27-dep2"]
+ ["py26-dep1", "py26-dep2", "py27-dep1", "py27-dep2"]
def test_envlist_multiline(self, newconfig):
inisource = """
@@ -1372,7 +1354,7 @@
"""
config = newconfig([], inisource)
assert config.envlist == \
- ["py27", "py34"]
+ ["py27", "py34"]
def test_minversion(self, tmpdir, newconfig, monkeypatch):
inisource = """
@@ -1382,8 +1364,7 @@
config = newconfig([], inisource)
assert config.minversion == "3.0"
- def test_skip_missing_interpreters_true(self, tmpdir, newconfig,
- monkeypatch):
+ def test_skip_missing_interpreters_true(self, tmpdir, newconfig, monkeypatch):
inisource = """
[tox]
skip_missing_interpreters = True
@@ -1391,8 +1372,7 @@
config = newconfig([], inisource)
assert config.option.skip_missing_interpreters
- def test_skip_missing_interpreters_false(self, tmpdir, newconfig,
- monkeypatch):
+ def test_skip_missing_interpreters_false(self, tmpdir, newconfig, monkeypatch):
inisource = """
[tox]
skip_missing_interpreters = False
@@ -1420,6 +1400,7 @@
class TestHashseedOption:
+
def _get_envconfigs(self, newconfig, args=None, tox_ini=None,
make_hashseed=None):
if args is None:
@@ -1516,7 +1497,6 @@
def make_hashseed():
next_seed[0] += 1
return str(next_seed[0])
-
# Check that make_hashseed() works.
assert make_hashseed() == '1001'
envconfigs = self._get_envconfigs(newconfig, tox_ini=tox_ini,
@@ -1584,11 +1564,11 @@
config = newconfig([], inisource)
expected = "file://%s/.pip/downloads/simple" % config.homedir
assert config.indexserver['default'].url == expected
- assert config.indexserver['local1'].url == config.indexserver[
- 'default'].url
+ assert config.indexserver['local1'].url == config.indexserver['default'].url
class TestParseEnv:
+
def test_parse_recreate(self, newconfig):
inisource = ""
config = newconfig([], inisource)
@@ -1696,6 +1676,7 @@
class TestCommandParser:
+
def test_command_parser_for_word(self):
p = CommandParser('word')
# import pytest; pytest.set_trace()
@@ -1720,10 +1701,8 @@
p = CommandParser(complex_case)
parsed = list(p.words())
expected = [
- 'word', ' ', '[]', ' ', '[literal]', ' ', '{something}', ' ',
- '{some:other thing}',
- ' ', 'w', '{ord}', ' ', 'w', '{or}', 'd', ' ', 'w', '{ord}', ' ',
- 'w', '{o:rd}', ' ',
+ 'word', ' ', '[]', ' ', '[literal]', ' ', '{something}', ' ', '{some:other thing}',
+ ' ', 'w', '{ord}', ' ', 'w', '{or}', 'd', ' ', 'w', '{ord}', ' ', 'w', '{o:rd}', ' ',
'w', '{o:r}', 'd', ' ', '{w:or}', 'd',
' ', 'w[]ord', ' ', '{posargs:{a key}}',
]
@@ -1741,8 +1720,7 @@
other}""")
p = CommandParser(cmd)
parsed = list(p.words())
- assert parsed == ['cmd2', ' ',
- '{posargs:{item2}\n other}']
+ assert parsed == ['cmd2', ' ', '{posargs:{item2}\n other}']
def test_command_parsing_for_issue_10(self):
cmd = "nosetests -v -a !deferred --with-doctest []"
https://bitbucket.org/hpk42/tox/commits/7fd09ff4368f/
Changeset: 7fd09ff4368f
Branch: 174-voting-testenv
User: Rebecka Gulliksson
Date: 2015-08-24 10:57:09+00:00
Summary: Renamed testenv attribute from 'voting' to 'ignore_outcome'.
Affected #: 4 files
diff -r 7b51c70dee7383014228201340d1e4578043d5c5 -r 7fd09ff4368f6c737b1e232c8e45fa71ae845b5c tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -598,7 +598,7 @@
int_hashseed = int(hashseed)
# hashseed is random by default, so we can't assert a specific value.
assert int_hashseed > 0
- assert envconfig.voting is True
+ assert envconfig.ignore_outcome is False
def test_sitepackages_switch(self, tmpdir, newconfig):
config = newconfig(["--sitepackages"], "")
@@ -1216,13 +1216,13 @@
assert [d.name for d in configs["py27-django1.6"].deps] \
== ["Django==1.6"]
- def test_voting(self, newconfig):
+ def test_ignore_outcome(self, newconfig):
inisource = """
[testenv]
- voting=False
+ ignore_outcome=True
"""
config = newconfig([], inisource).envconfigs
- assert config["python"].voting is False
+ assert config["python"].ignore_outcome is True
class TestGlobalOptions:
diff -r 7b51c70dee7383014228201340d1e4578043d5c5 -r 7fd09ff4368f6c737b1e232c8e45fa71ae845b5c tests/test_venv.py
--- a/tests/test_venv.py
+++ b/tests/test_venv.py
@@ -7,6 +7,7 @@
from tox.venv import * # noqa
from tox.interpreters import NoInterpreterInfo
+
# def test_global_virtualenv(capfd):
# v = VirtualEnv()
# l = v.list()
@@ -613,14 +614,15 @@
mocksession.report.expect("warning", "*test command found but not*")
-def test_non_voting_failing_cmd(newmocksession):
+def test_ignore_outcome_failing_cmd(newmocksession):
mocksession = newmocksession([], """
[testenv]
commands=testenv_fail
- voting=False
+ ignore_outcome=True
""")
venv = mocksession.getenv('python')
venv.test()
- assert venv.status == "non-voting fail"
- mocksession.report.expect("warning", "*command failed, but testenv*")
\ No newline at end of file
+ assert venv.status == "ignored failed command"
+ mocksession.report.expect("warning", "*command failed but result from "
+ "testenv is ignored*")
diff -r 7b51c70dee7383014228201340d1e4578043d5c5 -r 7fd09ff4368f6c737b1e232c8e45fa71ae845b5c tox/config.py
--- a/tox/config.py
+++ b/tox/config.py
@@ -474,9 +474,9 @@
help="each line specifies a test command and can use substitution.")
parser.add_testenv_attribute(
- "voting", type="bool", default=True,
- help="if set to False a failing result of this testenv will not make "
- "tox fail")
+ "ignore_outcome", type="bool", default=False,
+ help="if set to True a failing result of this testenv will not make "
+ "tox fail, only a warning will be produced")
class Config(object):
diff -r 7b51c70dee7383014228201340d1e4578043d5c5 -r 7fd09ff4368f6c737b1e232c8e45fa71ae845b5c tox/venv.py
--- a/tox/venv.py
+++ b/tox/venv.py
@@ -351,13 +351,12 @@
self._pcall(argv, cwd=cwd, action=action, redirect=redirect,
ignore_ret=ignore_ret, testcommand=True)
except tox.exception.InvocationError as err:
- if not self.envconfig.voting:
+ if self.envconfig.ignore_outcome:
self.session.report.warning(
- "command failed, but testenv is marked "
- "non-voting.\n"
+ "command failed but result from testenv is ignored\n"
" cmd: %s" % (str(err),))
- self.status = "non-voting fail"
- continue # keep processing commands
+ self.status = "ignored failed command"
+ continue # keep processing commands
self.session.report.error(str(err))
self.status = "commands failed"
https://bitbucket.org/hpk42/tox/commits/28bab1e0d038/
Changeset: 28bab1e0d038
Branch: 174-voting-testenv
User: Rebecka Gulliksson
Date: 2015-09-21 12:13:30+00:00
Summary: Fixed last rename from 'voting' to 'ignore'.
Affected #: 1 file
diff -r 7fd09ff4368f6c737b1e232c8e45fa71ae845b5c -r 28bab1e0d03847b9805c360a245cd979334b298d tox/session.py
--- a/tox/session.py
+++ b/tox/session.py
@@ -570,7 +570,7 @@
elif status == "platform mismatch":
msg = " %s: %s" % (venv.envconfig.envname, str(status))
self.report.skip(msg)
- elif status and status == "non-voting fail":
+ elif status and status == "ignored failed command":
msg = " %s: %s" % (venv.envconfig.envname, str(status))
self.report.good(msg)
elif status and status != "skipped tests":
https://bitbucket.org/hpk42/tox/commits/b799af1ea6e8/
Changeset: b799af1ea6e8
User: hpk42
Date: 2015-11-06 16:44:55+00:00
Summary: Merged in rebeckag/tox/174-voting-testenv (pull request #170)
#174 voting testenv
Affected #: 5 files
diff -r f68c14edc27afbba4969856a40cf46d9664700d4 -r b799af1ea6e81518882de126d75a4707393af32d tests/test_config.py
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -640,6 +640,7 @@
int_hashseed = int(hashseed)
# hashseed is random by default, so we can't assert a specific value.
assert int_hashseed > 0
+ assert envconfig.ignore_outcome is False
def test_sitepackages_switch(self, tmpdir, newconfig):
config = newconfig(["--sitepackages"], "")
@@ -1269,6 +1270,14 @@
assert [d.name for d in configs["py27-django1.6"].deps] \
== ["Django==1.6"]
+ def test_ignore_outcome(self, newconfig):
+ inisource = """
+ [testenv]
+ ignore_outcome=True
+ """
+ config = newconfig([], inisource).envconfigs
+ assert config["python"].ignore_outcome is True
+
class TestGlobalOptions:
def test_notest(self, newconfig):
diff -r f68c14edc27afbba4969856a40cf46d9664700d4 -r b799af1ea6e81518882de126d75a4707393af32d tests/test_venv.py
--- a/tests/test_venv.py
+++ b/tests/test_venv.py
@@ -7,6 +7,7 @@
from tox.venv import * # noqa
from tox.interpreters import NoInterpreterInfo
+
# def test_global_virtualenv(capfd):
# v = VirtualEnv()
# l = v.list()
@@ -611,3 +612,17 @@
x4 = venv.getcommandpath("x", cwd=tmpdir)
assert x4.endswith(os.sep + 'x')
mocksession.report.expect("warning", "*test command found but not*")
+
+
+def test_ignore_outcome_failing_cmd(newmocksession):
+ mocksession = newmocksession([], """
+ [testenv]
+ commands=testenv_fail
+ ignore_outcome=True
+ """)
+
+ venv = mocksession.getenv('python')
+ venv.test()
+ assert venv.status == "ignored failed command"
+ mocksession.report.expect("warning", "*command failed but result from "
+ "testenv is ignored*")
diff -r f68c14edc27afbba4969856a40cf46d9664700d4 -r b799af1ea6e81518882de126d75a4707393af32d tox/config.py
--- a/tox/config.py
+++ b/tox/config.py
@@ -476,6 +476,11 @@
name="commands", type="argvlist", default="",
help="each line specifies a test command and can use substitution.")
+ parser.add_testenv_attribute(
+ "ignore_outcome", type="bool", default=False,
+ help="if set to True a failing result of this testenv will not make "
+ "tox fail, only a warning will be produced")
+
class Config(object):
""" Global Tox config object. """
diff -r f68c14edc27afbba4969856a40cf46d9664700d4 -r b799af1ea6e81518882de126d75a4707393af32d tox/session.py
--- a/tox/session.py
+++ b/tox/session.py
@@ -570,6 +570,9 @@
elif status == "platform mismatch":
msg = " %s: %s" % (venv.envconfig.envname, str(status))
self.report.skip(msg)
+ elif status and status == "ignored failed command":
+ msg = " %s: %s" % (venv.envconfig.envname, str(status))
+ self.report.good(msg)
elif status and status != "skipped tests":
msg = " %s: %s" % (venv.envconfig.envname, str(status))
self.report.error(msg)
diff -r f68c14edc27afbba4969856a40cf46d9664700d4 -r b799af1ea6e81518882de126d75a4707393af32d tox/venv.py
--- a/tox/venv.py
+++ b/tox/venv.py
@@ -351,6 +351,13 @@
self._pcall(argv, cwd=cwd, action=action, redirect=redirect,
ignore_ret=ignore_ret, testcommand=True)
except tox.exception.InvocationError as err:
+ if self.envconfig.ignore_outcome:
+ self.session.report.warning(
+ "command failed but result from testenv is ignored\n"
+ " cmd: %s" % (str(err),))
+ self.status = "ignored failed command"
+ continue # keep processing commands
+
self.session.report.error(str(err))
self.status = "commands failed"
if not self.envconfig.ignore_errors:
Repository URL: https://bitbucket.org/hpk42/tox/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
More information about the pytest-commit
mailing list