Validate config separately from migrations
It makes for cleaner code, and it makes sure the target of renamed options actually exists.
This commit is contained in:
parent
e0dd7970d8
commit
298dcb4c90
@ -166,6 +166,7 @@ class YamlConfig(QObject):
|
|||||||
self._dirty = False
|
self._dirty = False
|
||||||
|
|
||||||
self._handle_migrations()
|
self._handle_migrations()
|
||||||
|
self._validate()
|
||||||
|
|
||||||
def _handle_migrations(self):
|
def _handle_migrations(self):
|
||||||
"""Handle unknown/renamed keys."""
|
"""Handle unknown/renamed keys."""
|
||||||
@ -178,9 +179,11 @@ class YamlConfig(QObject):
|
|||||||
elif name in configdata.MIGRATIONS.deleted:
|
elif name in configdata.MIGRATIONS.deleted:
|
||||||
log.config.debug("Removing {}".format(name))
|
log.config.debug("Removing {}".format(name))
|
||||||
del self._values[name]
|
del self._values[name]
|
||||||
elif name in configdata.DATA:
|
|
||||||
pass
|
def _validate(self):
|
||||||
else:
|
"""Make sure all settings exist."""
|
||||||
|
for name in self._values:
|
||||||
|
if name not in configdata.DATA:
|
||||||
desc = configexc.ConfigErrorDesc(
|
desc = configexc.ConfigErrorDesc(
|
||||||
"While loading options",
|
"While loading options",
|
||||||
"Unknown option {}".format(name))
|
"Unknown option {}".format(name))
|
||||||
|
@ -145,7 +145,8 @@ class TestYaml:
|
|||||||
autoconfig = config_tmpdir / 'autoconfig.yml'
|
autoconfig = config_tmpdir / 'autoconfig.yml'
|
||||||
autoconfig.write_text('global:\n old: value', encoding='utf-8')
|
autoconfig.write_text('global:\n old: value', encoding='utf-8')
|
||||||
|
|
||||||
monkeypatch.setattr(configdata.MIGRATIONS, 'renamed', {'old': 'new'})
|
monkeypatch.setattr(configdata.MIGRATIONS, 'renamed',
|
||||||
|
{'old': 'tabs.show'})
|
||||||
|
|
||||||
yaml.load()
|
yaml.load()
|
||||||
yaml._save()
|
yaml._save()
|
||||||
@ -154,6 +155,22 @@ class TestYaml:
|
|||||||
assert ' old:' not in lines
|
assert ' old:' not in lines
|
||||||
assert ' new:' not in lines
|
assert ' new:' not in lines
|
||||||
|
|
||||||
|
def test_renamed_key_unknown_target(self, monkeypatch, yaml, config_tmpdir):
|
||||||
|
"""A key marked as renamed with invalid name should raise an error."""
|
||||||
|
autoconfig = config_tmpdir / 'autoconfig.yml'
|
||||||
|
autoconfig.write_text('global:\n old: value', encoding='utf-8')
|
||||||
|
|
||||||
|
monkeypatch.setattr(configdata.MIGRATIONS, 'renamed',
|
||||||
|
{'old': 'new'})
|
||||||
|
|
||||||
|
with pytest.raises(configexc.ConfigFileErrors) as excinfo:
|
||||||
|
yaml.load()
|
||||||
|
|
||||||
|
assert len(excinfo.value.errors) == 1
|
||||||
|
error = excinfo.value.errors[0]
|
||||||
|
assert error.text == "While loading options"
|
||||||
|
assert str(error.exception) == "Unknown option new"
|
||||||
|
|
||||||
@pytest.mark.parametrize('old_config', [
|
@pytest.mark.parametrize('old_config', [
|
||||||
None,
|
None,
|
||||||
'global:\n colors.hints.fg: magenta',
|
'global:\n colors.hints.fg: magenta',
|
||||||
|
Loading…
Reference in New Issue
Block a user