Skip to content

Commit 18b96f1

Browse files
committed
Add tests for Android back button
1 parent 6a8c49e commit 18b96f1

File tree

3 files changed

+87
-11
lines changed

3 files changed

+87
-11
lines changed

packages/go_router/test/shell_route_ios_back_gesture_test.dart renamed to packages/go_router/test/shell_route_system_back_test.dart

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@ import 'package:flutter/material.dart';
77
import 'package:flutter_test/flutter_test.dart';
88
import 'package:go_router/go_router.dart';
99

10+
import 'test_helpers.dart';
11+
1012
// Regression test for https://github.com/flutter/flutter/issues/120353
1113
void main() {
1214
group('iOS back gesture inside a ShellRoute', () {
13-
Future<void> backGesture(WidgetTester tester) async {
14-
await tester.dragFrom(const Offset(0, 300), const Offset(500, 300));
15-
}
16-
1715
testWidgets('pops the top sub-route '
1816
'when there is an active sub-route', (WidgetTester tester) async {
1917
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
@@ -29,7 +27,7 @@ void main() {
2927
await tester.pumpAndSettle();
3028
expect(find.text('Comment'), findsOneWidget);
3129

32-
await backGesture(tester);
30+
await simulateIosBackGesture(tester);
3331
await tester.pumpAndSettle();
3432
expect(find.text('Post'), findsOneWidget);
3533

@@ -47,13 +45,47 @@ void main() {
4745
await tester.pumpAndSettle();
4846
expect(find.text('Post'), findsOneWidget);
4947

50-
await backGesture(tester);
48+
await simulateIosBackGesture(tester);
5149
await tester.pumpAndSettle();
5250
expect(find.text('Home'), findsOneWidget);
5351

5452
debugDefaultTargetPlatformOverride = null;
5553
});
5654
});
55+
56+
group('Android back button inside a ShellRoute', () {
57+
testWidgets('pops the top sub-route '
58+
'when there is an active sub-route', (WidgetTester tester) async {
59+
await tester.pumpWidget(const _TestApp());
60+
expect(find.text('Home'), findsOneWidget);
61+
62+
await tester.tap(find.byType(FilledButton));
63+
await tester.pumpAndSettle();
64+
expect(find.text('Post'), findsOneWidget);
65+
66+
await tester.tap(find.byType(FilledButton));
67+
await tester.pumpAndSettle();
68+
expect(find.text('Comment'), findsOneWidget);
69+
70+
await simulateAndroidBackButton(tester);
71+
await tester.pumpAndSettle();
72+
expect(find.text('Post'), findsOneWidget);
73+
});
74+
75+
testWidgets('pops ShellRoute '
76+
'when there are no active sub-routes', (WidgetTester tester) async {
77+
await tester.pumpWidget(const _TestApp());
78+
expect(find.text('Home'), findsOneWidget);
79+
80+
await tester.tap(find.byType(FilledButton));
81+
await tester.pumpAndSettle();
82+
expect(find.text('Post'), findsOneWidget);
83+
84+
await simulateAndroidBackButton(tester);
85+
await tester.pumpAndSettle();
86+
expect(find.text('Home'), findsOneWidget);
87+
});
88+
});
5789
}
5890

5991
class _TestApp extends StatefulWidget {

packages/go_router/test/stateful_shell_route_ios_back_gesture_test.dart renamed to packages/go_router/test/stateful_shell_route_system_back_test.dart

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,53 @@ import 'package:flutter/material.dart';
77
import 'package:flutter_test/flutter_test.dart';
88
import 'package:go_router/go_router.dart';
99

10+
import 'test_helpers.dart';
11+
1012
// Regression test for https://github.com/flutter/flutter/issues/120353
1113
void main() {
1214
group('iOS back gesture inside a StatefulShellRoute', () {
13-
Future<void> backGesture(WidgetTester tester) async {
14-
await tester.dragFrom(const Offset(0, 300), const Offset(500, 300));
15-
}
15+
testWidgets('pops the top sub-route '
16+
'when there is an active sub-route', (WidgetTester tester) async {
17+
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
18+
19+
await tester.pumpWidget(const _TestApp());
20+
expect(find.text('Home'), findsOneWidget);
21+
22+
await tester.tap(find.byType(FilledButton));
23+
await tester.pumpAndSettle();
24+
expect(find.text('Post'), findsOneWidget);
25+
26+
await tester.tap(find.byType(FilledButton));
27+
await tester.pumpAndSettle();
28+
expect(find.text('Comment'), findsOneWidget);
29+
30+
await simulateIosBackGesture(tester);
31+
await tester.pumpAndSettle();
32+
expect(find.text('Post'), findsOneWidget);
33+
34+
debugDefaultTargetPlatformOverride = null;
35+
});
36+
37+
testWidgets('pops StatefulShellRoute '
38+
'when there are no active sub-routes', (WidgetTester tester) async {
39+
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
40+
41+
await tester.pumpWidget(const _TestApp());
42+
expect(find.text('Home'), findsOneWidget);
43+
44+
await tester.tap(find.byType(FilledButton));
45+
await tester.pumpAndSettle();
46+
expect(find.text('Post'), findsOneWidget);
47+
48+
await simulateIosBackGesture(tester);
49+
await tester.pumpAndSettle();
50+
expect(find.text('Home'), findsOneWidget);
51+
52+
debugDefaultTargetPlatformOverride = null;
53+
});
54+
});
1655

56+
group('Android back button inside a StatefulShellRoute', () {
1757
testWidgets('pops the top sub-route '
1858
'when there is an active sub-route', (WidgetTester tester) async {
1959
debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
@@ -29,7 +69,7 @@ void main() {
2969
await tester.pumpAndSettle();
3070
expect(find.text('Comment'), findsOneWidget);
3171

32-
await backGesture(tester);
72+
await simulateAndroidBackButton(tester);
3373
await tester.pumpAndSettle();
3474
expect(find.text('Post'), findsOneWidget);
3575

@@ -47,7 +87,7 @@ void main() {
4787
await tester.pumpAndSettle();
4888
expect(find.text('Post'), findsOneWidget);
4989

50-
await backGesture(tester);
90+
await simulateAndroidBackButton(tester);
5191
await tester.pumpAndSettle();
5292
expect(find.text('Home'), findsOneWidget);
5393

packages/go_router/test/test_helpers.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,10 @@ Future<void> simulateAndroidBackButton(WidgetTester tester) async {
362362
);
363363
}
364364

365+
Future<void> simulateIosBackGesture(WidgetTester tester) async {
366+
await tester.dragFrom(const Offset(0, 300), const Offset(500, 300));
367+
}
368+
365369
GoRouterPageBuilder createPageBuilder({
366370
String? restorationId,
367371
required Widget child,

0 commit comments

Comments
 (0)