127 lines
3.5 KiB
Dart
127 lines
3.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
import 'package:mews/presentation/reader/swipe_navigator.dart';
|
|
|
|
Widget _wrap(SwipeNavigator navigator) => MaterialApp(
|
|
home: Scaffold(
|
|
body: Center(
|
|
child: SizedBox(
|
|
width: 800,
|
|
height: 600,
|
|
child: navigator,
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
SwipeNavigator _navigator({
|
|
required VoidCallback onBack,
|
|
required VoidCallback onForward,
|
|
bool canGoBack = true,
|
|
bool canGoForward = true,
|
|
}) =>
|
|
SwipeNavigator(
|
|
canGoBack: canGoBack,
|
|
canGoForward: canGoForward,
|
|
backTitle: 'Previous page',
|
|
forwardTitle: 'Next page',
|
|
background: const Color(0xfffaf8f3),
|
|
onBack: onBack,
|
|
onForward: onForward,
|
|
child: const ColoredBox(
|
|
color: Color(0xff18191b),
|
|
child: SizedBox.expand(),
|
|
),
|
|
);
|
|
|
|
void main() {
|
|
testWidgets('dragging right reveals the previous page and commits',
|
|
(tester) async {
|
|
var back = 0;
|
|
var forward = 0;
|
|
await tester.pumpWidget(_wrap(_navigator(
|
|
onBack: () => back++,
|
|
onForward: () => forward++,
|
|
)));
|
|
|
|
final center = tester.getCenter(find.byType(SwipeNavigator));
|
|
final gesture = await tester.startGesture(center);
|
|
await gesture.moveBy(const Offset(300, 0));
|
|
await tester.pump();
|
|
|
|
// The neighbor is peeking in with its title while the page slides away.
|
|
expect(find.text('Previous page'), findsOneWidget);
|
|
|
|
await gesture.up();
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(back, 1);
|
|
expect(forward, 0);
|
|
});
|
|
|
|
testWidgets('dragging left commits forward navigation', (tester) async {
|
|
var back = 0;
|
|
var forward = 0;
|
|
await tester.pumpWidget(_wrap(_navigator(
|
|
onBack: () => back++,
|
|
onForward: () => forward++,
|
|
)));
|
|
|
|
final center = tester.getCenter(find.byType(SwipeNavigator));
|
|
final gesture = await tester.startGesture(center);
|
|
await gesture.moveBy(const Offset(-300, 0));
|
|
await tester.pump();
|
|
expect(find.text('Next page'), findsOneWidget);
|
|
|
|
await gesture.up();
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(forward, 1);
|
|
expect(back, 0);
|
|
});
|
|
|
|
testWidgets('a short drag springs back without navigating', (tester) async {
|
|
var back = 0;
|
|
await tester.pumpWidget(_wrap(_navigator(
|
|
onBack: () => back++,
|
|
onForward: () {},
|
|
)));
|
|
|
|
final center = tester.getCenter(find.byType(SwipeNavigator));
|
|
final gesture = await tester.startGesture(center);
|
|
await gesture.moveBy(const Offset(80, 0));
|
|
await tester.pump();
|
|
await gesture.up();
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(back, 0);
|
|
// The neighbor disappeared again.
|
|
expect(find.text('Previous page'), findsNothing);
|
|
});
|
|
|
|
testWidgets('directions without pages rubber-band and never commit',
|
|
(tester) async {
|
|
var back = 0;
|
|
var forward = 0;
|
|
await tester.pumpWidget(_wrap(_navigator(
|
|
onBack: () => back++,
|
|
onForward: () => forward++,
|
|
canGoBack: false,
|
|
canGoForward: false,
|
|
)));
|
|
|
|
final center = tester.getCenter(find.byType(SwipeNavigator));
|
|
final gesture = await tester.startGesture(center);
|
|
await gesture.moveBy(const Offset(400, 0));
|
|
await tester.pump();
|
|
// No neighbor title shows when there is nothing to go back to.
|
|
expect(find.text('Previous page'), findsNothing);
|
|
|
|
await gesture.up();
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(back, 0);
|
|
expect(forward, 0);
|
|
});
|
|
}
|