diff options
Diffstat (limited to 'tests/unit/browser/webengine/test_webview.py')
-rw-r--r-- | tests/unit/browser/webengine/test_webview.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/tests/unit/browser/webengine/test_webview.py b/tests/unit/browser/webengine/test_webview.py new file mode 100644 index 000000000..2ddcc8733 --- /dev/null +++ b/tests/unit/browser/webengine/test_webview.py @@ -0,0 +1,75 @@ +# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et: + +# Copyright 2022 Florian Bruhin (The Compiler) <mail@qutebrowser.org> +# +# This file is part of qutebrowser. +# +# qutebrowser is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# qutebrowser is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with qutebrowser. If not, see <https://www.gnu.org/licenses/>. + +import re +import dataclasses + +import pytest +webview = pytest.importorskip('qutebrowser.browser.webengine.webview') + +from qutebrowser.qt.webenginecore import QWebEnginePage + +from helpers import testutils + + +@dataclasses.dataclass +class Naming: + + prefix: str = "" + suffix: str = "" + + +def camel_to_snake(naming, name): + if naming.prefix: + assert name.startswith(naming.prefix) + name = name[len(naming.prefix):] + if naming.suffix: + assert name.endswith(naming.suffix) + name = name[:-len(naming.suffix)] + # https://stackoverflow.com/a/1176023 + return re.sub(r'(?<!^)(?=[A-Z])', '_', name).lower() + + +@pytest.mark.parametrize("naming, name, expected", [ + (Naming(prefix="NavigationType"), "NavigationTypeLinkClicked", "link_clicked"), + (Naming(prefix="NavigationType"), "NavigationTypeTyped", "typed"), + (Naming(prefix="NavigationType"), "NavigationTypeBackForward", "back_forward"), + (Naming(suffix="MessageLevel"), "InfoMessageLevel", "info"), +]) +def test_camel_to_snake(naming, name, expected): + assert camel_to_snake(naming, name) == expected + + +@pytest.mark.parametrize("enum_type, naming, mapping", [ + ( + QWebEnginePage.JavaScriptConsoleMessageLevel, + Naming(suffix="MessageLevel"), + webview.WebEnginePage._JS_LOG_LEVEL_MAPPING, + ), + ( + QWebEnginePage.NavigationType, + Naming(prefix="NavigationType"), + webview.WebEnginePage._NAVIGATION_TYPE_MAPPING, + ) +]) +def test_enum_mappings(enum_type, naming, mapping): + members = testutils.enum_members(QWebEnginePage, enum_type).items() + for name, val in members: + mapped = mapping[val] + assert camel_to_snake(naming, name) == mapped.name |