Added basic fix and test
This commit is contained in:
parent
3b3d237f07
commit
2c7f94fdb9
|
@ -1192,12 +1192,15 @@ class Config(object):
|
||||||
# and -o foo1=bar1 -o foo2=bar2 options
|
# and -o foo1=bar1 -o foo2=bar2 options
|
||||||
# always use the last item if multiple value set for same ini-name,
|
# 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
|
# 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_list in self._override_ini:
|
||||||
for ini_config in ini_config_list:
|
for ini_config in ini_config_list:
|
||||||
try:
|
try:
|
||||||
(key, user_ini_value) = ini_config.split("=", 1)
|
(key, user_ini_value) = ini_config.split("=", 1)
|
||||||
|
first_override_set = True
|
||||||
except ValueError:
|
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:
|
if key == name:
|
||||||
value = user_ini_value
|
value = user_ini_value
|
||||||
return value
|
return value
|
||||||
|
|
|
@ -860,3 +860,40 @@ class TestOverrideIniArgs(object):
|
||||||
config = get_config()
|
config = get_config()
|
||||||
config._preparse([], addopts=True)
|
config._preparse([], addopts=True)
|
||||||
assert config._override_ini == [['cache_dir=%s' % cache_dir]]
|
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()
|
||||||
|
|
Loading…
Reference in New Issue