summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2022-11-29 09:26:49 +0100
committerFlorian Bruhin <me@the-compiler.org>2022-11-29 09:26:49 +0100
commiteb5c019d0748da5cb30c45498147bcda02343f1e (patch)
tree70de369e7a7ac7b0490f50675e9da288eea661b1
parentf837da40f2f72c467664208756a4829aa6276670 (diff)
downloadqutebrowser-eb5c019d0748da5cb30c45498147bcda02343f1e.tar.gz
qutebrowser-eb5c019d0748da5cb30c45498147bcda02343f1e.zip
Add tests to make sure quirk files/declaration/settings match
-rw-r--r--qutebrowser/browser/webengine/webenginetab.py16
-rw-r--r--tests/unit/javascript/test_js_quirks.py31
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