-
Notifications
You must be signed in to change notification settings - Fork 38
/
Copy pathmodel_observer_test.dart
112 lines (83 loc) · 2.45 KB
/
model_observer_test.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import 'package:async_redux/async_redux.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
//
testWidgets(
//
"ModelObserver.",
//
(WidgetTester tester) async {
//
var modelObserver = DefaultModelObserver<String>();
Store<_StateTest> store = Store<_StateTest>(
initialState: _StateTest("A", 1),
modelObserver: modelObserver,
);
StoreProvider<_StateTest> provider = StoreProvider<_StateTest>(
store: store,
child: const _MyWidgetConnector(),
);
await tester.pumpWidget(_TestApp(provider));
// A ➜ B
expect(store.state.text, "A");
store.dispatch(_MyAction("B", 1));
expect(store.state.text, "B");
await tester.pump();
expect(modelObserver.previous, "A");
expect(modelObserver.current, "B");
// ---
// B ➜ B
expect(store.state.text, "B");
store.dispatch(_MyAction("B", 2));
expect(store.state.text, "B");
await tester.pump();
expect(modelObserver.previous, "B");
expect(modelObserver.current, "B");
// ---
// B ➜ C
expect(store.state.text, "B");
store.dispatch(_MyAction("C", 1));
expect(store.state.text, "C");
await tester.pump();
expect(modelObserver.previous, "B");
expect(modelObserver.current, "C");
// ---
// C ➜ A
expect(store.state.text, "C");
store.dispatch(_MyAction("D", 1));
expect(store.state.text, "D");
await tester.pump();
expect(modelObserver.previous, "C");
expect(modelObserver.current, "D");
},
);
}
class _TestApp extends StatelessWidget {
final StoreProvider<_StateTest> provider;
_TestApp(this.provider);
@override
Widget build(BuildContext context) => provider;
}
@immutable
class _StateTest {
final String text;
final int number;
_StateTest(this.text, this.number);
}
class _MyWidgetConnector extends StatelessWidget {
const _MyWidgetConnector();
@override
Widget build(BuildContext context) => StoreConnector<_StateTest, String>(
debug: this,
converter: (Store<_StateTest> store) => store.state.text,
builder: (BuildContext context, String model) => Container(),
);
}
class _MyAction extends ReduxAction<_StateTest> {
String text;
int number;
_MyAction(this.text, this.number);
@override
_StateTest reduce() => _StateTest(text, number);
}