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/widgets.dart'; |
6 | import 'package:flutter_test/flutter_test.dart'; |
7 | import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart' ; |
8 | |
9 | void main() { |
10 | test('WidgetStatesController constructor' , () { |
11 | expect(WidgetStatesController().value, <WidgetState>{}); |
12 | expect(WidgetStatesController(<WidgetState>{}).value, <WidgetState>{}); |
13 | expect(WidgetStatesController(<WidgetState>{WidgetState.selected}).value, <WidgetState>{ |
14 | WidgetState.selected, |
15 | }); |
16 | }); |
17 | |
18 | test('WidgetStatesController dispatches memory events' , () async { |
19 | await expectLater( |
20 | await memoryEvents(() => WidgetStatesController().dispose(), WidgetStatesController), |
21 | areCreateAndDispose, |
22 | ); |
23 | }); |
24 | |
25 | test('WidgetStatesController update, listener' , () { |
26 | int count = 0; |
27 | void valueChanged() { |
28 | count += 1; |
29 | } |
30 | |
31 | final WidgetStatesController controller = WidgetStatesController(); |
32 | controller.addListener(valueChanged); |
33 | |
34 | controller.update(WidgetState.selected, true); |
35 | expect(controller.value, <WidgetState>{WidgetState.selected}); |
36 | expect(count, 1); |
37 | controller.update(WidgetState.selected, true); |
38 | expect(controller.value, <WidgetState>{WidgetState.selected}); |
39 | expect(count, 1); |
40 | |
41 | controller.update(WidgetState.hovered, false); |
42 | expect(count, 1); |
43 | expect(controller.value, <WidgetState>{WidgetState.selected}); |
44 | controller.update(WidgetState.selected, false); |
45 | expect(count, 2); |
46 | expect(controller.value, <WidgetState>{}); |
47 | |
48 | controller.update(WidgetState.hovered, true); |
49 | expect(controller.value, <WidgetState>{WidgetState.hovered}); |
50 | expect(count, 3); |
51 | controller.update(WidgetState.hovered, true); |
52 | expect(controller.value, <WidgetState>{WidgetState.hovered}); |
53 | expect(count, 3); |
54 | controller.update(WidgetState.pressed, true); |
55 | expect(controller.value, <WidgetState>{WidgetState.hovered, WidgetState.pressed}); |
56 | expect(count, 4); |
57 | controller.update(WidgetState.selected, true); |
58 | expect(controller.value, <WidgetState>{ |
59 | WidgetState.hovered, |
60 | WidgetState.pressed, |
61 | WidgetState.selected, |
62 | }); |
63 | expect(count, 5); |
64 | controller.update(WidgetState.selected, false); |
65 | expect(controller.value, <WidgetState>{WidgetState.hovered, WidgetState.pressed}); |
66 | expect(count, 6); |
67 | controller.update(WidgetState.selected, false); |
68 | expect(controller.value, <WidgetState>{WidgetState.hovered, WidgetState.pressed}); |
69 | expect(count, 6); |
70 | controller.update(WidgetState.pressed, false); |
71 | expect(controller.value, <WidgetState>{WidgetState.hovered}); |
72 | expect(count, 7); |
73 | controller.update(WidgetState.hovered, false); |
74 | expect(controller.value, <WidgetState>{}); |
75 | expect(count, 8); |
76 | |
77 | controller.removeListener(valueChanged); |
78 | controller.update(WidgetState.selected, true); |
79 | expect(controller.value, <WidgetState>{WidgetState.selected}); |
80 | expect(count, 8); |
81 | }); |
82 | |
83 | test('WidgetStatesController const initial value' , () { |
84 | int count = 0; |
85 | void valueChanged() { |
86 | count += 1; |
87 | } |
88 | |
89 | final WidgetStatesController controller = WidgetStatesController(const <WidgetState>{ |
90 | WidgetState.selected, |
91 | }); |
92 | controller.addListener(valueChanged); |
93 | |
94 | controller.update(WidgetState.selected, true); |
95 | expect(controller.value, <WidgetState>{WidgetState.selected}); |
96 | expect(count, 0); |
97 | |
98 | controller.update(WidgetState.selected, false); |
99 | expect(controller.value, <WidgetState>{}); |
100 | expect(count, 1); |
101 | }); |
102 | } |
103 | |