Add initial tests for config.py error handling
This commit is contained in:
parent
4da9b8c495
commit
5efce10c2c
@ -659,16 +659,18 @@ def init(parent=None):
|
||||
config_commands = ConfigCommands(instance, key_instance)
|
||||
objreg.register('config-commands', config_commands)
|
||||
|
||||
global _errbox
|
||||
try:
|
||||
config_api = configfiles.read_config_py()
|
||||
except configexc.ConfigFileErrors as e:
|
||||
global _errbox
|
||||
_errbox = msgbox.msgbox(parent=None,
|
||||
title="Error while reading config",
|
||||
text=e.to_html(),
|
||||
icon=QMessageBox.Warning,
|
||||
plain_text=False)
|
||||
config_api = None
|
||||
else:
|
||||
_errbox = None
|
||||
|
||||
if getattr(config_api, 'load_autoconfig', True):
|
||||
instance.read_yaml()
|
||||
|
@ -19,6 +19,7 @@
|
||||
"""Tests for qutebrowser.config.config."""
|
||||
|
||||
import copy
|
||||
import types
|
||||
import unittest.mock
|
||||
|
||||
import pytest
|
||||
@ -795,6 +796,16 @@ class TestContainer:
|
||||
container.content.cookies.store = False
|
||||
assert config_stub._values['content.cookies.store'] is False
|
||||
|
||||
def test_confapi_errors(self, container):
|
||||
configapi = types.SimpleNamespace(errors=[])
|
||||
container._configapi = configapi
|
||||
container.tabs.foobar # pylint: disable=pointless-statement
|
||||
|
||||
assert len(configapi.errors) == 1
|
||||
error = configapi.errors[0]
|
||||
assert error.text == "While getting 'tabs.foobar'"
|
||||
assert str(error.exception) == "No option 'tabs.foobar'"
|
||||
|
||||
|
||||
class StyleObj(QObject):
|
||||
|
||||
@ -866,7 +877,9 @@ def init_patch(qapp, fake_save_manager, monkeypatch, config_tmpdir,
|
||||
|
||||
|
||||
@pytest.mark.parametrize('load_autoconfig', [True, False])
|
||||
def test_init(init_patch, fake_save_manager, config_tmpdir, load_autoconfig):
|
||||
@pytest.mark.parametrize('config_py_errors', [True, False])
|
||||
def test_init(qtbot, init_patch, fake_save_manager, config_tmpdir,
|
||||
load_autoconfig, config_py_errors):
|
||||
autoconfig_file = config_tmpdir / 'autoconfig.yml'
|
||||
config_py_file = config_tmpdir / 'config.py'
|
||||
|
||||
@ -875,10 +888,20 @@ def test_init(init_patch, fake_save_manager, config_tmpdir, load_autoconfig):
|
||||
config_py_lines = ['c.colors.hints.bg = "red"']
|
||||
if not load_autoconfig:
|
||||
config_py_lines.append('config.load_autoconfig = False')
|
||||
if config_py_errors:
|
||||
config_py_lines.append('c.foo = 42')
|
||||
|
||||
config_py_file.write_text('\n'.join(config_py_lines), 'utf-8', ensure=True)
|
||||
|
||||
config.init()
|
||||
|
||||
if config_py_errors:
|
||||
qtbot.add_widget(config._errbox)
|
||||
expected = "Errors occurred while reading config.py:"
|
||||
assert config._errbox.text().strip().startswith(expected)
|
||||
else:
|
||||
assert config._errbox is None
|
||||
|
||||
objreg.get('config-commands')
|
||||
assert isinstance(config.instance, config.Config)
|
||||
assert isinstance(config.key_instance, config.KeyConfig)
|
||||
|
@ -18,6 +18,8 @@
|
||||
|
||||
"""Tests for qutebrowser.config.configexc."""
|
||||
|
||||
import textwrap
|
||||
|
||||
from qutebrowser.config import configexc
|
||||
from qutebrowser.utils import usertypes
|
||||
|
||||
@ -43,3 +45,34 @@ def test_duplicate_key_error():
|
||||
e = configexc.DuplicateKeyError('asdf')
|
||||
assert isinstance(e, configexc.KeybindingError)
|
||||
assert str(e) == "Duplicate key asdf"
|
||||
|
||||
|
||||
def test_config_file_errors():
|
||||
err1 = configexc.ConfigErrorDesc("Error text 1", Exception("Exception 1"))
|
||||
err2 = configexc.ConfigErrorDesc("Error text 2", Exception("Exception 2"),
|
||||
"Fake traceback")
|
||||
errors = configexc.ConfigFileErrors("config.py", [err1, err2])
|
||||
html = errors.to_html()
|
||||
assert textwrap.dedent(html) == textwrap.dedent("""
|
||||
Errors occurred while reading config.py:
|
||||
|
||||
<ul>
|
||||
|
||||
<li>
|
||||
<b>Error text 1</b>: Exception 1
|
||||
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<b>Error text 2</b>: Exception 2
|
||||
|
||||
<pre>
|
||||
Fake traceback
|
||||
</pre>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
""")
|
||||
# Make sure the traceback is not indented
|
||||
assert '<pre>\nFake traceback\n' in html
|
||||
|
Loading…
Reference in New Issue
Block a user