22#
33# SPDX-License-Identifier: GPL-3.0-or-later
44
5+ from typing import NamedTuple
6+
57import inject
68import pytest
79
810from mpvqc .appearance .services import (
911 AppearanceSettingsService ,
12+ ColorScheme ,
13+ ColorSchemePreference ,
1014 ColorSchemeService ,
1115 Dark ,
1216 FollowSystem ,
1317 Light ,
18+ SystemColorScheme ,
1419 Unknown ,
1520)
1621
@@ -28,12 +33,17 @@ def bind_settings(binder: inject.Binder):
2833 common_bindings_with (bind_settings )
2934
3035
36+ class SystemAnswerCase (NamedTuple ):
37+ system_color_scheme : SystemColorScheme
38+ expected : ColorScheme
39+
40+
3141@pytest .mark .parametrize (
3242 ("system_color_scheme" , "expected" ),
3343 [
34- ( LIGHT , LIGHT ),
35- ( DARK , DARK ),
36- ( UNKNOWN , LIGHT ),
44+ SystemAnswerCase ( system_color_scheme = LIGHT , expected = LIGHT ),
45+ SystemAnswerCase ( system_color_scheme = DARK , expected = DARK ),
46+ SystemAnswerCase ( system_color_scheme = UNKNOWN , expected = LIGHT ),
3747 ],
3848 ids = ["light" , "dark" , "unknown-is-light" ],
3949)
@@ -46,13 +56,40 @@ def test_following_the_system_takes_the_system_answer(make_style_hints, system_c
4656 assert style_hints .calls == ["unset" ]
4757
4858
59+ class ExplicitPreferenceCase (NamedTuple ):
60+ preference : ColorSchemePreference
61+ system_color_scheme : SystemColorScheme
62+ expected : ColorScheme
63+ expected_call : str
64+
65+
4966@pytest .mark .parametrize (
5067 ("preference" , "system_color_scheme" , "expected" , "expected_call" ),
5168 [
52- (LIGHT , DARK , LIGHT , "set Light" ),
53- (LIGHT , UNKNOWN , LIGHT , "set Light" ),
54- (DARK , LIGHT , DARK , "set Dark" ),
55- (DARK , UNKNOWN , DARK , "set Dark" ),
69+ ExplicitPreferenceCase (
70+ preference = LIGHT ,
71+ system_color_scheme = DARK ,
72+ expected = LIGHT ,
73+ expected_call = "set Light" ,
74+ ),
75+ ExplicitPreferenceCase (
76+ preference = LIGHT ,
77+ system_color_scheme = UNKNOWN ,
78+ expected = LIGHT ,
79+ expected_call = "set Light" ,
80+ ),
81+ ExplicitPreferenceCase (
82+ preference = DARK ,
83+ system_color_scheme = LIGHT ,
84+ expected = DARK ,
85+ expected_call = "set Dark" ,
86+ ),
87+ ExplicitPreferenceCase (
88+ preference = DARK ,
89+ system_color_scheme = UNKNOWN ,
90+ expected = DARK ,
91+ expected_call = "set Dark" ,
92+ ),
5693 ],
5794 ids = ["light-over-dark" , "light-over-unknown" , "dark-over-light" , "dark-over-unknown" ],
5895)
@@ -68,11 +105,17 @@ def test_explicit_preference_ignores_the_system_and_pushes_into_qt(
68105 assert style_hints .calls == [expected_call ]
69106
70107
108+ class SystemFlipCase (NamedTuple ):
109+ starts_at : SystemColorScheme
110+ flips_to : SystemColorScheme
111+ expected : ColorScheme
112+
113+
71114@pytest .mark .parametrize (
72115 ("starts_at" , "flips_to" , "expected" ),
73116 [
74- ( LIGHT , DARK , DARK ),
75- ( DARK , UNKNOWN , LIGHT ),
117+ SystemFlipCase ( starts_at = LIGHT , flips_to = DARK , expected = DARK ),
118+ SystemFlipCase ( starts_at = DARK , flips_to = UNKNOWN , expected = LIGHT ),
76119 ],
77120 ids = ["light-to-dark" , "dark-to-unknown-is-light" ],
78121)
0 commit comments