darkmode: Improve/fix various tests

This commit is contained in:
Florian Bruhin 2021-02-11 15:25:16 +01:00
parent cc3b6fce7b
commit 9eabd09645
3 changed files with 93 additions and 18 deletions

View File

@ -459,6 +459,7 @@ def test_preferred_colorscheme(request, quteproc_new, value):
"auto": [dark_text, light_text],
None: [dark_text, light_text],
}
xfail = False
if not qtutils.version_check('5.15.2', compiled=False):
# On older versions, "light" is not supported, so the result will depend on the
# environment.
@ -468,11 +469,47 @@ def test_preferred_colorscheme(request, quteproc_new, value):
# With that workaround, we should always get the light preference.
for key in ["auto", None]:
expected_values[key].remove(dark_text)
xfail = value in ["auto", None]
quteproc_new.open_path('data/darkmode/prefers-color-scheme.html')
content = quteproc_new.get_content()
assert content in expected_values[value]
if xfail:
# Unsatisfactory result, but expected based on a Qt bug.
pytest.xfail("QTBUG-89753")
@pytest.mark.qtwebkit_skip
@utils.qt514
def test_preferred_colorscheme_with_dark_mode(request, quteproc_new):
"""Test interaction between preferred-color-scheme and dark mode."""
args = _base_args(request.config) + [
'--temp-basedir',
'-s', 'colors.webpage.preferred_color_scheme', 'dark',
'-s', 'colors.webpage.darkmode.enabled', 'true',
'-s', 'colors.webpage.darkmode.algorithm', 'brightness-rgb',
]
quteproc_new.start(args)
quteproc_new.open_path('data/darkmode/prefers-color-scheme.html')
content = quteproc_new.get_content()
img = quteproc_new.get_screenshot()
# Position chosen by fair dice roll.
# https://xkcd.com/221/
color = utils.Color(img.pixelColor(4, 4))
if qtutils.version_check('5.15.2', exact=True, compiled=False):
# Our workaround breaks when dark mode is enabled...
# Also, for some reason, dark mode doesn't work on that page either!
assert content == 'No preference detected.'
assert color == utils.Color(0, 170, 0)
pytest.xfail("QTBUG-89753")
else:
assert content == 'Dark preference detected.'
assert color == utils.Color(127, 127, 127)
@pytest.mark.qtwebkit_skip
@pytest.mark.parametrize('reason', [

View File

@ -47,10 +47,18 @@ def gentoo_version_patch(monkeypatch):
("auto", "5.14", []),
("auto", "5.15.0", []),
("auto", "5.15.1", []),
("auto", "5.15.2", []),
("auto", "5.15.2", [("preferredColorScheme", "2")]), # QTBUG-89753
("auto", "5.15.3", []),
("auto", "6.0.0", []),
# Unset
(None, "5.14", []),
(None, "5.15.0", []),
(None, "5.15.1", []),
(None, "5.15.2", [("preferredColorScheme", "2")]), # QTBUG-89753
(None, "5.15.3", []),
(None, "6.0.0", []),
# Dark
("dark", "5.14", []),
("dark", "5.15.0", []),
@ -71,7 +79,8 @@ def gentoo_version_patch(monkeypatch):
def test_colorscheme(config_stub, monkeypatch, value, webengine_version, expected):
versions = version.WebEngineVersions.from_pyqt(webengine_version)
monkeypatch.setattr(version, 'qtwebengine_versions', lambda avoid_init: versions)
config_stub.val.colors.webpage.preferred_color_scheme = value
if value is not None:
config_stub.val.colors.webpage.preferred_color_scheme = value
assert darkmode.settings([])['blink-settings'] == expected
@ -86,25 +95,26 @@ def test_colorscheme_gentoo_workaround(config_stub, gentoo_version_patch):
({}, []),
# Enabled without customization
({'enabled': True}, [('forceDarkModeEnabled', 'true')]),
({'enabled': True}, [('darkModeEnabled', 'true')]),
# Algorithm
(
{'enabled': True, 'algorithm': 'brightness-rgb'},
[
('forceDarkModeEnabled', 'true'),
('forceDarkModeInversionAlgorithm', '2')
('darkModeEnabled', 'true'),
('darkModeInversionAlgorithm', '2')
],
),
])
def test_basics(config_stub, monkeypatch, settings, expected):
for k, v in settings.items():
config_stub.set_obj('colors.webpage.darkmode.' + k, v)
monkeypatch.setattr(darkmode, '_variant',
lambda: darkmode.Variant.qt_515_2)
# Using Qt 5.15.1 because it has the least special cases.
monkeypatch.setattr(darkmode, '_variant', lambda: darkmode.Variant.qt_515_1)
if expected:
expected.append(('forceDarkModeImagePolicy', '2'))
expected.append(('darkModeImagePolicy', '2'))
assert darkmode.settings([])['blink-settings'] == expected
@ -132,6 +142,7 @@ QT_515_1_SETTINGS = {'blink-settings': [
QT_515_2_SETTINGS = {'blink-settings': [
('preferredColorScheme', '2'), # QTBUG-89753
('forceDarkModeEnabled', 'true'),
('forceDarkModeInversionAlgorithm', '2'),
('forceDarkModeImagePolicy', '2'),
@ -195,13 +206,13 @@ def test_qt_version_differences(config_stub, monkeypatch, qversion, expected):
def test_customization(config_stub, monkeypatch, setting, value, exp_key, exp_val):
config_stub.val.colors.webpage.darkmode.enabled = True
config_stub.set_obj('colors.webpage.darkmode.' + setting, value)
monkeypatch.setattr(darkmode, '_variant', lambda: darkmode.Variant.qt_515_2)
monkeypatch.setattr(darkmode, '_variant', lambda: darkmode.Variant.qt_515_1)
expected = []
expected.append(('forceDarkModeEnabled', 'true'))
expected.append(('darkModeEnabled', 'true'))
if exp_key != 'ImagePolicy':
expected.append(('forceDarkModeImagePolicy', '2'))
expected.append(('forceDarkMode' + exp_key, exp_val))
expected.append(('darkModeImagePolicy', '2'))
expected.append(('darkMode' + exp_key, exp_val))
assert darkmode.settings([])['blink-settings'] == expected
@ -269,13 +280,13 @@ def test_broken_smart_images_policy(config_stub, monkeypatch, caplog):
])
def test_pass_through_existing_settings(config_stub, monkeypatch, flag, expected):
config_stub.val.colors.webpage.darkmode.enabled = True
versions = version.WebEngineVersions.from_pyqt('5.15.2')
versions = version.WebEngineVersions.from_pyqt('5.15.1')
monkeypatch.setattr(version, 'qtwebengine_versions', lambda avoid_init: versions)
settings = darkmode.settings([flag])
dark_mode_expected = [
('forceDarkModeEnabled', 'true'),
('forceDarkModeImagePolicy', '2'),
('darkModeEnabled', 'true'),
('darkModeImagePolicy', '2'),
]
assert settings['blink-settings'] == expected + dark_mode_expected

View File

@ -24,7 +24,7 @@ import pytest
from qutebrowser import qutebrowser
from qutebrowser.config import qtargs
from qutebrowser.utils import usertypes
from qutebrowser.utils import usertypes, version
from helpers import utils
@ -43,6 +43,8 @@ def parser(mocker):
def reduce_args(monkeypatch, config_stub):
"""Make sure no --disable-shared-workers/referer argument get added."""
monkeypatch.setattr(qtargs.qtutils, 'qVersion', lambda: '5.15.0')
versions = version.WebEngineVersions.from_pyqt('5.15.0')
monkeypatch.setattr(version, 'qtwebengine_versions', lambda avoid_init: versions)
config_stub.val.content.headers.referer = 'always'
@ -370,8 +372,9 @@ class TestWebEngineArgs:
assert ('--enable-features=OverlayScrollbar' in args) == added
@pytest.fixture
def feature_flag_patch(self, monkeypatch):
def feature_flag_patch(self, monkeypatch, config_stub):
"""Patch away things affecting feature flags."""
config_stub.val.scrolling.bar = 'never'
monkeypatch.setattr(qtargs.objects, 'backend',
usertypes.Backend.QtWebEngine)
monkeypatch.setattr(qtargs.qtutils, 'version_check',
@ -441,6 +444,20 @@ class TestWebEngineArgs:
features -= {'InstalledApp'}
assert features == set(passed_features)
def test_blink_settings_passthrough(self, parser, config_stub, feature_flag_patch):
config_stub.val.colors.webpage.darkmode.enabled = True
flag = qtargs._BLINK_SETTINGS + 'foo=bar'
parsed = parser.parse_args(['--qt-flag', flag.lstrip('-')])
args = qtargs.qt_args(parsed)
blink_settings_args = [
arg for arg in args
if arg.startswith(qtargs._BLINK_SETTINGS)
]
assert len(blink_settings_args) == 1
assert blink_settings_args[0].startswith('--blink-settings=foo=bar,')
@pytest.mark.parametrize('qt_version, has_workaround', [
('5.14.0', False),
('5.15.1', False),
@ -464,9 +481,19 @@ class TestWebEngineArgs:
assert disable_features_args == expected
@pytest.mark.parametrize('variant, expected', [
(
'qt_515_1',
['--blink-settings=darkModeEnabled=true,darkModeImagePolicy=2'],
),
(
'qt_515_2',
['--blink-settings=forceDarkModeEnabled=true,forceDarkModeImagePolicy=2'],
[
(
'--blink-settings=preferredColorScheme=2,'
'forceDarkModeEnabled=true,'
'forceDarkModeImagePolicy=2'
)
],
),
(
'qt_515_3',