From ae910113a7a52a81c4574a18937b7feba48b387d Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Thu, 21 Apr 2022 18:01:49 +0200 Subject: [PATCH] tests: Validate some places with declarative stringly-typed settings --- qutebrowser/config/qtargs.py | 89 ++++++++++--------- .../webengine/test_webenginesettings.py | 6 ++ tests/unit/config/test_qtargs.py | 8 +- 3 files changed, 58 insertions(+), 45 deletions(-) diff --git a/qutebrowser/config/qtargs.py b/qutebrowser/config/qtargs.py index c4db86ae9..f33b7a06d 100644 --- a/qutebrowser/config/qtargs.py +++ b/qutebrowser/config/qtargs.py @@ -283,52 +283,53 @@ def _qtwebengine_args( yield from _qtwebengine_settings_args(versions) -def _qtwebengine_settings_args(versions: version.WebEngineVersions) -> Iterator[str]: - settings: Dict[str, Dict[Any, Optional[str]]] = { - 'qt.force_software_rendering': { - 'software-opengl': None, - 'qt-quick': None, - 'chromium': '--disable-gpu', - 'none': None, - }, - 'content.canvas_reading': { - True: None, - False: '--disable-reading-from-canvas', - }, - 'content.webrtc_ip_handling_policy': { - 'all-interfaces': None, - 'default-public-and-private-interfaces': - '--force-webrtc-ip-handling-policy=' - 'default_public_and_private_interfaces', - 'default-public-interface-only': - '--force-webrtc-ip-handling-policy=' - 'default_public_interface_only', - 'disable-non-proxied-udp': - '--force-webrtc-ip-handling-policy=' - 'disable_non_proxied_udp', - }, - 'qt.chromium.process_model': { - 'process-per-site-instance': None, - 'process-per-site': '--process-per-site', - 'single-process': '--single-process', - }, - 'qt.chromium.low_end_device_mode': { - 'auto': None, - 'always': '--enable-low-end-device-mode', - 'never': '--disable-low-end-device-mode', - }, - 'content.prefers_reduced_motion': { - True: '--force-prefers-reduced-motion', - False: None, - }, - 'qt.chromium.sandboxing': { - 'enable-all': None, - 'disable-seccomp-bpf': '--disable-seccomp-filter-sandbox', - 'disable-all': '--no-sandbox', - } +_WEBENGINE_SETTINGS: Dict[str, Dict[Any, Optional[str]]] = { + 'qt.force_software_rendering': { + 'software-opengl': None, + 'qt-quick': None, + 'chromium': '--disable-gpu', + 'none': None, + }, + 'content.canvas_reading': { + True: None, + False: '--disable-reading-from-canvas', + }, + 'content.webrtc_ip_handling_policy': { + 'all-interfaces': None, + 'default-public-and-private-interfaces': + '--force-webrtc-ip-handling-policy=' + 'default_public_and_private_interfaces', + 'default-public-interface-only': + '--force-webrtc-ip-handling-policy=' + 'default_public_interface_only', + 'disable-non-proxied-udp': + '--force-webrtc-ip-handling-policy=' + 'disable_non_proxied_udp', + }, + 'qt.chromium.process_model': { + 'process-per-site-instance': None, + 'process-per-site': '--process-per-site', + 'single-process': '--single-process', + }, + 'qt.chromium.low_end_device_mode': { + 'auto': None, + 'always': '--enable-low-end-device-mode', + 'never': '--disable-low-end-device-mode', + }, + 'content.prefers_reduced_motion': { + True: '--force-prefers-reduced-motion', + False: None, + }, + 'qt.chromium.sandboxing': { + 'enable-all': None, + 'disable-seccomp-bpf': '--disable-seccomp-filter-sandbox', + 'disable-all': '--no-sandbox', } +} - for setting, args in sorted(settings.items()): + +def _qtwebengine_settings_args(versions: version.WebEngineVersions) -> Iterator[str]: + for setting, args in sorted(_WEBENGINE_SETTINGS.items()): arg = args[config.instance.get(setting)] if arg is not None: yield arg diff --git a/tests/unit/browser/webengine/test_webenginesettings.py b/tests/unit/browser/webengine/test_webenginesettings.py index 6cd130c95..ba9458db1 100644 --- a/tests/unit/browser/webengine/test_webenginesettings.py +++ b/tests/unit/browser/webengine/test_webenginesettings.py @@ -26,6 +26,7 @@ QWebEngineSettings = QtWebEngineCore.QWebEngineSettings from qutebrowser.browser.webengine import webenginesettings from qutebrowser.utils import usertypes +from qutebrowser.config import configdata @pytest.fixture @@ -164,3 +165,8 @@ def test_parsed_user_agent(qapp): parsed = webenginesettings.parsed_user_agent assert parsed.upstream_browser_key == 'Chrome' assert parsed.qt_key == 'QtWebEngine' + + +def test_profile_setter_settings(private_profile, configdata_init): + for setting in private_profile.setter._name_to_method: + assert setting in configdata.DATA.keys() diff --git a/tests/unit/config/test_qtargs.py b/tests/unit/config/test_qtargs.py index 591c11f1f..95c045cb5 100644 --- a/tests/unit/config/test_qtargs.py +++ b/tests/unit/config/test_qtargs.py @@ -23,7 +23,7 @@ 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 @@ -129,6 +129,12 @@ class TestWebEngineArgs: pytest.importorskip("qutebrowser.qt.webenginecore") monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine) + @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', [ # QtWebEngine: Enable with -D stack, do nothing without it. (usertypes.Backend.QtWebEngine, '5.15.2', True, True),