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)
|
config_commands = ConfigCommands(instance, key_instance)
|
||||||
objreg.register('config-commands', config_commands)
|
objreg.register('config-commands', config_commands)
|
||||||
|
|
||||||
|
global _errbox
|
||||||
try:
|
try:
|
||||||
config_api = configfiles.read_config_py()
|
config_api = configfiles.read_config_py()
|
||||||
except configexc.ConfigFileErrors as e:
|
except configexc.ConfigFileErrors as e:
|
||||||
global _errbox
|
|
||||||
_errbox = msgbox.msgbox(parent=None,
|
_errbox = msgbox.msgbox(parent=None,
|
||||||
title="Error while reading config",
|
title="Error while reading config",
|
||||||
text=e.to_html(),
|
text=e.to_html(),
|
||||||
icon=QMessageBox.Warning,
|
icon=QMessageBox.Warning,
|
||||||
plain_text=False)
|
plain_text=False)
|
||||||
config_api = None
|
config_api = None
|
||||||
|
else:
|
||||||
|
_errbox = None
|
||||||
|
|
||||||
if getattr(config_api, 'load_autoconfig', True):
|
if getattr(config_api, 'load_autoconfig', True):
|
||||||
instance.read_yaml()
|
instance.read_yaml()
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
"""Tests for qutebrowser.config.config."""
|
"""Tests for qutebrowser.config.config."""
|
||||||
|
|
||||||
import copy
|
import copy
|
||||||
|
import types
|
||||||
import unittest.mock
|
import unittest.mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@ -795,6 +796,16 @@ class TestContainer:
|
|||||||
container.content.cookies.store = False
|
container.content.cookies.store = False
|
||||||
assert config_stub._values['content.cookies.store'] is 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):
|
class StyleObj(QObject):
|
||||||
|
|
||||||
@ -866,7 +877,9 @@ def init_patch(qapp, fake_save_manager, monkeypatch, config_tmpdir,
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('load_autoconfig', [True, False])
|
@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'
|
autoconfig_file = config_tmpdir / 'autoconfig.yml'
|
||||||
config_py_file = config_tmpdir / 'config.py'
|
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"']
|
config_py_lines = ['c.colors.hints.bg = "red"']
|
||||||
if not load_autoconfig:
|
if not load_autoconfig:
|
||||||
config_py_lines.append('config.load_autoconfig = False')
|
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_py_file.write_text('\n'.join(config_py_lines), 'utf-8', ensure=True)
|
||||||
|
|
||||||
config.init()
|
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')
|
objreg.get('config-commands')
|
||||||
assert isinstance(config.instance, config.Config)
|
assert isinstance(config.instance, config.Config)
|
||||||
assert isinstance(config.key_instance, config.KeyConfig)
|
assert isinstance(config.key_instance, config.KeyConfig)
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
|
|
||||||
"""Tests for qutebrowser.config.configexc."""
|
"""Tests for qutebrowser.config.configexc."""
|
||||||
|
|
||||||
|
import textwrap
|
||||||
|
|
||||||
from qutebrowser.config import configexc
|
from qutebrowser.config import configexc
|
||||||
from qutebrowser.utils import usertypes
|
from qutebrowser.utils import usertypes
|
||||||
|
|
||||||
@ -43,3 +45,34 @@ def test_duplicate_key_error():
|
|||||||
e = configexc.DuplicateKeyError('asdf')
|
e = configexc.DuplicateKeyError('asdf')
|
||||||
assert isinstance(e, configexc.KeybindingError)
|
assert isinstance(e, configexc.KeybindingError)
|
||||||
assert str(e) == "Duplicate key asdf"
|
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