165 lines
5.1 KiB
Dart
165 lines
5.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:melo/player/player_expansion_controller.dart';
|
|
|
|
void main() {
|
|
Widget mitMediaQuery(bool disableAnimations, WidgetBuilder builder) {
|
|
return MediaQuery(
|
|
data: MediaQueryData(disableAnimations: disableAnimations),
|
|
child: MaterialApp(home: Builder(builder: builder)),
|
|
);
|
|
}
|
|
|
|
testWidgets('progress startet bei 0', (tester) async {
|
|
late PlayerExpansionController controller;
|
|
await tester.pumpWidget(mitMediaQuery(false, (context) {
|
|
controller = PlayerExpansionController(vsync: tester);
|
|
return const SizedBox();
|
|
}));
|
|
expect(controller.progress, 0.0);
|
|
controller.dispose();
|
|
});
|
|
|
|
testWidgets('dragBy nach oben erhöht progress, nach unten verringert ihn',
|
|
(tester) async {
|
|
late PlayerExpansionController controller;
|
|
await tester.pumpWidget(mitMediaQuery(false, (context) {
|
|
controller = PlayerExpansionController(vsync: tester);
|
|
return const SizedBox();
|
|
}));
|
|
|
|
controller.dragBy(-150); // halbe Referenzhöhe nach oben
|
|
expect(controller.progress, closeTo(0.5, 0.001));
|
|
|
|
controller.dragBy(75); // ein Viertel zurück nach unten
|
|
expect(controller.progress, closeTo(0.25, 0.001));
|
|
controller.dispose();
|
|
});
|
|
|
|
testWidgets('dragBy clampt auf [0, 1]', (tester) async {
|
|
late PlayerExpansionController controller;
|
|
await tester.pumpWidget(mitMediaQuery(false, (context) {
|
|
controller = PlayerExpansionController(vsync: tester);
|
|
return const SizedBox();
|
|
}));
|
|
|
|
controller.dragBy(-1000);
|
|
expect(controller.progress, 1.0);
|
|
controller.dragBy(2000);
|
|
expect(controller.progress, 0.0);
|
|
controller.dispose();
|
|
});
|
|
|
|
testWidgets('open() fliegt zu 1, close() fliegt zu 0', (tester) async {
|
|
late PlayerExpansionController controller;
|
|
late BuildContext ctx;
|
|
await tester.pumpWidget(mitMediaQuery(false, (context) {
|
|
ctx = context;
|
|
controller = PlayerExpansionController(vsync: tester);
|
|
return const SizedBox();
|
|
}));
|
|
|
|
controller.open(ctx);
|
|
await tester.pumpAndSettle();
|
|
expect(controller.progress, 1.0);
|
|
|
|
controller.close(ctx);
|
|
await tester.pumpAndSettle();
|
|
expect(controller.progress, 0.0);
|
|
controller.dispose();
|
|
});
|
|
|
|
testWidgets('open()/close() springen bei disableAnimations sofort',
|
|
(tester) async {
|
|
late PlayerExpansionController controller;
|
|
late BuildContext ctx;
|
|
await tester.pumpWidget(mitMediaQuery(true, (context) {
|
|
ctx = context;
|
|
controller = PlayerExpansionController(vsync: tester);
|
|
return const SizedBox();
|
|
}));
|
|
|
|
controller.open(ctx);
|
|
expect(controller.progress, 1.0); // ohne pumpAndSettle sofort da
|
|
controller.close(ctx);
|
|
expect(controller.progress, 0.0);
|
|
controller.dispose();
|
|
});
|
|
|
|
testWidgets(
|
|
'dragEnd beim Öffnen: ausreichende Strecke nach oben fliegt zu 1',
|
|
(tester) async {
|
|
late PlayerExpansionController controller;
|
|
late BuildContext ctx;
|
|
await tester.pumpWidget(mitMediaQuery(false, (context) {
|
|
ctx = context;
|
|
controller = PlayerExpansionController(vsync: tester);
|
|
return const SizedBox();
|
|
}));
|
|
|
|
controller.dragBy(-200);
|
|
controller.dragEnd(ctx, -200, 0); // Strecke > wischStreckeSchwelle (80)
|
|
await tester.pumpAndSettle();
|
|
expect(controller.progress, 1.0);
|
|
controller.dispose();
|
|
});
|
|
|
|
testWidgets(
|
|
'dragEnd beim Öffnen: zu kurze, langsame Geste fällt zurück auf 0',
|
|
(tester) async {
|
|
late PlayerExpansionController controller;
|
|
late BuildContext ctx;
|
|
await tester.pumpWidget(mitMediaQuery(false, (context) {
|
|
ctx = context;
|
|
controller = PlayerExpansionController(vsync: tester);
|
|
return const SizedBox();
|
|
}));
|
|
|
|
controller.dragBy(-30);
|
|
controller.dragEnd(ctx, -30, 0); // unter wischStreckeSchwelle
|
|
await tester.pumpAndSettle();
|
|
expect(controller.progress, 0.0);
|
|
controller.dispose();
|
|
});
|
|
|
|
testWidgets(
|
|
'dragEnd beim Schließen: ausreichende Strecke nach unten fliegt zu 0',
|
|
(tester) async {
|
|
late PlayerExpansionController controller;
|
|
late BuildContext ctx;
|
|
await tester.pumpWidget(mitMediaQuery(false, (context) {
|
|
ctx = context;
|
|
controller = PlayerExpansionController(vsync: tester);
|
|
return const SizedBox();
|
|
}));
|
|
|
|
controller.open(ctx);
|
|
await tester.pumpAndSettle();
|
|
controller.dragBy(200); // nach unten, Betrag > Referenzhöhe/2
|
|
controller.dragEnd(ctx, 200, 0);
|
|
await tester.pumpAndSettle();
|
|
expect(controller.progress, 0.0);
|
|
controller.dispose();
|
|
});
|
|
|
|
testWidgets(
|
|
'dragEnd beim Schließen: zu kurze, langsame Geste bleibt bei 1',
|
|
(tester) async {
|
|
late PlayerExpansionController controller;
|
|
late BuildContext ctx;
|
|
await tester.pumpWidget(mitMediaQuery(false, (context) {
|
|
ctx = context;
|
|
controller = PlayerExpansionController(vsync: tester);
|
|
return const SizedBox();
|
|
}));
|
|
|
|
controller.open(ctx);
|
|
await tester.pumpAndSettle();
|
|
controller.dragBy(30);
|
|
controller.dragEnd(ctx, 30, 0);
|
|
await tester.pumpAndSettle();
|
|
expect(controller.progress, 1.0);
|
|
controller.dispose();
|
|
});
|
|
}
|