Skip to content

Commit 96c5577

Browse files
Add test for segmented_button.0.dart (flutter#150676)
Contributes to flutter#130459 It adds a test for - `examples/api/test/material/segmented_button/segmented_button.0_test.dart`
1 parent 90f2c58 commit 96c5577

File tree

2 files changed

+110
-1
lines changed

2 files changed

+110
-1
lines changed

dev/bots/check_code_samples.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,6 @@ final Set<String> _knownMissingTests = <String>{
336336
'examples/api/test/material/scaffold/scaffold_messenger_state.show_material_banner.0_test.dart',
337337
'examples/api/test/material/scaffold/scaffold_messenger.of.1_test.dart',
338338
'examples/api/test/material/scaffold/scaffold_messenger_state.show_snack_bar.0_test.dart',
339-
'examples/api/test/material/segmented_button/segmented_button.0_test.dart',
340339
'examples/api/test/material/app_bar/sliver_app_bar.2_test.dart',
341340
'examples/api/test/material/app_bar/sliver_app_bar.3_test.dart',
342341
'examples/api/test/material/navigation_rail/navigation_rail.extended_animation.0_test.dart',
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
// Copyright 2014 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'package:flutter/foundation.dart';
6+
import 'package:flutter/material.dart';
7+
import 'package:flutter_api_samples/material/segmented_button/segmented_button.0.dart'
8+
as example;
9+
import 'package:flutter_test/flutter_test.dart';
10+
11+
void main() {
12+
testWidgets('Segmented button can be used with a single selection', (WidgetTester tester) async {
13+
await tester.pumpWidget(
14+
const example.SegmentedButtonApp(),
15+
);
16+
17+
void expectOneCalendarButton(example.Calendar period) {
18+
expect(
19+
find.byWidgetPredicate(
20+
(Widget widget) => widget is SegmentedButton<example.Calendar> && setEquals(widget.selected, <example.Calendar>{period}),
21+
),
22+
findsOne,
23+
);
24+
}
25+
26+
expect(find.text('Single choice'), findsOne);
27+
expect(find.text('Day'), findsOne);
28+
expect(find.text('Week'), findsOne);
29+
expect(find.text('Month'), findsOne);
30+
expect(find.text('Year'), findsOne);
31+
32+
expectOneCalendarButton(example.Calendar.day);
33+
34+
// Select the day.
35+
await tester.tap(find.text('Week'));
36+
await tester.pump();
37+
38+
expectOneCalendarButton(example.Calendar.week);
39+
40+
// Select the month.
41+
await tester.tap(find.text('Month'));
42+
await tester.pump();
43+
44+
expectOneCalendarButton(example.Calendar.month);
45+
46+
// Select the year.
47+
await tester.tap(find.text('Year'));
48+
await tester.pump();
49+
50+
expectOneCalendarButton(example.Calendar.year);
51+
52+
// Select the day.
53+
await tester.tap(find.text('Day'));
54+
await tester.pump();
55+
56+
expectOneCalendarButton(example.Calendar.day);
57+
58+
// Try to unselect the day.
59+
await tester.tap(find.text('Day'));
60+
await tester.pump();
61+
62+
expectOneCalendarButton(example.Calendar.day);
63+
});
64+
65+
testWidgets('Segmented button can be used with a multiple selection', (WidgetTester tester) async {
66+
await tester.pumpWidget(
67+
const example.SegmentedButtonApp(),
68+
);
69+
70+
void expectSizeButtons(Set<example.Sizes> sizes) {
71+
expect(
72+
find.byWidgetPredicate(
73+
(Widget widget) => widget is SegmentedButton<example.Sizes> && setEquals(widget.selected, sizes),
74+
),
75+
findsOne,
76+
);
77+
}
78+
79+
expect(find.text('Multiple choice'), findsOne);
80+
expect(find.text('XS'), findsOne);
81+
expect(find.text('S'), findsOne);
82+
expect(find.text('M'), findsOne);
83+
expect(find.text('L'), findsOne);
84+
expect(find.text('XL'), findsOne);
85+
86+
expectSizeButtons(const <example.Sizes>{example.Sizes.large, example.Sizes.extraLarge});
87+
88+
// Select everything.
89+
await tester.tap(find.text('XS'));
90+
await tester.pump();
91+
await tester.tap(find.text('S'));
92+
await tester.pump();
93+
await tester.tap(find.text('M'));
94+
await tester.pump();
95+
96+
expectSizeButtons(example.Sizes.values.toSet());
97+
98+
// Unselect everything but XS.
99+
await tester.tap(find.text('S'));
100+
await tester.pump();
101+
await tester.tap(find.text('M'));
102+
await tester.pump();
103+
await tester.tap(find.text('L'));
104+
await tester.pump();
105+
await tester.tap(find.text('XL'));
106+
await tester.pump();
107+
108+
expectSizeButtons(const <example.Sizes>{example.Sizes.extraSmall});
109+
});
110+
}

0 commit comments

Comments
 (0)