Skip to content

Commit

Permalink
Merge pull request #1 from atoolan/override-ini-fix
Browse files Browse the repository at this point in the history
Added basic fix and test
  • Loading branch information
arcoyle authored Jan 20, 2018
2 parents 794fb19 + 95f9450 commit 71a7dde
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 1 deletion.
5 changes: 4 additions & 1 deletion _pytest/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -1191,12 +1191,15 @@ def _get_override_ini_value(self, name):
# and -o foo1=bar1 -o foo2=bar2 options
# always use the last item if multiple value set for same ini-name,
# e.g. -o foo=bar1 -o foo=bar2 will set foo to bar2
first_override_set = False
for ini_config_list in self._override_ini:
for ini_config in ini_config_list:
try:
(key, user_ini_value) = ini_config.split("=", 1)
first_override_set = True
except ValueError:
raise UsageError("-o/--override-ini expects option=value style.")
if not first_override_set:
raise UsageError("-o/--override-ini expects option=value style.")
if key == name:
value = user_ini_value
return value
Expand Down
37 changes: 37 additions & 0 deletions testing/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -860,3 +860,40 @@ def test_addopts_before_initini(self, testdir, tmpdir, monkeypatch):
config = get_config()
config._preparse([], addopts=True)
assert config._override_ini == [['cache_dir=%s' % cache_dir]]

def test_all_the_things(self, testdir):
testdir.makeconftest("""
def pytest_addoption(parser):
addini = parser.addini
addini("custom_option_1", "", default="o1")
addini("custom_option_2", "", default="o2")""")
testdir.makepyfile("""
def test_multiple_options(pytestconfig):
prefix = "custom_option"
for x in range(1, 3):
ini_value=pytestconfig.getini("%s_%d" % (prefix, x))
print('\\nini%d:%s' % (x, ini_value))""")

result = testdir.runpytest(
"--override-ini", 'custom_option_1=fulldir=/tmp/user1',
'custom_option_2=url=/tmp/user2?a=b&d=e',
"test_all_the_things.py")
assert "ERROR: -o/--override-ini expects option=value style." not in result.stderr.str()

def test_throw_exception_if_not_value_pair(self, testdir):
testdir.makeconftest("""
def pytest_addoption(parser):
addini = parser.addini
addini("custom_option_1", "", default="o1")
addini("custom_option_2", "", default="o2")""")
testdir.makepyfile("""
def test_multiple_options(pytestconfig):
prefix = "custom_option"
for x in range(1, 3):
ini_value=pytestconfig.getini("%s_%d" % (prefix, x))
print('\\nini%d:%s' % (x, ini_value))""")

result = testdir.runpytest(
"--override-ini", 'custom_option_1',
"test_all_the_things.py")
assert "ERROR: -o/--override-ini expects option=value style." in result.stderr.str()

0 comments on commit 71a7dde

Please sign in to comment.