Skip to content

Commit 9fa743f

Browse files
committed
settings test [nfc]: Pull out checkRadioButtonAppearsChecked helper
1 parent ffbb03f commit 9fa743f

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

test/widgets/settings_test.dart

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,25 @@ void main() {
2626
await tester.pump();
2727
}
2828

29-
group('ThemeSetting', () {
30-
Finder findRadioListTileWithTitle(String title) => find.ancestor(
31-
of: find.text(title),
32-
matching: find.byType(RadioListTile<ThemeSetting?>));
29+
Finder findRadioListTileWithTitle<T>(String title) => find.ancestor(
30+
of: find.text(title),
31+
matching: find.byType(RadioListTile<T>));
32+
33+
void checkRadioButtonAppearsChecked<T>(WidgetTester tester, String title, bool expectedIsChecked) {
34+
final element = tester.element(findRadioListTileWithTitle<T>(title));
35+
final checkedColor = Theme.of(element).colorScheme.primary;
36+
// `paints` isn't a [Matcher] so we wrap it with `equals`;
37+
// awkward but it works
38+
final paintsAsCheckedMatcher = equals(paints..circle(color: checkedColor));
39+
check(because: '$title should be ${expectedIsChecked ? 'checked' : 'unchecked'}',
40+
element.renderObject,
41+
).legacyMatcher(
42+
expectedIsChecked
43+
? paintsAsCheckedMatcher
44+
: isNot(paintsAsCheckedMatcher));
45+
}
3346

47+
group('ThemeSetting', () {
3448
void checkThemeSetting(WidgetTester tester, {
3549
required ThemeSetting? expectedThemeSetting,
3650
}) {
@@ -40,18 +54,7 @@ void main() {
4054
ThemeSetting.dark => 'Dark',
4155
};
4256
for (final title in ['System', 'Light', 'Dark']) {
43-
final expectedIsChecked = title == expectedCheckedTitle;
44-
final element = tester.element(findRadioListTileWithTitle(title));
45-
final checkedColor = Theme.of(element).colorScheme.primary;
46-
// `paints` isn't a [Matcher] so we wrap it with `equals`;
47-
// awkward but it works
48-
final paintsAsCheckedMatcher = equals(paints..circle(color: checkedColor));
49-
check(because: '$title should be ${expectedIsChecked ? 'checked' : 'unchecked'}',
50-
element.renderObject,
51-
).legacyMatcher(
52-
expectedIsChecked
53-
? paintsAsCheckedMatcher
54-
: isNot(paintsAsCheckedMatcher));
57+
checkRadioButtonAppearsChecked<ThemeSetting?>(tester, title, title == expectedCheckedTitle);
5558
}
5659
check(testBinding.globalStore)
5760
.settings.themeSetting.equals(expectedThemeSetting);
@@ -66,13 +69,13 @@ void main() {
6669
check(Theme.of(element)).brightness.equals(Brightness.light);
6770
checkThemeSetting(tester, expectedThemeSetting: ThemeSetting.light);
6871

69-
await tester.tap(findRadioListTileWithTitle('Dark'));
72+
await tester.tap(findRadioListTileWithTitle<ThemeSetting?>('Dark'));
7073
await tester.pump();
7174
await tester.pump(Duration(milliseconds: 250)); // wait for transition
7275
check(Theme.of(element)).brightness.equals(Brightness.dark);
7376
checkThemeSetting(tester, expectedThemeSetting: ThemeSetting.dark);
7477

75-
await tester.tap(findRadioListTileWithTitle('System'));
78+
await tester.tap(findRadioListTileWithTitle<ThemeSetting?>('System'));
7679
await tester.pump();
7780
await tester.pump(Duration(milliseconds: 250)); // wait for transition
7881
check(Theme.of(element)).brightness.equals(Brightness.light);

0 commit comments

Comments
 (0)