import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:melo/shared/lauf_balken.dart'; void main() { Future pumpe( WidgetTester tester, { required bool markiert, required bool spielt, bool ruhig = false, }) { return tester.pumpWidget( MaterialApp( home: MediaQuery( data: MediaQueryData(disableAnimations: ruhig), child: Scaffold( body: Center( child: LaufMarkierung( markiert: markiert, spielt: spielt, child: const SizedBox( width: 48, height: 48, child: Text('Cover'), ), ), ), ), ), ), ); } testWidgets('ohne Markierung steht nur das Cover da', (tester) async { await pumpe(tester, markiert: false, spielt: false); await tester.pumpAndSettle(); expect(find.text('Cover'), findsOneWidget); expect(find.byType(LaufBalken), findsNothing); }); testWidgets('der laufende Titel bekommt die Balken über das Cover', (tester) async { await pumpe(tester, markiert: true, spielt: true); await tester.pump(); expect(find.text('Cover'), findsOneWidget); expect(find.byType(LaufBalken), findsOneWidget); }); testWidgets('pausiert bleibt die Markierung, die Balken stehen still', (tester) async { await pumpe(tester, markiert: true, spielt: false); // Steht etwas still, kommt pumpAndSettle zurück. Liefe die Animation // weiter, liefe dieser Aufruf in die Zeitüberschreitung. await tester.pumpAndSettle(); expect(find.byType(LaufBalken), findsOneWidget); }); testWidgets('bei abgeschalteten Systemanimationen läuft nichts endlos', (tester) async { await pumpe(tester, markiert: true, spielt: true, ruhig: true); // Dasselbe Kriterium: eine Endlosschleife brächte pumpAndSettle nie // zurück. Genau davor schützt die Einstellung. await tester.pumpAndSettle(); expect(find.byType(LaufBalken), findsOneWidget); }); testWidgets('die Balken verschwinden, wenn der Titel wechselt', (tester) async { await pumpe(tester, markiert: true, spielt: false); await tester.pumpAndSettle(); expect(find.byType(LaufBalken), findsOneWidget); await pumpe(tester, markiert: false, spielt: false); await tester.pumpAndSettle(); expect(find.byType(LaufBalken), findsNothing); }); }