import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:melo/shared/alphabet_leiste.dart'; /// Die Leiste stand zuerst in einer `FittedBox`: jeder Buchstabe skalierte /// auf die volle Höhe seines Platzes, und die Leiste wurde dadurch **breiter**, /// je weniger Buchstaben es gab. Bei einem einzigen schob sie die Songliste /// vollständig aus dem Bild. void main() { Future breiteBei(WidgetTester tester, List buchstaben) async { await tester.pumpWidget( MaterialApp( home: Scaffold( body: Row( children: [ const Expanded(child: SizedBox.expand()), AlphabetLeiste(buchstaben: buchstaben, onGewaehlt: (_) {}), ], ), ), ), ); await tester.pumpAndSettle(); return tester.getSize(find.byType(AlphabetLeiste)); } testWidgets('bleibt bei 26 Buchstaben schmal', (tester) async { final groesse = await breiteBei(tester, [ for (var c = 'A'.codeUnitAt(0); c <= 'Z'.codeUnitAt(0); c++) String.fromCharCode(c), ]); expect(groesse.width, alphabetBreite); }); testWidgets('bleibt bei wenigen Buchstaben genauso schmal', (tester) async { final groesse = await breiteBei(tester, ['A', 'M', 'Z']); expect(groesse.width, alphabetBreite); }); testWidgets('wird auch bei einem einzigen Buchstaben nicht breit', (tester) async { final groesse = await breiteBei(tester, ['T']); expect(groesse.width, alphabetBreite); }); testWidgets('ohne Buchstaben nimmt sie keinen Platz', (tester) async { final groesse = await breiteBei(tester, const []); expect(groesse.width, 0); }); testWidgets('Antippen meldet den Buchstaben an dieser Stelle', (tester) async { final gemeldet = []; await tester.pumpWidget( MaterialApp( home: Scaffold( body: Row( children: [ const Expanded(child: SizedBox.expand()), AlphabetLeiste( buchstaben: const ['A', 'B', 'C', 'D'], onGewaehlt: gemeldet.add, ), ], ), ), ), ); await tester.pumpAndSettle(); final kasten = tester.getRect(find.byType(AlphabetLeiste)); // Knapp unter der Mitte: der dritte von vier Buchstaben. await tester.tapAt(Offset(kasten.center.dx, kasten.top + kasten.height * 0.6)); await tester.pumpAndSettle(); expect(gemeldet, ['C']); }); }