From 3be0a78819cf358e932605e66be684162b4e2ec9 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Thu, 28 Sep 2017 11:05:53 +0200 Subject: [PATCH] Fix configinit tests --- tests/unit/config/test_configinit.py | 61 ++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 12 deletions(-) diff --git a/tests/unit/config/test_configinit.py b/tests/unit/config/test_configinit.py index 02b87ebda..811ef80b9 100644 --- a/tests/unit/config/test_configinit.py +++ b/tests/unit/config/test_configinit.py @@ -18,6 +18,7 @@ """Tests for qutebrowser.config.configinit.""" +import os import sys import logging import unittest.mock @@ -33,7 +34,6 @@ from qutebrowser.utils import objreg, usertypes @pytest.fixture def init_patch(qapp, fake_save_manager, monkeypatch, config_tmpdir, data_tmpdir): - monkeypatch.setattr(configdata, 'DATA', None) monkeypatch.setattr(configfiles, 'state', None) monkeypatch.setattr(config, 'instance', None) monkeypatch.setattr(config, 'key_instance', None) @@ -46,10 +46,17 @@ def init_patch(qapp, fake_save_manager, monkeypatch, config_tmpdir, pass +@pytest.fixture +def args(fake_args): + """Arguments needed for the config to init.""" + fake_args.temp_settings = [] + return fake_args + + class TestEarlyInit: @pytest.mark.parametrize('config_py', [True, 'error', False]) - def test_config_py(self, init_patch, config_tmpdir, caplog, fake_args, + def test_config_py(self, init_patch, config_tmpdir, caplog, args, config_py): """Test loading with only a config.py.""" config_py_file = config_tmpdir / 'config.py' @@ -62,7 +69,7 @@ class TestEarlyInit: 'utf-8', ensure=True) with caplog.at_level(logging.ERROR): - configinit.early_init(fake_args) + configinit.early_init(args) # Check error messages expected_errors = [] @@ -92,7 +99,7 @@ class TestEarlyInit: @pytest.mark.parametrize('config_py', [True, 'error', False]) @pytest.mark.parametrize('invalid_yaml', ['42', 'unknown', 'wrong-type', False]) - def test_autoconfig_yml(self, init_patch, config_tmpdir, caplog, fake_args, + def test_autoconfig_yml(self, init_patch, config_tmpdir, caplog, args, load_autoconfig, config_py, invalid_yaml): """Test interaction between config.py and autoconfig.yml.""" # pylint: disable=too-many-locals,too-many-branches @@ -119,7 +126,7 @@ class TestEarlyInit: 'utf-8', ensure=True) with caplog.at_level(logging.ERROR): - configinit.early_init(fake_args) + configinit.early_init(args) # Check error messages expected_errors = [] @@ -158,16 +165,46 @@ class TestEarlyInit: else: assert config.instance._values == {'colors.hints.fg': 'magenta'} - def test_invalid_change_filter(self, init_patch, fake_args): + def test_invalid_change_filter(self, init_patch, args): config.change_filter('foobar') with pytest.raises(configexc.NoOptionError): - configinit.early_init(fake_args) + configinit.early_init(args) + + def test_temp_settings_valid(self, init_patch, args): + args.temp_settings = [('colors.completion.fg', 'magenta')] + configinit.early_init(args) + assert config.instance._values['colors.completion.fg'] == 'magenta' + + def test_temp_settings_invalid(self, caplog, init_patch, message_mock, + args): + """Invalid temp settings should show an error.""" + args.temp_settings = [('foo', 'bar')] + + with caplog.at_level(logging.ERROR): + configinit.early_init(args) + + msg = message_mock.getmsg() + assert msg.level == usertypes.MessageLevel.error + assert msg.text == "set: NoOptionError - No option 'foo'" + assert 'colors.completion.fg' not in config.instance._values + + def test_force_software_rendering(self, monkeypatch, init_patch, args): + """Setting force_software_rendering should set the environment var.""" + envvar = 'QT_XCB_FORCE_SOFTWARE_OPENGL' + monkeypatch.setattr(configinit.objects, 'backend', + usertypes.Backend.QtWebEngine) + monkeypatch.delenv(envvar, raising=False) + args.temp_settings = [('force_software_rendering', 'true')] + + configinit.early_init(args) + + assert os.environ[envvar] == '1' @pytest.mark.parametrize('errors', [True, False]) -def test_late_init(init_patch, monkeypatch, fake_save_manager, fake_args, +def test_late_init(init_patch, monkeypatch, fake_save_manager, args, mocker, errors): - configinit.early_init(fake_args) + configinit.early_init(args) if errors: err = configexc.ConfigErrorDesc("Error text", Exception("Exception")) errs = configexc.ConfigFileErrors("config.py", [err]) @@ -245,7 +282,7 @@ class TestQtArgs: # set in config (None, 'webkit', usertypes.Backend.QtWebKit), ]) -def test_get_backend(monkeypatch, fake_args, config_stub, +def test_get_backend(monkeypatch, args, config_stub, arg, confval, used): real_import = __import__ @@ -254,8 +291,8 @@ def test_get_backend(monkeypatch, fake_args, config_stub, return real_import(name, *args, **kwargs) raise ImportError - fake_args.backend = arg + args.backend = arg config_stub.val.backend = confval monkeypatch.setattr('builtins.__import__', fake_import) - assert configinit.get_backend(fake_args) == used + assert configinit.get_backend(args) == used