diff options
Diffstat (limited to 'tests/unit/config/test_qtargs.py')
-rw-r--r-- | tests/unit/config/test_qtargs.py | 167 |
1 files changed, 62 insertions, 105 deletions
diff --git a/tests/unit/config/test_qtargs.py b/tests/unit/config/test_qtargs.py index 076ff6e3c..a65847929 100644 --- a/tests/unit/config/test_qtargs.py +++ b/tests/unit/config/test_qtargs.py @@ -23,9 +23,8 @@ import logging import pytest from qutebrowser import qutebrowser -from qutebrowser.config import qtargs +from qutebrowser.config import qtargs, configdata from qutebrowser.utils import usertypes, version -from helpers import testutils @pytest.fixture @@ -42,11 +41,17 @@ def parser(mocker): @pytest.fixture def version_patcher(monkeypatch): """Get a patching function to patch the QtWebEngine version.""" - def run(ver): + def run(ver) -> bool: + """Run patching. + + Return: + True if we know the associated Chromium version, False otherwise + """ versions = version.WebEngineVersions.from_pyqt(ver) monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine) monkeypatch.setattr(version, 'qtwebengine_versions', lambda avoid_init: versions) + return versions.chromium_major is not None return run @@ -126,38 +131,21 @@ class TestWebEngineArgs: @pytest.fixture(autouse=True) def ensure_webengine(self, monkeypatch): """Skip all tests if QtWebEngine is unavailable.""" - pytest.importorskip("PyQt5.QtWebEngine") + pytest.importorskip("qutebrowser.qt.webenginecore") monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine) - @pytest.mark.parametrize('backend, qt_version, expected', [ - (usertypes.Backend.QtWebEngine, '5.13.0', False), - (usertypes.Backend.QtWebEngine, '5.14.0', True), - (usertypes.Backend.QtWebEngine, '5.14.1', True), - (usertypes.Backend.QtWebEngine, '5.15.0', False), - (usertypes.Backend.QtWebEngine, '5.15.1', False), - - (usertypes.Backend.QtWebKit, '5.14.0', False), - ]) - def test_shared_workers(self, config_stub, version_patcher, monkeypatch, parser, - qt_version, backend, expected): - version_patcher(qt_version) - monkeypatch.setattr(qtargs.objects, 'backend', backend) - parsed = parser.parse_args([]) - args = qtargs.qt_args(parsed) - assert ('--disable-shared-workers' in args) == expected + @pytest.mark.parametrize("setting, values", qtargs._WEBENGINE_SETTINGS.items()) + def test_settings_exist(self, setting, values, configdata_init): + option = configdata.DATA[setting] + for value in values: + option.typ.to_py(value) # for validation @pytest.mark.parametrize('backend, qt_version, debug_flag, expected', [ - # Qt >= 5.12.3: Enable with -D stack, do nothing without it. - (usertypes.Backend.QtWebEngine, '5.12.3', True, True), - (usertypes.Backend.QtWebEngine, '5.12.3', False, None), - # Qt < 5.12.3: Do nothing with -D stack, disable without it. - (usertypes.Backend.QtWebEngine, '5.12.2', True, None), - (usertypes.Backend.QtWebEngine, '5.12.2', False, False), + # QtWebEngine: Enable with -D stack, do nothing without it. + (usertypes.Backend.QtWebEngine, '5.15.2', True, True), + (usertypes.Backend.QtWebEngine, '5.15.2', False, None), # QtWebKit: Do nothing - (usertypes.Backend.QtWebKit, '5.12.3', True, None), - (usertypes.Backend.QtWebKit, '5.12.3', False, None), - (usertypes.Backend.QtWebKit, '5.12.2', True, None), - (usertypes.Backend.QtWebKit, '5.12.2', False, None), + (usertypes.Backend.QtWebKit, '5.15.2', False, None), ]) def test_in_process_stack_traces(self, monkeypatch, parser, backend, version_patcher, qt_version, debug_flag, expected): @@ -301,20 +289,19 @@ class TestWebEngineArgs: @pytest.mark.parametrize('qt_version, referer, arg', [ # 'always' -> no arguments - ('5.15.0', 'always', None), - - # 'never' is handled via interceptor for most Qt versions - ('5.12.3', 'never', '--no-referrers'), - ('5.12.4', 'never', None), - ('5.13.0', 'never', '--no-referrers'), - ('5.13.1', 'never', None), - ('5.14.0', 'never', None), - ('5.15.0', 'never', None), - - # 'same-domain' - arguments depend on Qt versions - ('5.13.0', 'same-domain', '--reduced-referrer-granularity'), - ('5.14.0', 'same-domain', '--enable-features=ReducedReferrerGranularity'), - ('5.15.0', 'same-domain', '--enable-features=ReducedReferrerGranularity'), + ('5.15.2', 'always', None), + ('5.15.3', 'always', None), + + # 'never' is handled via interceptor + ('5.15.2', 'never', None), + ('5.15.3', 'never', None), + + # 'same-domain' + ('5.15.2', 'same-domain', '--enable-features=ReducedReferrerGranularity'), + ('5.15.3', 'same-domain', '--enable-features=ReducedReferrerGranularity'), + # (Not available anymore) + ('6.2', 'same-domain', None), + ('6.3', 'same-domain', None), ]) def test_referer(self, config_stub, version_patcher, parser, qt_version, referer, arg): @@ -324,51 +311,15 @@ class TestWebEngineArgs: parsed = parser.parse_args([]) args = qtargs.qt_args(parsed) + # Old QtWebEngine args + assert '--no-referrers' not in args + assert '--reduced-referrer-granularity' not in args + if arg is None: - assert '--no-referrers' not in args - assert '--reduced-referrer-granularity' not in args assert '--enable-features=ReducedReferrerGranularity' not in args else: assert arg in args - @pytest.mark.parametrize('value, qt_version, added', [ - ("dark", "5.13", False), # not supported - ("dark", "5.14", True), - ("dark", "5.15.0", True), - ("dark", "5.15.1", True), - # handled via blink setting - ("dark", "5.15.2", False), - ("dark", "5.15.3", False), - ("dark", "6.0.0", False), - - ("light", "5.13", False), - ("light", "5.14", False), - ("light", "5.15.0", False), - ("light", "5.15.1", False), - ("light", "5.15.2", False), - ("light", "5.15.3", False), - ("light", "6.0.0", False), - - ("auto", "5.13", False), - ("auto", "5.14", False), - ("auto", "5.15.0", False), - ("auto", "5.15.1", False), - ("auto", "5.15.2", False), - ("auto", "5.15.3", False), - ("auto", "6.0.0", False), - ]) - @testutils.qt514 - def test_preferred_color_scheme( - self, config_stub, version_patcher, parser, value, qt_version, added): - version_patcher(qt_version) - - config_stub.val.colors.webpage.preferred_color_scheme = value - - parsed = parser.parse_args([]) - args = qtargs.qt_args(parsed) - - assert ('--force-dark-mode' in args) == added - @pytest.mark.parametrize('bar, is_mac, added', [ # Overlay bar enabled ('overlay', False, True), @@ -462,11 +413,9 @@ class TestWebEngineArgs: assert blink_settings_args[0].startswith('--blink-settings=foo=bar,') @pytest.mark.parametrize('qt_version, has_workaround', [ - ('5.14.0', False), - ('5.15.1', False), ('5.15.2', True), ('5.15.3', False), - ('6.0.0', False), + ('6.2.0', False), ]) def test_installedapp_workaround(self, parser, version_patcher, qt_version, has_workaround): version_patcher(qt_version) @@ -482,7 +431,6 @@ class TestWebEngineArgs: assert disable_features_args == expected @pytest.mark.parametrize('enabled', [True, False]) - @testutils.qt514 def test_media_keys(self, config_stub, parser, enabled): config_stub.val.input.media_keys = enabled @@ -493,10 +441,6 @@ class TestWebEngineArgs: @pytest.mark.parametrize('variant, expected', [ ( - 'qt_515_1', - ['--blink-settings=darkModeEnabled=true,darkModeImagePolicy=2'], - ), - ( 'qt_515_2', [ ( @@ -544,6 +488,28 @@ class TestWebEngineArgs: args = qtargs.qt_args(parsed) assert '--lang=de' in args + @pytest.mark.parametrize("version, expected", [ + ('5.15.2', False), + ('5.15.9', False), + ('6.2.4', False), + ('6.3.1', False), + ('6.4.0', True), + ('6.5.0', True), + ]) + def test_webengine_args(self, version_patcher, parser, version, expected): + known_chromium = version_patcher(version) + if not known_chromium: + pytest.skip("Don't know associated Chromium version") + + parsed = parser.parse_args([]) + args = qtargs.qt_args(parsed) + + flag = "--webEngineArgs" + if expected: + assert args[1] == flag + else: + assert flag not in args + class TestEnvVars: @@ -615,29 +581,20 @@ class TestEnvVars: @pytest.mark.parametrize('new_qt', [True, False]) def test_highdpi(self, monkeypatch, config_stub, new_qt): - """Test HighDPI environment variables. - - Depending on the Qt version, there's a different variable which should - be set... - """ - new_var = 'QT_ENABLE_HIGHDPI_SCALING' - old_var = 'QT_AUTO_SCREEN_SCALE_FACTOR' - + """Test HighDPI environment variables.""" monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine) monkeypatch.setattr(qtargs.qtutils, 'version_check', lambda version, exact=False, compiled=True: new_qt) - for envvar in [new_var, old_var]: - monkeypatch.setenv(envvar, '') # to make sure it gets restored - monkeypatch.delenv(envvar) + envvar = 'QT_ENABLE_HIGHDPI_SCALING' + monkeypatch.setenv(envvar, '') # to make sure it gets restored + monkeypatch.delenv(envvar) config_stub.set_obj('qt.highdpi', True) qtargs.init_envvars() - envvar = new_var if new_qt else old_var - assert os.environ[envvar] == '1' def test_env_vars_webkit(self, monkeypatch, config_stub): |