Skip to content

Commit 109d20c

Browse files
committed
refactor: type parameterized test cases
1 parent 98c16c7 commit 109d20c

36 files changed

Lines changed: 1354 additions & 647 deletions

build-aux/test_pyside_project_build.py

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,41 @@
44

55
import hashlib
66
import inspect
7+
from collections.abc import Callable
8+
from typing import NamedTuple
79

810
import pyside_project_build # type: ignore[missing-import]
911
import pytest
1012

1113

14+
class SourcePinCase(NamedTuple):
15+
name: str
16+
func: Callable[..., object]
17+
pinned_hash: str
18+
19+
1220
@pytest.mark.parametrize(
1321
("name", "func", "pinned_hash"),
1422
[
15-
(
16-
"Project._qml_module_check",
17-
pyside_project_build.pyside_project.Project._qml_module_check,
18-
"0aec984c4c00256f274b2a7a123cc55dd503461d9f112f6d8430e75f93e0a613",
23+
SourcePinCase(
24+
name="Project._qml_module_check",
25+
func=pyside_project_build.pyside_project.Project._qml_module_check,
26+
pinned_hash="0aec984c4c00256f274b2a7a123cc55dd503461d9f112f6d8430e75f93e0a613",
1927
),
20-
(
21-
"Project.build",
22-
pyside_project_build.pyside_project.Project.build,
23-
"7642952562d17d841c337e4944a3cfca7a977ddd8b8a5e4308bbc5a8e61d3ad0",
28+
SourcePinCase(
29+
name="Project.build",
30+
func=pyside_project_build.pyside_project.Project.build,
31+
pinned_hash="7642952562d17d841c337e4944a3cfca7a977ddd8b8a5e4308bbc5a8e61d3ad0",
2432
),
25-
(
26-
"Project._regenerate_qmldir",
27-
pyside_project_build.pyside_project.Project._regenerate_qmldir,
28-
"3fe6797508f30f66e8c4e389c86ac4a7da31925d8a4c5f2b56e418b72b944618",
33+
SourcePinCase(
34+
name="Project._regenerate_qmldir",
35+
func=pyside_project_build.pyside_project.Project._regenerate_qmldir,
36+
pinned_hash="3fe6797508f30f66e8c4e389c86ac4a7da31925d8a4c5f2b56e418b72b944618",
2937
),
30-
(
31-
"check_qml_decorators",
32-
pyside_project_build.project_data.check_qml_decorators,
33-
"31d1377f384619cfb4be8efbad805ff4cb1e7524f3750823382c0c1187bc7a7a",
38+
SourcePinCase(
39+
name="check_qml_decorators",
40+
func=pyside_project_build.project_data.check_qml_decorators,
41+
pinned_hash="31d1377f384619cfb4be8efbad805ff4cb1e7524f3750823382c0c1187bc7a7a",
3442
),
3543
],
3644
)

test/appearance/services/test_color_scheme.py

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,20 @@
22
#
33
# SPDX-License-Identifier: GPL-3.0-or-later
44

5+
from typing import NamedTuple
6+
57
import inject
68
import pytest
79

810
from 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
)

test/appearance/services/test_palette_catalog.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44

55
import json
66
from dataclasses import asdict
7+
from typing import NamedTuple
78

89
import pytest
910
from PySide6.QtGui import QColor
1011

1112
from mpvqc.appearance.services import (
1213
AccentColor,
1314
AppearancePreference,
15+
ColorScheme,
1416
Dark,
1517
FollowSystem,
1618
Light,
@@ -61,23 +63,33 @@ def fake_catalog(catalog_with, make_palette_family_data):
6163
return catalog_with(light, dark)
6264

6365

66+
class DefaultAccentCase(NamedTuple):
67+
color_scheme: ColorScheme
68+
default_accent_color: str
69+
70+
6471
@pytest.mark.parametrize(
6572
("color_scheme", "default_accent_color"),
6673
[
67-
(Light(), "#l2"),
68-
(Dark(), "#d1"),
74+
DefaultAccentCase(color_scheme=Light(), default_accent_color="#l2"),
75+
DefaultAccentCase(color_scheme=Dark(), default_accent_color="#d1"),
6976
],
7077
ids=["light", "dark"],
7178
)
7279
def test_lookup_by_color_scheme_returns_the_family_tagged_with_it(fake_catalog, color_scheme, default_accent_color):
7380
assert fake_catalog.palette_family_for(color_scheme).default_accent_color == AccentColor(default_accent_color)
7481

7582

83+
class PreviewColorCase(NamedTuple):
84+
color_scheme: ColorScheme
85+
preview_color: str
86+
87+
7688
@pytest.mark.parametrize(
7789
("color_scheme", "preview_color"),
7890
[
79-
(Light(), "#f0f0f0"),
80-
(Dark(), "#101010"),
91+
PreviewColorCase(color_scheme=Light(), preview_color="#f0f0f0"),
92+
PreviewColorCase(color_scheme=Dark(), preview_color="#101010"),
8193
],
8294
ids=["light", "dark"],
8395
)
@@ -139,8 +151,8 @@ def test_the_first_family_tagged_with_a_scheme_wins(catalog_with, make_palette_f
139151
@pytest.mark.parametrize(
140152
("color_scheme", "preview_color"),
141153
[
142-
(Light(), "#f5f2fa"),
143-
(Dark(), "#121318"),
154+
PreviewColorCase(color_scheme=Light(), preview_color="#f5f2fa"),
155+
PreviewColorCase(color_scheme=Dark(), preview_color="#121318"),
144156
],
145157
ids=["light", "dark"],
146158
)

test/appearance/services/test_schemes.py

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,18 @@
22
#
33
# SPDX-License-Identifier: GPL-3.0-or-later
44

5+
from typing import NamedTuple
6+
57
import pytest
68

79
from mpvqc.appearance.services import (
810
COLOR_SCHEME_PREFERENCES,
11+
ColorScheme,
12+
ColorSchemePreference,
913
Dark,
1014
FollowSystem,
1115
Light,
16+
SystemColorScheme,
1217
Unknown,
1318
default_color_scheme_preference,
1419
format_color_scheme,
@@ -25,18 +30,24 @@
2530
UNKNOWN = Unknown()
2631

2732

33+
class ResolveCase(NamedTuple):
34+
preference: ColorSchemePreference
35+
system_color_scheme: SystemColorScheme
36+
expected: ColorScheme
37+
38+
2839
@pytest.mark.parametrize(
2940
("preference", "system_color_scheme", "expected"),
3041
[
31-
(LIGHT, LIGHT, LIGHT),
32-
(LIGHT, DARK, LIGHT),
33-
(LIGHT, UNKNOWN, LIGHT),
34-
(DARK, LIGHT, DARK),
35-
(DARK, DARK, DARK),
36-
(DARK, UNKNOWN, DARK),
37-
(SYSTEM, LIGHT, LIGHT),
38-
(SYSTEM, DARK, DARK),
39-
(SYSTEM, UNKNOWN, LIGHT),
42+
ResolveCase(preference=LIGHT, system_color_scheme=LIGHT, expected=LIGHT),
43+
ResolveCase(preference=LIGHT, system_color_scheme=DARK, expected=LIGHT),
44+
ResolveCase(preference=LIGHT, system_color_scheme=UNKNOWN, expected=LIGHT),
45+
ResolveCase(preference=DARK, system_color_scheme=LIGHT, expected=DARK),
46+
ResolveCase(preference=DARK, system_color_scheme=DARK, expected=DARK),
47+
ResolveCase(preference=DARK, system_color_scheme=UNKNOWN, expected=DARK),
48+
ResolveCase(preference=SYSTEM, system_color_scheme=LIGHT, expected=LIGHT),
49+
ResolveCase(preference=SYSTEM, system_color_scheme=DARK, expected=DARK),
50+
ResolveCase(preference=SYSTEM, system_color_scheme=UNKNOWN, expected=LIGHT),
4051
],
4152
ids=[
4253
"light-over-light",

test/appearance/viewmodels/test_dialog.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,12 +261,19 @@ def test_an_accent_write_for_the_other_scheme_emits_nothing(make_view_model, app
261261
assert accent_spy.count() == 0
262262

263263

264+
class PreferenceWriteCase(NamedTuple):
265+
text: str
266+
preference: ColorSchemePreference
267+
expected_index: int
268+
expected_accent_count: int
269+
270+
264271
@pytest.mark.parametrize(
265272
("text", "preference", "expected_index", "expected_accent_count"),
266273
[
267-
("system", SYSTEM, 0, 0),
268-
("light", LIGHT, 1, 2),
269-
("dark", DARK, 2, 3),
274+
PreferenceWriteCase(text="system", preference=SYSTEM, expected_index=0, expected_accent_count=0),
275+
PreferenceWriteCase(text="light", preference=LIGHT, expected_index=1, expected_accent_count=2),
276+
PreferenceWriteCase(text="dark", preference=DARK, expected_index=2, expected_accent_count=3),
270277
],
271278
)
272279
def test_set_color_scheme_preference_writes_the_setting(

test/appearance/viewmodels/test_palette.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
AccentColor,
1414
AppearancePreference,
1515
AppearanceSettingsService,
16+
ColorScheme,
1617
ColorSchemePreference,
1718
ColorSchemeService,
1819
Dark,
@@ -21,6 +22,7 @@
2122
NoPreference,
2223
Palette,
2324
PaletteCatalogService,
25+
SystemColorScheme,
2426
Unknown,
2527
)
2628
from mpvqc.appearance.viewmodels import (
@@ -195,12 +197,17 @@ def _assert_renders(view_model, palette: Palette, *, is_dark: bool) -> None:
195197
assert view_model.palette.rowSelectedText == palette.row_selected_text
196198

197199

200+
class DesktopSchemeCase(NamedTuple):
201+
desktop_reports: SystemColorScheme
202+
expected_color_scheme: ColorScheme
203+
204+
198205
@pytest.mark.parametrize(
199206
("desktop_reports", "expected_color_scheme"),
200207
[
201-
(LIGHT, LIGHT),
202-
(DARK, DARK),
203-
(UNKNOWN, LIGHT),
208+
DesktopSchemeCase(desktop_reports=LIGHT, expected_color_scheme=LIGHT),
209+
DesktopSchemeCase(desktop_reports=DARK, expected_color_scheme=DARK),
210+
DesktopSchemeCase(desktop_reports=UNKNOWN, expected_color_scheme=LIGHT),
204211
],
205212
ids=["light", "dark", "unknown-is-light"],
206213
)

test/comments/models/test_store.py

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -100,34 +100,10 @@ class _MoveReplaceCase(NamedTuple):
100100

101101

102102
_MOVE_REPLACE_CASES = [
103-
_MoveReplaceCase(
104-
name="up",
105-
src=3,
106-
dst=0,
107-
destination_child=0,
108-
order=["NEW", "C0", "C1", "C2", "C4"],
109-
),
110-
_MoveReplaceCase(
111-
name="down",
112-
src=1,
113-
dst=4,
114-
destination_child=5,
115-
order=["C0", "C2", "C3", "C4", "NEW"],
116-
),
117-
_MoveReplaceCase(
118-
name="adjacent up",
119-
src=2,
120-
dst=1,
121-
destination_child=1,
122-
order=["C0", "NEW", "C1", "C3", "C4"],
123-
),
124-
_MoveReplaceCase(
125-
name="adjacent down",
126-
src=1,
127-
dst=2,
128-
destination_child=3,
129-
order=["C0", "C2", "NEW", "C3", "C4"],
130-
),
103+
_MoveReplaceCase(name="up", src=3, dst=0, destination_child=0, order=["NEW", "C0", "C1", "C2", "C4"]),
104+
_MoveReplaceCase(name="down", src=1, dst=4, destination_child=5, order=["C0", "C2", "C3", "C4", "NEW"]),
105+
_MoveReplaceCase(name="adjacent up", src=2, dst=1, destination_child=1, order=["C0", "NEW", "C1", "C3", "C4"]),
106+
_MoveReplaceCase(name="adjacent down", src=1, dst=2, destination_child=3, order=["C0", "C2", "NEW", "C3", "C4"]),
131107
]
132108

133109

0 commit comments

Comments
 (0)