tests: Validate some places with declarative stringly-typed settings

This commit is contained in:
Florian Bruhin 2022-04-21 18:01:49 +02:00
parent c327e33d31
commit ae910113a7
3 changed files with 58 additions and 45 deletions

View File

@ -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

View File

@ -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()

View File

@ -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),