diff options
Diffstat (limited to 'tests/unit/config/test_configfiles.py')
-rw-r--r-- | tests/unit/config/test_configfiles.py | 213 |
1 files changed, 152 insertions, 61 deletions
diff --git a/tests/unit/config/test_configfiles.py b/tests/unit/config/test_configfiles.py index e0ebbabdf..394214a8b 100644 --- a/tests/unit/config/test_configfiles.py +++ b/tests/unit/config/test_configfiles.py @@ -25,7 +25,7 @@ import textwrap import logging import pytest -from PyQt5.QtCore import QSettings +from qutebrowser.qt.core import QSettings from qutebrowser.config import (config, configfiles, configexc, configdata, configtypes) @@ -77,54 +77,74 @@ def autoconfig(config_tmpdir): @pytest.mark.parametrize('old_data, insert, new_data', [ - (None, - False, - '[general]\n' - 'qt_version = 5.6.7\n' - 'qtwe_version = 7.8.9\n' - 'version = 1.2.3\n' - '\n' - '[geometry]\n' - '\n' - '[inspector]\n' - '\n'), - ('[general]\n' - 'fooled = true', - False, - '[general]\n' - 'qt_version = 5.6.7\n' - 'qtwe_version = 7.8.9\n' - 'version = 1.2.3\n' - '\n' - '[geometry]\n' - '\n' - '[inspector]\n' - '\n'), - ('[general]\n' - 'foobar = 42', - False, - '[general]\n' - 'foobar = 42\n' - 'qt_version = 5.6.7\n' - 'qtwe_version = 7.8.9\n' - 'version = 1.2.3\n' - '\n' - '[geometry]\n' - '\n' - '[inspector]\n' - '\n'), - (None, - True, - '[general]\n' - 'qt_version = 5.6.7\n' - 'qtwe_version = 7.8.9\n' - 'version = 1.2.3\n' - 'newval = 23\n' - '\n' - '[geometry]\n' - '\n' - '[inspector]\n' - '\n'), + ( + None, + + False, + + '[general]\n' + 'qt_version = 5.6.7\n' + 'qtwe_version = 7.8.9\n' + 'chromium_version = 123\n' + 'version = 1.2.3\n' + '\n' + '[geometry]\n' + '\n' + '[inspector]\n' + '\n', + ), + ( + '[general]\n' + 'fooled = true', + + False, + + '[general]\n' + 'qt_version = 5.6.7\n' + 'qtwe_version = 7.8.9\n' + 'chromium_version = 123\n' + 'version = 1.2.3\n' + '\n' + '[geometry]\n' + '\n' + '[inspector]\n' + '\n' + ), + ( + '[general]\n' + 'foobar = 42', + + False, + + '[general]\n' + 'foobar = 42\n' + 'qt_version = 5.6.7\n' + 'qtwe_version = 7.8.9\n' + 'chromium_version = 123\n' + 'version = 1.2.3\n' + '\n' + '[geometry]\n' + '\n' + '[inspector]\n' + '\n' + ), + ( + None, + + True, + + '[general]\n' + 'qt_version = 5.6.7\n' + 'qtwe_version = 7.8.9\n' + 'chromium_version = 123\n' + 'version = 1.2.3\n' + 'newval = 23\n' + '\n' + '[geometry]\n' + '\n' + '[inspector]\n' + '\n' + ), ]) def test_state_config( fake_save_manager, data_tmpdir, monkeypatch, qtwe_version_patcher, @@ -132,7 +152,7 @@ def test_state_config( ): monkeypatch.setattr(configfiles.qutebrowser, '__version__', '1.2.3') monkeypatch.setattr(configfiles, 'qVersion', lambda: '5.6.7') - qtwe_version_patcher('7.8.9') + qtwe_version_patcher('7.8.9', chromium_version='123.4.5.6') statefile = data_tmpdir / 'state' if old_data is not None: @@ -167,18 +187,18 @@ def state_writer(data_tmpdir): @pytest.fixture def qtwe_version_patcher(monkeypatch): try: - from PyQt5 import QtWebEngineWidgets # pylint: disable=unused-import + from qutebrowser.qt import webenginecore # pylint: disable=unused-import except ImportError: pytest.skip("QtWebEngine not available") - def patch(ver): + def patch(ver, chromium_version=None): monkeypatch.setattr( configfiles.version, 'qtwebengine_versions', lambda avoid_init=False: version.WebEngineVersions( webengine=utils.VersionNumber.parse(ver), - chromium=None, + chromium=chromium_version, source='test', ) ) @@ -222,13 +242,21 @@ def test_qtwe_version_changed(state_writer, qtwe_version_patcher, assert state.qtwe_version_changed == changed -def test_qtwe_version_changed_webkit(stubs, monkeypatch, state_writer): - fake = stubs.ImportFake({'PyQt5.QtWebEngineWidgets': False}, monkeypatch) +@pytest.mark.parametrize("key, attribute, expected", [ + ("qtwe_version", "qtwe_version_changed", False), + ("chromium_version", "chromium_version_changed", configfiles.VersionChange.unknown), +]) +@pytest.mark.parametrize("value", ["no", None]) +def test_version_changed_webkit(stubs, monkeypatch, state_writer, + key, value, attribute, expected): + fake = stubs.ImportFake({'qutebrowser.qt.webenginewidgets': False}, monkeypatch) fake.patch() - state_writer('qtwe_version', 'no') + if value is not None: + state_writer(key, value) + state = configfiles.StateConfig() - assert not state.qtwe_version_changed + assert getattr(state, attribute) == expected @pytest.mark.parametrize('old_version, new_version, expected', [ @@ -260,14 +288,77 @@ def test_qutebrowser_version_changed( assert state.qutebrowser_version_changed == expected -def test_qutebrowser_version_unparsable(state_writer, monkeypatch, caplog): - state_writer('version', 'blabla') +@pytest.mark.parametrize('old_version, new_version, expected', [ + (None, '90', configfiles.VersionChange.unknown), + ('90', '90', configfiles.VersionChange.equal), + + ('90', '94', configfiles.VersionChange.minor), + ('83', '87', configfiles.VersionChange.minor), + + ('83', '90', configfiles.VersionChange.major), + ('87', '90', configfiles.VersionChange.major), + ('83', '94', configfiles.VersionChange.major), + ('87', '94', configfiles.VersionChange.major), + + ('94', '90', configfiles.VersionChange.downgrade), + ('94', '87', configfiles.VersionChange.downgrade), + ('90', '83', configfiles.VersionChange.downgrade), +]) +def test_chromium_version_changed( + state_writer, qtwe_version_patcher, + old_version, new_version, expected): + qtwe_version_patcher('6.2', chromium_version=new_version) + + if old_version is not None: + state_writer('chromium_version', old_version) + + state = configfiles.StateConfig() + assert state.chromium_version_changed == expected + + +@pytest.mark.parametrize('old_qtwe_version, new_chromium_version, expected', [ + (None, '90', configfiles.VersionChange.unknown), + ('6.2.0', '90', configfiles.VersionChange.equal), + ('6.2.1', '94', configfiles.VersionChange.minor), + ('5.15.2', '90', configfiles.VersionChange.major), + ('6.3.0', '90', configfiles.VersionChange.downgrade), + +]) +def test_chromium_version_changed_inferring( + state_writer, qtwe_version_patcher, + old_qtwe_version, new_chromium_version, expected): + qtwe_version_patcher('6.2', chromium_version=new_chromium_version) + + if old_qtwe_version is not None: + state_writer('qtwe_version', old_qtwe_version) + + state = configfiles.StateConfig() + assert state.chromium_version_changed == expected + + +@pytest.mark.parametrize("key, msg, attribute", [ + ("version", "old version", "qutebrowser_version_changed"), + pytest.param( + "qtwe_version", + "old QtWebEngine version", + "chromium_version_changed", + marks=pytest.mark.qtwebkit_skip, + ), + pytest.param( + "chromium_version", + "old Chromium version", + "chromium_version_changed", + marks=pytest.mark.qtwebkit_skip, + ), +]) +def test_version_unparsable(state_writer, caplog, key, msg, attribute): + state_writer(key, 'blabla') with caplog.at_level(logging.WARNING): state = configfiles.StateConfig() - assert caplog.messages == ['Unable to parse old version blabla'] - assert state.qutebrowser_version_changed == configfiles.VersionChange.unknown + assert caplog.messages == [f'Unable to parse {msg} blabla'] + assert getattr(state, attribute) == configfiles.VersionChange.unknown @pytest.mark.parametrize('value, filterstr, matches', [ |