Jonny Borges
Committed by GitHub

Merge pull request #879 from vbuberen/refactor/navigation_tests

Refactoring for navigation extensions tests
@@ -4,56 +4,26 @@ import 'package:get/get.dart'; @@ -4,56 +4,26 @@ import 'package:get/get.dart';
4 4
5 import 'utils/wrapper.dart'; 5 import 'utils/wrapper.dart';
6 6
7 -class SizeTransitions extends CustomTransition {  
8 - @override  
9 - Widget buildTransition(  
10 - BuildContext context,  
11 - Curve curve,  
12 - Alignment alignment,  
13 - Animation<double> animation,  
14 - Animation<double> secondaryAnimation,  
15 - Widget child) {  
16 - return Align(  
17 - alignment: Alignment.center,  
18 - child: SizeTransition(  
19 - sizeFactor: CurvedAnimation(  
20 - parent: animation,  
21 - curve: curve,  
22 - ),  
23 - child: child,  
24 - ),  
25 - );  
26 - }  
27 -}  
28 -  
29 void main() { 7 void main() {
30 - testWidgets("Get.to smoke test", (tester) async {  
31 - await tester.pumpWidget(  
32 - Wrapper(child: Container()),  
33 - );  
34 -  
35 - Get.to(SecondScreen()); 8 + testWidgets("Get.to navigates to provided route", (tester) async {
  9 + await tester.pumpWidget(Wrapper(child: Container()));
36 10
37 - await tester.pump(Duration.zero); 11 + Get.to(FirstScreen());
38 12
39 await tester.pumpAndSettle(); 13 await tester.pumpAndSettle();
40 14
41 - expect(find.byType(SecondScreen), findsOneWidget); 15 + expect(find.byType(FirstScreen), findsOneWidget);
42 }); 16 });
43 - testWidgets("Get.toNamed smoke test", (tester) async {  
44 - await tester.pumpWidget(  
45 - GetMaterialApp(  
46 - initialRoute: '/', 17 +
  18 + testWidgets("Get.toNamed navigates to provided named route", (tester) async {
  19 + await tester.pumpWidget(GetMaterialApp(
  20 + initialRoute: '/first',
47 getPages: [ 21 getPages: [
48 - GetPage(  
49 - page: () => FirstScreen(),  
50 - name: '/',  
51 - customTransition: SizeTransitions()), 22 + GetPage(page: () => FirstScreen(), name: '/first'),
52 GetPage(page: () => SecondScreen(), name: '/second'), 23 GetPage(page: () => SecondScreen(), name: '/second'),
53 - GetPage(page: () => ThirdScreen(), name: '/third'), 24 + GetPage(page: () => ThirdScreen(), name: '/third')
54 ], 25 ],
55 - ),  
56 - ); 26 + ));
57 27
58 Get.toNamed('/second'); 28 Get.toNamed('/second');
59 29
@@ -62,153 +32,225 @@ void main() { @@ -62,153 +32,225 @@ void main() {
62 expect(find.byType(SecondScreen), findsOneWidget); 32 expect(find.byType(SecondScreen), findsOneWidget);
63 }); 33 });
64 34
65 - testWidgets("Get.off smoke test", (tester) async {  
66 - await tester.pumpWidget(  
67 - Wrapper(child: Container()),  
68 - ); 35 + testWidgets("Get.off navigates to provided route", (tester) async {
  36 + await tester.pumpWidget(Wrapper(child: FirstScreen()));
69 37
70 - Get.to(FirstScreen()); 38 + Get.off(SecondScreen());
71 39
72 await tester.pumpAndSettle(); 40 await tester.pumpAndSettle();
73 41
74 - expect(find.byType(FirstScreen), findsOneWidget); 42 + expect(find.byType(SecondScreen), findsOneWidget);
  43 + });
  44 +
  45 + testWidgets("Get.off removes current route", (tester) async {
  46 + await tester.pumpWidget(Wrapper(child: FirstScreen()));
75 47
76 Get.off(SecondScreen()); 48 Get.off(SecondScreen());
  49 + Get.back();
77 50
78 await tester.pumpAndSettle(); 51 await tester.pumpAndSettle();
79 52
80 - expect(find.byType(SecondScreen), findsOneWidget); 53 + expect(find.byType(FirstScreen), findsNothing);
81 }); 54 });
82 55
83 - testWidgets("Get.offNamed smoke test", (tester) async {  
84 - await tester.pumpWidget(  
85 - GetMaterialApp(  
86 - initialRoute: '/', 56 + testWidgets("Get.offNamed navigates to provided named route", (tester) async {
  57 + await tester.pumpWidget(GetMaterialApp(
  58 + initialRoute: '/first',
87 getPages: [ 59 getPages: [
88 - GetPage(name: '/', page: () => Container()),  
89 GetPage(name: '/first', page: () => FirstScreen()), 60 GetPage(name: '/first', page: () => FirstScreen()),
90 GetPage(name: '/second', page: () => SecondScreen()), 61 GetPage(name: '/second', page: () => SecondScreen()),
91 GetPage(name: '/third', page: () => ThirdScreen()), 62 GetPage(name: '/third', page: () => ThirdScreen()),
92 ], 63 ],
93 - ),  
94 - ); 64 + ));
95 65
96 - Get.toNamed('/first'); 66 + Get.offNamed('/second');
97 67
98 await tester.pumpAndSettle(); 68 await tester.pumpAndSettle();
99 69
100 - expect(find.byType(FirstScreen), findsOneWidget); 70 + expect(find.byType(SecondScreen), findsOneWidget);
  71 + });
  72 +
  73 + testWidgets("Get.offNamed removes current route", (tester) async {
  74 + await tester.pumpWidget(GetMaterialApp(
  75 + initialRoute: '/first',
  76 + getPages: [
  77 + GetPage(name: '/first', page: () => FirstScreen()),
  78 + GetPage(name: '/second', page: () => SecondScreen()),
  79 + GetPage(name: '/third', page: () => ThirdScreen()),
  80 + ],
  81 + ));
101 82
102 Get.offNamed('/second'); 83 Get.offNamed('/second');
  84 + Get.back();
103 85
104 await tester.pumpAndSettle(); 86 await tester.pumpAndSettle();
105 87
106 - expect(find.byType(SecondScreen), findsOneWidget); 88 + expect(find.byType(FirstScreen), findsNothing);
107 }); 89 });
108 90
109 - testWidgets("Get.offAll smoke test", (tester) async {  
110 - await tester.pumpWidget(  
111 - Wrapper(child: Container()),  
112 - ); 91 + testWidgets("Get.offNamed removes only current route", (tester) async {
  92 + await tester.pumpWidget(GetMaterialApp(
  93 + initialRoute: '/first',
  94 + getPages: [
  95 + GetPage(name: '/first', page: () => FirstScreen()),
  96 + GetPage(name: '/second', page: () => SecondScreen()),
  97 + GetPage(name: '/third', page: () => ThirdScreen()),
  98 + ],
  99 + ));
113 100
114 - Get.to(FirstScreen()); 101 + Get.toNamed('/second');
  102 + Get.offNamed('/third');
  103 + Get.back();
115 104
116 await tester.pumpAndSettle(); 105 await tester.pumpAndSettle();
117 106
118 expect(find.byType(FirstScreen), findsOneWidget); 107 expect(find.byType(FirstScreen), findsOneWidget);
  108 + });
119 109
120 - Get.to(SecondScreen()); 110 + testWidgets("Get.offAll navigates to provided route", (tester) async {
  111 + await tester.pumpWidget(Wrapper(child: FirstScreen()));
  112 +
  113 + Get.offAll(SecondScreen());
121 114
122 await tester.pumpAndSettle(); 115 await tester.pumpAndSettle();
123 116
124 expect(find.byType(SecondScreen), findsOneWidget); 117 expect(find.byType(SecondScreen), findsOneWidget);
  118 + });
  119 +
  120 + testWidgets("Get.offAll removes all previous routes", (tester) async {
  121 + await tester.pumpWidget(Wrapper(child: FirstScreen()));
125 122
  123 + Get.to(SecondScreen());
126 Get.offAll(ThirdScreen()); 124 Get.offAll(ThirdScreen());
  125 + Get.back();
127 126
128 await tester.pumpAndSettle(); 127 await tester.pumpAndSettle();
129 128
130 - expect(find.byType(ThirdScreen), findsOneWidget); 129 + expect(find.byType(SecondScreen), findsNothing);
  130 +
  131 + Get.back();
  132 +
  133 + await tester.pumpAndSettle();
  134 +
  135 + expect(find.byType(FirstScreen), findsNothing);
131 }); 136 });
132 137
133 - testWidgets("Get.offAllNamed smoke test", (tester) async {  
134 - await tester.pumpWidget(  
135 - WrapperNamed(  
136 - initialRoute: '/', 138 + testWidgets("Get.offAllNamed navigates to provided named route",
  139 + (tester) async {
  140 + await tester.pumpWidget(WrapperNamed(
  141 + initialRoute: '/first',
137 namedRoutes: [ 142 namedRoutes: [
138 - GetPage(page: () => Container(), name: '/'),  
139 GetPage(page: () => FirstScreen(), name: '/first'), 143 GetPage(page: () => FirstScreen(), name: '/first'),
140 GetPage(page: () => SecondScreen(), name: '/second'), 144 GetPage(page: () => SecondScreen(), name: '/second'),
141 - GetPage(page: () => ThirdScreen(), name: '/third'), 145 + GetPage(page: () => ThirdScreen(), name: '/third')
142 ], 146 ],
143 - ),  
144 - ); 147 + ));
145 148
146 - Get.toNamed('/first'); 149 + Get.toNamed('/second');
147 150
148 await tester.pumpAndSettle(); 151 await tester.pumpAndSettle();
149 152
150 - expect(find.byType(FirstScreen), findsOneWidget); 153 + expect(find.byType(SecondScreen), findsOneWidget);
  154 + });
  155 +
  156 + testWidgets("Get.offAllNamed removes all previous routes", (tester) async {
  157 + await tester.pumpWidget(WrapperNamed(
  158 + initialRoute: '/first',
  159 + namedRoutes: [
  160 + GetPage(page: () => FirstScreen(), name: '/first'),
  161 + GetPage(page: () => SecondScreen(), name: '/second'),
  162 + GetPage(page: () => ThirdScreen(), name: '/third')
  163 + ],
  164 + ));
151 165
152 Get.toNamed('/second'); 166 Get.toNamed('/second');
  167 + Get.offAllNamed('/third');
  168 + Get.back();
153 169
154 await tester.pumpAndSettle(); 170 await tester.pumpAndSettle();
155 171
156 - expect(find.byType(SecondScreen), findsOneWidget); 172 + expect(find.byType(SecondScreen), findsNothing);
157 173
158 - Get.offAllNamed('/third'); 174 + Get.back();
159 175
160 await tester.pumpAndSettle(); 176 await tester.pumpAndSettle();
161 177
162 - expect(find.byType(ThirdScreen), findsOneWidget); 178 + expect(find.byType(FirstScreen), findsNothing);
163 }); 179 });
164 180
165 - testWidgets("Get.offAndToNamed smoke test", (tester) async {  
166 - await tester.pumpWidget(  
167 - WrapperNamed(  
168 - initialRoute: '/', 181 + testWidgets("Get.offAndToNamed navigates to provided route", (tester) async {
  182 + await tester.pumpWidget(WrapperNamed(
  183 + initialRoute: '/first',
169 namedRoutes: [ 184 namedRoutes: [
170 - GetPage(page: () => Container(), name: '/'),  
171 GetPage(page: () => FirstScreen(), name: '/first'), 185 GetPage(page: () => FirstScreen(), name: '/first'),
172 GetPage(page: () => SecondScreen(), name: '/second'), 186 GetPage(page: () => SecondScreen(), name: '/second'),
173 - GetPage(page: () => ThirdScreen(), name: '/third'), 187 + GetPage(page: () => ThirdScreen(), name: '/third')
174 ], 188 ],
175 - ),  
176 - ); 189 + ));
177 190
178 - Get.toNamed('/first'); 191 + Get.offAndToNamed('/second');
179 192
180 await tester.pumpAndSettle(); 193 await tester.pumpAndSettle();
181 194
182 - expect(find.byType(FirstScreen), findsOneWidget); 195 + expect(find.byType(SecondScreen), findsOneWidget);
  196 + });
  197 +
  198 + testWidgets("Get.offAndToNamed removes previous route", (tester) async {
  199 + await tester.pumpWidget(WrapperNamed(
  200 + initialRoute: '/first',
  201 + namedRoutes: [
  202 + GetPage(page: () => FirstScreen(), name: '/first'),
  203 + GetPage(page: () => SecondScreen(), name: '/second'),
  204 + GetPage(page: () => ThirdScreen(), name: '/third')
  205 + ],
  206 + ));
183 207
184 Get.offAndToNamed('/second'); 208 Get.offAndToNamed('/second');
  209 + Get.back();
185 210
186 await tester.pumpAndSettle(); 211 await tester.pumpAndSettle();
187 212
188 - expect(find.byType(SecondScreen), findsOneWidget); 213 + expect(find.byType(FirstScreen), findsNothing);
189 }); 214 });
190 215
191 - testWidgets("Get.offUntil smoke test", (tester) async {  
192 - await tester.pumpWidget(  
193 - Wrapper(  
194 - child: Container(),  
195 - ),  
196 - ); 216 + testWidgets("Get.offUntil navigates to provided route", (tester) async {
  217 + await tester.pumpWidget(Wrapper(child: Container()));
197 218
198 Get.to(FirstScreen()); 219 Get.to(FirstScreen());
199 220
  221 + Get.offUntil(GetPageRoute(page: () => ThirdScreen()),
  222 + (route) => (route as GetPageRoute).routeName == '/FirstScreen');
  223 +
200 await tester.pumpAndSettle(); 224 await tester.pumpAndSettle();
201 225
202 - Get.to(SecondScreen()); 226 + expect(find.byType(ThirdScreen), findsOneWidget);
  227 + });
203 228
204 - await tester.pumpAndSettle(); 229 + testWidgets(
  230 + "Get.offUntil removes previous routes if they don't match predicate",
  231 + (tester) async {
  232 + await tester.pumpWidget(Wrapper(child: Container()));
205 233
  234 + Get.to(FirstScreen());
  235 + Get.to(SecondScreen());
206 Get.offUntil(GetPageRoute(page: () => ThirdScreen()), 236 Get.offUntil(GetPageRoute(page: () => ThirdScreen()),
207 (route) => (route as GetPageRoute).routeName == '/FirstScreen'); 237 (route) => (route as GetPageRoute).routeName == '/FirstScreen');
  238 + Get.back();
208 239
209 await tester.pumpAndSettle(); 240 await tester.pumpAndSettle();
210 241
211 - expect(find.byType(ThirdScreen), findsOneWidget); 242 + expect(find.byType(SecondScreen), findsNothing);
  243 + });
  244 +
  245 + testWidgets(
  246 + "Get.offUntil leaves previous routes that match provided predicate",
  247 + (tester) async {
  248 + await tester.pumpWidget(Wrapper(child: Container()));
  249 +
  250 + Get.to(FirstScreen());
  251 + Get.to(SecondScreen());
  252 + Get.offUntil(GetPageRoute(page: () => ThirdScreen()),
  253 + (route) => (route as GetPageRoute).routeName == '/FirstScreen');
212 Get.back(); 254 Get.back();
213 255
214 await tester.pumpAndSettle(); 256 await tester.pumpAndSettle();
@@ -216,40 +258,57 @@ void main() { @@ -216,40 +258,57 @@ void main() {
216 expect(find.byType(FirstScreen), findsOneWidget); 258 expect(find.byType(FirstScreen), findsOneWidget);
217 }); 259 });
218 260
219 - testWidgets("Get.offNamedUntil smoke test", (tester) async {  
220 - await tester.pumpWidget(  
221 - WrapperNamed(  
222 - initialRoute: '/', 261 + testWidgets("Get.offNamedUntil navigates to provided route", (tester) async {
  262 + await tester.pumpWidget(WrapperNamed(
  263 + initialRoute: '/first',
223 namedRoutes: [ 264 namedRoutes: [
224 - GetPage(  
225 - page: () => Container(),  
226 - name: '/',  
227 - popGesture: true,  
228 - transition: Transition.cupertino),  
229 - GetPage(  
230 - page: () => FirstScreen(),  
231 - name: '/first',  
232 - transition: Transition.size),  
233 - GetPage(  
234 - page: () => SecondScreen(), name: '/second', transition: null),  
235 - GetPage(page: () => ThirdScreen(), name: '/third'), 265 + GetPage(page: () => FirstScreen(), name: '/first'),
  266 + GetPage(page: () => SecondScreen(), name: '/second'),
  267 + GetPage(page: () => ThirdScreen(), name: '/third')
236 ], 268 ],
237 - ),  
238 - ); 269 + ));
239 270
240 - Get.toNamed('/first');  
241 - Get.toNamed('/second'); 271 + Get.offNamedUntil('/second', ModalRoute.withName('/first'));
242 272
243 await tester.pumpAndSettle(); 273 await tester.pumpAndSettle();
244 274
245 expect(find.byType(SecondScreen), findsOneWidget); 275 expect(find.byType(SecondScreen), findsOneWidget);
  276 + });
  277 +
  278 + testWidgets(
  279 + "Get.offNamedUntil removes previous routes if they don't match predicate",
  280 + (tester) async {
  281 + await tester.pumpWidget(WrapperNamed(
  282 + initialRoute: '/first',
  283 + namedRoutes: [
  284 + GetPage(page: () => FirstScreen(), name: '/first'),
  285 + GetPage(page: () => SecondScreen(), name: '/second'),
  286 + GetPage(page: () => ThirdScreen(), name: '/third')
  287 + ],
  288 + ));
246 289
  290 + Get.toNamed('/second');
247 Get.offNamedUntil('/third', ModalRoute.withName('/first')); 291 Get.offNamedUntil('/third', ModalRoute.withName('/first'));
248 292
249 await tester.pumpAndSettle(); 293 await tester.pumpAndSettle();
250 294
251 - expect(find.byType(ThirdScreen), findsOneWidget); 295 + expect(find.byType(SecondScreen), findsNothing);
  296 + });
252 297
  298 + testWidgets(
  299 + "Get.offNamedUntil leaves previous routes that match provided predicate",
  300 + (tester) async {
  301 + await tester.pumpWidget(WrapperNamed(
  302 + initialRoute: '/first',
  303 + namedRoutes: [
  304 + GetPage(page: () => FirstScreen(), name: '/first'),
  305 + GetPage(page: () => SecondScreen(), name: '/second'),
  306 + GetPage(page: () => ThirdScreen(), name: '/third'),
  307 + ],
  308 + ));
  309 +
  310 + Get.toNamed('/second');
  311 + Get.offNamedUntil('/third', ModalRoute.withName('/first'));
253 Get.back(); 312 Get.back();
254 313
255 await tester.pumpAndSettle(); 314 await tester.pumpAndSettle();
@@ -257,27 +316,31 @@ void main() { @@ -257,27 +316,31 @@ void main() {
257 expect(find.byType(FirstScreen), findsOneWidget); 316 expect(find.byType(FirstScreen), findsOneWidget);
258 }); 317 });
259 318
260 - testWidgets("Get.back smoke test", (tester) async { 319 + testWidgets("Get.back navigates back", (tester) async {
261 await tester.pumpWidget( 320 await tester.pumpWidget(
262 - Wrapper(child: Container()), 321 + Wrapper(child: FirstScreen()),
263 ); 322 );
264 323
265 - Get.to(FirstScreen()); 324 + Get.to(SecondScreen());
  325 + Get.back();
266 326
267 await tester.pumpAndSettle(); 327 await tester.pumpAndSettle();
268 328
269 expect(find.byType(FirstScreen), findsOneWidget); 329 expect(find.byType(FirstScreen), findsOneWidget);
  330 + });
270 331
271 - Get.to(SecondScreen());  
272 -  
273 - await tester.pumpAndSettle();  
274 -  
275 - expect(find.byType(SecondScreen), findsOneWidget); 332 + testWidgets(
  333 + "Get.back with closeOverlays pops both snackbar and current route",
  334 + (tester) async {
  335 + await tester.pumpWidget(Wrapper(child: FirstScreen()));
276 336
277 - Get.back(); 337 + Get.to(SecondScreen());
  338 + Get.snackbar('title', "message");
  339 + Get.back(closeOverlays: true);
278 340
279 await tester.pumpAndSettle(); 341 await tester.pumpAndSettle();
280 342
  343 + expect(Get.isSnackbarOpen, false);
281 expect(find.byType(FirstScreen), findsOneWidget); 344 expect(find.byType(FirstScreen), findsOneWidget);
282 }); 345 });
283 346