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
5import 'package:flutter/widgets.dart';
6import 'package:flutter_test/flutter_test.dart';
7import 'package:leak_tracker_flutter_testing/leak_tracker_flutter_testing.dart';
8
9void 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

Provided by KDAB

Privacy Policy
Learn more about Flutter for embedded and desktop on industrialflutter.com