summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <git@the-compiler.org>2017-10-12 18:26:54 +0200
committerFlorian Bruhin <git@the-compiler.org>2017-10-12 18:26:54 +0200
commit4f870f902c086d1cf2cecb33018ccc7a338c7057 (patch)
tree721cb0a2efbf25eba91e5b3ad45d8f1ac11b1e7b
parente9f94492370c05d443ee58b1a2924172edf2d1ef (diff)
downloadqutebrowser-4f870f902c086d1cf2cecb33018ccc7a338c7057.tar.gz
qutebrowser-4f870f902c086d1cf2cecb33018ccc7a338c7057.zip
Fix loading of monospace fonts in configtypes.QtFont
See #3096
-rw-r--r--qutebrowser/config/configtypes.py2
-rw-r--r--tests/unit/config/test_configinit.py36
2 files changed, 32 insertions, 6 deletions
diff --git a/qutebrowser/config/configtypes.py b/qutebrowser/config/configtypes.py
index ace0900f9..da77401ac 100644
--- a/qutebrowser/config/configtypes.py
+++ b/qutebrowser/config/configtypes.py
@@ -1068,7 +1068,7 @@ class QtFont(Font):
raise ValueError("Unexpected size unit in {!r}!".format(
size)) # pragma: no cover
- if family == 'monospace':
+ if family == 'monospace' and self.monospace_fonts is not None:
family = self.monospace_fonts
# The Qt CSS parser handles " and ' before passing the string to
# QFont.setFamily. We could do proper CSS-like parsing here, but since
diff --git a/tests/unit/config/test_configinit.py b/tests/unit/config/test_configinit.py
index b67ceddf6..820b03a38 100644
--- a/tests/unit/config/test_configinit.py
+++ b/tests/unit/config/test_configinit.py
@@ -27,7 +27,7 @@ import pytest
from qutebrowser import qutebrowser
from qutebrowser.config import (config, configexc, configfiles, configinit,
- configdata)
+ configdata, configtypes)
from qutebrowser.utils import objreg, usertypes
@@ -39,6 +39,7 @@ def init_patch(qapp, fake_save_manager, monkeypatch, config_tmpdir,
monkeypatch.setattr(config, 'key_instance', None)
monkeypatch.setattr(config, 'change_filters', [])
monkeypatch.setattr(configinit, '_init_errors', None)
+ monkeypatch.setattr(configtypes.Font, 'monospace_fonts', None)
yield
try:
objreg.delete('config-commands')
@@ -200,18 +201,43 @@ class TestEarlyInit:
assert msg.text == "set: NoOptionError - No option 'foo'"
assert 'colors.completion.fg' not in config.instance._values
- def test_monospace_fonts_init(self, init_patch, args):
+ @pytest.mark.parametrize('settings, size, family', [
+ # Only fonts.monospace customized
+ ([('fonts.monospace', '"Comic Sans MS"')], 8, 'Comic Sans MS'),
+ # fonts.monospace and font settings customized
+ # https://github.com/qutebrowser/qutebrowser/issues/3096
+ ([('fonts.monospace', '"Comic Sans MS"'),
+ ('fonts.tabs', '10pt monospace'),
+ ('fonts.keyhint', '10pt monospace')], 10, 'Comic Sans MS'),
+ ])
+ @pytest.mark.parametrize('method', ['temp', 'auto', 'py'])
+ def test_monospace_fonts_init(self, init_patch, args, config_tmpdir,
+ method, settings, size, family):
"""Ensure setting fonts.monospace at init works properly.
See https://github.com/qutebrowser/qutebrowser/issues/2973
"""
- args.temp_settings = [('fonts.monospace', '"Comic Sans MS"')]
+ if method == 'temp':
+ args.temp_settings = settings
+ elif method == 'auto':
+ autoconfig_file = config_tmpdir / 'autoconfig.yml'
+ lines = ["global:"] + [" {}: '{}'".format(k, v)
+ for k, v in settings]
+ autoconfig_file.write_text('\n'.join(lines), 'utf-8', ensure=True)
+ elif method == 'py':
+ config_py_file = config_tmpdir / 'config.py'
+ lines = ["c.{} = '{}'".format(k, v) for k, v in settings]
+ config_py_file.write_text('\n'.join(lines), 'utf-8', ensure=True)
+
configinit.early_init(args)
# Font
- assert config.instance.get('fonts.keyhint') == '8pt "Comic Sans MS"'
+ expected = '{}pt "{}"'.format(size, family)
+ assert config.instance.get('fonts.keyhint') == expected
# QtFont
- assert config.instance.get('fonts.tabs').family() == 'Comic Sans MS'
+ font = config.instance.get('fonts.tabs')
+ assert font.pointSize() == size
+ assert font.family() == family
def test_monospace_fonts_later(self, init_patch, args):
"""Ensure setting fonts.monospace after init works properly.