Files
leaf_widgets/test/video/video_lifecycle_test.dart
T

96 lines
2.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:leaf_widgets/leaf_widgets.dart';
void main() {
testWidgets('backgrounding pauses a playing child, foreground resumes it', (tester) async {
var pauses = 0;
var resumes = 0;
var playing = true;
await tester.pumpWidget(MaterialApp(
home: StatefulBuilder(
builder: (context, setState) => VideoLifecycleGuard(
isPlaying: playing,
onPause: () {
pauses++;
setState(() => playing = false);
},
onResume: () {
resumes++;
setState(() => playing = true);
},
child: const SizedBox.shrink(),
),
),
));
tester.binding.handleAppLifecycleStateChanged(AppLifecycleState.paused);
await tester.pump();
expect(pauses, 1);
tester.binding.handleAppLifecycleStateChanged(AppLifecycleState.resumed);
await tester.pump();
expect(resumes, 1);
});
testWidgets('idle child gets no calls on background round-trip', (tester) async {
var pauses = 0;
var resumes = 0;
await tester.pumpWidget(MaterialApp(
home: VideoLifecycleGuard(
isPlaying: false,
onPause: () => pauses++,
onResume: () => resumes++,
child: const SizedBox.shrink(),
),
));
tester.binding.handleAppLifecycleStateChanged(AppLifecycleState.paused);
await tester.pump();
tester.binding.handleAppLifecycleStateChanged(AppLifecycleState.resumed);
await tester.pump();
expect(pauses, 0);
expect(resumes, 0);
});
testWidgets('covering route pauses, uncovering resumes', (tester) async {
var pauses = 0;
var resumes = 0;
var playing = true;
await tester.pumpWidget(MaterialApp(
home: StatefulBuilder(
builder: (context, setState) => VideoLifecycleGuard(
isPlaying: playing,
onPause: () {
pauses++;
setState(() => playing = false);
},
onResume: () {
resumes++;
setState(() => playing = true);
},
child: Builder(
builder: (context) => TextButton(
onPressed: () => showDialog(context: context, builder: (_) => const Text('cover')),
child: const Text('open'),
),
),
),
),
));
await tester.tap(find.text('open'));
await tester.pumpAndSettle();
expect(find.text('cover'), findsOneWidget);
expect(pauses, 1);
Navigator.of(tester.element(find.text('cover'))).pop();
await tester.pumpAndSettle();
expect(resumes, 1);
});
}