From eb5c019d0748da5cb30c45498147bcda02343f1e Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 29 Nov 2022 09:26:49 +0100 Subject: Add tests to make sure quirk files/declaration/settings match --- qutebrowser/browser/webengine/webenginetab.py | 16 ++++++++------ tests/unit/javascript/test_js_quirks.py | 31 ++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 834f783ea..5d5c104f2 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -1182,13 +1182,10 @@ class _WebEngineScripts(QObject): log.greasemonkey.debug(f'adding script: {new_script.name()}') page_scripts.insert(new_script) - def _inject_site_specific_quirks(self): - """Add site-specific quirk scripts.""" - if not config.val.content.site_specific_quirks.enabled: - return - + def _get_quirks(self): + """Get a list of all available JS quirks.""" versions = version.qtwebengine_versions() - quirks = [ + return [ # FIXME:qt6 Double check which of those are still required _Quirk( 'whatsapp_web', @@ -1212,7 +1209,12 @@ class _WebEngineScripts(QObject): ), ] - for quirk in quirks: + def _inject_site_specific_quirks(self): + """Add site-specific quirk scripts.""" + if not config.val.content.site_specific_quirks.enabled: + return + + for quirk in self._get_quirks(): if not quirk.predicate: continue src = resources.read_file(f'javascript/quirks/{quirk.filename}.user.js') diff --git a/tests/unit/javascript/test_js_quirks.py b/tests/unit/javascript/test_js_quirks.py index 4d07ab6e0..a5785b6ed 100644 --- a/tests/unit/javascript/test_js_quirks.py +++ b/tests/unit/javascript/test_js_quirks.py @@ -24,10 +24,14 @@ polyfills for. They should either pass because the polyfill is active, or pass b the native functionality exists. """ -import pytest +import pathlib +import pytest from qutebrowser.qt.core import QUrl + +import qutebrowser from qutebrowser.utils import usertypes +from qutebrowser.config import configdata @pytest.mark.parametrize('base_url, source, expected', [ @@ -61,3 +65,28 @@ def test_js_quirks(config_stub, js_tester_webengine, base_url, source, expected) js_tester_webengine.tab._scripts._inject_site_specific_quirks() js_tester_webengine.load('base.html', base_url=base_url) js_tester_webengine.run(source, expected, world=usertypes.JsWorld.main) + + +def test_js_quirks_match_files(webengine_tab): + quirks_path = pathlib.Path(qutebrowser.__file__).parent / "javascript" / "quirks" + suffix = ".user.js" + quirks_files = set(p.name[:-len(suffix)] for p in quirks_path.glob(f"*{suffix}")) + quirks_code = set(q.filename for q in webengine_tab._scripts._get_quirks()) + assert quirks_code == quirks_files + + +def test_js_quirks_match_settings(webengine_tab, configdata_init): + opt = configdata.DATA["content.site_specific_quirks.skip"] + prefix = "js-" + valid_values = opt.typ.get_valid_values() + assert valid_values is not None + quirks_config = set( + val[len(prefix):].replace("-", "_") + for val in valid_values + if val.startswith(prefix) + ) + + quirks_code = set(q.filename for q in webengine_tab._scripts._get_quirks()) + quirks_code -= {"googledocs"} # special case, UA quirk + + assert quirks_code == quirks_config -- cgit v1.2.3-54-g00ecf